Solução Jump Start: aplicativo da Web de comércio eletrônico implantado no Kubernetes

Last reviewed 2023-08-29 UTC

Neste guia, você aprende a implantar e usar a solução de início rápido de app da Web de comércio eletrônico implantado no Kubernetes. Esta solução demonstra como criar e executar um aplicativo de comércio eletrônico para uma organização de varejo, com um site de loja visível publicamente. Ela mostra como criar um aplicativo que pode ser dimensionado para lidar com picos de uso (por exemplo, durante eventos de grande escala, como uma venda) e pode gerenciar solicitações com base na localização do visitante, ajudando a loja on-line a fornecer um serviço consistente para uma base de clientes geograficamente distribuída.

O aplicativo é implantado como vários pequenos serviços, ou microsserviços, em execução nos clusters do Kubernetes gerenciados pelo Google no Google Cloud. Cada serviço executa uma tarefa específica, como fornecer o front-end da Web ou gerenciar o carrinho de compras.

Essa solução é um bom ponto de partida se você precisar de configurabilidade e flexibilidade oferecidos pelos recursos do Kubernetes ao gerenciar seu site. Uma arquitetura de microsserviços como essa também é particularmente útil se você tem uma equipe de engenharia maior, já que permite que diferentes equipes ou desenvolvedores criem e gerenciem diferentes partes do aplicativo separadamente. Se isso não parece o ideal para sua organização ou se você não tem certeza, tente também nossa solução de app da Web de comércio eletrônico implantado no Cloud Run. Ela usa o Cloud Run para implantar um aplicativo de loja on-line semelhante sem a necessidade do Kubernetes e não usa microsserviços.

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.

Sobre a Cymbal Shops

O aplicativo usado nesta solução é uma loja on-line de demonstração para uma rede de varejo imaginária chamada Cymbal Shops, com um site que os visitantes podem usar para navegar pelos produtos da empresa, adicionar produtos ao carrinho, ir até o caixa e comprar produtos. Você pode tentar depois de implantar a solução, embora não seja possível comprar os produtos. A Cymbal Shops tem clientes nos EUA e na Europa, então precisa de uma solução de site que não seja mais lenta para alguns visitantes do que para outros. As lojas da Cymbal também costumam vender e receber muitos compradores nas festas de fim de ano. Por isso, elas precisam de um site para lidar com os picos de tráfego sem desacelerar ou ter outros problemas, sem precisar gastam dinheiro em recursos do Cloud que não precisam.

Produtos usados

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

  • Google Kubernetes Engine (GKE): um ambiente gerenciado para implantação, gerenciamento e escalonamento de aplicativos em contêineres usando a infraestrutura do Google.
  • Entrada em vários clusters: um serviço hospedado pelo Google compatível com a implantação de recursos de balanceamento de carga compartilhados entre clusters e regiões.

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

Arquitetura

A solução implanta um aplicativo de comércio eletrônico com uma interface da Web acessível publicamente. O diagrama a seguir mostra a arquitetura dos recursos do Google Cloud que a solução implanta.

App da Web de comércio eletrônico implantado no diagrama de solução de início do Kubernetes

Fluxo da solicitação

Veja a seguir o fluxo de processamento de solicitações do aplicativo implantado. As etapas no fluxo são numeradas conforme mostrado no diagrama de arquitetura anterior.

  1. Um usuário interage com o site da Cymbal Shops no navegador, que envia uma solicitação HTTP para um balanceador de carga do Google Cloud. Esse é um balanceador de carga que fica na borda da rede do Google e direciona o tráfego para o destino apropriado no Google Cloud.
  2. A solicitação do usuário é direcionada para um dos dois clusters do GKE em que o front-end do aplicativo está em execução. Por padrão, esse é o cluster mais próximo do usuário: no diagrama acima, o cluster mais próximo do usuário está na Europa. Portanto, é para lá que a solicitação vai. Você saberá mais sobre como isso é configurado usando o serviço de Entrada multicluster na próxima seção.
  3. A solicitação é processada por um ou mais microsserviços de back-end que compõem o restante do aplicativo Cymbal Shops.
  4. O cartservice do aplicativo armazena o estado do carrinho de compras do usuário enquanto ele visita o site, usando um banco de dados do Redis. Um banco de dados Redis é implantado apenas no cluster dos EUA.

Componentes e configuração

O app da Cymbal Shops é executado em clusters do Google Kubernetes Engine (GKE). O Kubernetes é um sistema de código aberto para automatizar a implantação, o escalonamento e o gerenciamento de aplicativos em contêineres, em que o aplicativo é empacotado (ou conteinerizado) com as dependências de uma maneira independente do ambiente. Um cluster do Kubernetes é um conjunto de máquinas, chamado nodes, que você usa para executar os contêineres. O GKE com o Autopilot é o serviço Kubernetes escalonável e totalmente automatizado do Google, em que os clusters são compostos por máquinas virtuais do Compute Engine no Google Cloud.

A solução da Cymbal Shops inclui os seguintes componentes:

  • Três clusters do GKE, da seguinte maneira:
    • Um cluster, conhecido como cluster de configuração, é usado para gerenciar o serviço Ingress de vários clusters no aplicativo. A Entrada de vários clusters é um serviço que permite balancear a carga do tráfego em um conjunto especificado de clusters, com um único endereço IP virtual para seu aplicativo.
    • Dois clusters em diferentes regiões para executar os microsserviços da Cymbal Shops. Cada cluster tem serviços idênticos da Cymbal Shops, em execução nos mesmos namespaces do Kubernetes. Isso permite que a Entrada de vários clusters trate os dois serviços de front-end como se fossem o mesmo serviço, escolhendo o cluster para enviar tráfego dependendo da proximidade do visitante do site. A Entrada em vários clusters também pode ser usada para garantir que o tráfego seja enviado apenas para clusters íntegros, realizar lançamentos graduais ao fazer upgrade e muito mais.
  • Os três clusters do GKE têm o Autopilot ativado. O Autopilot é um recurso do GKE que permite criar clusters em que o Google gerencia a configuração do cluster, incluindo nós, escalonamento, segurança e outras configurações pré-configuradas. Para a Cymbal Shops, isso significa que, quando há mais visitantes no site do que o normal, os clusters podem escalonar automaticamente a quantidade de CPU, memória e armazenamento que usam com base nas necessidades do aplicativo. Com o Autopilot ativado, o administrador da plataforma Cymbal Shops não precisa se preocupar em solicitar (e pagar) mais recursos do Cloud do que realmente precisa na maior parte do tempo, ou correr o risco de ter clusters que também são recursos insuficientes para lidar com o aumento do tráfego em dias movimentados.

Custo

Consulte a página App da Web de comércio eletrônico implantado no Kubernetes para ver um custo mensal estimado com base nos locais padrão dos recursos e no tempo de uso estimado. Saiba mais sobre os preços do GKE, do Autopilot e da Entrada de vários clusters na página de preços do GKE.

Antes de começar

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

Criar ou escolher um projeto do Google Cloud

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

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

Para criar um projeto, siga estas etapas:

  1. No console do Google Cloud, acesse a página do seletor de projetos.

    Acessar o seletor de projetos

  2. Para começar a criar um projeto do Google Cloud, clique em Criar projeto.

  3. Escolha o nome do projeto. Anote o código do projeto gerado.

  4. Edite os outros campos conforme necessário.

  5. Para criar o projeto, clique em Criar.

Receber as permissões de IAM necessárias

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

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

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

serviceusage.services.enable

Administrador do Service Usage
(roles/serviceusage.serviceUsageAdmin)

iam.serviceAccounts.create

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

resourcemanager.projects.setIamPolicy

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

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

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

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

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

  • roles/container.admin
  • roles/gkehub.editor
  • roles/compute.networkAdmin
  • roles/iam.serviceAccountAdmin
  • roles/iam.serviceAccountUser
  • roles/resourcemanager.projectIamAdmin
  • roles/serviceusage.serviceUsageAdmin

implantar a solução

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

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

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

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

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

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

Implantar pelo console

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

  1. No catálogo do Google Cloud Jump Start Solutions, acesse a solução App da Web de comércio eletrônico implantado no Kubernetes.

    Acessar o app da Web de e-commerce implantado na solução Kubernetes

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

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

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

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

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

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

  5. Aguarde a solução ser implantada.

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

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

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.

Continue para Explorar a Cymbal Shops para descobrir como testar e conhecer sua soluçã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.

Quando você não precisar mais da implantação, é possível excluí-la usando a CLI do Terraform, conforme descrito em Excluir usando a CLI do Terraform.

Configurar o cliente do Terraform

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

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

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

    Abrir no Cloud Shell

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

  2. Clique em Confirmar.

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

  3. No Cloud Shell, verifique se o diretório de trabalho atual é $HOME/cloudshell_open/terraform-ecommerce-microservices-on-gke/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-ecommerce-microservices-on-gke/infra
    
  4. Inicialize o Terraform executando o seguinte comando:

    terraform init
    

    Aguarde até ver a seguinte mensagem:

    Terraform has been successfully initialized!
    

Configurar as variáveis do Terraform

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

  1. Verifique se o diretório de trabalho atual é $HOME/cloudshell_open/terraform-ecommerce-microservices-on-gke/infra. Se não estiver, acesse esse diretório.

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

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

    • Siga as instruções fornecidas como comentários no snippet de código.
    • Esse snippet de código inclui apenas as variáveis para as quais você precisa definir valores. A configuração do Terraform inclui outras variáveis que têm valores padrão. Para revisar todas as variáveis e os valores padrão, consulte o arquivo variables.tf disponível no diretório $HOME/cloudshell_open/terraform-ecommerce-microservices-on-gke/infra.
    • Verifique se cada valor definido no arquivo terraform.tfvars corresponde ao tipo da variável, conforme declarado no arquivo variables.tf. Por exemplo, se o tipo definido para uma variável no arquivo variables.tf for bool, especifique true ou false como o valor dessa variável no arquivo terraform.tfvars.
# This is an example of the terraform.tfvars file.
# The values in this file must match the variable types declared in variables.tf.
# The values in this file override any defaults in variables.tf.

# ID of the project in which you want to deploy the solution
project_id = "PROJECT_ID"

Para informações sobre os valores que podem ser atribuídos à variável project_id, consulte Como identificar projetos.

Validar e revisar a configuração do Terraform

  1. Verifique se o diretório de trabalho atual é $HOME/cloudshell_open/terraform-ecommerce-microservices-on-gke/infra. Se não estiver, acesse esse diretório.

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

    terraform validate
    

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

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

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

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

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

Provisionar os recursos

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

  1. Verifique se o diretório de trabalho atual é $HOME/cloudshell_open/terraform-ecommerce-microservices-on-gke/infra. Se não estiver, acesse esse diretório.

  2. Aplique a configuração do Terraform:

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

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

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

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

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

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

    Apply complete!
    

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.

Continue para Explorar a Cymbal Shops para descobrir como testar e conhecer sua solução.

Conhecer as lojas da Cymbal

Parabéns! Você implantou o site da Cymbal Shops. Você pode visitar o site da Cymbal Shops e conferir as soluções no console do Google Cloud. Esteja ciente de que pode levar cerca de cinco minutos após a implantação do aplicativo para que o site apareça no endereço fornecido.

Visite o site da Cymbal Shops

A maneira como você encontra o site da Cymbal Shops depende de como a solução foi implantada.

Implantações do console

Se você tiver implantado a solução no console, poderá acessar o site diretamente na página Implantações da solução.

  • Se você tiver terminado de implantar a solução, clique em Acessar o app da Web para acessar o site. Caso contrário, clique no menu Ações da implantação e selecione Acessar o app da Web.

Implantações do Terraform

Se você implantou a solução usando a CLI do Terraform, primeiro encontre o endereço IP do front-end fornecido pela Entrada em vários clusters. É possível fazer isso na linha de comando usando a Google Cloud CLI (a abordagem mais simples) ou o Console do Google Cloud.

gcloud

  1. Verifique se você tem a versão mais recente da Google Cloud CLI instalada. Recomendamos executar o comando no Cloud Shell, em que a ferramenta já está instalada.
  2. Execute o seguinte comando para conseguir o endereço IP, substituindo PROJECT_ID pelo ID do seu projeto do Google Cloud:

    gcloud compute addresses list \
       --filter="name=('multi-cluster-ingress-ip-address-1')" \
       --project=PROJECT_ID
    
  3. Copie e cole o endereço retornado pelo comando no seu navegador para visitar o site.

Console

  1. Acesse a página do Google Kubernetes Engine no console do Google Cloud:

    Acessar o Google Kubernetes Engine

  2. Selecione Navegador de objetos no menu de navegação.

  3. Na lista Navegador de objetos, abra a seção networking.gke.io e selecione MultiClusterIngress. Talvez seja necessário rolar para baixo para encontrar essa seção.

  4. Na página MultiClusterIngress, selecione frontend-multi-cluster-ingress.

  5. Na página de detalhes frontend-multi-cluster-ingress, encontre o endereço IP. Clique neste endereço para visitar o site.

Explore o site

Agora você pode interagir com o site da Cymbal Shops da mesma forma que os clientes o veriam, incluindo navegar pelos produtos, adicionar produtos ao carrinho e finalizar a compra como convidado.

Explore sua solução

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

Iniciar o tour

Excluir a implantação

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

Excluir usando o console

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

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

    Acessar implantações de solução

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

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

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

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

    O campo Status mostra Excluindo.

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

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

Excluir usando a CLI do Terraform

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

  1. No Cloud Shell, verifique se o diretório de trabalho atual é $HOME/cloudshell_open/terraform-ecommerce-microservices-on-gke/infra. Se não estiver, acesse esse diretório.

  2. Remova os recursos provisionados pelo Terraform:

    terraform destroy
    

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

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

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

    Destroy complete!
    

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

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

Excluir o projeto

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

  1. No Console do Google Cloud, acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir.
  3. No prompt, digite o ID do projeto e clique em Encerrar.

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

Opcional: excluir a conta de serviço

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

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

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

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

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

      Acessar Contas de serviço

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

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

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

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

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

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

Solucionar erros

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

Erros ao implantar usando o console

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

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

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

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

    1. Clique em Ações.

    2. Selecione Ver registros do Cloud Build.

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

Erros ao implantar usando a CLI do Terraform

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

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

Erro ao criar o elemento: o recurso já existe

Se você implantar essa solução em um projeto em que o Ingress de vários clusters já está configurado, verá um erro semelhante ao seguinte:

Error: Error creating Feature: Resource already exists - apply blocked by lifecycle params: &beta.Feature{Name:(*string)(0xc0017d1d00), Labels:map[string]string{}, ResourceState:(*beta.FeatureResourceState)(0xc001b9d890), Spec:(*beta.FeatureSpec)(0xc001792f00), State:(*beta.FeatureState)(0xc001792f50), CreateTime:(*string)(0xc001792fd0), UpdateTime:(*string)(0xc001792ff0), DeleteTime:(*string)(nil), Project:(*string)(0xc0017d1d40), Location:(*string)(0xc0017d1ca0)}.
running tf apply: terraform apply failed: running terraform failed: exit status 1

Isso ocorre porque essa solução implanta um novo cluster do GKE de configuração no projeto selecionado. Um projeto (especificamente, a frota de um projeto) pode conter apenas um cluster de configuração para configurar a Entrada de vários clusters. Para corrigir esse problema, remova o cluster de configuração de Entrada de vários clusters existente ou comece novamente em um novo projeto.

Erro: job: default/kubernetes-manifests-deployer-job está em estado de falha

O Terraform desta solução implanta um job do Kubernetes chamado kubernetes-manifests-deployer-job. Esse job do Kubernetes implanta os recursos do Kubernetes (microsserviços da Cymbal Shops, o banco de dados do Redis etc.) necessários para essa solução nos três clusters.

Como esse job do Kubernetes é complexo e depende da prontidão dos três clusters, ele pode falhar de vez em quando com uma mensagem de erro semelhante a esta:

kubernetes_job.kubernetes_manifests_deployer_job: Creation errored after 5m8s
...
Error: job: default/kubernetes-manifests-deployer-job is in failed state

Se você receber esse erro, é provável que parte da infraestrutura do Google Cloud da solução já esteja provisionada, mesmo que o restante da implantação não tenha sido concluído com sucesso. Recomendamos excluir o projeto para evitar a cobrança por esses recursos e tentar implantar novamente em um projeto novo e separado.

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.

Erro ao excluir uma implantação

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

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

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

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

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

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

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

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

      Acessar implantações de solução

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

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

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

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

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

  2. No Console do Google Cloud, ative o Cloud Shell.

    Ativar o Cloud Shell

    Na parte inferior do Console do Google Cloud, uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a CLI do Google Cloud já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.

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

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

    Nesses comandos, substitua o seguinte:

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

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

    O resultado será assim:

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

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

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

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

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

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

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

    terraform init
    

    Aguarde até ver a seguinte mensagem:

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

    terraform destroy
    

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

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

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

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

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

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

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

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

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

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

Enviar feedback

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

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

Para enviar feedback, faça o seguinte:

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

    Também recomendamos que você analise a lista de problemas (abertos e fechados) no repositório do GitHub da solução.

A seguir