

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Automatisez les CloudFront mises à jour lorsque les points de terminaison de l'équilibreur de charge changent à l'aide de Terraform
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change"></a>

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

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

Lorsque les utilisateurs d'Amazon Elastic Kubernetes Service (Amazon EKS) suppriment et réinstallent leur configuration d'entrée via des graphiques Helm, un nouvel Application Load Balancer (ALB) est créé. Cela pose problème car Amazon CloudFront continue de faire référence à l'enregistrement DNS de l'ancien ALB. Par conséquent, les services destinés à ce point de terminaison ne seront pas accessibles. (Pour plus de détails sur ce flux de travail problématique, voir [Informations supplémentaires](#automate-cloudfront-updates-when-load-balancer-endpoints-change-additional).)

Pour résoudre ce problème, ce modèle décrit l'utilisation d'une AWS Lambda fonction personnalisée développée avec Python. Cette fonction Lambda détecte automatiquement lorsqu'un nouvel ALB est créé par le biais des règles Amazon. EventBridge À l'aide de AWS SDK pour Python (Boto3), la fonction met ensuite à jour la CloudFront configuration avec l'adresse DNS du nouvel ALB, garantissant ainsi que le trafic est acheminé vers le point de terminaison approprié.

Cette solution automatisée assure la continuité du service sans routage ni latence supplémentaires. Le processus permet de garantir qu'il fait CloudFront toujours référence au point de terminaison DNS ALB correct, même lorsque l'infrastructure sous-jacente change.

## Conditions préalables et limitations
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS.
+ Exemple d'application Web de test et de validation déployée sur Amazon EKS à l'aide de Helm. Pour plus d'informations, consultez la section [Déployer des applications avec Helm sur Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) dans la documentation Amazon EKS.
+ Configurez CloudFront pour acheminer les appels vers un ALB créé par un contrôleur d'[entrée](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/) Helm. Pour plus d'informations, consultez [Installer le contrôleur AWS Load Balancer avec Helm](https://docs.aws.amazon.com/eks/latest/userguide/lbc-helm.html) dans la documentation Amazon EKS et [Restreindre l'accès aux équilibreurs de charge d'application](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html) dans la documentation. CloudFront 
+ Terraform [installé](https://developer.hashicorp.com/terraform/install?product_intent=terraform) et configuré dans un espace de travail local.

**Limites**
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, consultez la section [AWS Services par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez [Points de terminaison de service et quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien correspondant au service.

**Versions du produit**
+ Terraform version 1.0.0 ou ultérieure
+ Terraform [AWS Provider](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) version 4.20 ou ultérieure

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

Le schéma suivant montre les composants du flux de travail et de l'architecture de ce modèle.

![\[Flux de travail à mettre à jour CloudFront avec la nouvelle adresse DNS ALB détectée par le biais d'une EventBridge règle.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/03c30b18-4dd7-4dd4-b960-5a5cc58cec63/images/28854767-0902-4398-80af-b19141dd94e4.png)


Cette solution exécute les étapes suivantes :

1. Le contrôleur d'entrée Amazon EKS crée un nouvel Application Load Balancer (ALB) à chaque redémarrage ou déploiement de Helm.

1. EventBridge recherche les événements de création d'ALB.

1. L'événement de création ALB déclenche la fonction Lambda.

1. La fonction Lambda a été déployée sur la base de python 3.9 et utilise l'API boto3 pour appeler. Services AWS La fonction Lambda met à jour l' CloudFront entrée avec le dernier nom DNS de l'équilibreur de charge, qui provient des événements de création de l'équilibreur de charge.

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

**Services AWS**
+ [Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html) accélère la diffusion de votre contenu Web en le diffusant via un réseau mondial de centres de données, ce qui réduit le temps de latence et améliore les performances.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) vous permet d'exécuter AWS Kubernetes sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) est un service de bus d'événements sans serveur qui vous permet de connecter vos applications à des données en temps réel provenant de diverses sources. Par exemple, AWS Lambda des fonctions, des points de terminaison d'appel HTTP utilisant des destinations d'API ou des bus d'événements dans d'autres. Comptes AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [AWS SDK pour Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)est un kit de développement logiciel qui vous aide à intégrer votre application, bibliothèque ou script Python à Services AWS.

**Autres outils**
+ [Python](https://www.python.org/) est un langage de programmation informatique polyvalent.
+ [Terraform](https://www.terraform.io/) est un outil d'infrastructure en tant que code (IaC) HashiCorp qui vous aide à créer et à gérer des ressources cloud et sur site.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [aws-cloudfront-automation-terraform-samples](https://github.com/aws-samples/aws-cloudfront-automation-terraform-samples).

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

### Configuration d'un poste de travail local
<a name="set-up-local-workstation"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez et configurez la CLI Git. | Pour installer et configurer l'interface de ligne de commande (CLI) Git sur votre poste de travail local, suivez les instructions [Getting Started — Install Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) de la documentation Git. | DevOps ingénieur | 
| Créez le dossier du projet et ajoutez les fichiers. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingénieur | 

### Provisionner l'architecture cible à l'aide de la configuration Terraform
<a name="provision-the-target-architecture-using-the-terraform-configuration"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez la solution. | Pour déployer des ressources dans la cible Compte AWS, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingénieur | 

### Vérification du déploiement
<a name="verify-the-deployment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Validez le déploiement. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingénieur | 

### Nettoyer les infrastructures
<a name="clean-up-infrastructure"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Nettoyez l'infrastructure. | Pour nettoyer l'infrastructure que vous avez créée précédemment, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingénieur | 

## Résolution des problèmes
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Erreur lors de la validation des informations d'identification du fournisseur | Lorsque vous exécutez le Terraform `apply` ou `destroy` les commandes depuis votre machine locale, vous pouvez rencontrer une erreur similaire à la suivante :<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>Cette erreur est due à l'expiration du jeton de sécurité pour les informations d'identification utilisées dans la configuration de votre machine locale.Pour résoudre l'erreur, consultez la section [Définir et afficher les paramètres de configuration](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods) dans la documentation AWS Command Line Interface (AWS CLI). | 

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

**AWS resources**
+ [Restreindre l'accès aux équilibreurs de charge des applications](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html)
+ [Acheminez le trafic Internet avec le AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html)

**Documentation Terraform**
+ [AWS Fournisseur](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)
+ [Installez Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ [État distant](https://developer.hashicorp.com/terraform/language/state/remote)

## Informations supplémentaires
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-additional"></a>

**Flux de travail problématique**

![\[Flux de travail qui produit une entrée DNS out-of-date ALB dans. CloudFront\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/03c30b18-4dd7-4dd4-b960-5a5cc58cec63/images/bb3c2c93-c749-435d-9b1d-2bbf6f0cf085.png)


Le schéma suivant illustre le flux de travail suivant :

1. Lorsque l'utilisateur accède à l'application, l'appel passe à CloudFront.

1. CloudFront achemine les appels vers l'Application Load Balancer (ALB) correspondant.

1. L'ALB inclut les adresses IP cibles qui sont les adresses IP du pod d'application. À partir de là, l'ALB fournit les résultats attendus à l'utilisateur.

Toutefois, ce flux de travail présente un problème. Les déploiements d'applications se font par le biais de diagrammes Helm. Chaque fois qu'il y a un déploiement ou si quelqu'un redémarre Helm, l'entrée correspondante est également recréée. Par conséquent, le contrôleur d'équilibrage de charge externe recrée l'ALB. De plus, lors de chaque recréation, l'ALB est recréé avec un nom DNS différent. De ce fait, l'entrée dans les paramètres d'origine CloudFront sera obsolète. En raison de cette entrée périmée, l'application ne sera pas accessible à l'utilisateur. Ce problème entraîne des interruptions de service pour les utilisateurs.

**Solution alternative**

Une autre solution possible consiste à créer un [DNS externe](https://github.com/kubernetes-sigs/external-dns) pour l'ALB, puis à le pointer vers le point de terminaison de la zone hébergée privée Amazon Route 53. CloudFront Cependant, cette approche ajoute un autre saut dans le flux des applications, ce qui peut entraîner une latence des applications. La solution de fonction Lambda de ce modèle ne perturbe pas le flux de courant.