Implantar uma ferramenta de escalonador automático distribuída para o Cloud Spanner


Neste tutorial, mostramos como configurar a infraestrutura da ferramenta do escalonador automático para o Cloud Spanner usando uma topologia de implantação distribuída. Na opção de implantação apresentada neste tutorial, todos os componentes do escalonador automático estão em um único projeto, exceto para o Cloud Scheduler, o tópico "Encaminhamento" e a função correspondente.

Este tutorial destina-se a equipes de TI, operações e engenharia de confiabilidade do site que querem reduzir as sobrecargas operacionais e otimizar o custo das implantações do Cloud Spanner. Este documento faz parte de uma série:

A topologia de implantação distribuída reúne os seguintes recursos vantajosos por projeto e as implantações centralizadas:

  • As equipes que são proprietárias das instâncias do Spanner, chamadas de equipes de aplicativo, gerenciam os parâmetros de configuração do escalonador automático para as instâncias com os jobs do Cloud Scheduler.
  • Fora dos parâmetros de configuração, uma equipe central gerencia o restante da infraestrutura do escalonador automático, minimizando a sobrecarga de gerenciamento.

Arquitetura

O diagrama a seguir mostra a arquitetura do escalonador automático em uma topologia de implantação distribuída:

Topologia de implantação distribuída.

Para uma explicação dos componentes do escalonador automático e de cada uma das etapas numeradas no fluxo de eventos, consulte Escalonamento automático do Cloud Spanner.

Função do encaminhador

O Cloud Scheduler só pode publicar mensagens em tópicos no mesmo projeto. Portanto, para a topologia distribuída, este tutorial apresenta um componente intermediário chamado a função de encaminhador.

A função de encaminhador usa as mensagens publicadas do Pub/Sub no Cloud Scheduler, verifica a sintaxe JSON e as encaminha para o tópico do Pub/Sub. O tópico pode pertencer a um projeto separado para o Cloud Scheduler.

O diagrama a seguir mostra os componentes usados para o mecanismo de encaminhamento:

Mecanismo de encaminhamento.

Como mostrado no diagrama anterior, as instâncias do Cloud Spanner estão em projetos chamados Aplicativo 1 e Aplicativo 2:

  1. O Cloud Scheduler é o mesmo projeto que as instâncias do Cloud Spanner.
  2. (2a) O Cloud Scheduler publica suas mensagens no tópico "Encaminhamento" nos projetos do Aplicativo 1 e do Aplicativo 2.

    (2b) A função encaminhador lê as mensagens do tópico Encaminhamento.

    (c) A função de encaminhador encaminha as mensagens para o tópico de pesquisa que reside no projeto do escalonador automático.

  3. A função de pesquisa lê as mensagens do tópico de pesquisa e o processo continua, conforme descrito em Como fazer escalonamento automático do Cloud Spanner.

Objetivos

  • Implantar o escalonador automático usando um modelo de implantação distribuída.
  • Importar instâncias do Cloud Spanner atuais para o estado do Terraform.
  • Configure o escalonador automático.

Custos

Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Ao seguir as instruções deste tutorial, os custos associados à operação dos componentes do escalonador automático precisam ser zero ou próximos de zero. No entanto, essa estimativa não inclui os custos das instâncias do Cloud Spanner. Para um exemplo de como calcular os custos das instâncias do Cloud Spanner, consulte Como fazer o escalonamento automático do Cloud Spanner.

Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.

Antes de começar

Em uma topologia de implantação distribuída, além de um projeto do escalonador automático, você configura um segundo projeto, que neste tutorial é chamado de projeto do aplicativo. O projeto de aplicativo mantém os recursos do aplicativo, incluindo o Cloud Spanner. Você configura e ativa o faturamento e as APIs para esses dois projetos separadamente neste tutorial.

  1. No Console do Google Cloud, ative o Cloud Shell.

    Ativar o Cloud Shell

  2. No Cloud Shell, clone o seguinte repositório:

    git clone https://github.com/cloudspannerecosystem/autoscaler
    
  3. Exporte variáveis para os diretórios de trabalho:

    export AUTOSCALER_DIR="$(pwd)/autoscaler/terraform/cloud-functions/distributed/autoscaler-project"
    export APP_DIR="$(pwd)/autoscaler/terraform/cloud-functions/distributed/app-project"
    

Como preparar o projeto do escalonador automático

Nesta seção, você prepara a implantação do projeto, que contém toda a infraestrutura do escalonador automático centralizada, exceto o Cloud Scheduler.

  1. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  2. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  3. Ative as APIs Identity and Access Management (IAM), Resource Manager, App Engine Admin, Firestore, Cloud Spanner, Pub/Sub, Cloud Functions, and Cloud Build.

    Ative as APIs

  4. No Cloud Shell, defina as variáveis de ambiente com o ID do projeto do escalonador automático:

    export AUTO_SCALER_PROJECT_ID=INSERT_YOUR_PROJECT_ID
    gcloud config set project "${AUTO_SCALER_PROJECT_ID}"
    
  5. Defina a região e a zona e o local do App Engine (para Firestore) para a infraestrutura do escalonador automático:

     export AUTO_SCALER_REGION=us-central1
     export AUTO_SCALER_ZONE=us-central1-c
     export AUTO_SCALER_APP_ENGINE_LOCATION=us-central
    
  6. Crie uma conta de serviço:

    gcloud iam service-accounts create terraformer --display-name "Terraform service account"
    

    O Terraform usa essa conta para criar todos os recursos na sua infraestrutura.

  7. Atribua o papel de proprietário do projeto à conta de serviço:

     gcloud projects add-iam-policy-binding "${AUTO_SCALER_PROJECT_ID}" \
        --member "serviceAccount:terraformer@${AUTO_SCALER_PROJECT_ID}.iam.gserviceaccount.com" \
        --role roles/owner
    
  8. Crie um arquivo da chave da conta de serviço:

     gcloud iam service-accounts keys create \
        --iam-account "terraformer@${AUTO_SCALER_PROJECT_ID}.iam.gserviceaccount.com" "${AUTOSCALER_DIR}/key.json"
    
  9. Caso seu projeto ainda não tenha uma instância do Firestore, crie uma:

     gcloud app create --region="${AUTO_SCALER_APP_ENGINE_LOCATION}"
     gcloud alpha firestore databases create --region="${AUTO_SCALER_APP_ENGINE_LOCATION}"
    

Como implantar o escalonador automático

Nesta seção, você implanta os componentes que compõem o escalonador automático usando arquivos do Terraform nos seguintes diretórios:

Diretório Conteúdo do diretório
terraform/ Configuração de nível superior, que inclui cada uma das opções de implantação e os módulos reutilizáveis.
terraform/cloud-functions/distributed/autoscaler-project/ Configuração para o projeto em que o escalonador automático está localizado. Delegado ao módulo Autoscaler.
terraform/modules/autoscaler-functions Configuração dos tópicos do Cloud Polier e da Scaler e do Pub/Sub.
  1. No Cloud Shell, defina o ID do projeto, a região, a zona e o local do App Engine nas variáveis de ambiente correspondentes do Terraform:

    export TF_VAR_project_id="${AUTO_SCALER_PROJECT_ID}"
    export TF_VAR_region="${AUTO_SCALER_REGION}"
    export TF_VAR_zone="${AUTO_SCALER_ZONE}"
    export TF_VAR_location="${AUTO_SCALER_APP_ENGINE_LOCATION}"
    
  2. Altere o diretório para o diretório do escalonamento do projeto do Terraform e inicialize-o:

    cd "${AUTOSCALER_DIR}"
    terraform init
    
  3. Crie a infraestrutura do escalonador automático:

    terraform apply -parallelism=2
    

    Depois de verificar os recursos, digite yes quando solicitado.

    Ao executar este comando no Cloud Shell, talvez apareça a seguinte mensagem de erro: "Error: cannot assign requested address"

    Esse erro é um problema conhecido no provedor do Terraform no Google. Nesse caso, tente novamente com o seguinte comando:

    terraform apply -parallelism=1
    

Como preparar o projeto do aplicativo

Nesta seção, no projeto que contém as instâncias do Spanner, você prepara a implantação do Cloud Scheduler e do tópico e da função de encaminhador.

  1. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  2. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  3. Ative as APIs Identity and Access Management, Resource Manager, App Engine Admin, Firestore, Cloud Spanner, Pub/Sub, Cloud Functions, and Cloud Build.

    Ative as APIs

  4. No Cloud Shell, defina as variáveis de ambiente com o ID do projeto do aplicativo:

    export APP_PROJECT_ID=INSERT_YOUR_APP_PROJECT_ID
    gcloud config set project "${APP_PROJECT_ID}"
    
  5. Defina a região e a zona e o local do App Engine para o projeto do aplicativo:

    export APP_REGION=us-central1
    export APP_ZONE=us-central1-c
    export APP_APP_ENGINE_LOCATION=us-central
    
  6. Crie uma conta de serviço para o Terraform usar para criar os recursos na sua infraestrutura:

    gcloud iam service-accounts create terraformer --display-name "Terraform service account"
    
  7. Atribua o papel de proprietário do projeto(roles/owner) à conta de serviço:

     gcloud projects add-iam-policy-binding "${APP_PROJECT_ID}" \
        --member "serviceAccount:terraformer@${APP_PROJECT_ID}.iam.gserviceaccount.com" \
        --role roles/owner
    
  8. Crie um arquivo da chave da conta de serviço:

     gcloud iam service-accounts keys create \
        --iam-account "terraformer@${APP_PROJECT_ID}.iam.gserviceaccount.com"  "${APP_DIR}/key.json"
    
  9. Crie um aplicativo para ativar o Cloud Scheduler:

    gcloud app create --region="${APP_APP_ENGINE_LOCATION}"
    

    Não é necessário criar um banco de dados do Firestore porque o estado é armazenado no projeto do escalonador automático.

Implantar a infraestrutura do projeto de aplicativo

Os componentes do Terraform que compõem o projeto do aplicativo estão nos seguintes diretórios:

Nesta seção, você usa os arquivos do Terraform para implantar os componentes que compõem o projeto de aplicativo.

  1. No Cloud Shell, defina o ID do projeto, a região, a zona e o local do App Engine nas variáveis de ambiente correspondentes do Terraform:

      export TF_VAR_project_id="${APP_PROJECT_ID}"
      export TF_VAR_region="${APP_REGION}"
      export TF_VAR_zone="${APP_ZONE}"
      export TF_VAR_location="${APP_APP_ENGINE_LOCATION}"
    
  2. Defina o ID do projeto em que o estado do escalonador automático será armazenado:

    export TF_VAR_state_project_id="${AUTO_SCALER_PROJECT_ID}"
    

    O estado do escalonador automático inclui os carimbos de data/hora quando os eventos de escalonamento foram acionados para cada instância.

  3. Se você quiser criar uma nova instância do Spanner para testar o escalonador automático, defina a seguinte variável:

    export TF_VAR_terraform_spanner=true
    

    A instância de spanner que o Terraform cria é chamada de autoscale-test.

    Se você não quiser criar uma nova instância do Spanner porque já tem uma instância para monitorar, defina o nome dela na seguinte variável:

    export TF_VAR_spanner_name=INSERT_YOUR_SPANNER_INSTANCE_NAME
    

    Para mais informações sobre como configurar o Terraform para gerenciar a instância do Spanner, consulte Como importar instâncias do Spanner.

  4. Altere o diretório para o diretório do app-project Terraform e inicialize-o:

    cd "${APP_DIR}"
    terraform init
    
  5. Crie a infraestrutura no projeto do aplicativo:

    terraform import module.scheduler.google_app_engine_application.app "${APP_PROJECT_ID}"
    terraform apply -parallelism=2
    

    Verifique se a lista de recursos a serem criados pelo Terraform e digite yes quando solicitado.

    Ao executar este comando no Cloud Shell, talvez apareça a seguinte mensagem de erro: "Error: cannot assign requested address"

    Esse erro é um problema conhecido no provedor do Terraform no Google. Nesse caso, tente novamente com o seguinte comando:

    terraform apply -parallelism=1
    

Autorizar o Cloud Functions do encaminhador a publicar no tópico Polier.

  1. No Cloud Shell, volte para o diretório do projeto terraform do escalonador automático e verifique se as variáveis do Terraform estão definidas corretamente:

    cd "${AUTOSCALER_DIR}"
    
    export TF_VAR_project_id="${AUTO_SCALER_PROJECT_ID}"
    export TF_VAR_region="${AUTO_SCALER_REGION}"
    export TF_VAR_zone="${AUTO_SCALER_ZONE}"
    export TF_VAR_location="${AUTO_SCALER_APP_ENGINE_LOCATION}"
    
  2. Defina as variáveis do Terraform para suas contas de serviço do encaminhador. Atualize e adicione suas contas de serviço conforme necessário:

     export TF_VAR_forwarder_sa_emails='["serviceAccount:forwarder-sa@'"${APP_PROJECT_ID}"'.iam.gserviceaccount.com"]'
      terraform apply -parallelism=2
    

    Verifique se a lista de recursos a serem criados pelo Terraform e digite yes quando solicitado.

    Ao executar este comando no Cloud Shell, talvez apareça a seguinte mensagem de erro:"Error: cannot assign requested address"

    Esse erro é um problema conhecido no provedor do Terraform no Google. Nesse caso, tente novamente com o seguinte comando:

    terraform apply -parallelism=1.
    

Como verificar sua implantação

Quando a infraestrutura do escalonador automático estiver pronta, você poderá configurar os parâmetros dele. Para saber mais, consulte Como configurar o escalonador automático.

Como você cria uma implantação distribuída neste tutorial, os registros têm as seguintes propriedades:

  • Os registros das funções de pesquisador e escalonador automático aparecem no Explorador de registros do projeto do escalonador automático.
  • Os registros sobre erros de sintaxe na configuração JSON do payload do Cloud Scheduler aparecem no explorador de registros de cada projeto de aplicativo. Isso permite que a equipe responsável por uma instância específica do Cloud Spanner resolva os problemas de configuração de maneira independente.

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

Excluir o projeto

  1. No Console do Google Cloud, acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

A seguir