

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Automatice CloudFront las actualizaciones cuando cambien los puntos finales del equilibrador de carga mediante Terraform
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change"></a>

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

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

Cuando los usuarios de Amazon Elastic Kubernetes Service (Amazon EKS) eliminan y vuelven a instalar su configuración de entrada mediante gráficos de Helm, se crea un nuevo equilibrador de carga de aplicación (ALB). Esto crea un problema porque Amazon CloudFront sigue haciendo referencia al registro DNS anterior de la ALB. Como resultado, no se podrá acceder a los servicios destinados a este punto de conexiön. (Para más información sobre este flujo de trabajo problemático, consulte [Información adicional](#automate-cloudfront-updates-when-load-balancer-endpoints-change-additional)).

Para resolver este problema, este patrón describe el uso de una AWS Lambda función personalizada que se desarrolló con Python. Esta función Lambda detecta automáticamente cuando se crea un nuevo ALB mediante las reglas de Amazon. EventBridge A continuación AWS SDK para Python (Boto3), la función actualiza la CloudFront configuración con la nueva dirección DNS del ALB, lo que garantiza que el tráfico se dirija al punto final correcto.

Esta solución automatizada mantiene la continuidad del servicio sin enrutamiento ni latencia adicionales. El proceso ayuda a garantizar que CloudFront siempre haga referencia al punto final DNS del ALB correcto, incluso cuando la infraestructura subyacente cambie.

## Requisitos previos y limitaciones
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS.
+ Ejemplo de aplicación web para pruebas y validaciones que se implementa en Amazon EKS mediante Helm. Para más información, consulte [Implementación de aplicaciones con Helm en Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) en la documentación de Amazon EKS.
+ Configure CloudFront para enrutar las llamadas a un ALB creado por un controlador de [ingreso](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/) Helm. Para obtener más información, consulte [Instalar el controlador de AWS Load Balancer con Helm](https://docs.aws.amazon.com/eks/latest/userguide/lbc-helm.html) en la documentación de Amazon EKS y [Restringir el acceso a los balanceadores de carga de aplicaciones](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html) en la documentación. CloudFront 
+ Terraform se [instala](https://developer.hashicorp.com/terraform/install?product_intent=terraform) y configura en un espacio de trabajo local.

**Limitaciones**
+ Algunos Servicios de AWS no están disponibles en todos. Regiones de AWS Para obtener información sobre la disponibilidad en regiones, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

**Versiones de producto**
+ Terraform, versión 1.0.0 o posterior
+ La versión 4.20 o posterior del [Proveedor de AWS](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) para Terraform

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

En el siguiente diagrama se muestran los componentes de la arquitectura y el flujo de trabajo de esta aplicación.

![Flujo de trabajo para actualizar CloudFront con una nueva dirección DNS de ALB detectada mediante una regla. EventBridge](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/03c30b18-4dd7-4dd4-b960-5a5cc58cec63/images/28854767-0902-4398-80af-b19141dd94e4.png)


Esta solución realiza los pasos que se indican a continuación:

1. El controlador de entrada de Amazon EKS crea un nuevo equilibrador de carga de aplicación (ALB) cada vez que se reinicia o implementa Helm.

1. EventBridge busca eventos de creación de ALB.

1. El evento de creación de ALB activa la función de Lambda.

1. La función Lambda se implementó en base a Python 3.9 y utiliza la API boto3 para realizar llamadas. Servicios de AWS La función Lambda actualiza la CloudFront entrada con el nombre DNS más reciente del balanceador de carga, que se recibe de los eventos de creación del balanceador de carga.

## Tools (Herramientas)
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-tools"></a>

**Servicios de AWS**
+ [Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html) acelera la distribución de tu contenido web al distribuirlo a través de una red mundial de centros de datos, lo que reduce la latencia y mejora el rendimiento.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) le ayuda a ejecutar AWS Kubernetes sin necesidad de instalar o mantener su propio plano de control o nodos de Kubernetes.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) es un servicio de bus de eventos sin servidor que le ayuda a conectar sus aplicaciones con datos en tiempo real de diversas fuentes. Por ejemplo, AWS Lambda funciones, puntos finales de invocación HTTP que utilizan destinos de API o buses de eventos en otros. Cuentas de AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.
+ [AWS SDK para Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)es un kit de desarrollo de software que le ayuda a integrar su aplicación, biblioteca o script de Python con Servicios de AWS.

**Otras herramientas**
+ [Python](https://www.python.org/) es un lenguaje de programación informático de uso general.
+ [Terraform](https://www.terraform.io/) es una herramienta de infraestructura como código (IaC) HashiCorp que le ayuda a crear y administrar recursos locales y en la nube.

**Repositorio de código**

[El código de este patrón está disponible en el GitHub aws-cloudfront-automation-terraform repositorio -samples.](https://github.com/aws-samples/aws-cloudfront-automation-terraform-samples)

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

### Configuración de la estación de trabajo local
<a name="set-up-local-workstation"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instalar y configurar la CLI de Git. | Para instalar y configurar la interfaz de la línea de comandos (CLI) de Git en su estación de trabajo local, siga las instrucciones de [Introducción a la instalación de Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) en la documentación de Git. | DevOps ingeniero | 
| Cree la carpeta del proyecto y añada los archivos. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingeniero | 

### Aprovisionamiento de la arquitectura de destino mediante la configuración de Terraform
<a name="provision-the-target-architecture-using-the-terraform-configuration"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente la solución. | Para implementar recursos en el objetivo Cuenta de AWS, siga los siguientes pasos:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingeniero | 

### Verifique la implementación
<a name="verify-the-deployment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Valide la implementación. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingeniero | 

### Limpieza de la infraestructura
<a name="clean-up-infrastructure"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Limpie la infraestructura. | Para limpiar la infraestructura que creó anteriormente, realice los siguientes pasos:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingeniero | 

## Resolución de problemas
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Error al validar las credenciales del proveedor | Al ejecutar los comandos `apply` o `destroy` de Terraform desde su equipo local, es posible que se produzca un error similar al siguiente:<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 />Este error se debe a la caducidad del token de seguridad de las credenciales usadas en la configuración de la máquina local.<br />Para resolver el error, consulte [Establecer y ver los ajustes de configuración](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods) en la documentación AWS Command Line Interface (AWS CLI). | 

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

**AWS resources**
+ [Restrinja el acceso a los balanceadores de carga de aplicaciones](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html)
+ [Enrute el tráfico de Internet con el AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html)

**Documentación de Terraform**
+ [AWS Proveedor](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)
+ [Instalar Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ [Estado remoto](https://developer.hashicorp.com/terraform/language/state/remote)

## Información adicional
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-additional"></a>

**Flujo de trabajo problemático**

![Flujo de trabajo que produce la entrada en el DNS de out-of-date ALB. CloudFront](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/03c30b18-4dd7-4dd4-b960-5a5cc58cec63/images/bb3c2c93-c749-435d-9b1d-2bbf6f0cf085.png)


En el diagrama, se muestra el siguiente flujo de trabajo:

1. Cuando el usuario accede a la aplicación, la llamada va a. CloudFront

1. CloudFront enruta las llamadas al Application Load Balancer (ALB) correspondiente.

1. El ALB incluye las direcciones IP de destino, que son las direcciones IP del pod de aplicaciones. A partir de ahí, el ALB proporciona al usuario los resultados esperados.

Sin embargo, este flujo de trabajo tiene un problema. Las implementaciones de aplicaciones se realizan a través de gráficos de Helm. Siempre que hay una implementación o si alguien reinicia Helm, también se vuelve a crear la entrada correspondiente. Como resultado, el controlador del equilibrador de carga externo vuelve a crear el ALB. Además, durante cada recreación, el ALB se vuelve a crear con un nombre de DNS diferente. Debido a esto, CloudFront tendrá una entrada obsoleta en la configuración de origen. Debido a que esta entrada está obsoleta, el usuario no podrá acceder a la aplicación. Este problema provoca un tiempo de inactividad para los usuarios.

**Solución alternativa**

Otra posible solución es crear un [DNS externo](https://github.com/kubernetes-sigs/external-dns) para el ALB y, a continuación, apuntarlo al punto final de la zona alojada privada de Amazon Route 53. CloudFront Sin embargo, este enfoque añade otro salto en el flujo de la aplicación, lo que podría provocar la latencia de la aplicación. La solución de la función de Lambda de este patrón no interrumpe el flujo de actual.