

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
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change"></a>

*Tamilselvan P, Mohan Annam e Naveen Suthar, Amazon Web Services*

## Resumo
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-summary"></a>

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](#automate-cloudfront-updates-when-load-balancer-endpoints-change-additional).)

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
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-prereqs"></a>

**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](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) na documentação do Amazon EKS.
+ Configure CloudFront para rotear chamadas para um ALB criado por um controlador de [entrada](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/) do Helm. Para obter mais informações, consulte [Instalar o controlador AWS Load Balancer com o Helm](https://docs.aws.amazon.com/eks/latest/userguide/lbc-helm.html) na documentação do Amazon EKS e [Restringir o acesso aos Application Load Balancers](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html) na documentação. CloudFront 
+ O Terraform [instalado](https://developer.hashicorp.com/terraform/install?product_intent=terraform) 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](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

**Versões do produto**
+ Terraform versão 1.0.0 ou posterior
+ Terraform [AWS Provider](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) versão 4.20 ou versões posteriores

## Arquitetura
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-architecture"></a>

O diagrama a seguir mostra o fluxo de trabalho e os componentes da arquitetura desse padrão.

![Fluxo de trabalho a ser atualizado CloudFront com o novo endereço DNS do ALB detectado por meio da EventBridge regra.](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/03c30b18-4dd7-4dd4-b960-5a5cc58cec63/images/28854767-0902-4398-80af-b19141dd94e4.png)


Esta solução executa as seguintes etapas:

1. O controlador de entrada do Amazon EKS cria um novo Application Load Balancer (ALB) sempre que há reinicialização ou implantação do Helm.

1. EventBridge procura eventos de criação de ALB.

1. O evento de criação do ALB aciona a função do Lambda.

1. 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
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-tools"></a>

**Serviços da AWS**
+ [A Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html) 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](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)) 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](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) é 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](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)é 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](https://www.python.org/) é uma linguagem de programação de computador de uso geral.
+ [O Terraform](https://www.terraform.io/) é 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](https://github.com/aws-samples/aws-cloudfront-automation-terraform-samples).

## Épicos
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-epics"></a>

### Configuração da estação de trabalho local
<a name="set-up-local-workstation"></a>


| 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](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) na documentação oficial do Git. | DevOps engenheiro | 
| Crie a pasta do projeto e adicione os arquivos. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps engenheiro | 

### Provisionamento da arquitetura de destino por meio da configuração do Terraform
<a name="provision-the-target-architecture-using-the-terraform-configuration"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implante a solução. | Para implantar recursos no destino Conta da AWS, use as seguintes etapas:[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps engenheiro | 

### Verificar a implantação
<a name="verify-the-deployment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Valide a implantação. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps engenheiro | 

### Limpeza da infraestrutura
<a name="clean-up-infrastructure"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Limpe a infraestrutura. | Para limpar a infraestrutura que você criou anteriormente, use as seguintes etapas:[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps engenheiro | 

## Solução de problemas
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Erro ao validar as credenciais do provedor | Ao executar os comandos `apply` ou `destroy` do Terraform em sua máquina local, você pode encontrar um erro semelhante ao seguinte:<pre>Error: configuring Terraform AWS Provider: error validating provider <br />credentials: error calling sts:GetCallerIdentity: operation error STS: <br />GetCallerIdentity, https response error StatusCode: 403, RequestID: <br />123456a9-fbc1-40ed-b8d8-513d0133ba7f, api error InvalidClientTokenId: <br />The security token included in the request is invalid.</pre><br />Esse erro é causado pela expiração do token de segurança das credenciais usadas na configuração da sua máquina local.<br />Para resolver o erro, consulte [Definir e visualizar as configurações](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods) na documentação AWS Command Line Interface (AWS CLI). | 

## Recursos relacionados
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-resources"></a>

**AWS recursos**
+ [Restrinja o acesso aos Application Load Balancers](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html)
+ [Roteie o tráfego da Internet com o AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html)

**Documentação do Terraform**
+ [AWS Provedor](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)
+ [Instalar o Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ [Remote State](https://developer.hashicorp.com/terraform/language/state/remote)

## Mais informações
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-additional"></a>

**Fluxo de trabalho com problemas**

![Fluxo de trabalho que produz a entrada out-of-date ALB DNS em. CloudFront](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/03c30b18-4dd7-4dd4-b960-5a5cc58cec63/images/bb3c2c93-c749-435d-9b1d-2bbf6f0cf085.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. Quando o usuário acessa o aplicativo, a chamada vai para CloudFront.

1. CloudFront encaminha as chamadas para o respectivo Application Load Balancer (ALB).

1. 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](https://github.com/kubernetes-sigs/external-dns) para o ALB e, em seguida, direcioná-lo para o endpoint de zona hospedada privada do Amazon Route 53. CloudFront No entanto, essa abordagem adiciona um salto extra no fluxo da aplicação, o que pode causar latência. A solução baseada na função do Lambda deste padrão não interrompe o fluxo atual.