Implemente serviços com o Compose

Esta página descreve como implementar serviços no Cloud Run através de um ficheiro baseado na especificação de composição.

Pode implementar no Cloud Run com um ficheiro de composição das seguintes formas:

A utilização do Compose para implementar no Cloud Run é ideal para o desenvolvimento e simplifica a transição do seu ambiente local para um ambiente na nuvem. Permite-lhe manter um formato de configuração consistente para as aplicações locais e implementadas.

Para gerir ambientes de produção num ambiente de infraestrutura como código (IaC), recomendamos a utilização do Terraform.

Limitações

  • A implementação do Compose implementa um único serviço do Cloud Run com vários contentores.
  • A implementação do Compose traduz apenas um subconjunto de funcionalidades do Cloud Run suportadas.
  • Os serviços criados com o Compose estão definidos por predefinição para 1 instância máxima.
  • Embora simplifique a implementação, a implementação do Cloud Run Compose não substitui uma estratégia abrangente de infraestrutura como código para ambientes de produção.

Implemente serviços a partir de imagens de contentores com o Compose

Defina os seus serviços num ficheiro compose.yaml e implemente-os a partir de imagens de contentores existentes. Para mais informações, consulte o artigo Implemente imagens de contentores.

Exemplo: aplicação de serviço único

O exemplo seguinte mostra um ficheiro compose.yaml para um serviço Web que usa uma imagem de contentor pré-criada.

services:
  web:
    image: us-docker.pkg.dev/cloudrun/container/hello
    ports:
      - "8080:8080"

Implemente os serviços

  1. Para implementar os serviços, execute o comando gcloud beta run compose up:

    gcloud beta run compose up compose.yaml

  2. Responda y a todas as instruções para instalar os componentes necessários ou ativar as APIs.

  3. Opcional: tornar o seu serviço público se quiser permitir o acesso não autenticado ao serviço.

    Após a implementação, é apresentado o URL do serviço do Cloud Run. Copie este URL e cole-o no navegador para ver o contentor em execução. Pode desativar a autenticação predefinida na consola Google Cloud .

Implemente a partir da origem com o Compose

Defina os seus serviços num ficheiro compose.yaml e implemente-os criando a partir do código-fonte. Para mais informações, consulte o artigo Implemente serviços a partir do código fonte.

Exemplo: aplicação de serviço único

O exemplo seguinte mostra um ficheiro compose.yaml para um serviço Web criado a partir da origem no diretório atual.

services:
  web:
    build: .
    ports:
      - "8080:8080"

Implemente os serviços

  • No diretório do projeto, crie um ficheiro compose.yaml com as suas definições de serviço.

    1. Para implementar os serviços, execute o comando gcloud beta run compose up:

      gcloud beta run compose up compose.yaml
    2. Responda y a todas as instruções para instalar os componentes necessários ou ativar as APIs.

    3. Opcional: tornar o seu serviço público se quiser permitir o acesso não autenticado ao serviço.

    Após a implementação, é apresentado o URL do serviço do Cloud Run. Copie este URL e cole-o no navegador para ver o contentor em execução. Pode desativar a autenticação predefinida na consola Google Cloud .

Funcionalidades suportadas

Quando implementa através de um ficheiro compose.yaml, o Cloud Run pode aprovisionar automaticamente outros recursos Google Cloud , conforme definido no seu ficheiro Compose. Se forem necessários recursos, o Cloud Run pede-lhe o consentimento antes de os criar.

O Cloud Run suporta o seguinte subconjunto de funcionalidades do Compose:

Campo de composição Mapeamento e descrição do Cloud Run
services

Os serviços são mapeados para contentores individuais no serviço do Cloud Run implementado.

volumes

Parcialmente compatível. Traduz as montagens bind, volume e tmpfs em equivalentes do Cloud Run.

secrets

Compatível. Usando o Secret Manager.

configs

Compatível. Usar o Cloud Storage.

build

O Cloud Build cria o contentor com o contexto de compilação, etiquetando-o e enviando-o para o repositório cloud-run-source-deploy no Artifact Registry.

image

Implementa uma imagem de contentor pré-criada a partir de um registo suportado. Use se tiver uma imagem pré-criada. Suporta apenas imagens do Docker Hub e do Artifact Registry. Para imagens personalizadas, pode enviar imagens para o Artifact Registry e usá-las.

ports

Uma lista de mapeamentos de portas, como 8080:8080, que determinam o contentor de entrada.

expose

Uma lista de portas a expor, mas não a publicar, como 3000, para garantir que os serviços dependentes têm uma porta disponível para comunicação.

depends_on

Define a ordem de arranque do contentor. Isto garante que qualquer serviço indicado tem uma porta definida por ports ou expose para que outros contentores possam comunicar com ele.run-compose

cpu_count/cpus

Uma sugestão usada para definir os limites de CPU e memória do Cloud Run, atribuindo automaticamente recursos de acordo com a seguinte lógica:

  • <= 2 CPU: 1Gi Memory
  • <= 4 CPU: 2Gi Memory
  • > 4 CPU: 4Gi Memory
container_name

Define o nome do contentor para a resolução de dependências, sendo o nome do serviço o valor predefinido se não for especificado.

environment

Transmite variáveis de ambiente para o contentor correspondente no Cloud Run.

command

Substitui o comando predefinido do contentor, declarado pelo contentor, ao mapear para o atributo args no Cloud Run; por exemplo, a instrução CMD de um Dockerfile.

entrypoint

Compatível.

env_file

Compatível.

x-google-cloudrun:ingress-container

(Extensão) Adicione esta extensão específica da Google a um serviço e defina-a como true para marcar como o contentor de entrada que recebe todo o tráfego externo.

x-google-cloudrun:volume-type: in-memory

(Extensão) Adicione esta extensão específica da Google a um volume e defina-o como in-memory em vez do volume predefinido suportado pelo Cloud Storage.

Secrets mapeados para o Secret Manager

Se o seu ficheiro compose.yaml definir secrets, a CLI gcloud aprovisiona segredos do Secret Manager para armazenar estes dados.

Volumes e configurações mapeados para o Cloud Storage

Se o seu ficheiro compose.yaml definir volumes ou configs de nível superior, a CLI gcloud aprovisiona um contentor do Cloud Storage para gerir estes dados. É criado um único contentor por implementação, usando pastas para separar volumes e configurações.

  • Volumes com nome: é criada uma pasta vazia correspondente ao nome do volume no contentor.
  • Montagens de ligação: para montagens de ligação, o Cloud Run carrega o conteúdo do diretório de origem local para uma pasta no contentor antes da implementação.
  • Configs: para cada configuração definida com uma origem file:, o Cloud Run carrega o conteúdo do ficheiro local para uma pasta no contentor.

Funções necessárias

Durante a implementação, o Cloud Run concede automaticamente à identidade de serviço do serviço implementado as funções necessárias para aceder aos recursos aprovisionados:

  • Bucket do Cloud Storage: roles/storage.objectUser
  • Segredos do Secret Manager: roles/secretmanager.secretAccessor

Comunicação entre contentores da mesma instância

O Cloud Run adiciona uma entrada ao ficheiro /etc/hosts em cada contentor. Esta entrada mapeia os nomes dos serviços do seu ficheiro compose.yaml para os respetivos endereços IP internos, o que permite que os serviços comuniquem entre si através dos respetivos nomes de serviços.

O que se segue?