Solução Jump Start: app da Web de três níveis

Last reviewed 2024-05-02 UTC

Este guia ajuda você a entender e implantar a solução Jump Start para um aplicativo da Web de três níveis, que demonstra como implantar rapidamente uma pilha de aplicativos da Web em várias camadas no Google Cloud.

A solução de app da Web de três níveis implanta um aplicativo de acompanhamento de tarefas no Google Cloud. O app tem um front-end baseado na Web e uma camada de API no nível intermediário. A camada de front-end e de API são apps conteinerizados que são implantados como serviços sem servidor. O back-end é um banco de dados SQL. A solução também inclui um cache na memória para exibir dados acessados com frequência. Cada nível nesta solução é independente. É possível desenvolver, atualizar e escalonar qualquer nível sem afetar os outros níveis. Essa arquitetura permite o desenvolvimento e a entrega eficientes de apps.

Este guia é destinado a desenvolvedores com alguma experiência na implantação de pilhas de apps de vários níveis. Ele pressupõe que você está familiarizado com os conceitos básicos da nuvem, mas não necessariamente o Google Cloud. Ter experiência com o Terraform é útil.

Produtos usados

A solução usa os seguintes produtos do Google Cloud:

  • Cloud Run: um serviço totalmente gerenciado que permite criar e implantar apps conteinerizados sem servidor. O Google Cloud lida com o escalonamento e outras tarefas de infraestrutura para que você possa se concentrar na lógica de negócios do seu código.
  • Memorystore para Redis: um serviço que fornece armazenamento em cache de aplicativos usando um serviço na memória escalonável, seguro e altamente disponível para Redis e Memcached.
  • Cloud SQL para PostgreSQL: um banco de dados PostgreSQL baseado na nuvem totalmente gerenciado na infraestrutura do Google Cloud.
  • Rede de nuvem privada virtual (VPC): uma rede virtual global que abrange todas as regiões do Google Cloud e permite interconectar os recursos da nuvem.

Para informações sobre como esses produtos são configurados e como eles interagem, consulte a próxima seção.

Arquitetura

O aplicativo de exemplo que a solução de aplicativo da Web de três níveis implanta é um aplicativo de acompanhamento de tarefas para o qual já existe o código. O diagrama a seguir mostra a arquitetura da infraestrutura que a solução implanta:

Arquitetura da infraestrutura necessária para uma solução de app da Web de três níveis.

As subseções a seguir descrevem o fluxo de solicitação e a configuração dos recursos do Google Cloud que são mostrados no diagrama.

Fluxo da solicitação

Veja a seguir o fluxo de processamento de solicitação do app de monitoramento de tarefas que essa solução implanta. As etapas no fluxo são numeradas conforme mostrado no diagrama de arquitetura anterior.

  1. Um front-end baseado na Web recebe solicitações de clientes para o app de acompanhamento de tarefas. O front-end é um serviço do Cloud Run que renderiza um cliente HTML no navegador do usuário.
  2. O front-end envia solicitações para uma camada de API, que também é implantada como um serviço do Cloud Run.
  3. Os dados lidos com frequência são armazenados em cache e disponibilizados em uma instância do Memorystore para Redis.
  4. As solicitações que não podem ser exibidas a partir do cache do Redis na memória são enviadas pela camada da API para um banco de dados do Cloud SQL para PostgreSQL.

Configuração de recursos

Nesta seção, descrevemos a configuração dos recursos do Cloud Run, Memorystore, Cloud SQL e rede que a solução implanta. Se você já conhece a linguagem de configuração do Terraform, é possível alterar algumas delas, conforme descrito mais adiante neste guia.

Para ver as definições de configuração, clique nas seguintes subseções:

Serviços do Cloud Run

Parâmetro Configuração pré-configurada
Capacidade de computação por instância de contêiner 1 vCPU, 512 MiB de memória
Intervalo de escalonamento automático (número de instâncias de contêiner)

Front-end: 0-8

Camada de API: 0-8

Instância do Memorystore para Redis

Parâmetro Configuração pré-configurada
Versão do Redis Versão 6.X
Nível de serviço Básico, sem alta disponibilidade (HA)
Memória 1 GB
Criptografia de dados

Em repouso: chave de propriedade e gerenciada pelo Google

Em trânsito: não criptografado

Banco de dados do Cloud SQL para PostgreSQL

Parâmetro Configuração pré-configurada
Versão do PostgreSQL Versão 14
Tipo de máquina db-g1-small: 1 vCPU, 1.7 GB de memória
Disponibilidade Única zona
Armazenamento SSD de 10 GB, com escalonamento automático ativado

Recursos de Rede

A instância do Cloud SQL está anexada a uma rede VPC criada pelo cliente e tem um endereço IP interno.

O acesso VPC sem servidor fornece conexão com a instância do Cloud Run que hospeda a camada de API para a instância do Cloud SQL. As solicitações do serviço do Cloud Run à instância do Cloud SQL usam DNS interno e endereços IP internos. O tráfego de resposta também usa a rede interna. Em outras palavras, o tráfego entre o app e o banco de dados não é exposto à Internet. Além disso, o tráfego por acesso VPC sem servidor pode ter latência menor do que o tráfego que passa pela Internet.

A conectividade entre a instância do Memorystore e o banco de dados do Cloud SQL é feita por uma conexão de peering direto.

Custo

Para uma estimativa dos custos dos recursos do Google Cloud usados pela solução de app da Web de três níveis, consulte a estimativa pré-calculada na Calculadora de preços do Google Cloud.

Use a estimativa como um ponto de partida para calcular o custo da implantação. É possível modificar a estimativa para refletir as alterações de configuração planejadas para os recursos usados na solução.

A estimativa pré-calculada tem como base suposições específicas, incluindo o seguinte:

  • Os locais do Google Cloud em que os recursos são implantados.
  • A quantidade de tempo em que os recursos são usados.

Antes de começar

Para implantar essa solução, primeiro você precisa de um projeto do Google Cloud e de algumas permissões do IAM.

Criar ou escolher um projeto do Google Cloud

Ao implantar a solução, escolha o projeto do Google Cloud em que os recursos serão implantados. É possível criar um novo projeto ou usar um de um projeto atual para a implantação.

Se você quiser criar um novo projeto, faça isso antes de iniciar a implantação. Usar um novo projeto pode ajudar a evitar conflitos com recursos provisionados anteriormente, como recursos usados em cargas de trabalho de produção.

Para criar um projeto, siga estas etapas:

  1. In the Google Cloud console, go to the project selector page.

    Go to project selector

  2. Click Create project.

  3. Name your project. Make a note of your generated project ID.

  4. Edit the other fields as needed.

  5. Click Create.

Receber as permissões de IAM necessárias

Para iniciar o processo de implantação, você precisa das permissões do Identity and Access Management (IAM) listadas na tabela a seguir.

Se você criou um novo projeto para esta solução, então você tem o roles/owner função básica nesse projeto e tem todas as permissões necessárias. Se você não tiver o papel roles/owner, peça ao administrador para conceder essas permissões (ou as que incluem essas permissões) a você.

Permissão do IAM necessária Papel predefinido que inclui as permissões necessárias

serviceusage.services.enable

Administrador do Service Usage
(roles/serviceusage.serviceUsageAdmin)

iam.serviceAccounts.create

Administrador da conta de serviço
(roles/iam.serviceAccountAdmin)

resourcemanager.projects.setIamPolicy

Administrador de projetos do IAM
(roles/resourcemanager.projectIamAdmin)
config.deployments.create
config.deployments.list
Administrador do Cloud Infrastructure Manager
(roles/config.admin)

Sobre as permissões temporárias da conta de serviço

Se você iniciar o processo de implantação pelo console, o Google criará uma conta de serviço para implantar a solução em seu nome (e excluir a implantação mais tarde, se você quiser). Essa conta de serviço recebe determinadas permissões do IAM temporariamente, ou seja, as permissões são revogadas automaticamente após a conclusão das operações de implantação e exclusão da solução. O Google recomenda que, após a exclusão da implantação, você exclua a conta de serviço, conforme descrito mais adiante neste guia.

Ver os papéis atribuídos à conta de serviço

Esses papéis são listados aqui caso um administrador do projeto ou da organização do Google Cloud precise dessas informações.

  • roles/artifactregistry.admin
  • roles/cloudsql.admin
  • roles/compute.networkAdmin
  • roles/iam.serviceAccountAdmin
  • roles/iam.serviceAccountUser
  • roles/redis.admin
  • roles/resourcemanager.projectIamAdmin
  • roles/run.admin
  • roles/servicenetworking.serviceAgent
  • roles/serviceusage.serviceUsageViewer
  • roles/vpcaccess.admin

implantar a solução

Para ajudá-lo a implantar essa solução com esforço mínimo, é fornecida uma configuração do Terraform no GitHub. A configuração do Terraform define todos os recursos do Google Cloud necessários para a solução.

É possível implantar a solução usando um dos seguintes métodos:

  • Pelo console: use esse método se quiser testar a solução com a configuração padrão e ver como ela funciona. O Cloud Build implanta todos os recursos necessários para a solução. Quando você não precisar mais da solução implantada, será possível excluí-la no console. Todos os recursos criados depois da implantação da solução talvez precisem ser excluídos separadamente.

    Para usar esse método de implantação, siga as instruções em Implantar no console.

  • Com a CLI do Terraform: use esse método se quiser personalizar a solução ou automatizar o provisionamento e o gerenciamento dos recursos usando a abordagem de infraestrutura como código (IaC). Faça o download da configuração do Terraform no GitHub, personalize o código conforme necessário e implante a solução usando a CLI do Terraform. Depois de implantar a solução, é possível continuar a usar o Terraform para gerenciá-la.

    Para usar esse método de implantação, siga as instruções em Implantar usando a CLI do Terraform.

Implantar pelo console

Conclua as etapas a seguir para implantar a solução pré-configurada.

  1. No catálogo da solução Jump Start do Google Cloud, acesse a solução app da Web de três níveis.

    Acesse a solução de apps da Web de três níveis

  2. Revise as informações fornecidas na página, como o custo estimado da solução e o tempo estimado de implantação.

  3. Quando estiver tudo pronto para começar a implantar a solução, clique em Implantar.

    Um painel de configuração passo a passo é exibido.

  4. Conclua as etapas no painel de configuração.

    Anote o nome inserido para a implantação. Ele será necessário depois de excluir a implantação.

    Quando você clica em Implantar, a página Implantações da solução é exibida. O campo Status nesta página mostra Implantação.

  5. Aguarde a solução ser implantada.

    Se a implantação falhar, o campo Status vai mostrar Falha. Use o registro do Cloud Build para diagnosticar os erros. Para mais informações, consulte Erros ao implantar no console.

    Depois que a implantação for concluída, o campo Status mudará para Implantado.

  6. Para visualizar e usar o aplicativo de acompanhamento de tarefas implantado por essa solução, clique em Ações na página Implantações da solução e selecione Conferir aplicativo da Web.

    A página da Web de front-end do aplicativo de monitoramento de tarefas é exibida em uma nova guia do navegador.

  7. Para ver os recursos do Google Cloud implantados e as configurações deles, faça um tour interativo.

    Iniciar o tour

Quando você não precisar mais da solução, exclua a implantação para evitar o faturamento contínuo dos recursos do Google Cloud. Para mais informações, consulte Excluir a implantação.

Implantar usando a CLI do Terraform

Nesta seção, descrevemos como personalizar a solução ou automatizar o provisionamento e o gerenciamento dela usando a CLI do Terraform. As soluções que você implanta usando a CLI do Terraform não são exibidas na página Implantações da solução no console do Google Cloud.

Configurar o cliente do Terraform

É possível executar o Terraform no Cloud Shell ou no seu host local. Neste guia, descrevemos como executar o Terraform no Cloud Shell, que tem o Terraform pré-instalado e configurado para autenticação com o Google Cloud.

O código do Terraform para esta solução está disponível em um repositório do GitHub.

  1. Clone o repositório do GitHub no Cloud Shell.

    Abrir no Cloud Shell

    Você verá um prompt para confirmar o download do repositório do GitHub para o Cloud Shell.

  2. Clique em Confirmar.

    O Cloud Shell é iniciado em uma guia separada do navegador, e o código do Terraform é transferido por download para o diretório $HOME/cloudshell_open do seu ambiente do Cloud Shell.

  3. No Cloud Shell, verifique se o diretório de trabalho atual é $HOME/cloudshell_open/terraform-google-three-tier-web-app/. Esse é o diretório que contém os arquivos de configuração do Terraform para a solução. Se você precisar mudar para esse diretório, execute o seguinte comando:

    cd $HOME/cloudshell_open/terraform-google-three-tier-web-app/
    
  4. Inicialize o Terraform executando o seguinte comando:

    terraform init
    

    Aguarde até ver a seguinte mensagem:

    Terraform has been successfully initialized!
    

Configurar as variáveis do Terraform

O código do Terraform que você salvou inclui variáveis que podem ser usadas para personalizar a implantação com base nos seus requisitos. Por exemplo, é possível especificar o projeto do Google Cloud e a região em que você quer que a solução seja implantada.

  1. Verifique se o diretório de trabalho atual é $HOME/cloudshell_open/terraform-google-three-tier-web-app/. Se não estiver, acesse esse diretório.

  2. No mesmo diretório, crie um arquivo de texto chamado terraform.tfvars.

  3. No arquivo terraform.tfvars, copie o snippet de código a seguir e defina valores para as variáveis necessárias.

    • Siga as instruções fornecidas como comentários no snippet de código.
    • Esse snippet de código inclui apenas as variáveis para as quais você precisa definir valores. A configuração do Terraform inclui outras variáveis que têm valores padrão. Para revisar todas as variáveis e os valores padrão, consulte o arquivo variables.tf disponível no diretório $HOME/cloudshell_open/terraform-google-three-tier-web-app/.
    • Verifique se cada valor definido no arquivo terraform.tfvars corresponde ao tipo da variável, conforme declarado no arquivo variables.tf. Por exemplo, se o tipo definido para uma variável no arquivo variables.tf for bool, especifique true ou false como o valor dessa variável no arquivo terraform.tfvars.
    # This is an example of the terraform.tfvars file.
    # The values in this file must match the variable types declared in variables.tf.
    # The values in this file override any defaults in variables.tf.
    
    # ID of the project in which you want to deploy the solution
    project_id = "PROJECT_ID"
    
    # Google Cloud region where you want to deploy the solution
    # Example: us-central1
    region = "REGION"
    
    # Google Cloud zone where you want to deploy the solution
    # Example: us-central1-a
    zone = "ZONE"
    

    Para informações sobre os valores que podem ser atribuídos às variáveis obrigatórias, consulte:

Validar e revisar a configuração do Terraform

  1. Verifique se o diretório de trabalho atual é $HOME/cloudshell_open/terraform-google-three-tier-web-app/. Se não estiver, acesse esse diretório.

  2. Verifique se a configuração do Terraform não tem erros:

    terraform validate
    

    Se o comando retornar algum erro, faça as correções necessárias na configuração e execute o comando terraform validate novamente. Repita essa etapa até o comando retornar a seguinte mensagem:

    Success! The configuration is valid.
    
  3. Analise os recursos definidos na configuração:

    terraform plan
    
  4. Se você não tiver criado o arquivo terraform.tfvars conforme descrito anteriormente, o Terraform solicitará que você insira valores das variáveis que não têm valores padrão. Insira os valores obrigatórios.

    A saída do comando terraform plan é uma lista dos recursos provisionados pelo Terraform quando você aplica a configuração.

    Se você quiser fazer alterações, edite a configuração e execute os comandos terraform validate e terraform plan novamente.

Provisionar os recursos

Quando nenhuma outra alteração for necessária na configuração, implante os recursos:

  1. Verifique se o diretório de trabalho atual é $HOME/cloudshell_open/terraform-google-three-tier-web-app/. Se não estiver, acesse esse diretório.

  2. Aplique a configuração do Terraform:

    terraform apply
    
  3. Se você não tiver criado o arquivo terraform.tfvars conforme descrito anteriormente, o Terraform solicitará que você insira valores das variáveis que não têm valores padrão. Insira os valores obrigatórios.

    O Terraform exibe uma lista dos recursos que serão criados.

  4. Quando for solicitado que você execute as ações, digite yes.

    O Terraform exibe mensagens mostrando o progresso da implantação.

    Se não for possível concluir a implantação, o Terraform exibirá os erros que causaram a falha. Analise as mensagens de erro e atualize a configuração para corrigi-los. Em seguida, execute o comando terraform apply novamente. Para receber ajuda com a solução de problemas do Terraform, consulte Erros ao implantar a solução usando a CLI do Terraform.

    Depois que todos os recursos forem criados, o Terraform exibirá a seguinte mensagem:

    Apply complete!
    

    A saída do Terraform também lista o URL de front-end do app de monitoramento de tarefas (endpoint) e o nome da instância do Cloud SQL (sqlservername), conforme mostrado no exemplo a seguir:

    endpoint = "https://three-tier-app-fe-pn4ngg7gnq-uc.a.run.app"
    sqlservername = "three-tier-app-db-75c2"
    
  5. Para visualizar e usar o app de monitoramento de tarefas implantado pela solução, copie o URL endpoint da etapa anterior e abra-o em um navegador.

    A página da Web de front-end do aplicativo de monitoramento de tarefas é exibida em uma nova guia do navegador.

  6. Para ver os recursos do Google Cloud implantados e as configurações deles, faça um tour interativo.

    Iniciar o tour

Quando você não precisar mais da solução, exclua a implantação para evitar o faturamento contínuo dos recursos do Google Cloud. Para mais informações, consulte Excluir a implantação.

Personalizar a solução

Nesta seção, fornecemos informações que os desenvolvedores do Terraform podem usar para modificar a solução de aplicativo da Web de três níveis a fim de atender aos próprios requisitos técnicos e comerciais. As orientações nesta seção só serão relevantes se você implantar a solução usando a CLI do Terraform.

A seção Configuração de recursos (anteriormente neste guia) lista os parâmetros pré-configurados dos recursos do Google Cloud que a solução de aplicativo da Web de três níveis provisiona. É possível personalizar a solução alterando alguns parâmetros no arquivo main.tf.

Para personalizar a solução, conclua as seguintes etapas no Cloud Shell:

  1. Verifique se o diretório de trabalho atual é $HOME/cloudshell_open/terraform-google-three-tier-web-app/. Se não estiver, acesse esse diretório.

  2. Abra o arquivo main.tf e faça as alterações necessárias, conforme mostrado nos exemplos da tabela a seguir:

    Parâmetro Código do Terraform
    Escalonamento do Cloud Run Argumento no arquivo main.tf: autoscaling.knative.dev/maxScale

    Snippet de código

    resource "google_cloud_run_service" "api" {
    ...
      template {
      ...
        metadata {
          annotations = {
            "autoscaling.knative.dev/maxScale" = "COUNT"
            ...
          }
        }
      }
    }
    Versão do Redis Argumento no arquivo main.tf: redis_version

    Snippet de código

    resource "google_redis_instance" "main" {
      ...
      redis_version = "VERSION"
      ...
    }

    Cuidado: a configuração do Terraform fornecida pelo Google foi validada para a versão 6.x do Redis. Se você alterar a versão, a solução implantada talvez não funcione conforme o esperado.

    Nível do Redis Argumento no arquivo main.tf: tier

    Snippet de código

    resource "google_redis_instance" "main" {
      ...
      tier = "TIER"
      ...
    }
    Memória Redis Argumento no arquivo main.tf: memory_size_gb

    Snippet de código

    resource "google_redis_instance" "main" {
      ...
      memory_size_gb = SIZE
      ...
    }
    Versão do PostgreSQL Argumento no arquivo main.tf: database_version

    Snippet de código

    resource "google_sql_database_instance" "main" {
      ...
      database_version = "VERSION"
      ...
    ...
    }

    Cuidado: a configuração do Terraform fornecida pelo Google foi validada para o PostgreSQL versão 14. Se você alterar a versão, a solução implantada talvez não funcione conforme o esperado.

    Tipo de máquina do banco de dados Argumento no arquivo main.tf: settings.tier

    Snippet de código

    resource "google_sql_database_instance" "main" {
      ...
      settings {
        tier = "MACHINE_TYPE"
        ...
      }
    ...
    }
    Armazenamento de banco de dados Argumento no arquivo main.tf: settings.disk_size

    Snippet de código

    resource "google_sql_database_instance" "main" {
      ...
      settings {
        ...
        ...
        disk_size = SIZE
        ...
      }
      ...
    }

  3. Valide e revise a configuração do Terraform.

  4. Provisione os recursos.

Recomendações de projeto

Nesta seção, apresentamos recomendações para usar a solução de aplicativo da Web de três níveis a fim de desenvolver uma arquitetura que atenda aos seus requisitos de segurança, confiabilidade, custo e desempenho.

Para conferir as recomendações de design de cada área, clique na guia adequada.

Segurança

Foco no design Recomendações
Criptografia de dados
  • Por padrão, o Cloud Run criptografa dados usando uma chave de propriedade e gerenciada pelo Google. Para proteger seus contêineres usando uma chave controlada por você, use as chaves de criptografia gerenciadas pelo cliente. Para mais informações, consulte Como usar chaves de criptografia gerenciadas pelo cliente.
  • Por padrão, o Memorystore usa chaves de propriedade do Google e gerenciadas pelo Google para criptografar dados em repouso. Para criptografar dados usando uma chave controlada por você, use chaves de criptografia gerenciadas pelo cliente. Para mais informações, consulte Sobre chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês).
  • É possível ativar a criptografia de dados em trânsito no Memorystore usando o protocolo Transport Layer Security (TLS). Para mais informações, consulte Sobre a criptografia em trânsito.
Segurança da cadeia de suprimentos de software Para garantir que apenas imagens de contêiner autorizadas sejam implantadas nos serviços do Cloud Run, use a autorização binária.
Controle de acesso
  • O serviço do Cloud Run que executa a camada da API permite a entrada de qualquer origem. Para mais segurança, restrinja a entrada para permitir tráfego apenas de origens internas. Para mais informações, consulte Como restringir a entrada no Cloud Run.
  • Para proteger o aplicativo contra acesso não autorizado, ative o recurso AUTH no Memorystore para que as conexões de clientes recebidas sejam autenticadas. Para mais informações, consulte Sobre o Redis AUTH.

Confiabilidade

Foco no design Recomendações
Escalonamento do app Os serviços do Cloud Run na solução estão configurados para escalonar automaticamente as instâncias de contêiner horizontalmente com base na carga da solicitação. Revise e ajuste os parâmetros de escalonamento automático com base nos seus requisitos. Para mais informações, consulte Sobre o escalonamento automático de instâncias de contêiner.
Processamento de solicitações Para melhorar a capacidade de resposta dos serviços do Cloud Run que armazenam o estado específico do cliente em instâncias de contêiner, é possível usar a afinidade da sessão. As solicitações do mesmo cliente são roteadas para a mesma instância de contêiner com base no melhor esforço. Para mais informações, consulte Como definir a afinidade de sessão (serviços).
Durabilidade dos dados Para proteger seus dados contra perdas, use backups automatizados do banco de dados do Cloud SQL. Para mais informações, consulte Sobre backups do Cloud SQL.
Alta disponibilidade do banco de dados (HA)

O banco de dados do Cloud SQL na solução é implantado em uma única zona. Para alta disponibilidade, use uma configuração de várias zonas. Para mais informações, consulte Sobre a alta disponibilidade.

Se a alta disponibilidade do banco de dados for um requisito crítico, o AlloyDB para PostgreSQL será um serviço alternativo do Google Cloud.

Confiabilidade do banco de dados

A instância do Cloud SQL nesta solução usa o tipo de máquina db-g1-small, que usa uma CPU de núcleo compartilhado. Esse tipo de máquina foi projetado para fornecer recursos para um banco de dados de baixo custo que pode ser apropriado apenas para ambientes de teste e desenvolvimento. Se você precisar de confiabilidade no nível de produção, use um tipo de máquina que forneça mais CPU e memória.

Uma instância do Cloud SQL que usa o tipo de máquina db-g1-small não está incluída no contrato de nível de serviço (SLA) do Cloud SQL. Para mais informações sobre configurações excluídas do SLA, consulte Diretrizes operacionais.

HA em cache Para ajudar a garantir a alta disponibilidade na camada de cache na memória esta solução, use o nível Standard do Memorystore para Redis. O serviço cria réplicas de leitura para operações de leitura distribuídas e fornece failover automático. Para mais informações, consulte Níveis de recursos do Redis.

Custo

Foco no design Recomendações
Eficiência de recursos

O Cloud Run determina o número de solicitações que precisam ser enviadas para uma instância de contêiner com base no uso da CPU e da memória. Ao aumentar a configuração de simultaneidade máxima, é possível reduzir o número de instâncias de contêiner que o Cloud Run precisa criar e, portanto, reduzir o custo. Para mais informações, consulte Máximo de solicitações simultâneas por instância (serviços).

Os serviços do Cloud Run nesta solução estão configurados para alocar CPUs apenas durante o processamento da solicitação. Quando um serviço do Cloud Run termina de processar uma solicitação, o acesso da instância do contêiner às CPUs é desativado. Para mais informações sobre o efeito de custo e desempenho dessa configuração, consulte Alocação de CPU (serviços).

Uso de recursos

Se o app precisar lidar com solicitações globalmente, considere implantar os serviços do Cloud Run em várias regiões. A implantação entre regiões pode ajudar a reduzir o custo do tráfego de transferência de dados entre continentes. O Google recomenda uma implantação entre regiões se você decidir usar um balanceador de carga e uma CDN. Para mais informações, consulte Exibir tráfego de várias regiões.

Para mais práticas recomendadas sobre como otimizar os custos dos serviços do Cloud Run, consulte Otimizar custos: computação, contêineres e sem servidor.

Desempenho de

Foco no design Recomendações
Horário de inicialização do app Para reduzir o efeito de desempenho das inicializações a frio, configure o número mínimo de instâncias de contêiner do Cloud Run como um valor diferente de zero. Para mais informações, consulte Dicas gerais de desenvolvimento para o Cloud Run.
Tempo de resposta do front-end

Se o app lidar com solicitações globalmente, para garantir respostas mais rápidas às solicitações do cliente, considere implantar os serviços do Cloud Run em várias regiões. Use um balanceador de carga global para encaminhar solicitações para a região mais próxima. Para mais informações, consulte Exibir tráfego de várias regiões.

As implantações multirregionais também podem ajudar a reduzir o volume de tráfego de saída entre continentes e, assim, reduzir o custo de operação do app.

Desempenho do banco de dados

Para aplicativos sensíveis ao desempenho, é possível melhorar o desempenho do Cloud SQL usando um tipo de máquina maior e aumentando a capacidade de armazenamento.

Se o desempenho do banco de dados for um requisito crítico, o AlloyDB para PostgreSQL será um serviço alternativo do Google Cloud que pode ser considerado.

Desempenho do cache Para melhorar a experiência de desempenho dos usuários do seu aplicativo, é possível aumentar a capacidade da instância do Memorystore para Redis. Em capacidades maiores, a capacidade de processamento da rede é maior. Para mais informações, consulte Práticas recomendadas de gerenciamento de memória.

Observe o seguinte:

  • Antes de fazer qualquer mudança no design, avalie o impacto no custo e considere possíveis vantagens e desvantagens com outros recursos. É possível avaliar o impacto de mudanças no design usando a calculadora de preços do Google Cloud.
  • Para implementar mudanças de design na solução, você precisa de experiência em programação com Terraform e conhecimento avançado dos serviços do Google Cloud usados na solução.
  • Se você modificar a configuração do Terraform fornecida pelo Google e se encontrar erros, crie problemas no GitHub. Os problemas do GitHub são analisados com base no melhor esforço e não se destinam a perguntas gerais de uso.
  • Para mais informações sobre como criar e configurar ambientes de nível de produção no Google Cloud, consulte Design da zona de destino no Google Cloud e Lista de verificação de configuração do Google Cloud.

Excluir a implantação

Quando você não precisar mais da implantação da solução, exclua a implantação para evitar o faturamento contínuo dos recursos criados.

Excluir usando o console

Use este procedimento se você tiver implantado a solução pelo console.

  1. No console do Google Cloud, acesse a página Implantações da solução.

    Acessar implantações de solução

  2. Selecione o projeto que contém a implantação que você quer excluir.

  3. Localize a implantação que você quer excluir.

  4. Clique em Ações e selecione Excluir.

  5. Digite o nome da implantação e clique em Confirmar.

    O campo Status mostra Excluindo.

    Se a exclusão falhar, consulte as orientações de solução de problemas em Erro ao excluir uma implantação.

Quando você não precisar mais do projeto do Google Cloud usado na solução, exclua-o. Para mais informações, consulte Opcional: excluir o projeto.

Excluir usando a CLI do Terraform

Use este procedimento se você implantou a solução usando a CLI do Terraform.

  1. No Cloud Shell, verifique se o diretório de trabalho atual é $HOME/cloudshell_open/terraform-google-three-tier-web-app/. Se não estiver, acesse esse diretório.

  2. Remova os recursos provisionados pelo Terraform:

    terraform destroy
    

    O Terraform exibe uma lista dos recursos que serão destruídos.

  3. Quando for solicitado que você execute as ações, digite yes.

    O Terraform exibe as mensagens que mostram o progresso. Depois que todos os recursos forem excluídos, o Terraform exibirá a seguinte mensagem:

    Destroy complete!
    

    Se a exclusão falhar, consulte as orientações de solução de problemas em Erro ao excluir uma implantação.

Quando você não precisar mais do projeto do Google Cloud usado na solução, exclua-o. Para mais informações, consulte Opcional: excluir o projeto.

Excluir o projeto

Se você tiver implantado a solução em um novo projeto do Google Cloud e não for mais usar o projeto, exclua-o seguindo estas etapas:

  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. No prompt, digite o ID do projeto e clique em Encerrar.

Se você decidir manter o projeto, exclua a conta de serviço criada para essa solução, conforme descrito na próxima seção.

Opcional: excluir a conta de serviço

Se você excluiu o projeto usado para a solução, pule esta seção.

Como mencionado anteriormente neste guia, quando você implantou a solução, uma conta de serviço foi criada em seu nome. A conta de serviço recebeu determinadas permissões do IAM temporariamente, ou seja, as permissões foram revogadas automaticamente após a conclusão das operações de implantação e exclusão da solução, mas a conta de serviço não foi excluída. O Google recomenda que você exclua essa conta de serviço.

  • Se você implantou a solução pelo console do Google Cloud, acesse a página Implantações da solução. Se você já estiver nessa página, atualize o navegador. Um processo é acionado em segundo plano para excluir a conta de serviço. Nenhuma outra ação é necessária.

  • Se você implantou a solução usando a CLI do Terraform, conclua as etapas a seguir:

    1. No Console do Google Cloud, acesse a página Contas de serviço.

      Acessar Contas de serviço

    2. Selecione o projeto usado para a solução.

    3. Selecione a conta de serviço que você quer excluir.

      O ID de e-mail da conta de serviço que foi criada para a solução está no seguinte formato:

      goog-sc-DEPLOYMENT_NAME-NNN@PROJECT_ID.iam.gserviceaccount.com
      

      O ID de e-mail contém os seguintes valores:

      • DEPLOYMENT_NAME: o nome da implantação.
      • NNN: um número aleatório de três dígitos.
      • PROJECT_ID é o ID do projeto em que você implantou a solução.
    4. Clique em Excluir.

Solucionar erros

As ações que podem ser realizadas para diagnosticar e resolver erros dependem do método de implantação e da complexidade dele.

Erros ao implantar usando o console

Se a implantação falhar quando você usar o console, faça o seguinte:

  1. Acesse a página Implantações da solução.

    Se a implantação falhou, o campo Status mostra Falha.

  2. Para ver os detalhes dos erros que causaram a falha, faça o seguinte:

    1. Clique em Ações.

    2. Selecione Ver registros do Cloud Build.

  3. Analise o registro do Cloud Build e tome as medidas apropriadas para resolver o problema que causou a falha.

Erros ao implantar usando a CLI do Terraform

Se a implantação falhar quando você usar o Terraform, a saída do comando terraform apply incluirá mensagens de erro que podem ser analisadas para diagnosticar o problema.

Os exemplos nas seções a seguir mostram erros de implantação que podem ser encontrados ao usar o Terraform.

Erro de API não ativada

Se você criar um projeto e tentar implantar imediatamente a solução no novo projeto, a implantação poderá falhar e apresentar um erro como este:

Error: Error creating Network: googleapi: Error 403: Compute Engine API has not
been used in project PROJECT_ID before or it is disabled. Enable it by visiting
https://console.developers.google.com/apis/api/compute.googleapis.com/overview?project=PROJECT_ID
then retry. If you enabled this API recently, wait a few minutes for the action
to propagate to our systems and retry.

Se esse erro ocorrer, aguarde alguns minutos e execute o comando terraform apply novamente.

Não é possível atribuir o erro do endereço solicitado

Quando você executa o comando terraform apply, pode ocorrer um erro cannot assign requested address, com uma mensagem como esta:

Error: Error creating service account:
 Post "https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts:
 dial tcp [2001:db8:ffff:ffff::5f]:443:
 connect: cannot assign requested address

Se esse erro ocorrer, execute o comando terraform apply novamente.

Erro de configuração

Se algum dos argumentos do recurso tiver valores incompatíveis, ocorrerá um erro como este:

Error: Error creating Instance: googleapi: Error 400: Provided Redis version is
not supported: REDIS_5_X
│ com.google.apps.framework.request.StatusException:
  <eye3 title='INVALID_ARGUMENT'/>
  generic::INVALID_ARGUMENT: Provided Redis version is not supported: REDIS_5_X
Details:
│ [
│   {
│     "@type": "type.googleapis.com/google.rpc.BadRequest",
│     "fieldViolations": [
│       {
│         "description": "Invalid value: REDIS_5_X",
│         "field": "instance.redis_version"
│       }
│     ]
│   }
│ ]
│
│   with google_redis_instance.main,
│   on main.tf line 96, in resource "google_redis_instance" "main":
│   96: resource "google_redis_instance" "main" {

Nesse caso, a intent usaria a versão 5 do Redis, mas o valor especificado para o argumento instance.redis_version (REDIS_5_X) no arquivo main.tf não foi válido. O valor correto é REDIS_5_0, conforme enumerado na documentação da API REST do Memorystore.

Erro ao excluir uma implantação

Em alguns casos, as tentativas de excluir uma implantação podem falhar:

  • Depois de implantar uma solução no console, se você alterar qualquer recurso provisionado por ela e tentar excluir a implantação, a exclusão poderá falhar. O campo Status na página Implantações da solução mostra Com falha e o registro do Cloud Build mostra a causa do erro.
  • Depois de implantar uma solução usando a CLI do Terraform, se você alterar qualquer recurso usando uma interface diferente do Terraform (por exemplo, o console) e, em seguida, tentar excluir a implantação, a exclusão poderá falhar. As mensagens na saída do comando terraform destroy mostram a causa do erro.

Revise os registros de erro e as mensagens, identifique e exclua os recursos que causaram o erro e tente excluir a implantação novamente.

Se uma implantação baseada em console não for excluída e não for possível diagnosticar o erro usando o registro do Cloud Build, será possível excluir a implantação usando a CLI do Terraform, conforme descrito na próxima seção.

Excluir uma implantação com base no console usando a CLI do Terraform

Nesta seção, descrevemos como excluir uma implantação baseada em console em caso de erros ao tentar excluí-la no console. Nesta abordagem, faça o download da configuração do Terraform para a implantação que você quer excluir e use a CLI do Terraform para excluir a implantação.

  1. Identifique a região em que o código, os registros e outros dados do Terraform da implantação são armazenados. Essa região pode ser diferente da região selecionada durante a implantação da solução.

    1. No console do Google Cloud, acesse a página Implantações de soluções.

      Acessar implantações de solução

    2. Selecione o projeto que contém a implantação que você quer excluir.

    3. Na lista de implantações, identifique a linha da implantação que você quer excluir.

    4. Clique em Consultar todo o conteúdo da linha.

    5. Na coluna Local, observe o segundo local, conforme destacado no exemplo a seguir:

      Localização do código de implantação, registros e outros artefatos.

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

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  3. Crie variáveis de ambiente para o ID do projeto, a região e o nome da implantação que você quer excluir:

    export REGION="REGION"
    export PROJECT_ID="PROJECT_ID"
    export DEPLOYMENT_NAME="DEPLOYMENT_NAME"
    

    Nesses comandos, substitua o seguinte:

    • REGION: o local que você anotou anteriormente neste procedimento.
    • PROJECT_ID: o ID do projeto em que você implantou a solução.
    • DEPLOYMENT_NAME: o nome da implantação que você quer excluir.
  4. Encontre o ID da revisão mais recente da implantação que você quer excluir:

    export REVISION_ID=$(curl \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}" \
        | jq .latestRevision -r)
        echo $REVISION_ID
    

    O resultado será assim:

    projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME/revisions/r-0
    
  5. Encontre o local do Cloud Storage na configuração do Terraform para a implantação:

    export CONTENT_PATH=$(curl \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/${REVISION_ID}" \
        | jq .applyResults.content -r)
        echo $CONTENT_PATH
    

    Veja a seguir um exemplo da saída desse comando:

    gs://PROJECT_ID-REGION-blueprint-config/DEPLOYMENT_NAME/r-0/apply_results/content
    
  6. Faça o download da configuração do Terraform do Cloud Storage para o Cloud Shell:

    gsutil cp -r $CONTENT_PATH $HOME
    cd $HOME/content/
    

    Aguarde até que a mensagem Operation completed seja exibida, conforme mostrado no exemplo a seguir:

    Operation completed over 45 objects/268.5 KiB
    
  7. Inicialize o Terraform:

    terraform init
    

    Aguarde até ver a seguinte mensagem:

    Terraform has been successfully initialized!
    
  8. Remova os recursos implantados:

    terraform destroy
    

    O Terraform exibe uma lista dos recursos que serão destruídos.

    Se forem exibidos avisos sobre variáveis não declaradas, ignore-os.

  9. Quando for solicitado que você execute as ações, digite yes.

    O Terraform exibe as mensagens que mostram o progresso. Depois que todos os recursos forem excluídos, o Terraform exibirá a seguinte mensagem:

    Destroy complete!
    
  10. Exclua o artefato de implantação:

    curl -X DELETE \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}?force=true&delete_policy=abandon"
    
  11. Aguarde alguns segundos e verifique se o artefato de implantação foi excluído:

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}" \
        | jq .error.message
    

    Se a saída mostrar null, aguarde alguns segundos e execute o comando novamente.

    Depois que o artefato de implantação for excluído, uma mensagem, como mostrado no exemplo a seguir, será exibida:

    Resource 'projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME' was not found
    

Enviar feedback

As Soluções de início rápido são apenas para fins informativos e não são produtos oficialmente compatíveis. O Google pode alterar ou remover soluções sem aviso prévio.

Para resolver erros, analise os registros do Cloud Build e a saída do Terraform.

Para enviar feedback, faça o seguinte:

  • Para ver a documentação, os tutoriais no console ou a solução, use o botão Enviar feedback na página.
  • Para código não modificado do Terraform, crie problemas no repositório do GitHub. Os problemas do GitHub são analisados com base no melhor esforço e não se destinam a perguntas gerais de uso.

A seguir

Consulte a documentação a seguir para saber mais sobre as práticas recomendadas de arquitetura e operação dos produtos usados nesta solução: