Este guia ajuda você a entender, implantar e usar a solução de plataforma de comércio eletrônico com computação sem servidor. Esta solução demonstra como criar e executar um aplicativo de comércio eletrônico para uma organização de varejo, com um site da sua loja on-line visível publicamente. Ela mostra como criar um aplicativo que pode ser escalonado para lidar com picos de uso (por exemplo, durante eventos de escala de pico, como uma liquidação sazonal) e que pode gerenciar solicitações com base na localização do visitante. Esse design ajuda a loja on-line a fornecer um serviço consistente para clientes distribuídos geograficamente.
Essa solução é um bom ponto de partida se você quiser aprender como implantar aplicativos da Web de comércio eletrônico escalonável com recursos sem servidor. Se você quiser controle operacional granular, confira a solução Aplicativo da Web de comércio eletrônico implantado no Kubernetes.
Neste documento, pressupomos que você esteja familiarizado com os conceitos básicos da nuvem, mas não com o Google Cloud. Ter experiência com o Terraform é útil.
Objetivos
Este guia de solução ajuda você com estes tópicos:
- Saiba como projetar uma arquitetura de sistema para um site de comércio eletrônico.
- Otimize um website de comércio eletrônico para desempenho, escala e capacidade de resposta.
- Monitore e antecipe limitações de carga.
- Use o rastreamento e os relatórios de erros para entender e gerenciar problemas.
Produtos
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 processa o escalonamento e outras tarefas de infraestrutura para que você possa se concentrar na lógica de negócios do seu código.
- Cloud SQL: um banco de dados PostgreSQL baseado na nuvem totalmente gerenciado na infraestrutura do Google Cloud.
- Secret Manager: um serviço que permite armazenar, gerenciar e acessar secrets como blobs binários ou strings de texto. É possível usar o Secret Manager para armazenar senhas de bancos de dados, chaves de API ou certificados TLS necessários para um aplicativo no ambiente de execução.
- Cloud Storage: um serviço pronto para empresas que oferece armazenamento de objetos de baixo custo e sem limite para diversos tipos de dados. Os dados podem ser acessados de dentro e de fora do Google Cloud e são replicados de modo geograficamente redundante.
- Firebase Hosting: um serviço de hospedagem totalmente gerenciado para implantar e exibir seus aplicativos da Web e conteúdo estático.
- Cloud Logging: um serviço que permite armazenar, pesquisar, analisar, monitorar e criar alertas sobre os registros de dados e eventos do Google Cloud e de outras nuvens.
- Cloud Trace: um sistema de geração de trace distribuído para o Google Cloud, ajuda você a entender quanto tempo leva para o aplicativo processar solicitações recebidas de usuários ou outros aplicativos e quanto tempo leva para concluir operações como chamadas RPC realizadas ao lidar com as solicitações.
- Error Reporting: esse serviço agrega e exibe erros produzidos nos serviços em nuvem em execução. O Error Reporting agrupa os erros que têm a mesma causa raiz.
Arquitetura
O diagrama a seguir mostra a arquitetura da solução:
Fluxo da solicitação
Confira a seguir o fluxo de processamento de solicitações da plataforma de e-commerce. As etapas no fluxo são numeradas conforme mostrado no diagrama de arquitetura anterior.
- Um front-end de cliente do Firebase Hosting. O front-end usa componentes do Lit e da Web para a renderização de dados da API no lado do cliente.
- O cliente da Web chama um back-end de API que está em execução como um serviço do Cloud Run. O servidor da API Cloud Run é escrito em Django usando o framework REST do Django.
- A configuração e outros secrets do aplicativo Python são armazenados no Secret Manager.
- Os recursos estáticos do aplicativo são armazenados no Cloud Storage.
- Um banco de dados do Cloud SQL, usando o PostgreSQL, é usado como o back-end de banco de dados relacional para o aplicativo Python.
- O Cloud Logging, o Cloud Trace e o Error Reporting armazenam registros, traces do OpenTelemetry e relatórios de erros enviados por outros produtos da nuvem e pelo servidor da API Cloud Run. Esses dados permitem o monitoramento do comportamento correto do aplicativo e da solução de problemas de comportamento inesperado.
Custo
Para uma estimativa dos custos dos recursos do Google Cloud usados pela plataforma de comércio eletrônico com a solução de computação sem servidor, 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. Ao decidir entre usar um projeto existente ou criar um, considere os seguintes fatores:
- Se você criar um projeto para a solução, quando não precisar mais da implantação, será possível excluir o projeto e evitar o faturamento contínuo. Se você usar um projeto existente, será preciso excluir a implantação quando não precisar mais dela.
- Usar um novo projeto pode ajudar a evitar conflitos com recursos provisionados anteriormente, como recursos usados em cargas de trabalho de produção.
Se você quiser implantar a solução em um novo projeto, crie o projeto antes de iniciar a implantação.
Para criar um projeto, siga estas etapas:
-
In the Google Cloud console, go to the project selector page.
-
Click Create project.
-
Name your project. Make a note of your generated project ID.
-
Edit the other fields as needed.
-
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ê tem o
papel básico
roles/owner
no projeto em que planeja implantar a solução, você
já 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 os papéis que as incluam) a você.
Permissão do IAM necessária | Papel predefinido que inclui as permissões necessárias |
---|---|
|
Administrador do Service Usage ( roles/serviceusage.serviceUsageAdmin ) |
|
Administrador da conta de serviço ( roles/iam.serviceAccountAdmin ) |
|
Administrador de projetos do IAM ( roles/resourcemanager.projectIamAdmin ) |
config.deployments.create config.deployments.list |
Administrador do Cloud Infrastructure Manager ( roles/config.admin ) |
Conta de serviço criada para a soluçã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.
- Administrador do Cloud SQL (
roles/cloudsql.admin
) - Administrador do Compute Engine (
roles/compute.admin
) - Administrador de rede do Compute Engine (
roles/compute.networkAdmin
) - Agente de serviços do Firebase Service Management (
roles/firebase.managementServiceAgent
) - Administrador do Firebase Hosting (
roles/firebasehosting.admin
) - Administrador da conta de serviço (
roles/iam.serviceAccountAdmin
) - Usuário da conta de serviço (
roles/iam.serviceAccountUser
) - Administrador de projetos do IAM (
roles/resourcemanager.projectIamAdmin
) - Administrador do Cloud Run (
roles/run.admin
) - Administrador do Gerenciador de secrets (
roles/secretmanager.admin
) - Administrador do Cloud Storage (
roles/storage.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.
No catálogo da solução Jump Start do Google Cloud, acesse a solução Plataforma de comércio eletrônico com computação sem servidor.
Acesse a plataforma de e-commerce com solução de computação sem servidor
Revise as informações fornecidas na página, como o custo estimado da solução e o tempo estimado de implantação.
Quando estiver tudo pronto para começar a implantar a solução, clique em Implantar.
Veja um guia interativo passo a passo.
Conclua estas etapas no guia interativo.
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.
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.
Para ver e usar o app da Web de comércio eletrônico implantado, siga as instruções em Explorar sua implantação do Avocano.
Para ver os recursos do Google Cloud implantados e as configurações deles, faça um tour interativo.
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.
Clone o repositório do GitHub no Cloud Shell.
Você verá um prompt para confirmar o download do repositório do GitHub para o Cloud Shell.
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.No Cloud Shell, verifique se o diretório de trabalho atual é
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. 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-dynamic-python-webapp/infra
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.
Verifique se o diretório de trabalho atual é
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Se não estiver, acesse esse diretório.No mesmo diretório, crie um arquivo de texto chamado
terraform.tfvars
.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-dynamic-python-webapp/infra
. Verifique se cada valor definido no arquivo
terraform.tfvars
corresponde ao tipo da variável, conforme declarado no arquivovariables.tf
. Por exemplo, se o tipo definido para uma variável no arquivovariables.tf
forbool
, especifiquetrue
oufalse
como o valor dessa variável no arquivoterraform.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" # Container Registry that hosts the client image client_image_host = "hsa-public/serverless-ecommerce" # Container Registry that hosts the server image server_image_host = "hsa-public/serverless-ecommerce"
Para informações sobre os valores que podem ser atribuídos às variáveis obrigatórias, consulte:
- PROJECT_ID: como identificar projetos
- REGION e ZONE: regiões e zonas disponíveis
Validar e revisar a configuração do Terraform
Verifique se o diretório de trabalho atual é
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Se não estiver, acesse esse diretório.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.
Analise os recursos definidos na configuração:
terraform plan
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
eterraform plan
novamente.
Provisionar os recursos
Quando nenhuma outra alteração for necessária na configuração, implante os recursos:
Verifique se o diretório de trabalho atual é
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Se não estiver, acesse esse diretório.Aplique a configuração do Terraform:
terraform apply
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.
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!
Para ver e usar o app da Web de comércio eletrônico implantado, siga as instruções em Explorar sua implantação do Avocano.
Para ver os recursos do Google Cloud implantados e as configurações deles, faça um tour interativo.
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.
Explorar a implantação do Avocano
Você implantou o aplicativo do site Avocano. Acesse o site da Avocano para dar uma olhada e descobrir como a solução funciona no console do Google Cloud. Esteja ciente de que pode levar alguns minutos após a implantação do aplicativo para que o site apareça no endereço fornecido.
O que é o Avocano?
Esta solução usa um aplicativo de exemplo chamado Avocano para demonstrar a implantação e o gerenciamento de um aplicativo da Web com muitas das ferramentas e produtos usados para aplicativos sem servidor. O Avocano é um aplicativo que imita uma implementação real de um aplicativo da Web de comércio eletrônico.
O front-end do Avocano apresenta uma vitrine falsa, em que você pode adicionar itens ao seu carrinho e tentar concluir um processo de finalização da compra, mas a loja revela que é falso. Embora não seja possível comprar um abacate, o aplicativo demonstra o gerenciamento de inventário diminuindo a quantidade de produtos disponíveis em um.
Explorar o front-end
Para iniciar o front-end da implantação da solução:
- Abra o Console do Firebase.
- Selecione o projeto atual.
- Navegue até a seção Build > Hosting.
- Selecione a opção Domínio que termina com web.app. O front-end do aplicativo de amostra é aberto em uma nova janela do navegador.
Agora você pode interagir com o site da Avocano da mesma forma que os clientes o veriam, incluindo navegar pelos produtos, adicionar produtos ao carrinho de compras e finalizar a compra como convidado.
Ver a configuração de escalonamento automático e simultaneidade
O Cloud Run aumenta ou diminui automaticamente as instâncias de contêiner a partir do zero, dependendo do tráfego, para fornecer um tempo de inicialização rápido para seu app.
Noções básicas sobre as configurações de escalonamento automático e simultaneidade
É importante entender que as configurações de escalonamento automático e simultaneidade no Cloud Run podem afetar o desempenho e os custos do aplicativo:
Instâncias mínimas: é possível definir a configuração de instâncias mínimas para ativar instâncias ociosas do serviço. Ao aumentar a configuração de instâncias mínimas antes do tráfego mais alto, é possível minimizar o tempo de resposta dos primeiros N usuários. Se o serviço requer latência reduzida, especialmente ao escalonar a partir de zero instância ativa, é possível especificar um número mínimo de instâncias de contêiner a serem mantidas quentes e prontas para exibir solicitações.
Máximo de instâncias: aumentar a configuração de instâncias máximas no Cloud Run pode ajudar a atender a um tráfego excepcionalmente alto que é previsto. Nesse cenário, você também deve avaliar sua cota atual e solicitar um aumento. Reduzir a configuração de instâncias máximas pode ajudar a evitar custos inesperados ou uma maior utilização da infraestrutura de apoio subjacente, como a capacidade do banco de dados.
Simultaneidade: a configuração de simultaneidade do Cloud Run especifica o número máximo de solicitações que podem ser processadas simultaneamente por uma determinada instância de contêiner. Otimizar a memória, CPU e simultaneidade para o comportamento do aplicativo garante que cada instância de contêiner tenha a melhor utilização e minimiza a necessidade de escalonar para novas instâncias. Para mais informações, consulte Otimizar a simultaneidade.
Ver configurações de escalonamento automático e simultaneidade
Para ver as configurações de instâncias mínima e máxima atuais e as configurações de simultaneidade do serviço do Cloud Run:
- Acesse o Cloud Run
- Clique no serviço de seu interesse para abrir a página Detalhes do serviço.
- Clique na guia Revisões.
- No painel de detalhes à direita, as configurações de instâncias mínimas, máximas e de simultaneidade atuais são listadas na guia Contêiner.
Se você quiser saber como ajustar essas configurações para otimizar o desempenho do app, consulte as Dicas gerais de desenvolvimento na documentação do Cloud Run.
Ver registros de tráfego
Use as ferramentas de geração de registros no Cloud Run para acompanhar o tráfego do seu app e receber alertas quando surgirem problemas.
Para ver os registros do serviço do Cloud Run:
- Acesse o Cloud Run
- Clique no serviço escolhido na lista exibida.
- Clique na guia Registros para receber os registros de solicitação e contêiner para todas as revisões desse serviço. É possível filtrar por nível de gravidade de registro.
O Cloud Run captura automaticamente registros de muitos lugares: qualquer coisa gravada em saída padrão e erro padrão, qualquer coisa em /var/log/
e outros.
Todos os registros manuais feitos com as bibliotecas do Cloud Logging também são capturados.
Também é possível acessar os registros desse serviço diretamente no Cloud Logging clicando em Ver no Buscador de registros.
No app Avocano, teste as seguintes ações do usuário para acionar a saída correspondente que pode ser visualizada nos registros.
Ação do usuário | Saída de registro |
---|---|
Compre o carrinho de compras usando Coletar como o tipo de pagamento e o valor do produto no carrinho não excede a contagem de inventário. | A saída do registro mostra um registro info, com status httpRequest de 200. |
Compre o carrinho de compras usando Coletar como o tipo de pagamento, mas o valor do produto no carrinho excede a contagem de inventário. | A saída de registro mostra um registro Alerta, com status httpRequest de 400. |
Compre o carrinho de compras usando Crédito como tipo de pagamento. | A saída do registro mostra um registro Erro, com status httpRequest de 501. |
É possível visualizar o código que gera o erro que leva à resposta HTTP 400/501
no arquivo serializers.py
. O Cloud Run registra a resposta e gera uma entrada de registro de solicitação correspondente.
É possível usar os alertas com base em registros para notificar você sempre que uma mensagem específica aparecer nos registros incluídos.
Ver a instrumentação de trace e os traces capturados
Esta solução usa a instrumentação automática Python do Open Telemetry para capturar dados de telemetria para o aplicativo Avocano.
Entender como o trace é implementado
A solução implementa o seguinte código e definições de configuração para gerar traces usando a instrumentação automática:
- Adicione dependências para o Cloud Trace no arquivo requirements.txt, incluindo o seguinte:
opentelemetry-distro
: instala a API Open Telemetry, o SDK e as ferramentas de linha de comando.opentelemetry-instrumentation
: adiciona compatibilidade com a instrumentação automática do Python.opentelemetry-exporter-gcp-trace
: oferece suporte à exportação de traces para o Cloud Traceopentelemetry-resource-detector
: fornece suporte para detectar recursos do Google Cloud.opentelemetry-instrumentation-django
: permite solicitações de rastreamento para o aplicativo Django.
- Defina a vinculação do IAM no arquivo
iam.tf
para permitir que o servidor grave no Cloud Trace. - Configure a variável de ambiente
OTEL_TRACES_EXPORTER
no arquivoservices.tf
para usar o exportador para o Cloud Trace. - No
server/Procfile
, configure o servidor para executar o comandoopentelemetry-instrument
no app Avocano. Esse comando detecta pacotes no Avocano e, se possível, aplica a instrumentação de rastreamento automático a eles.
Para saber mais sobre como coletar dados do Cloud Trace para Python, consulte Python e OpenTelemetry.
Ver os dados de latência
Para visualizar os dados de latência das solicitações, siga estas etapas:
- Acessar o Cloud Trace
- Na seção Selecionar um trace da página Lista de traces, clique no ponto azul, que representa um trace capturado. A coluna Latência exibe a latência dos traces capturados.
Também é possível visualizar dados de trace usando as seguintes visualizações na página Lista de traces:
- Gráfico de cascata: representa uma solicitação completa por meio do aplicativo. Cada etapa na linha do tempo é um período em que você pode clicar para ver detalhes. O Cloud Run cria períodos automaticamente para operações internas, como processamento de solicitações e balanceamento de carga. Esses períodos aparecem no mesmo gráfico de cascata que os períodos produzidos pelo Avocano, permitindo que você visualize todo o ciclo de vida da solicitação.
- Detalhes do período, que mostra todos os rótulos ou anotações que você adicionou ao código do aplicativo quando o instrumentou para o Trace.
Se você quiser adicionar traces personalizados, consulte Instrumentação manual na documentação do Open Telemetry.
Recomendações de projeto
Nesta seção, fornecemos recomendações para usar a plataforma de comércio eletrônico com solução de computação sem servidor e 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.
Reforce a segurança
Foco no design | Recomendações |
---|---|
Criptografia de dados |
Por padrão, o Cloud Run criptografa os dados usando uma chave 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. |
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. |
Melhore a 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 Uma instância do Cloud SQL que usa o tipo de máquina |
Cotas e limites | O número de recursosdo Cloud Run é limitado. Se você antecipar um aumento no tráfego, por exemplo, devido a um feriado ou evento de vendas, precisará solicitar um aumento de cota. Para mais informações, consulte Como aumentar a cota. Algumas solicitações de cota exigem aprovação manual. Portanto, planeje-se com antecedência. Também é possível definir alertas sobre seu progresso para alcançar sua cota. |
Otimize custos
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). |
Melhore o desempenho
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. |
Ajustar simultaneidade | Esta solução é ajustada para maximizar a capacidade de contêiner individual. O Cloud Run ajusta automaticamente a simultaneidade para exibir várias solicitações. No entanto, será necessário ajustar a simultaneidade máxima padrão se o contêiner não conseguir processar muitas solicitações simultâneas ou se ele conseguir lidar com um volume maior de solicitações. Para mais informações, consulte Otimizar a simultaneidade. |
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. |
Observações:
- 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 da soluçã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.
No console do Google Cloud, acesse a página Implantações da solução.
Selecione o projeto que contém a implantação que você quer excluir.
Localize a implantação que você quer excluir.
Clique em
Ações e selecione Excluir.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.
No Cloud Shell, verifique se o diretório de trabalho atual é
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Se não estiver, acesse esse diretório.Remova os recursos provisionados pelo Terraform:
terraform destroy
O Terraform exibe uma lista dos recursos que serão destruídos.
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:
- No Console do Google Cloud, acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir.
- 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:
No Console do Google Cloud, acesse a página Contas de serviço.
Selecione o projeto usado para a solução.
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.
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:
Acesse a página Implantações da solução.
Se a implantação falhou, o campo Status mostra Falha.
Para ver os detalhes dos erros que causaram a falha, faça o seguinte:
Clique em
Ações.Selecione Ver registros do Cloud Build.
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 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.
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.
No console do Google Cloud, acesse a página Implantações de soluções.
Selecione o projeto que contém a implantação que você quer excluir.
Na lista de implantações, identifique a linha da implantação que você quer excluir.
Clique em
Consultar todo o conteúdo da linha.Na coluna Local, observe o segundo local, conforme destacado no exemplo a seguir:
In the Google Cloud console, 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.
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.
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
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
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/infra
Aguarde até que a mensagem
Operation completed
seja exibida, conforme mostrado no exemplo a seguir:Operation completed over 45 objects/268.5 KiB
Inicialize o Terraform:
terraform init
Aguarde até ver a seguinte mensagem:
Terraform has been successfully initialized!
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.
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!
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"
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ódigos não modificados, crie problemas no repositório apropriado 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.
- Para problemas com produtos usados na solução, entre em contato com o Cloud Customer Care.
A seguir
Esta solução demonstra como implantar um aplicativo da Web de comércio eletrônico usando o Cloud Run. Para saber mais sobre os produtos e recursos do Google Cloud, consulte:
- Dicas gerais de desenvolvimento para o Cloud Run.
- Práticas recomendadas de teste de carga para o Cloud Run.
- Tutorial de autenticação do usuário final para o Cloud Run
- Exiba o conteúdo dinâmico e hospede os microsserviços usando o Firebase Hosting