Implantação

Nesta página, descrevemos como implantar o Gerador de configuração de métricas (MCG). É possível executar o MCG localmente para desenvolvimento e testes ou implantá-lo em um ambiente de nuvem para acesso da equipe.

Conseguir o código-fonte

O código-fonte do MCG está hospedado em sdv.googlesource.com, que exige autenticação, conforme descrito em Acessar repositórios de ferramentas.

Para acessar o código-fonte, clone o repositório do MCG:

git clone https://sdv.googlesource.com/external/mcg-external

Executar no local

Para executar o MCG no diretório de origem para desenvolvimento e testes locais, use o Bazel. O Bazel precisa estar instalado. É necessário ativar o armazenamento em cache na memória definindo MCG_LOCALCACHE=true ao executar localmente. Isso permite o armazenamento de catálogos de sinais de veículos. Para criar e executar o serviço localmente, use os seguintes comandos no diretório de origem:

# Build and run on default port 8005
MCG_LOCALCACHE=true bazel run //:mcg

# Or, to change the port, use:
MCG_LOCALCACHE=true bazel run //:mcg -- --listen :9000

Implantar no Google Cloud

A base de código do MCG inclui arquivos do Terraform e do Google Cloud Build para implantar o MCG no Google Cloud como um serviço do Google Cloud Run. As seções a seguir orientam você no processo de implantação, que inclui criar um arquivo de variáveis, implantar a infraestrutura, criar e implantar o aplicativo, além de conceder acesso e verificar a implantação.

Como o Cloud Run é uma plataforma sem servidor, ele conserva recursos executando contêineres apenas ao processar solicitações, em vez de manter um servidor ativo 24 horas por dia, 7 dias por semana. Isso significa que os dados na memória são perdidos quando as instâncias de contêiner são desligadas entre solicitações. Portanto, o Redis é necessário para fornecer armazenamento persistente de dados de catálogo em invocações de serviço. Essa abordagem oferece uma implantação escalonável adequada para uso em equipe ou produção.

Pré-requisitos

Antes de iniciar a implantação no Google Cloud, verifique se você tem os seguintes pré-requisitos:

Estrutura do arquivo

A implantação no Google Cloud envolve a execução de comandos do Terraform no subdiretório infrastructure/ e comandos do Cloud Build na raiz do repositório. Os principais arquivos e diretórios com que você interage são:

repository-root/
├── cloudbuild.yaml
└── infrastructure/
    └── terraform.tfvars  <-- you create this file

Criar um arquivo de variáveis do Terraform

No diretório infrastructure/, crie um arquivo chamado terraform.tfvars para fornecer valores para as variáveis definidas em variables.tf e personalizar sua implantação. É necessário definir valores para project_id e region neste arquivo. Todas as outras variáveis são opcionais. Adicione o seguinte a terraform.tfvars:

project_id        = "<var label="Google Cloud project ID">your-gcp-project-id</var>"
region            = "<var label="Google Cloud region">your-gcp-region</var>" # For example, us-central1 or europe-west1

Consulte variables.tf para conferir todas as variáveis disponíveis e os valores padrão delas. É possível substituir qualquer valor padrão definindo-o em terraform.tfvars.

implantação da infraestrutura

Depois de criar terraform.tfvars, é possível inicializar e aplicar a configuração do Terraform. Esta etapa provisiona todos os recursos necessários do Google Cloud, incluindo o Artifact Registry, o Redis e o Cloud Run. Quando concluído, o Terraform cria o serviço do Google Cloud Run, que executa uma imagem de contêiner de marcador de posição. Essa etapa pode levar alguns minutos.

# Run from the infrastructure/ directory
terraform init
terraform apply

Quando solicitado por terraform apply, revise o plano e digite yes para confirmar.

Criar e implantar o aplicativo do MCG

Depois que a infraestrutura é provisionada, a próxima etapa é criar o código-fonte do MCG e implantá-lo no Google Cloud Run. Isso é feito enviando o código-fonte para o Google Cloud Build, que cria a imagem Docker, envia para o Artifact Registry e atualiza o serviço do Google Cloud Run para usar a nova imagem.

O Google Cloud Build usa a variável de substituição COMMIT_SHA para adicionar tags à imagem criada. É possível usar um número de versão (por exemplo, v1.0.0) ou o SHA do commit do seu repositório. As tags ajudam a distinguir entre versões no Artifact Registry, gerenciar implantações e reverter para uma versão anterior, se necessário.

Execute o seguinte comando gcloud para acionar a build e a implantação:

# Run from the repository root
#
# The command tags the image with the Git commit SHA.
# To tag with a version number, replace '$(git rev-parse --short HEAD)' with the version number.
gcloud builds submit . \
  --config=cloudbuild.yaml \
  --substitutions=COMMIT_SHA=$(git rev-parse --short HEAD)

Esse comando realiza a implantação inicial do código do aplicativo. Para implantar atualizações no código-fonte do MCG, execute este comando novamente.

Conceder acesso e verificar a implantação

Para permitir que usuários ou contas de serviço chamem a API MCG, conceda a eles o papel do IAM de Invocador do Cloud Run (roles/run.invoker):

gcloud run services add-iam-policy-binding mcg-service \
  --member=<var label="member type, e.g. user or serviceAccount">MEMBER_TYPE</var>:<var label="email address of member">EMAIL_ADDRESS</var> \
  --role=roles/run.invoker \
  --region=<var label="Google Cloud region">your-gcp-region</var>

Para conferir o URL do serviço, execute o seguinte comando. O URL permanece estável em todas as implantações.

SERVICE_URL=$(gcloud run services describe mcg-service \
  --region <var label="Google Cloud region">your-gcp-region</var> \
  --format='value(status.url)')

Depois de conceder permissões, confirme se o serviço está em execução e acessível chamando o endpoint /health dele. Como os serviços do Google Cloud Run exigem autenticação, inclua um token de autorização de gcloud no cabeçalho da solicitação ao chamar o endpoint:

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
  $SERVICE_URL/health

Se o serviço estiver em execução, esse comando vai retornar OK, e você poderá chamar qualquer um dos endpoints da API, conforme descrito em Chamar a API.