Implemente um serviço ou uma tarefa do Cloud Run

Este documento descreve como implementar as suas aplicações, incluindo serviços do Cloud Run e tarefas do Cloud Run.

O Cloud Deploy permite-lhe implementar as suas cargas de trabalho baseadas em contentores em qualquer serviço do Cloud Run ou tarefa. Todas as funcionalidades do Cloud Deploy são suportadas quando implementa em destinos do Cloud Run para serviços do Cloud Run, mas as implementações canárias não são suportadas para tarefas do Cloud Run.

Este documento descreve as três principais configurações que tem de concluir para fazer a implementação no Cloud Run:

Limitações

  • Só pode implementar um serviço ou uma tarefa do Cloud Run por destino.

  • Não pode executar uma implementação canária numa tarefa do Cloud Run.

    No entanto, os serviços do Cloud Run podem usar uma implementação canária.

  • Para implementar uma função do Cloud Run com o Cloud Deploy, tem de modificar o fluxo de trabalho de CI para criar a função num contentor e implementá-la como um serviço do Cloud Run.

Antes de começar

Crie a sua configuração de destino

O destino pode ser configurado no YAML do pipeline de fornecimento ou pode estar num ficheiro separado. Além disso, pode configurar mais do que um alvo no mesmo ficheiro.

Os destinos têm de ser definidos no mesmo projeto e região que o pipeline de entrega. No entanto, os serviços ou as tarefas para os quais os destinos são implementados podem estar em projetos e regiões diferentes, desde que a conta de serviço tenha acesso a esses projetos.

Na definição do destino, crie uma secção run para identificar a localização onde o serviço do Cloud Run vai ser criado.

A sintaxe para especificar o serviço ou a tarefa do Cloud Run na definição de destino é a seguinte:

run:
 location: projects/[project_name]/locations/[region_name]

Este identificador de recurso usa os seguintes elementos:

  • [project_name] é o nome do Google Cloud projeto no qual o seu serviço ou tarefa do Cloud Run vai ser criado.

    Vai fazê-lo para cada alvo. Recomendamos um projeto diferente para cada serviço ou tarefa do Cloud Run. Se quiser mais do que um serviço ou tarefa no mesmo projeto, tem de usar perfis do Skaffold no seu ficheiro de configuração skaffold.yaml.

  • [region_name] é a região na qual o serviço ou a tarefa vai ser criado. O seu serviço ou trabalho pode estar em qualquer região suportada pelo Cloud Run.

Segue-se um exemplo de configuração de destino que define o serviço ou a tarefa do Cloud Run a criar:

      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
       name: dev
      description: development service
      run:
       location: projects/my-app/locations/us-central1

Pode definir este destino numa definição do pipeline de entrega do Cloud Deploy ou separadamente. De qualquer forma, tem de registar o destino antes de criar o lançamento para implementar o seu serviço ou tarefa do Cloud Run.

Crie a sua configuração do Skaffold

Segue-se um exemplo de um ficheiro skaffold.yaml para uma implementação do Cloud Run:

apiVersion: skaffold/v4beta7
kind: Config
metadata: 
  name: cloud-run-application
manifests:
  rawYaml:
  - service.yaml
deploy:
  cloudrun: {}

Neste ficheiro skaffold.yaml

  • manifests.rawYaml fornece os nomes das definições de serviços do Cloud Run.

    Neste exemplo, service.yaml é o ficheiro que define um serviço do Cloud Run que o Skaffold vai implementar. Este nome de ficheiro pode ser qualquer coisa, mas, por convenção, é service.yaml para um serviço e job.yaml para uma tarefa.

  • A secção deploy especifica como quer que o manifesto seja implementado, especificamente, o projeto e a localização. O campo deploy é obrigatório.

    Recomendamos que deixe o campo {} vazio. O Cloud Deploy preenche este campo durante a renderização com base no projeto e na localização da definição de destino.

    No entanto, para o desenvolvimento local, pode fornecer valores aqui. No entanto, o Cloud Deploy usa sempre o projeto e a localização da definição de destino, independentemente de os valores serem fornecidos aqui.

Crie as definições do serviço do Cloud Run

Para criar uma definição de serviço do Cloud Run, pode criar uma manualmente ou copiar uma de um serviço existente. Ambos são descritos nesta secção.

Opção 1: crie um novo serviço do Cloud Run service.yaml

O ficheiro service.yaml define o seu serviço do Cloud Run. Quando cria uma versão, o Skaffold usa esta definição para implementar o seu serviço.

Segue-se um exemplo simplificado:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
 name: [SERVICE_NAME]
spec:
 template:
  spec:
   containers:
   - image: [IMAGE_PATH]

Onde:

  • [SERVICE_NAME] é um nome para este serviço do Cloud Run.

  • [IMAGE_PATH] aponta para a imagem ou as imagens do contentor que está a implementar com este serviço.

Opção 2: copie um service.yaml de um serviço existente através da Google Cloud consola

Pode criar um serviço através da consola do Google Cloud Platform ou usar um existente e copiar o seu service.yaml a partir daí. Google Cloud

Para obter o service.yaml através da Google Cloud CLI:

gcloud run services describe [service_name] --format=export

Para obter o service.yaml a partir da Google Cloud consola:

  1. Na Google Cloud consola, aceda à página Serviços do Cloud Run.

  2. Selecione o serviço existente cuja definição quer usar.

Em alternativa, pode criar um novo e, em seguida, selecioná-lo. Quando seleciona o serviço, é apresentada a página Detalhes do serviço:

página de detalhes do serviço
Google Cloud console, mostrando o separador YAML

  1. Selecione o separador YAML.

  2. Clique em Editar e, de seguida, copie o conteúdo do YAML para um novo ficheiro denominado service.yaml no seu sistema de ficheiros, de modo que o Skaffold o possa usar quando criar uma versão.

Crie as suas definições de tarefas do Cloud Run

Para implementar uma definição de tarefa do Cloud Run, pode criar uma manualmente ou copiar uma de uma tarefa existente. Ambos são descritos nesta secção.

Tenha em atenção que os trabalhos não são necessariamente executados após a implementação pelo Cloud Deploy. Isto é diferente dos serviços, que são aplicações em execução após a implementação. A forma como uma tarefa é invocada depende da própria tarefa.

Opção 1: crie um novo serviço do Cloud Run job.yaml

O ficheiro job.yaml define a sua tarefa do Cloud Run. Quando cria uma versão, o Skaffold usa esta definição para implementar a tarefa.

Segue-se um exemplo simplificado:

apiVersion: run.googleapis.com/v1
kind: Job
metadata:
 name: [JOB_NAME]
spec:
  template:
  spec:
   containers:
   - image: [IMAGE_PATH]

Onde:

  • [JOB_NAME] é um nome para esta tarefa do Cloud Run.

  • [IMAGE_PATH] aponta para a imagem de contentor que está a implementar para esta tarefa.

Opção 2: copie um job.yaml de uma tarefa existente através da Google Cloud consola

Pode criar uma tarefa através da Google Cloud consola ou usar uma existente e copiar o seu job.yaml a partir daí.

Para obter o job.yaml através da Google Cloud CLI:

gcloud run jobs describe [job_name] --format=export

Para obter o job.yaml a partir da Google Cloud consola:

  1. Na Google Cloud consola, aceda à página Cloud Run Jobs.

  2. Selecione a tarefa existente cuja definição quer usar.

Em alternativa, pode criar um novo e, em seguida, selecioná-lo. Quando seleciona a tarefa, é apresentada a página Detalhes da tarefa:

página de detalhes da tarefa
 consolaGoogle Cloud , que mostra o separador YAML

  1. Selecione o separador YAML.

  2. Clique em Editar e, de seguida, copie o conteúdo do YAML para um novo ficheiro denominado job.yaml no seu sistema de ficheiros, de modo que o Skaffold o possa usar quando criar uma versão.

A reunir tudo

Agora que tem a definição do serviço ou da tarefa do Cloud Run, a skaffold.yaml configuração e a definição do destino do Cloud Deploy, e registou o destino como um recurso do Cloud Deploy, já pode invocar o pipeline de fornecimento para criar uma versão e progredir através da progressão dos destinos definidos no pipeline.

O início rápido Implemente uma app no Cloud Run com o Cloud Deploy mostra tudo isto em ação.

Comportamento dos serviços em todas as revisões

Quando reimplementa um serviço, a nova revisão baseia-se no service.yaml recentemente implementado. Nada sobre a revisão anterior é mantido, a menos que seja igual no YAML recentemente implementado. Por exemplo, se existirem definições de configuração ou etiquetas na revisão anterior que não estejam no novo YAML, essas definições ou etiquetas estão ausentes da nova revisão.

Acionar tarefas do Cloud Run

Depois de implementar uma tarefa, pode acioná-la conforme descrito na documentação do Cloud Run.

Implementar serviços e trabalhos do Cloud Run em vários projetos

Se precisar de implementar serviços ou tarefas que estejam em projetos diferentes, a conta de serviço de execução precisa de autorização para aceder aos projetos nos quais esses serviços ou tarefas estão definidos.

Consulte o artigo Conta de serviço de execução do Cloud Deploy e Funções e autorizações do Identity and Access Management para mais informações.

Implementar funções do Cloud Run

As funções do Cloud Run compilam o seu código fonte sempre que uma função é implementada. Por este motivo, cada tempo de execução de destino no seu pipeline pode receber um artefacto ligeiramente diferente. Isto é contrário às práticas recomendadas no Cloud Deploy. Em alternativa, sugerimos que use um serviço do Cloud Run diretamente. Isto permite-lhe criar um único artefacto e promovê-lo em todos os seus ambientes.

  1. Verifique o service.yaml da sua função do Cloud Run.

    Pode obter esta informação executando o seguinte comando:

    gcloud run services describe FUNCTION_NAME \
    --format=export \
    --region=REGION \
    --project=PROJECT
    
  2. Remova as seguintes anotações, se estiverem presentes:

    • run.googleapis.com/build-base-image
    • run.googleapis.com/build-name
    • run.googleapis.com/build-source-location
    • run.googleapis.com/build-enable-automatic-updates
  3. Substitua o valor em spec.spec.containers.image por IMAGE_TAG.

  4. Crie o seu pipeline de entrega e alvos, com o serviço Cloud Run como alvo.

  5. Separe o passo de compilação do passo de implementação no seu processo de CI. Em vez de usar a CLI do Google Cloud para implementar a sua função, substitua-a pelos seguintes passos:

    1. Crie a função num contentor através do Cloud Build:

      gcloud builds submit --pack image=REGION-docker.pkg.dev/PROJECT/cloud-run-source-deploy/IMAGE_NAME \
      --project=PROJECT \
      --region=REGION
      
    2. Crie um lançamento com o Cloud Deploy:

      gcloud deploy releases create RELEASE_NAME \
      --project=DEPLOY_PROJECT \
      --region=REGION \
      --delivery-pipeline=DELIVERY_PIPELINE
      --images=IMAGE_TAG=REGION-docker.pkg.dev/PROJECT/cloud-run-source-deploy/IMAGE_NAME
      

      Neste comando…

      • RELEASE_NAME é um nome a atribuir a este lançamento. O nome tem de ser exclusivo entre todos os lançamentos desta pipeline de envio.

      • DEPLOY_PROJECT é o ID do projeto onde criou o pipeline de implementação.

      • DELIVERY_PIPELINE é o nome do pipeline de entrega que vai gerir a implementação desta versão através da progressão dos destinos. Este nome tem de corresponder ao campo name na definição do pipeline.

      • REGION é o nome da região na qual está a criar o lançamento, por exemplo, us-central1. Este campo é obrigatório.

      • IMAGE_NAME é o nome que deu à imagem no passo anterior, quando criou a função.

O que se segue?