Este guia ajuda a compreender, implementar e usar a plataforma de comércio eletrónico com computação sem servidor. Esta solução demonstra como criar e executar uma aplicação de comércio eletrónico para uma organização de retalho, com um Website de loja online visível publicamente. Mostra-lhe como criar uma aplicação que se adapta para processar picos de utilização (por exemplo, durante eventos de grande escala, como uma promoção sazonal) e que pode gerir pedidos com base na localização do visitante. Este design ajuda a loja online a fornecer um serviço consistente a clientes distribuídos geograficamente.
Esta solução é um bom ponto de partida se quiser saber como implementar apps Web de comércio eletrónico escaláveis com capacidades sem servidor. Se quiser um controlo operacional detalhado, consulte a solução App Web de comércio eletrónico implementada no Kubernetes.
Este documento pressupõe que está familiarizado com os conceitos básicos da nuvem, embora não seja necessariamente Google Cloud. A experiência com o Terraform é útil.
Objetivos
Este guia de soluções ajuda a fazer o seguinte:
- Saiba como criar uma arquitetura de sistema para um Website de comércio eletrónico.
- Otimize um Website de comércio eletrónico para desempenho, escalabilidade e capacidade de resposta.
- Monitorize e antecipe as limitações de carregamento.
- Use o rastreio e os relatórios de erros para compreender e gerir problemas.
Produtos
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 PostgreSQL baseada na nuvem totalmente gerida na infraestrutura Google Cloud .
- Secret Manager: um serviço que lhe permite armazenar, gerir e aceder a segredos como blobs binários ou strings de texto. Pode usar o Secret Manager para armazenar palavras-passe de bases de dados, chaves de API ou certificados TLS que são necessários por uma aplicação no tempo de execução.
- Cloud Storage: um serviço pronto para empresas que oferece armazenamento de objetos sem limites e de baixo custo para diversos tipos de dados. Os dados são acessíveis a partir de dentro e fora do Google Cloud e são replicados de forma georredundante.
- Firebase Hosting: um serviço de alojamento totalmente gerido para implementar e publicar as suas aplicações Web e conteúdo estático.
- Cloud Logging: um serviço que lhe permite armazenar, pesquisar, analisar, monitorizar e alertar sobre dados de registos e eventos do Google Cloud e de outras nuvens.
- Cloud Trace: um sistema de rastreio distribuído para Google Cloud que ajuda a compreender quanto tempo a sua aplicação demora a processar pedidos recebidos de utilizadores ou outras aplicações, e quanto tempo demora a concluir operações como chamadas RPC realizadas durante o processamento dos pedidos.
- Relatórios de erros: este serviço agrega e apresenta erros produzidos nos seus serviços na nuvem em execução. Os relatórios de erros agrupam os erros que são considerados como tendo a mesma causa principal.
Arquitetura
O diagrama seguinte mostra a arquitetura da solução:
Fluxo de pedidos
Segue-se o fluxo de processamento de pedidos da plataforma de comércio eletrónico. Os passos no fluxo estão numerados, conforme mostrado no diagrama de arquitetura anterior.
- Um frontend de cliente do Firebase Hosting. O front-end usa Lit e componentes Web para a renderização do lado do cliente dos dados da API.
- O cliente Web chama um back-end de API que está a ser executado como um serviço do Cloud Run. O servidor da API Cloud Run é escrito em Django com a Django REST Framework.
- A configuração e outros segredos da aplicação Python são armazenados no Secret Manager.
- Os recursos estáticos da aplicação são armazenados no Cloud Storage.
- Uma base de dados do Cloud SQL, que usa o PostgreSQL, é usada como back-end de base de dados relacional para a aplicação Python.
- O Cloud Logging, o Cloud Trace e o Error Reporting armazenam registos, rastreios do OpenTelemetry e relatórios de erros enviados por outros produtos na nuvem e pelo servidor da API Cloud Run. Estes dados permitem a monitorização do comportamento correto da aplicação e a resolução de problemas de comportamento inesperado.
Custo
Para uma estimativa do custo dos Google Cloud recursos que a plataforma de comércio eletrónico com solução de computação sem servidor 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:
-
Ensure that you have the Project Creator IAM role
(
roles/resourcemanager.projectCreator
). Learn how to grant roles. -
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.
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 |
---|---|
|
Administrador de utilização de serviços ( roles/serviceusage.serviceUsageAdmin ) |
|
Administrador da conta de serviço ( roles/iam.serviceAccountAdmin ) |
|
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
- Administrador do Cloud SQL (
roles/cloudsql.admin
) - Administrador do Compute Engine (
roles/compute.admin
) - Administrador de rede do Compute Engine (
roles/compute.networkAdmin
) - Agente do serviço de gestão de serviços do Firebase (
roles/firebase.managementServiceAgent
) - Administrador do Firebase Hosting (
roles/firebasehosting.admin
) - Administrador da conta de serviço (
roles/iam.serviceAccountAdmin
) - Utilizador da conta de serviço (
roles/iam.serviceAccountUser
) - Project IAM Admin (
roles/resourcemanager.projectIamAdmin
) - Administrador do Cloud Run (
roles/run.admin
) - Administrador do Secret Manager (
roles/secretmanager.admin
) - Administrador do Cloud Storage (
roles/storage.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.
No Google Cloud catálogo de soluções de arranque rápido, aceda à solução Plataforma de comércio eletrónico com computação sem servidor.
Aceda à plataforma de comércio eletrónico com a solução de computação sem servidor
Reveja as informações apresentadas na página, como o custo estimado da solução e o tempo de implementação estimado.
Quando tiver tudo pronto para começar a implementar a solução, clique em Implementar.
É apresentado um painel de configuração passo a passo.
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.
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.
Para ver e usar a app Web de comércio eletrónico implementada, siga as instruções em Explore a sua implementação do Avocano.
Para ver os Google Cloud recursos implementados e a respetiva configuração, faça uma visita guiada interativa.
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.
Clone o repositório do GitHub para o Cloud Shell.
É apresentada uma mensagem para confirmar a transferência do repositório do GitHub para o Cloud Shell.
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.No Cloud Shell, verifique se o diretório de trabalho atual é
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. 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-dynamic-python-webapp/infra
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.
Certifique-se de que o diretório de trabalho atual é
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Se não for, aceda a esse diretório.No mesmo diretório, crie um ficheiro de texto com o nome
terraform.tfvars
.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-dynamic-python-webapp/infra
. Certifique-se de que cada valor que define no ficheiro
terraform.tfvars
corresponde ao tipo de variável, conforme declarado no ficheirovariables.tf
. Por exemplo, se o tipo definido para uma variável no ficheirovariables.tf
forbool
, tem de especificartrue
oufalse
como o valor dessa variável no ficheiroterraform.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 pode atribuir às variáveis obrigatórias, consulte o seguinte:
- PROJECT_ID: Identificar projetos
- REGION e ZONE: regiões e zonas disponíveis
Valide e reveja a configuração do Terraform
Certifique-se de que o diretório de trabalho atual é
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Se não for, aceda a esse diretório.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.
Reveja os recursos definidos na configuração:
terraform plan
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
eterraform plan
.
Aprovisione os recursos
Quando não forem necessárias mais alterações na configuração do Terraform, implemente os recursos.
Certifique-se de que o diretório de trabalho atual é
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Se não for, aceda a esse diretório.Aplique a configuração do Terraform:
terraform apply
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.
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!
Para ver e usar a app Web de comércio eletrónico implementada, siga as instruções em Explore a sua implementação do Avocano.
Para ver os Google Cloud recursos implementados e a respetiva configuração, faça uma visita guiada interativa.
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.
Explore a sua implementação do Avocano
Implementou a aplicação Web do Website Avocano. Pode visitar o Website da Avocano e explorar o site. Em seguida, explore como a solução funciona na Google Cloud consola. Tenha em atenção que pode demorar alguns minutos após a implementação da aplicação para que o site seja apresentado no endereço fornecido.
O que é o Avocano?
Esta solução usa uma aplicação de exemplo denominada Avocano para demonstrar a implementação e a gestão de uma app Web com muitas das ferramentas e produtos usados para aplicações sem servidor. O Avocano é uma aplicação que imita uma implementação prática de uma app Web de comércio eletrónico.
O front-end da Avocano apresenta uma montra falsa, onde pode adicionar artigos ao carrinho e tentar concluir um processo de pagamento, mas, em seguida, a loja revela que é falsa (Avoca--no!). Embora não possa comprar um abacate, a aplicação demonstra a gestão de inventário diminuindo a quantidade de produtos disponíveis em um.
Explore o frontend
Para iniciar o front-end da implementação da solução:
- Abra a consola do Firebase.
- Selecione o seu projeto existente.
- Navegue para a secção Compilação > Alojamento.
- Selecione o domínio que termina em web.app. O frontend da sua aplicação de exemplo é aberto numa nova janela do navegador.
Agora, pode interagir com o Website da Avocano tal como os clientes o veriam, incluindo navegar pelos produtos, adicionar produtos ao carrinho de compras e fazer o checkout como visitante.
Veja a configuração de escalamento automático e simultaneidade
O Cloud Run dimensiona automaticamente as instâncias de contentores para cima ou para baixo a partir de zero, consoante o tráfego, para oferecer um tempo de arranque rápido para a sua app.
Compreenda as definições de escalabilidade automática e simultaneidade
É importante compreender que as definições de dimensionamento automático e simultaneidade no Cloud Run podem afetar o desempenho e os custos da sua app:
Instâncias mínimas: pode definir a definição de instâncias mínimas para ativar instâncias inativas para o seu serviço. Ao aumentar a definição de instâncias mínimas antecipando um volume de tráfego mais elevado, pode minimizar o tempo de resposta para os primeiros N utilizadores. Se o seu serviço requerer uma latência reduzida, especialmente quando dimensiona a partir de zero instâncias ativas, pode especificar um número mínimo de instâncias de contentores a manter ativas e prontas para processar pedidos.
Instâncias máximas: aumentar a definição de instâncias máximas no Cloud Run pode ajudar a publicar tráfego excecionalmente elevado que é antecipado. Neste caso, também deve avaliar a sua quota atual e considerar pedir um aumento. Reduzir a definição de instâncias máximas pode ajudar a evitar custos inesperados ou uma utilização mais elevada da infraestrutura de apoio subjacente (como a capacidade da base de dados).
Simultaneidade: a definição de simultaneidade do Cloud Run especifica o número máximo de pedidos que podem ser processados em simultâneo por uma determinada instância de contentor. A otimização da memória, da CPU e da simultaneidade para o comportamento da sua aplicação garante que cada instância do contentor tem a melhor utilização e minimiza a necessidade de aumentar a escala para novas instâncias. Para mais informações, consulte o artigo Otimize a simultaneidade.
Veja as definições de escalabilidade automática e simultaneidade
Para ver as definições atuais de instâncias mínimas e máximas, e as definições de simultaneidade do seu serviço do Cloud Run:
- Aceda ao Cloud Run
- Clique no serviço que lhe interessa para abrir a página Detalhes do serviço.
- Clique no separador Revisões.
- No painel de detalhes à direita, as definições atuais de instâncias mínimas, instâncias máximas e simultaneidade são apresentadas no separador Contentor.
Se quiser saber como ajustar estas definições para otimizar o desempenho da app, consulte as Sugestões de desenvolvimento gerais na documentação do Cloud Run.
Veja os registos de tráfego
Pode usar as ferramentas de registo no Cloud Run para monitorizar o tráfego para a sua app e receber alertas quando surgirem problemas.
Para ver os registos do seu serviço do Cloud Run:
- Aceda ao Cloud Run
- Clique no serviço escolhido na lista apresentada.
- Clique no separador Registos para obter os registos de pedidos e contentores de todas as revisões deste serviço. Pode filtrar por nível de gravidade do registo.
O Cloud Run captura automaticamente registos de vários locais: tudo o que é escrito para saída padrão e erro padrão, tudo o que está em /var/log/
e outros.
Qualquer registo manual feito com as bibliotecas do Cloud Logging
também é capturado.
Também pode ver os registos deste serviço diretamente no Cloud Logging clicando em Ver no Explorador de registos.
Na app Avocano, experimente as seguintes ações do utilizador para acionar a saída correspondente que pode ver nos registos.
Ação do utilizador | Saída do registo |
---|---|
Comprar o carrinho de compras através da opção Recolher como tipo de pagamento e o valor do produto no carrinho não exceder a quantidade em inventário. | O resultado do registo mostra um registo info com o estado httpRequest de 200. |
Comprar o carrinho de compras usando Collect como o tipo de pagamento, mas o valor do produto no carrinho excede a quantidade em inventário. | O resultado do registo mostra um registo de aviso com o estado 400.httpRequest |
Compre o carrinho de compras usando Crédito como o tipo de pagamento. | O resultado do registo mostra um registo de erro com o estado httpRequest
501. |
Pode ver o código que gera o erro que leva à 400/501
resposta HTTP no ficheiro serializers.py
. O Cloud Run regista a resposta e gera uma entrada de registo de pedidos correspondente.
Pode usar alertas baseados em registos para receber uma notificação sempre que uma mensagem específica aparecer nos registos incluídos.
Veja a instrumentação de rastreio e os rastreios capturados
Esta solução usa a instrumentação automática do Open Telemetry Python para capturar dados de telemetria para a aplicação Avocano.
Compreenda como a monitorização é implementada
A solução implementa o seguinte código e definições de configuração para gerar rastreios através da instrumentação automática:
- Adicione dependências para o Cloud Trace no ficheiro
requirements.txt, incluindo o seguinte:
opentelemetry-distro
: instala a API, o SDK e as ferramentas de linha de comandos da Open Telemetry.opentelemetry-instrumentation
: adiciona suporte para a instrumentação automática do Python.opentelemetry-exporter-gcp-trace
: oferece suporte para exportar rastreios para o Cloud Trace.opentelemetry-resource-detector
: oferece suporte para a deteção de Google Cloud recursos.opentelemetry-instrumentation-django
: permitir pedidos de rastreio para a aplicação Django.
- Defina a associação do IAM no ficheiro
iam.tf
para permitir que o servidor escreva no Cloud Trace. - Configure a variável de ambiente
OTEL_TRACES_EXPORTER
no ficheiroservices.tf
para usar o exportador para o Cloud Trace. - No
server/Procfile
>, configure o servidor para executar o comandoopentelemetry-instrument
na app Avocano. Este comando deteta pacotes no Avocano e aplica a instrumentação de rastreio automática nos mesmos, se possível.
Para saber mais sobre a recolha de dados do Cloud Trace para Python, consulte o artigo Python e OpenTelemetry.
Veja os dados de latência
Para ver os dados de latência dos pedidos, siga estes passos:
- Aceda ao Cloud Trace
- Na secção Selecionar um rastreio da página Lista de rastreios, clique no ponto azul, que representa um rastreio capturado. A coluna Latência apresenta a latência para os rastreios capturados.
Também pode ver os dados de rastreio através das seguintes visualizações na página Lista de rastreios:
- Gráfico da hierarquia: representa um pedido completo através da aplicação. Cada passo na cronologia é um intervalo, no qual pode clicar para ver os detalhes. O Cloud Run cria automaticamente intervalos para operações internas, como o processamento de pedidos e o equilíbrio de carga. Estes intervalos aparecem no mesmo gráfico de cascata que os intervalos produzidos pelo Avocano, o que lhe permite ver o ciclo de vida completo do pedido.
- Detalhes do intervalo: mostra quaisquer etiquetas ou anotações que adicionou ao código da app quando o instrumentou para a monitorização.
Se quiser adicionar rastreios personalizados, consulte a secção Instrumentação manual na documentação do OpenTelemetry.
Recomendações de design
Esta secção fornece recomendações para usar a plataforma de comércio eletrónico com a solução de computação sem servidor 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.
Melhore a segurança
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. |
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. |
Melhore a 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 Uma instância do Cloud SQL que usa o tipo de máquina |
Quotas e limites | O número de recursos do Cloud Run é limitado. Se antecipar um aumento repentino no tráfego, por exemplo, devido a um evento sazonal ou de promoções, deve pedir um aumento da quota. Para mais informações, consulte o artigo Como aumentar a quota. Alguns pedidos de quota requerem aprovação manual, pelo que deve planear com antecedência. Também pode definir alertas sobre o seu progresso para atingir a quota. |
Otimize os custos
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). |
Melhore o desempenho
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. |
Ajuste a simultaneidade | Esta solução é otimizada para maximizar o débito do contentor individual. O Cloud Run ajusta automaticamente a concorrência para a publicação de vários pedidos. No entanto, deve ajustar a simultaneidade máxima predefinida se o seu contentor não conseguir processar muitos pedidos simultâneos ou se conseguir processar um volume maior de pedidos. Para mais informações, consulte o artigo Otimize a simultaneidade. |
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. |
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 da soluçã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.
Na Google Cloud consola, aceda à página Implementações de soluções.
Selecione o projeto que contém a implementação que quer eliminar.
Localize a implementação que quer eliminar.
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.
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.
No Cloud Shell, certifique-se de que o diretório de trabalho atual é
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Se não for, aceda a esse diretório.Remova os recursos aprovisionados pelo Terraform:
terraform destroy
O Terraform apresenta uma lista dos recursos que vão ser destruídos.
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:
- Na Google Cloud consola, aceda à página Gerir recursos.
- Na lista de projetos, selecione o projeto que quer eliminar e, de seguida, clique em Eliminar.
- 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:
Na Google Cloud consola, aceda à página Contas de serviço.
Selecione o projeto que usou para a solução.
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.
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:
Aceda à página Implementações de soluções.
Se a implementação falhar, o campo Estado apresenta Falhou.
Veja os detalhes dos erros que causaram a falha:
Na linha da implementação, clique em
Ações.Pode ter de deslocar a página para ver Ações na linha.
Selecione Ver registos do Cloud Build.
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 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.
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.
Na Google Cloud consola, aceda à página Implementações de soluções.
Selecione o projeto que contém a implementação que quer eliminar.
Na lista de implementações, identifique a linha da implementação que quer eliminar.
Clique em
Ver todo o conteúdo da linha.Na coluna Localização, repare na segunda localização, conforme realçado no exemplo seguinte:
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 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.
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
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
Transfira a configuração do Terraform do Cloud Storage para o Cloud Shell:
gcloud storage cp $CONTENT_PATH $HOME --recursive cd $HOME/content/infra
Aguarde até que a mensagem
Operation completed
seja apresentada, conforme mostrado no exemplo seguinte: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 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.
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!
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"
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
- Para aceder à documentação, aos tutoriais na consola ou à solução, use o botão Enviar feedback na página.
Para código não modificado, crie problemas no repositório do GitHub adequado:
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 problemas com os produtos usados na solução, contacte o apoio técnico ao cliente do Google Cloud.
- Sugestões gerais de desenvolvimento para o Cloud Run.
- Práticas recomendadas para testes de carga do Cloud Run.
- Autenticação do utilizador final para o tutorial do Cloud Run.
- Publicar conteúdo dinâmico e alojar microsserviços com o Firebase Hosting.
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:
O que se segue?
Esta solução demonstra como implementar uma aplicação Web de comércio eletrónico usando o Cloud Run. Para continuar a saber mais sobre os Google Cloud produtos e as capacidades, consulte: