Automatize CloudFront as atualizações quando os endpoints do balanceador de carga mudarem usando o Terraform - Recomendações da AWS

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

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.

Fluxo de trabalho a ser atualizado CloudFront com o novo endereço DNS do ALB detectado por meio da EventBridge regra.

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.

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

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

  4. 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

TarefaDescriptionHabilidades 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 na documentação oficial do Git.

DevOps engenheiro

Crie a pasta do projeto e adicione os arquivos.

  1. Vá até o GitHub repositório do padrão e escolha o botão Código.

  2. Na caixa de diálogo Clonar, escolha a guia HTTPS. Em Clonar usando o URL web, copie o URL apresentado.

  3. Crie uma pasta em sua máquina local. Nomeie-a com o nome do seu projeto.

  4. Abra um terminal em sua máquina local e acesse essa pasta.

  5. Para clonar o repositório Git correspondente a este padrão, execute o seguinte comando: git clone https://github.com/aws-samples/aws-cloudfront-automation-terraform-samples

  6. Após a clonagem do repositório, use o comando apresentado a seguir para acessar o diretório clonado: cd <directory name>/cloudfront-update

    Abra esse projeto em um ambiente de desenvolvimento integrado (IDE) de sua preferência.

DevOps engenheiro
TarefaDescriptionHabilidades necessárias

Implante a solução.

Para implantar recursos no destino Conta da AWS, use as seguintes etapas:

  1. Acesse a pasta cloudfront-update.

  2. Atualize o arquivo terraform.tfvars com o cloudfront_distribution_id.

  3. Para definir o Região da AWS para o seu AWS perfil, execute o seguinte comando:

    export AWS_REGION={{ REGION }}
  4. Para inicializar o Terraform, execute o seguinte comando:

    terraform init
  5. Para validar o Terraform, execute o seguinte comando:

    terraform validate
  6. Para criar um plano de execução do Terraform, execute o seguinte comando:

    terraform plan
  7. Para aplicar as ações do terraform plan, execute o seguinte comando:

    terraform apply
DevOps engenheiro
TarefaDescriptionHabilidades necessárias

Valide a implantação.

  1. Faça login no Console de gerenciamento da AWS e abra o CloudFront console da Amazon em https://console.aws.amazon.com/cloudfront/v4/home.

  2. No painel de navegação esquerdo, escolha Distribuições e abra a CloudFront distribuição.

  3. Na guia Origens, verifique se o nome da origem e o mapeamento da origem contêm o registro de DNS do ALB atualizado.

DevOps engenheiro
TarefaDescriptionHabilidades necessárias

Limpe a infraestrutura.

Para limpar a infraestrutura que você criou anteriormente, use as seguintes etapas:

  1. Execute o seguinte comando: terraform destroy

  2. Para confirmar o comando “destroy”, insira yes.

DevOps engenheiro

Solução de problemas

ProblemaSoluçã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:

Error: configuring Terraform AWS Provider: error validating provider credentials: error calling sts:GetCallerIdentity: operation error STS: GetCallerIdentity, https response error StatusCode: 403, RequestID: 123456a9-fbc1-40ed-b8d8-513d0133ba7f, api error InvalidClientTokenId: The security token included in the request is invalid.

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

Fluxo de trabalho que produz a entrada out-of-date ALB DNS em. CloudFront

O diagrama mostra o seguinte fluxo de trabalho:

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

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

  3. 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 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.