Seleccione sus preferencias de cookies

Usamos cookies esenciales y herramientas similares que son necesarias para proporcionar nuestro sitio y nuestros servicios. Usamos cookies de rendimiento para recopilar estadísticas anónimas para que podamos entender cómo los clientes usan nuestro sitio y hacer mejoras. Las cookies esenciales no se pueden desactivar, pero puede hacer clic en “Personalizar” o “Rechazar” para rechazar las cookies de rendimiento.

Si está de acuerdo, AWS y los terceros aprobados también utilizarán cookies para proporcionar características útiles del sitio, recordar sus preferencias y mostrar contenido relevante, incluida publicidad relevante. Para aceptar o rechazar todas las cookies no esenciales, haga clic en “Aceptar” o “Rechazar”. Para elegir opciones más detalladas, haga clic en “Personalizar”.

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.

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

Creado por Tamilselvan P (AWS), Mohan Annam (AWS) y Naveen Suthar (AWS)

Resumen

Cuando los usuarios de Amazon Elastic Kubernetes Service (Amazon EKS) eliminan y vuelven a instalar su configuración de ingreso mediante gráficos de Helm, se crea un nuevo Application Load Balancer (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 final. (Para obtener 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 for 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 de ALB correcto, incluso cuando la infraestructura subyacente cambie.

Requisitos previos y limitaciones

Requisitos previos 

Limitaciones

Versiones de producto

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 lleva a cabo los siguientes pasos:

  1. El controlador de ingreso Amazon EKS crea un nuevo Application Load Balancer (ALB) cada vez que se reinicia o despliega Helm.

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

  3. El evento de creación de ALB activa la función 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.

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 for 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

Configura y configura la CLI de Git.

Para instalar y configurar la interfaz de 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 Clonar, selecciona la pestaña HTTPS. En Clonar mediante la URL web, copia la URL que se muestra.

  3. Crea una carpeta en tu máquina local. Nómbrela con el nombre de su proyecto.

  4. Abre una terminal en tu máquina local y navega hasta esta carpeta.

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

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

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

DevOps ingeniero

Configure una estación de trabajo local

TareaDescripciónHabilidades requeridas

Configura y configura la CLI de Git.

Para instalar y configurar la interfaz de 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 Clonar, selecciona la pestaña HTTPS. En Clonar mediante la URL web, copia la URL que se muestra.

  3. Crea una carpeta en tu máquina local. Nómbrela con el nombre de su proyecto.

  4. Abre una terminal en tu máquina local y navega hasta esta carpeta.

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

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

    Abra este proyecto en el 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 terraform.tfvars archivo concloudfront_distribution_id.

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

    export AWS_REGION={{ REGION }}
  4. Para inicializar Terraform, ejecuta el siguiente comando:

    terraform init
  5. Para validar Terraform, ejecute el siguiente comando:

    terraform validate
  6. Para crear un plan de ejecución de Terraform, ejecute el siguiente comando:

    terraform plan
  7. Para aplicar las acciones desdeterraform plan, ejecute el siguiente comando:

    terraform apply
DevOps ingeniero

Aprovisione la arquitectura de destino mediante la configuración de Terraform

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 terraform.tfvars archivo concloudfront_distribution_id.

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

    export AWS_REGION={{ REGION }}
  4. Para inicializar Terraform, ejecuta el siguiente comando:

    terraform init
  5. Para validar Terraform, ejecute el siguiente comando:

    terraform validate
  6. Para crear un plan de ejecución de Terraform, ejecute el siguiente comando:

    terraform plan
  7. Para aplicar las acciones desdeterraform plan, ejecute el siguiente comando:

    terraform apply
DevOps ingeniero
TareaDescripciónHabilidades requeridas

Valide la implementación.

  1. Inicia sesión AWS Management Console 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 Orígenes, compruebe que el nombre y el mapeo de origen tengan el registro DNS ALB actualizado.

DevOps ingeniero

Verifique la implementación

TareaDescripciónHabilidades requeridas

Valide la implementación.

  1. Inicia sesión AWS Management Console 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 Orígenes, compruebe que el nombre y el mapeo de origen tengan el registro DNS ALB actualizado.

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Limpie la infraestructura.

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

  1. Ejecute el comando siguiente: terraform destroy

  2. Para confirmar el comando de destrucción, introduzcayes.

DevOps ingeniero

Limpiar la infraestructura

TareaDescripciónHabilidades requeridas

Limpie la infraestructura.

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

  1. Ejecute el comando siguiente: terraform destroy

  2. Para confirmar el comando de destrucción, introduzcayes.

DevOps ingeniero

Solución de problemas

ProblemaSolución

Error al validar las credenciales del proveedor

Al ejecutar Terraform apply o destroy los comandos desde su máquina 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, consulta 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 CloudFront el DNS de out-of-date ALB.

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

  1. Cuando el usuario accede a la aplicación, la llamada se dirige 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 demuestra un problema. Los despliegues de aplicaciones se realizan a través de gráficos de Helm. Siempre que hay un despliegue 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 función Lambda de este patrón no interrumpe el flujo de corriente.

PrivacidadTérminos del sitioPreferencias de cookies
© 2025, Amazon Web Services, Inc o sus afiliados. Todos los derechos reservados.