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


Neste tutorial, mostramos como configurar a infraestrutura da ferramenta do escalonador automático para o 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 é voltado para a engenharia de TI, operações e confiabilidade do site equipes que querem reduzir as despesas operacionais e otimizar o custo as implantações do 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 sobre os componentes do escalonador automático e cada um dos componentes etapas no fluxo de eventos, consulte Escalonamento automático do 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 Spanner estão em projetos chamados Aplicativo 1 e Aplicativo 2:

  1. O Cloud Scheduler é o mesmo projeto que o Spanner instâncias.
  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 Poller lê as mensagens do tópico de pesquisa e as o processo continua, conforme descrito em Escalonamento automático do Spanner.

Objetivos

  • Implantar o escalonador automático usando um modelo de implantação distribuída.
  • Importar instâncias do 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 do serviço instâncias. Para um exemplo de como calcular os custos das instâncias do Spanner, consulte Como fazer o escalonamento automático do 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 do aplicativo contém os recursos do aplicativo, incluindo o Spanner. Você configura e ativa o faturamento e as APIs para esses dois projetos separadamente neste tutorial.

  1. In the Google Cloud console, activate Cloud Shell.

    Activate 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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the Identity and Access Management (IAM), Resource Manager, App Engine Admin, Firestore, Spanner, Pub/Sub, Cloud Run functions, and Cloud Build APIs.

    Enable the 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 a localização 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. Se o projeto não tiver um Firestore instância ainda, 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 Poller e do Scaler e do Cloud Run.
  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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the Identity and Access Management, Resource Manager, App Engine Admin, Firestore, Spanner, Pub/Sub, Cloud Run functions, and Cloud Build APIs.

    Enable the 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. criar uma conta de serviço; que o Terraform pode usar para criar os recursos em 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 do Spanner que o Terraform cria é denominada 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 as funções do Forwarder do Cloud Run a publicar no tópico do Poller

  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 Logs Explorer 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 um Resolver problemas de configuração da instância do Spanner de forma 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.

Exclua o projeto

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

A seguir