As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Automatize CloudFront as atualizações quando os endpoints do balanceador de carga mudarem usando o Terraform
Tamilselvan P, Mohan Annam e Naveen Suthar, Amazon Web Services
Resumo
Quando usuários do Amazon Elastic Kubernetes Service (Amazon EKS) excluem e instalam novamente a configuração de entrada por meio de charts do Helm, um novo Application Load Balancer (ALB) é criado. Isso cria um problema porque CloudFront a Amazon continua referenciando o antigo registro DNS do ALB. Como resultado, os serviços destinados a este endpoint não estarão acessíveis. (Para obter mais detalhes sobre este fluxo de trabalho com problemas, consulte Informações adicionais.)
Para resolver esse problema, esse padrão descreve o uso de uma AWS Lambda função personalizada desenvolvida com Python. Essa função Lambda detecta automaticamente quando um novo ALB é criado por meio das regras da Amazon. EventBridge Usando o AWS SDK para Python (Boto3), a função então atualiza a CloudFront configuração com o novo endereço DNS do ALB, garantindo que o tráfego seja roteado para o endpoint correto.
Essa solução automatizada mantém a continuidade do serviço sem a necessidade de roteamento adicional ou aumento de latência. O processo ajuda a garantir que CloudFront sempre faça referência ao endpoint DNS correto do ALB, mesmo quando a infraestrutura subjacente muda.
Pré-requisitos e limitações
Pré-requisitos
Um ativo Conta da AWS.
Uma aplicação web de amostra para testes e validações, implantada no Amazon EKS usando o Helm. Para obter mais informações, consulte Deploy applications with Helm on Amazon EKS na documentação do Amazon EKS.
Configure CloudFront para rotear chamadas para um ALB criado por um controlador de entrada
do Helm. Para obter mais informações, consulte Instalar o controlador AWS Load Balancer com o Helm na documentação do Amazon EKS e Restringir o acesso aos Application Load Balancers na documentação. CloudFront O Terraform instalado
e configurado em um espaço de trabalho local.
Limitações
Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte AWS Services by Region
. Para endpoints específicos, consulte Service endpoints and quotas e clique no link correspondente ao serviço desejado.
Versões do produto
Terraform versão 1.0.0 ou posterior
Terraform AWS Provider
versão 4.20 ou versões posteriores
Arquitetura
O diagrama a seguir mostra o fluxo de trabalho e os componentes da arquitetura desse padrão.

Esta solução executa as seguintes etapas:
O controlador de entrada do Amazon EKS cria um novo Application Load Balancer (ALB) sempre que há reinicialização ou implantação do Helm.
EventBridge procura eventos de criação de ALB.
O evento de criação do ALB aciona a função do Lambda.
A função Lambda foi implantada com base no python 3.9 e usa a API boto3 para fazer chamadas. Serviços da AWS A função Lambda atualiza a CloudFront entrada com o nome DNS mais recente do balanceador de carga, que é recebido dos eventos de criação do balanceador de carga.
Ferramentas
Serviços da AWS
A Amazon CloudFront acelera a distribuição do seu conteúdo da web entregando-o por meio de uma rede mundial de data centers, o que reduz a latência e melhora o desempenho.
O Amazon Elastic Kubernetes Service (Amazon EKS) ajuda você a executar o AWS Kubernetes sem precisar instalar ou manter seu próprio plano de controle ou nós do Kubernetes.
EventBridgeA Amazon é um serviço de ônibus de eventos sem servidor que ajuda você a conectar seus aplicativos com dados em tempo real de várias fontes. Por exemplo, AWS Lambda funções, endpoints de invocação HTTP usando destinos de API ou barramentos de eventos em outros. Contas da AWS
O AWS Lambda é um serviço de computação que ajuda a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.
AWS SDK para Python (Boto3)
é um kit de desenvolvimento de software que ajuda você a integrar seu aplicativo, biblioteca ou script Python com o. Serviços da AWS
Outras ferramentas
Python
é uma linguagem de programação de computador de uso geral. O Terraform
é uma ferramenta de infraestrutura como código (IaC) HashiCorp que ajuda você a criar e gerenciar recursos na nuvem e no local.
Repositório de código
O código desse padrão está disponível no repositório GitHub aws-cloudfront-automation-terraform-samples
Épicos
| Tarefa | Description | Habilidades necessárias |
|---|---|---|
Configure e ajuste a CLI do Git. | Para instalar e configurar a interface de linha de comandos (CLI) do Git em sua estação de trabalho local, siga as instruções apresentadas em Getting Started – Installing Git | DevOps engenheiro |
Crie a pasta do projeto e adicione os arquivos. |
| DevOps engenheiro |
| Tarefa | Description | Habilidades necessárias |
|---|---|---|
Implante a solução. | Para implantar recursos no destino Conta da AWS, use as seguintes etapas:
| DevOps engenheiro |
| Tarefa | Description | Habilidades necessárias |
|---|---|---|
Valide a implantação. |
| DevOps engenheiro |
| Tarefa | Description | Habilidades necessárias |
|---|---|---|
Limpe a infraestrutura. | Para limpar a infraestrutura que você criou anteriormente, use as seguintes etapas:
| DevOps engenheiro |
Solução de problemas
| Problema | Solução |
|---|---|
Erro ao validar as credenciais do provedor | Ao executar os comandos
Esse erro é causado pela expiração do token de segurança das credenciais usadas na configuração da sua máquina local. Para resolver o erro, consulte Definir e visualizar as configurações na documentação AWS Command Line Interface (AWS CLI). |
Recursos relacionados
AWS recursos
Documentação do Terraform
Mais informações
Fluxo de trabalho com problemas

O diagrama mostra o seguinte fluxo de trabalho:
Quando o usuário acessa o aplicativo, a chamada vai para CloudFront.
CloudFront encaminha as chamadas para o respectivo Application Load Balancer (ALB).
O ALB inclui os endereços IP de destino, que correspondem aos endereços IP dos pods da aplicação. A partir desse ponto, o ALB fornece os resultados esperados ao usuário.
No entanto, esse fluxo de trabalho evidencia um problema. As implantações da aplicação estão sendo realizadas por meio de charts do Helm. Sempre que há uma implantação ou se alguém reinicia o Helm, a entrada correspondente também é recriada. Como resultado, o controlador do balanceador de carga externo recria o ALB. Além disso, a cada recriação, o ALB é recriado com um nome de DNS diferente. Por causa disso, CloudFront terá uma entrada obsoleta nas configurações de origem. Devido a essa entrada desatualizada, a aplicação não ficará acessível para o usuário. Esse problema resulta em tempo de inatividade para os usuários.
Solução alternativa
Outra solução possível é criar um DNS externo