Automatice CloudFront las actualizaciones cuando cambien los puntos finales del equilibrador de carga mediante Terraform - Recomendaciones de AWS

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

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

Resumen

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

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

Requisitos previos 

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. Para ver los puntos de conexión específicos, consulte Service endpoints and quotas 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 para Terraform

Arquitectura

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

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.

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

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

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

Servicios de AWS

  • Amazon CloudFront 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 EKS) le ayuda a ejecutar AWS Kubernetes sin necesidad de instalar o mantener su propio plano de control o nodos de Kubernetes.

  • Amazon EventBridge 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 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)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 es un lenguaje de programación informático de uso general.

  • Terraform 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.

Epics

TareaDescripciónHabilidades 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 en la documentación de Git.

DevOps ingeniero

Cree la carpeta del proyecto y añada los archivos.

  1. Ve al GitHub repositorio del patrón y pulsa el botón Código.

  2. En el cuadro de diálogo Clone (Clonar), seleccione la pestaña HTTPS. En Clone using the web URL (Clonar mediante la URL web), copie la URL que se muestra.

  3. En el equipo local, cree una carpeta. Póngale el nombre del proyecto.

  4. Abra un terminal en la máquina local y vaya a la carpeta.

  5. Para clonar el repositorio de Git de este patrón, ejecute el siguiente comando: git clone https://github.com/aws-samples/aws-cloudfront-automation-terraform-samples

  6. Una vez clonado el repositorio, utilice el siguiente comando para ir al directorio clonado: cd <directory name>/cloudfront-update

    Abra el proyecto en un entorno de desarrollo integrado (IDE) de su elección.

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Implemente la solución.

Para implementar recursos en el objetivo Cuenta de AWS, siga los siguientes pasos:

  1. Vaya a la carpeta cloudfront-update.

  2. Actualice el archivo terraform.tfvars con cloudfront_distribution_id.

  3. Para configurarlo Región de AWS para su AWS perfil, ejecute el siguiente comando:

    export AWS_REGION={{ REGION }}
  4. Ejecute el comando siguiente para inicializar Terraform:

    terraform init
  5. Ejecute el siguiente comando para validar Terraform:

    terraform validate
  6. Ejecute el siguiente comando para crear un plan de ejecución de Terraform:

    terraform plan
  7. Ejecute el siguiente comando para aplicar las acciones desde terraform plan:

    terraform apply
DevOps ingeniero
TareaDescripciónHabilidades requeridas

Valide la implementación.

  1. Inicia sesión Consola de administración de AWS y abre la CloudFront consola de Amazon en la https://console.aws.amazon.com/cloudfront/v4/home.

  2. En el panel de navegación izquierdo, selecciona Distribuciones y, a continuación, abre la distribución. CloudFront

  3. En la pestaña Origins (Orígenes), compruebe que el nombre y la asignación de origen tengan el registro DNS de ALB actualizado.

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Limpie la infraestructura.

Para limpiar la infraestructura que creó anteriormente, realice los siguientes pasos:

  1. Ejecute el comando siguiente: terraform destroy

  2. Para confirmar el comando de eliminación, introduzca yes.

DevOps ingeniero

Resolución de problemas

ProblemaSolució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:

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.

Este error se debe a la caducidad del token de seguridad de las credenciales usadas en la configuración de la máquina local.

Para resolver el error, consulte Establecer y ver los ajustes de configuración en la documentación AWS Command Line Interface (AWS CLI).

Recursos relacionados

AWS resources

Documentación de Terraform

Información adicional

Flujo de trabajo problemático

Flujo de trabajo que produce la entrada en el DNS de out-of-date ALB. CloudFront

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

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

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

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