Solução de arranque rápido: app Web de três camadas

Last reviewed 2024-10-08 UTC

Este guia ajuda a compreender e implementar a solução de início rápido da app Web de três camadas, que demonstra como implementar rapidamente uma pilha de aplicações Web de várias camadas no Google Cloud.

A solução de app Web de três camadas implementa uma app de acompanhamento de tarefas emGoogle Cloud. A app tem um frontend baseado na Web e uma camada de API na camada intermédia. As camadas de frontend e API são apps contentorizadas implementadas como serviços sem servidor. O back-end é uma base de dados SQL. A solução também inclui uma cache na memória para fornecer dados acedidos frequentemente. Cada nível nesta solução é independente. Pode desenvolver, atualizar e dimensionar qualquer nível sem afetar os outros níveis. Esta arquitetura permite o desenvolvimento e a publicação eficientes de apps.

Este guia destina-se a programadores com alguma experiência na implementação de pilhas de apps de vários níveis. Parte do princípio de que está familiarizado com os conceitos básicos da nuvem, embora não necessariamente Google Cloud. A experiência com o Terraform é útil.

Produtos usados

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

  • Cloud Run: um serviço totalmente gerido que lhe permite criar e implementar apps contentorizadas sem servidor.O Google Cloud processa o dimensionamento e outras tarefas de infraestrutura para que se possa concentrar na lógica empresarial do seu código.
  • Cloud SQL: uma base de dados MySQL ou PostgreSQL totalmente gerida no Google Cloud.
  • Memorystore for Redis: Um serviço que fornece colocação em cache de aplicações através de um serviço na memória escalável, seguro e altamente disponível para Redis e Memcached.
  • Rede da nuvem virtual privada (VPC): Uma rede virtual global que abrange todas as Google Cloud regiões e que permite interligar os seus recursos na nuvem.

Para obter informações sobre como estes produtos estão configurados e como interagem, consulte a secção seguinte.

Arquitetura

A app de exemplo que a solução de app Web de três camadas implementa é uma app de acompanhamento de tarefas para a qual o código já existe. O diagrama seguinte mostra a arquitetura da infraestrutura que a solução implementa:

Arquitetura da infraestrutura necessária para a solução de app Web de três camadas.

As subsecções seguintes descrevem o fluxo de pedidos e a configuração dos recursosGoogle Cloud que são apresentados no diagrama.

Fluxo de pedidos

Segue-se o fluxo de processamento de pedidos da app de monitorização de tarefas que esta solução implementa. Os passos no fluxo estão numerados, conforme mostrado no diagrama de arquitetura anterior.

  1. Um front-end baseado na Web recebe pedidos de clientes para a app de acompanhamento de tarefas. O front-end é um serviço do Cloud Run, que renderiza um cliente HTML no navegador do utilizador.
  2. O front-end envia pedidos para uma camada de API, que também é implementada como um serviço do Cloud Run.
  3. Os dados que são lidos com frequência são colocados em cache e disponibilizados a partir de uma instância do Memorystore for Redis.
  4. Os pedidos que não podem ser processados a partir da cache Redis na memória são enviados pela camada da API para uma base de dados do Cloud SQL.

Configuração de recursos

Esta secção descreve a configuração dos recursos do Cloud Run, do Memorystore, do Cloud SQL e de rede que a solução implementa. Se estiver familiarizado com a linguagem de configuração do Terraform, pode alterar algumas destas definições, conforme descrito mais adiante neste guia.

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

Serviços do Cloud Run

Parâmetro Definição pré-configurada
Capacidade de computação por instância de contentor 1 vCPU, 512 MiB de memória
Intervalo de dimensionamento automático (número de instâncias de contentores)

Front-end: 0-8

Camada da API: 0-8

Instância do Memorystore for Redis

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

Em repouso: Google-owned and Google-managed encryption key

Em trânsito: não encriptado

Base de dados do Cloud SQL

Parâmetro Definição pré-configurada
Versão da base de dados PostgreSQL 14 ou MySQL 8.0
Tipo de máquina db-g1-small: 1 vCPU, 1,7 GB de memória
Disponibilidade Zona única
Armazenamento SSD de 10 GB com escalabilidade automática ativada

Recursos de redes

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

O Acesso a VPC sem servidor fornece conetividade da instância do Cloud Run que aloja a camada da API à instância do Cloud SQL. Os pedidos do serviço Cloud Run para a instância do Cloud SQL usam DNS interno e endereços IP internos. O tráfego de respostas também usa a rede interna. Por outras palavras, o tráfego entre a app e a base de dados não é exposto à Internet. Além disso, o tráfego através do Acesso a VPC sem servidor pode ter uma latência inferior à do tráfego que atravessa a Internet.

A conetividade entre a instância do Memorystore e a base de dados do Cloud SQL é feita através de uma ligação de peering direto.

Custo

Para uma estimativa do custo dos Google Cloud recursos que a solução de app Web de três camadas usa, consulte a estimativa pré-calculada na Google Cloud calculadora de preços.

Use a estimativa como ponto de partida para calcular o custo da implementação. Pode modificar a estimativa para refletir quaisquer alterações de configuração que planeie fazer aos recursos usados na solução.

A estimativa pré-calculada baseia-se em pressupostos para determinados fatores, incluindo o seguinte:

  • As Google Cloud localizações onde os recursos são implementados.
  • O tempo durante o qual os recursos são usados.

Antes de começar

Para implementar esta solução, primeiro, precisa de um Google Cloud projeto e de algumas autorizações da IAM.

Crie ou escolha um Google Cloud projeto

Quando implementa a solução, escolhe o Google Cloud projeto onde os recursos são implementados. Pode criar um novo projeto ou usar um projeto existente para a implementação.

Se quiser criar um novo projeto, faça-o antes de iniciar a implementação. A utilização de um novo projeto pode ajudar a evitar conflitos com recursos aprovisionados anteriormente, como recursos usados para cargas de trabalho de produção.

Para criar um projeto, conclua os seguintes passos:

  1. Ensure that you have the Project Creator IAM role (roles/resourcemanager.projectCreator). Learn how to grant roles.
  2. In the Google Cloud console, go to the project selector page.

    Go to project selector

  3. Click Create project.

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

  5. Edit the other fields as needed.

  6. Click Create.

Obtenha as autorizações de IAM necessárias

Para iniciar o processo de implementação, precisa das autorizações da gestão de identidade e de acesso (IAM) indicadas na tabela seguinte.

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

Autorização de IAM necessária Função predefinida que inclui as autorizações necessárias

serviceusage.services.enable

Administrador de utilização de serviços
(roles/serviceusage.serviceUsageAdmin)

iam.serviceAccounts.create

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

resourcemanager.projects.setIamPolicy

Project IAM Admin
(roles/resourcemanager.projectIamAdmin)
config.deployments.create
config.deployments.list
Administrador do Cloud Infrastructure Manager
(roles/config.admin)
iam.serviceAccount.actAs Utilizador da conta de serviço
(roles/iam.serviceAccountUser)

Acerca das autorizações temporárias da conta de serviço

Se iniciar o processo de implementação através da consola, a Google cria uma conta de serviço para implementar a solução em seu nome (e para eliminar a implementação mais tarde, se quiser). A esta conta de serviço são atribuídas determinadas autorizações da IAM temporariamente, ou seja, as autorizações são revogadas automaticamente após a conclusão das operações de implementação e eliminação da solução. A Google recomenda que, depois de eliminar a implementação, elimine a conta de serviço, conforme descrito mais adiante neste guia.

Veja as funções atribuídas à conta de serviço

Estes papéis estão listados aqui caso um administrador do seu projeto ou organização precise destas informações.Google Cloud

  • 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

Implemente a solução

Para ajudar a implementar esta solução com o mínimo de esforço, é disponibilizada uma configuração do Terraform no GitHub. A configuração do Terraform define todos os Google Cloud recursos necessários para a solução.

Pode implementar a solução através de um dos seguintes métodos:

  • Através da consola: use este método se quiser experimentar a solução com a configuração predefinida e ver como funciona. O Cloud Build implementa todos os recursos necessários para a solução. Quando já não precisar da solução implementada, pode eliminá-la através da consola. Quaisquer recursos que criar depois de implementar a solução podem ter de ser eliminados separadamente.

    Para usar este método de implementação, siga as instruções em Implemente através da consola.

  • Usando a CLI do Terraform: use este método se quiser personalizar a solução ou se quiser automatizar o aprovisionamento e a gestão dos recursos usando a abordagem de infraestrutura como código (IaC). Transfira a configuração do Terraform a partir do GitHub, personalize opcionalmente o código conforme necessário e, em seguida, implemente a solução através da CLI do Terraform. Depois de implementar a solução, pode continuar a usar o Terraform para gerir a solução.

    Para usar este método de implementação, siga as instruções em Implemente através da CLI do Terraform.

Implemente através da consola

Conclua os passos seguintes para implementar a solução pré-configurada.

  1. No Google Cloud catálogo de soluções de arranque rápido, aceda à solução app Web de três camadas.

    Aceda à solução de app Web de três camadas

  2. Reveja as informações apresentadas na página, como o custo estimado da solução e o tempo de implementação estimado.

  3. Quando tiver tudo pronto para começar a implementar a solução, clique em Implementar.

    É apresentado um painel de configuração passo a passo.

  4. Conclua os passos no painel de configuração.

    Tome nota do nome que introduz para a implementação. Este nome é necessário mais tarde quando eliminar a implementação.

    Quando clica em Implementar, é apresentada a página Implementações de soluções. O campo Estado nesta página mostra Implementação.

  5. Aguarde a implementação da solução.

    Se a implementação falhar, o campo Estado apresenta Falhou. Pode usar o registo do Cloud Build para diagnosticar os erros. Para mais informações, consulte Erros ao implementar através da consola.

    Após a conclusão da implementação, o campo Estado é alterado para Implementado.

  6. Para ver e usar a app de acompanhamento de tarefas que esta solução implementa, clique em Ações na página Implementações de soluções e, de seguida, selecione Ver app Web.

    A página Web de front-end da app de gestão de tarefas é apresentada num novo separador do navegador.

  7. Para ver os Google Cloud recursos implementados e a respetiva configuração, faça uma visita guiada interativa.

    Iniciar visita guiada

Quando já não precisar da solução, pode eliminar a implementação para evitar a faturação contínua dos Google Cloud recursos. Para mais informações, consulte Elimine a implementação.

Faça a implementação através da CLI do Terraform

Esta secção descreve como pode personalizar a solução ou automatizar o aprovisionamento e a gestão da solução através da CLI do Terraform. As soluções implementadas através da CLI do Terraform não são apresentadas na página Implementações de soluções na Google Cloud consola.

Configure o cliente do Terraform

Pode executar o Terraform no Cloud Shell ou no seu anfitrião local. Este guia descreve 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 num repositório do GitHub.

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

    Abra no Cloud Shell

    É apresentada uma mensagem para confirmar a transferência do repositório do GitHub para o Cloud Shell.

  2. Clique em Confirm.

    O Cloud Shell é iniciado num separador do navegador separado e o código do Terraform é transferido 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/. Este é o diretório que contém os ficheiros de configuração do Terraform para a solução. Se precisar de alterar 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!
    

Configure as variáveis do Terraform

O código do Terraform que transferiu inclui variáveis que pode usar para personalizar a implementação com base nos seus requisitos. Por exemplo, pode especificar o Google Cloud projeto e aregião onde quer que a solução seja implementada.

  1. Certifique-se de que o diretório de trabalho atual é $HOME/cloudshell_open/terraform-google-three-tier-web-app/. Se não for, aceda a esse diretório.

  2. No mesmo diretório, crie um ficheiro de texto com o nome terraform.tfvars.

  3. No ficheiro terraform.tfvars, copie o seguinte fragmento do código e defina os valores para as variáveis necessárias.

    • Siga as instruções fornecidas como comentários no fragmento de código.
    • Este fragmento do código inclui apenas as variáveis para as quais tem de definir valores. A configuração do Terraform inclui outras variáveis que têm valores predefinidos. Para rever todas as variáveis e os valores predefinidos, consulte o ficheiro variables.tf que está disponível no diretório $HOME/cloudshell_open/terraform-google-three-tier-web-app/.
    • Certifique-se de que cada valor que define no ficheiro terraform.tfvars corresponde ao tipo de variável, conforme declarado no ficheiro variables.tf. Por exemplo, se o tipo definido para uma variável no ficheiro variables.tf for bool, tem de especificar true ou false como o valor dessa variável no ficheiro 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 obter informações sobre os valores que pode atribuir às variáveis obrigatórias, consulte o seguinte:

Valide e reveja a configuração do Terraform

  1. Certifique-se de que o diretório de trabalho atual é $HOME/cloudshell_open/terraform-google-three-tier-web-app/. Se não for, aceda a esse diretório.

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

    terraform validate
    

    Se o comando devolver erros, faça as correções necessárias na configuração e, em seguida, execute novamente o comando terraform validate. Repita este passo até o comando devolver a seguinte mensagem:

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

    terraform plan
    
  4. Se não criou o ficheiro terraform.tfvars conforme descrito anteriormente, o Terraform pede-lhe que introduza valores para as variáveis que não têm valores predefinidos. Introduza os valores obrigatórios.

    O resultado do comando terraform plan é uma lista dos recursos que o Terraform aprovisiona quando aplica a configuração.

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

Aprovisione os recursos

Quando não forem necessárias mais alterações na configuração do Terraform, implemente os recursos.

  1. Certifique-se de que o diretório de trabalho atual é $HOME/cloudshell_open/terraform-google-three-tier-web-app/. Se não for, aceda a esse diretório.

  2. Aplique a configuração do Terraform:

    terraform apply
    
  3. Se não criou o ficheiro terraform.tfvars conforme descrito anteriormente, o Terraform pede-lhe que introduza valores para as variáveis que não têm valores predefinidos. Introduza os valores obrigatórios.

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

  4. Quando lhe for pedido para realizar as ações, introduza yes.

    O Terraform apresenta mensagens que mostram o progresso da implementação.

    Se não for possível concluir a implementação, o Terraform apresenta os erros que causaram a falha. Reveja as mensagens de erro e atualize a configuração para corrigir os erros. Em seguida, execute novamente o comando terraform apply. Para obter ajuda na resolução de problemas de erros do Terraform, consulte o artigo Erros ao implementar a solução com a CLI do Terraform.

    Depois de criar todos os recursos, o Terraform apresenta a seguinte mensagem:

    Apply complete!
    

    O resultado do Terraform também apresenta o URL do front-end da app task-tracker (endpoint) e o nome da instância do Cloud SQL (sqlservername), conforme mostrado no exemplo seguinte:

    endpoint = "https://three-tier-app-fe-pn4ngg7gnq-uc.a.run.app"
    sqlservername = "three-tier-app-db-75c2"
    
  5. Para ver e usar a app de acompanhamento de tarefas implementada pela solução, copie o URL endpoint do passo anterior e abra-o num navegador.

    A página Web de front-end da app de gestão de tarefas é apresentada num novo separador do navegador.

  6. Para ver os Google Cloud recursos implementados e a respetiva configuração, faça uma visita guiada interativa.

    Iniciar visita guiada

Quando já não precisar da solução, pode eliminar a implementação para evitar a faturação contínua dos Google Cloud recursos. Para mais informações, consulte Elimine a implementação.

Personalize a solução

Esta secção fornece informações que os programadores do Terraform podem usar para modificar a solução de app Web de três camadas de forma a satisfazer os seus próprios requisitos técnicos e empresariais. As orientações nesta secção só são relevantes se implementar a solução através da CLI do Terraform.

A secção Configuração de recursos (anteriormente neste guia) apresenta os parâmetros pré-configurados dos recursos que a solução de app Web de três camadas aprovisiona.Google Cloud Pode personalizar a solução alterando alguns parâmetros no ficheiro main.tf.

Para personalizar a solução, conclua os seguintes passos no Cloud Shell:

  1. Certifique-se de que o diretório de trabalho atual é $HOME/cloudshell_open/terraform-google-three-tier-web-app/. Se não for, aceda a esse diretório.

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

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

    Fragmento do código

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

    Fragmento do código

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

    Cuidado: a configuração do Terraform fornecida pela Google foi validada para a versão 6.x do Redis. Se alterar a versão, a solução implementada pode não funcionar como previsto.

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

    Fragmento do código

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

    Fragmento do código

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

    Fragmento do código

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

    Aviso: a configuração do Terraform fornecida pela Google foi validada para a versão 14 do PostgreSQL e a versão 8.0 do MySQL. Se alterar a versão, a solução implementada pode não funcionar conforme previsto.

    Tipo de máquina da base de dados Argumento no ficheiro main.tf: settings.tier

    Fragmento do código

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

    Fragmento do código

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

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

  4. Aprovisione os recursos.

Recomendações de design

Esta secção fornece recomendações para usar a solução de app Web de três camadas para desenvolver uma arquitetura que cumpra os seus requisitos de segurança, fiabilidade, custo e desempenho.

Para ver as recomendações de design para cada área, clique no separador adequado.

Segurança do dispositivo

Foco no design Recomendações
Encriptação de dados
  • Por predefinição, o Cloud Run encripta os dados através de uma Google-owned and Google-managed encryption key. Para proteger os seus contentores através de uma chave que controla, pode usar chaves de encriptação geridas pelo cliente. Para mais informações, consulte o artigo Usar chaves de encriptação geridas pelo cliente .
  • Por predefinição, o Memorystore usa Google-owned and Google-managed encryption keys para encriptar os dados em repouso. Para encriptar dados através de uma chave que controla, pode usar chaves de encriptação geridas pelo cliente. Para mais informações, consulte o artigo Acerca das chaves de encriptação geridas pelo cliente (CMEK).
  • Pode ativar a encriptação de dados em trânsito no Memorystore através do protocolo Transport Layer Security (TLS). Para mais informações, consulte o artigo Acerca da encriptação em trânsito.
Segurança da cadeia de abastecimento de software Para garantir que apenas as imagens de contentores autorizadas são implementadas nos serviços do Cloud Run, pode usar a autorização binária.
Controlo de acesso
  • O serviço do Cloud Run que executa a camada da API permite a entrada de qualquer origem. Para maior segurança, pode restringir a entrada para permitir tráfego apenas de fontes internas. Para mais informações, consulte o artigo Restringir a entrada para o Cloud Run.
  • Para proteger a sua aplicação contra o acesso não autorizado, pode ativar a funcionalidade AUTH no Memorystore, para que as ligações de clientes recebidas sejam autenticadas. Para mais informações, consulte o artigo Acerca da autenticação Redis.

Fiabilidade

Foco no design Recomendações
Dimensionamento de apps Os serviços do Cloud Run na solução estão configurados para criar uma escala automática das instâncias de contentores horizontalmente com base na carga de pedidos. Reveja e ajuste os parâmetros de escalabilidade automática com base nos seus requisitos. Para mais informações, consulte o artigo Acerca do dimensionamento automático de instâncias de contentores.
Processamento de pedidos Para melhorar a capacidade de resposta dos serviços do Cloud Run que armazenam o estado específico do cliente em instâncias de contentores, pode usar a afinidade de sessão. As solicitações do mesmo cliente são encaminhadas para a mesma instância do contentor, com base no melhor esforço. Para mais informações, consulte o artigo Definir afinidade de sessão (serviços).
Durabilidade dos dados Para proteger os seus dados contra perdas, pode usar cópias de segurança automáticas da base de dados do Cloud SQL. Para mais informações, consulte o artigo Acerca das cópias de segurança do Cloud SQL.
Alta disponibilidade (HA) da base de dados

A base de dados do Cloud SQL na solução é implementada numa única zona. Para a HA, pode usar uma configuração de várias zonas. Para mais informações, consulte o artigo Acerca da elevada disponibilidade.

Se a HA da base de dados for um requisito crítico, o AlloyDB para PostgreSQL é um serviço Google Cloud alternativo que pode considerar.

Fiabilidade da base de dados

A instância do Cloud SQL nesta solução usa o tipo de máquina db-g1-small, que usa uma CPU com núcleo partilhado. Este tipo de máquina foi concebido para fornecer recursos para uma base de dados de baixo custo que pode ser adequado apenas para ambientes de teste e desenvolvimento. Se precisar de fiabilidade ao nível da produção, considere usar um tipo de máquina que ofereç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 as configurações excluídas do SLA, consulte as diretrizes operacionais.

Cache HA Para ajudar a garantir a HA para a camada de cache na memória nesta solução, pode usar o nível Standard do Memorystore para Redis. O serviço cria réplicas de leitura para operações de leitura distribuídas e oferece uma comutação por falha automática. Para mais informações, consulte o artigo Capacidades do nível do Redis.

Custo

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

O Cloud Run determina o número de pedidos que devem ser enviados para uma instância de contentor com base na utilização da CPU e na utilização de memória. Ao aumentar a definição de simultaneidade máxima, pode reduzir o número de instâncias de contentores que o Cloud Run precisa de criar e, por conseguinte, reduzir o custo. Para mais informações, consulte o artigo Máximo de pedidos concorrentes por instância (serviços).

Os serviços do Cloud Run nesta solução estão configurados para alocar CPUs apenas durante o processamento de pedidos. Quando um serviço do Cloud Run termina de processar um pedido, o acesso da instância do contentor aos processadores é desativado. Para ver informações acerca do custo e do efeito no desempenho desta configuração, consulte o artigo Alocação de CPU (serviços).

Utilização de recursos

Se a sua app precisar de processar pedidos globalmente, considere implementar os serviços do Cloud Run em várias regiões. A implementação em várias regiões pode ajudar a reduzir o custo do tráfego de transferência de dados entre continentes. A Google recomenda uma implementação em várias regiões se decidir usar um equilibrador de carga e uma RFC. Para mais informações, consulte o artigo Apresente tráfego de várias regiões.

Desempenho de

Foco no design Recomendações
Tempo de arranque da app Para reduzir o efeito no desempenho dos inícios a frio, pode configurar o número mínimo de instâncias de contentores do Cloud Run para um valor diferente de zero. Para mais informações, consulte as Sugestões gerais de desenvolvimento para o Cloud Run.
Tempo de resposta do front-end

Se a sua app processa pedidos a nível global, para ajudar a garantir respostas mais rápidas aos pedidos dos clientes, considere implementar os serviços do Cloud Run em várias regiões. Pode usar um balanceador de carga global para encaminhar pedidos para a região mais próxima. Para mais informações, consulte o artigo Apresente tráfego de várias regiões.

As implementações multirregionais também podem ajudar a reduzir o volume de tráfego de saída entre continentes e, por conseguinte, reduzir o custo de funcionamento da app.

Desempenho da base de dados

Para aplicações sensíveis ao desempenho, pode melhorar o desempenho do Cloud SQL usando um tipo de máquina maior e aumentando a capacidade de armazenamento.

Se o desempenho da base de dados for um requisito crítico, o AlloyDB for PostgreSQL é um serviço Google Cloud alternativo que pode considerar.

Desempenho da cache Para melhorar a experiência de desempenho dos utilizadores da sua app, pode aumentar a capacidade da instância do Memorystore para Redis. Com capacidades maiores, a taxa de transferência da rede é mais elevada. Para mais informações, consulte o artigo Práticas recomendadas de gestão de memória.

Tenha em conta o seguinte:

  • Antes de fazer alterações ao design, avalie o impacto nos custos e pondere possíveis compromissos com outras funcionalidades. Pode avaliar o impacto dos custos das alterações de design através da Google Cloud calculadora de preços.
  • Para implementar alterações de design na solução, precisa de experiência em programação do Terraform e conhecimentos avançados dos Google Cloud serviços usados na solução.
  • Se modificar a configuração do Terraform fornecida pela Google e, em seguida, tiver erros, crie problemas no GitHub. Os problemas do GitHub são revistos com base no melhor esforço e não se destinam a perguntas de utilização geral.
  • Para mais informações sobre a conceção e a configuração de ambientes de nível de produção no Google Cloud, consulte Conceção da zona de destino no Google Cloud e Google Cloud lista de verificação de configuração.

Elimine a implementação

Quando já não precisar da implementação da solução, para evitar a faturação contínua dos recursos que criou, elimine a implementação.

Elimine-o através da consola

Use este procedimento se implementou a solução através da consola.

  1. Na Google Cloud consola, aceda à página Implementações de soluções.

    Aceda a Implementações de soluções

  2. Selecione o projeto que contém a implementação que quer eliminar.

  3. Localize a implementação que quer eliminar.

  4. Na linha da implementação, clique em Ações e, de seguida, selecione Eliminar.

    Pode ter de deslocar a página para ver Ações na linha.

  5. Introduza o nome da implementação e, de seguida, clique em Confirmar.

    O campo Estado mostra A eliminar.

    Se a eliminação falhar, consulte as orientações de resolução de problemas em Erro ao eliminar uma implementação.

Quando já não precisar do Google Cloud projeto que usou para a solução, pode eliminá-lo. Para mais informações, consulte a secção Opcional: elimine o projeto.

Elimine através da CLI do Terraform

Use este procedimento se tiver implementado a solução através da CLI do Terraform.

  1. No Cloud Shell, certifique-se de que o diretório de trabalho atual é $HOME/cloudshell_open/terraform-google-three-tier-web-app/. Se não for, aceda a esse diretório.

  2. Remova os recursos aprovisionados pelo Terraform:

    terraform destroy
    

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

  3. Quando lhe for pedido para realizar as ações, introduza yes.

    O Terraform apresenta mensagens que mostram o progresso. Depois de todos os recursos serem eliminados, o Terraform apresenta a seguinte mensagem:

    Destroy complete!
    

    Se a eliminação falhar, consulte as orientações de resolução de problemas em Erro ao eliminar uma implementação.

Quando já não precisar do Google Cloud projeto que usou para a solução, pode eliminá-lo. Para mais informações, consulte a secção Opcional: elimine o projeto.

Opcional: elimine o projeto

Se implementou a solução num novo Google Cloud projeto e já não precisa do projeto, elimine-o concluindo os seguintes passos:

  1. Na Google Cloud consola, aceda à página Gerir recursos.

    Aceda a Gerir recursos

  2. Na lista de projetos, selecione o projeto que quer eliminar e, de seguida, clique em Eliminar.
  3. Na mensagem, escreva o ID do projeto e, de seguida, clique em Encerrar.

Se decidir manter o projeto, elimine a conta de serviço que foi criada para esta solução, conforme descrito na secção seguinte.

Opcional: elimine a conta de serviço

Se eliminou o projeto que usou para a solução, ignore esta secção.

Conforme mencionado anteriormente neste guia, quando implementou a solução, foi criada uma conta de serviço em seu nome. Foram atribuídas determinadas autorizações do IAM à conta de serviço temporariamente, ou seja, as autorizações foram revogadas automaticamente após a conclusão das operações de implementação e eliminação da solução, mas a conta de serviço não é eliminada. A Google recomenda que elimine esta conta de serviço.

  • Se implementou a solução através da Google Cloud consola, aceda à página Implementações de soluções. (Se já estiver nessa página, atualize o navegador.) É acionado um processo em segundo plano para eliminar a conta de serviço. Não é necessária nenhuma ação adicional.

  • Se implementou a solução através da CLI do Terraform, conclua os seguintes passos:

    1. Na Google Cloud consola, aceda à página Contas de serviço.

      Aceda a Contas de serviço

    2. Selecione o projeto que usou para a solução.

    3. Selecione a conta de serviço que quer eliminar.

      O ID de email 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 do email contém os seguintes valores:

      • DEPLOYMENT_NAME: o nome da implementação.
      • NNN: um número aleatório de 3 dígitos.
      • PROJECT_ID: o ID do projeto no qual implementou a solução.
    4. Clique em Eliminar.

Resolva problemas de erros

As ações que pode realizar para diagnosticar e resolver erros dependem do método de implementação e da complexidade do erro.

Erros ao implementar através da consola

Se a implementação falhar quando usa a consola, faça o seguinte:

  1. Aceda à página Implementações de soluções.

    Se a implementação falhar, o campo Estado apresenta Falhou.

  2. Veja os detalhes dos erros que causaram a falha:

    1. Na linha da implementação, clique em Ações.

      Pode ter de deslocar a página para ver Ações na linha.

    2. Selecione Ver registos do Cloud Build.

  3. Reveja o registo do Cloud Build e tome as medidas adequadas para resolver o problema que causou a falha.

Erros ao implementar através da CLI do Terraform

Se a implementação falhar quando usa o Terraform, o resultado do comando terraform apply inclui mensagens de erro que pode rever para diagnosticar o problema.

Os exemplos nas secções seguintes mostram erros de implementação que pode encontrar quando usa o Terraform.

Erro de API não ativada

Se criar um projeto e, de seguida, tentar implementar a solução no novo projeto, a implementação pode falhar com um erro semelhante ao seguinte:

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 este erro ocorrer, aguarde alguns minutos e, em seguida, execute novamente o comando terraform apply.

Não é possível atribuir o erro de endereço pedido

Quando executa o comando terraform apply, pode ocorrer um erro cannot assign requested address com uma mensagem semelhante à seguinte:

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 este erro ocorrer, execute novamente o comando terraform apply.

Erro de configuração

Se algum dos argumentos de recursos tiver valores não suportados, ocorre um erro semelhante ao seguinte:

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" {

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

Erro ao eliminar uma implementação

Em determinados casos, as tentativas de eliminar uma implementação podem falhar:

  • Após implementar uma solução através da consola, se alterar qualquer recurso aprovisionado pela solução e, em seguida, tentar eliminar a implementação, a eliminação pode falhar. O campo Estado na página Implementações de soluções mostra Falhou e o registo do Cloud Build mostra a causa do erro.
  • Depois de implementar uma solução através da CLI do Terraform, se alterar qualquer recurso através de uma interface não pertencente ao Terraform (por exemplo, a consola) e, em seguida, tentar eliminar a implementação, a eliminação pode falhar. As mensagens no resultado do comando terraform destroy mostram a causa do erro.

Reveja os registos e as mensagens de erro, identifique e elimine os recursos que causaram o erro e, de seguida, tente eliminar a implementação novamente.

Se uma implementação baseada na consola não for eliminada e não conseguir diagnosticar o erro através do registo do Cloud Build, pode eliminar a implementação através da CLI do Terraform, conforme descrito na secção seguinte.

Elimine uma implementação baseada na consola através da CLI do Terraform

Esta secção descreve como eliminar uma implementação baseada na consola se ocorrerem erros quando tentar eliminá-la através da consola. Nesta abordagem, transfere a configuração do Terraform para a implementação que quer eliminar e, em seguida, usa a CLI do Terraform para eliminar a implementação.

  1. Identifique a região onde o código, os registos e outros dados do Terraform da implementação são armazenados. Esta região pode ser diferente da região que selecionou durante a implementação da solução.

    1. Na Google Cloud consola, aceda à página Implementações de soluções.

      Aceda a Implementações de soluções

    2. Selecione o projeto que contém a implementação que quer eliminar.

    3. Na lista de implementações, identifique a linha da implementação que quer eliminar.

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

    5. Na coluna Localização, repare na segunda localização, conforme realçado no exemplo seguinte:

      Localização do código de implementação, registos e outros artefactos.

  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 implementação que quer eliminar:

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

    Nestes comandos, substitua o seguinte:

    • REGION: a localização que indicou anteriormente neste procedimento.
    • PROJECT_ID: o ID do projeto onde implementou a solução.
    • DEPLOYMENT_NAME: o nome da implementação que quer eliminar.
  4. Obtenha o ID da revisão mais recente da implementação que quer eliminar:

    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 é semelhante ao seguinte:

    projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME/revisions/r-0
    
  5. Obtenha a localização do Cloud Storage da configuração do Terraform para a implementaçã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
    

    Segue-se um exemplo do resultado deste comando:

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

    gcloud storage cp $CONTENT_PATH $HOME --recursive
    cd $HOME/content/
    

    Aguarde até que a mensagem Operation completed seja apresentada, conforme mostrado no exemplo seguinte:

    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 implementados:

    terraform destroy
    

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

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

  9. Quando lhe for pedido para realizar as ações, introduza yes.

    O Terraform apresenta mensagens que mostram o progresso. Depois de todos os recursos serem eliminados, o Terraform apresenta a seguinte mensagem:

    Destroy complete!
    
  10. Elimine o artefacto de implementaçã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, em seguida, verifique se o artefacto de implementação foi eliminado:

    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 o resultado apresentar null, aguarde alguns segundos e, em seguida, execute o comando novamente.

    Após a eliminação do artefacto de implementação, é apresentada uma mensagem, conforme mostrado no exemplo seguinte:

    Resource 'projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME' was not found
    
  12. Enviar feedback

    As soluções de arranque rápido destinam-se apenas a fins informativos e não são produtos oficialmente suportados. A Google pode alterar ou remover soluções sem aviso prévio.

    Para resolver problemas de erros, reveja os registos do Cloud Build e o resultado do Terraform.

    Para enviar feedback, faça o seguinte:

    • Para aceder à documentação, aos tutoriais na consola ou à solução, use o botão Enviar feedback na página.
    • Para código Terraform não modificado, crie problemas no repositório do GitHub. Os problemas do GitHub são revistos com base no melhor esforço e não se destinam a perguntas de utilização geral.

    O que se segue?

    Reveja a seguinte documentação para saber mais sobre as práticas recomendadas arquitetónicas e operacionais para os produtos usados nesta solução: