

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Automatizza CloudFront gli aggiornamenti quando gli endpoint del bilanciamento del carico cambiano utilizzando Terraform
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change"></a>

*Tamil Selvan P, Mohan Annam e Naveen Suthar, Amazon Web Services*

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

Quando gli utenti di Amazon Elastic Kubernetes Service (Amazon EKS) eliminano e reinstallano la configurazione di ingresso tramite grafici Helm, viene creato un nuovo Application Load Balancer (ALB). Ciò crea un problema perché Amazon CloudFront continua a fare riferimento al vecchio record DNS di ALB. Di conseguenza, i servizi destinati a questo endpoint non saranno raggiungibili. [(Per ulteriori dettagli su questo flusso di lavoro problematico, consulta Informazioni aggiuntive.)](#automate-cloudfront-updates-when-load-balancer-endpoints-change-additional)

Per risolvere questo problema, questo schema descrive l'utilizzo di una AWS Lambda funzione personalizzata sviluppata con Python. Questa funzione Lambda rileva automaticamente quando viene creato un nuovo ALB tramite le regole di Amazon. EventBridge Utilizzando AWS SDK per Python (Boto3), la funzione aggiorna quindi la CloudFront configurazione con il nuovo indirizzo DNS di ALB, assicurando che il traffico venga indirizzato all'endpoint corretto.

Questa soluzione automatizzata mantiene la continuità del servizio senza routing o latenza aggiuntivi. Il processo aiuta a garantire che faccia CloudFront sempre riferimento all'endpoint DNS ALB corretto, anche quando l'infrastruttura sottostante cambia.

## Prerequisiti e limitazioni
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-prereqs"></a>

**Prerequisiti**
+ Un attivo. Account AWS
+ Un'applicazione Web di esempio per test e convalida che viene distribuita su Amazon EKS utilizzando Helm. Per ulteriori informazioni, consulta [Distribuire applicazioni con Helm su Amazon EKS nella documentazione](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) di Amazon EKS.
+ [Configura CloudFront per indirizzare le chiamate a un ALB creato da un controller di ingresso Helm.](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/) Per ulteriori informazioni, consulta [Install AWS Load Balancer Controller with Helm](https://docs.aws.amazon.com/eks/latest/userguide/lbc-helm.html) nella documentazione di Amazon EKS e [Limita l'accesso agli Application Load Balancers](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html) nella documentazione. CloudFront 
+ Terraform [installato](https://developer.hashicorp.com/terraform/install?product_intent=terraform) e configurato in uno spazio di lavoro locale.

**Limitazioni**
+ Alcuni Servizi AWS non sono disponibili in tutti. Regioni AWS Per la disponibilità regionale, vedi [AWS Servizi per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e scegli il link relativo al servizio.

**Versioni del prodotto**
+ Terraform versione 1.0.0 o successiva
+ Terraform [AWS Provider](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) versione 4.20 o successiva

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

Il diagramma seguente mostra i componenti del flusso di lavoro e dell'architettura per questo modello.

![\[Flusso di lavoro da aggiornare CloudFront con il nuovo indirizzo DNS ALB rilevato tramite la regola. EventBridge\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/03c30b18-4dd7-4dd4-b960-5a5cc58cec63/images/28854767-0902-4398-80af-b19141dd94e4.png)


Questa soluzione esegue le seguenti operazioni:

1. Il controller di ingresso Amazon EKS crea un nuovo Application Load Balancer (ALB) ogni volta che si verifica un riavvio o una distribuzione di Helm.

1. EventBridge cerca gli eventi di creazione di ALB.

1. L'evento di creazione ALB attiva la funzione Lambda.

1. La funzione Lambda è stata implementata sulla base di python 3.9 e utilizza l'API boto3 per la chiamata. Servizi AWS La funzione Lambda aggiorna la CloudFront voce con il nome DNS del load balancer più recente, ricevuto dagli eventi create load balancer.

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

**Servizi AWS**
+ [Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html) accelera la distribuzione dei tuoi contenuti web distribuendoli attraverso una rete mondiale di data center, che riduce la latenza e migliora le prestazioni.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) ti aiuta a eseguire AWS Kubernetes senza dover installare o gestire il tuo piano di controllo o i tuoi nodi Kubernetes.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) è un servizio di bus eventi senza server che ti aiuta a connettere le tue applicazioni con dati in tempo reale provenienti da una varietà di fonti. Ad esempio, AWS Lambda funzioni, endpoint di invocazione HTTP che utilizzano destinazioni API o bus di eventi in altro modo. Account AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
+ [AWS SDK per Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)è un kit di sviluppo software che ti aiuta a integrare la tua applicazione, libreria o script Python con. Servizi AWS

**Altri strumenti**
+ [Python](https://www.python.org/) è un linguaggio di programmazione per computer generico.
+ [Terraform](https://www.terraform.io/) è uno strumento Infrastructure as Code (IaC) HashiCorp che ti aiuta a creare e gestire risorse cloud e locali.

**Archivio di codici**

Il codice per questo pattern è disponibile nel repository GitHub [aws-cloudfront-automation-terraform-samples](https://github.com/aws-samples/aws-cloudfront-automation-terraform-samples).

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

### Configura una workstation locale
<a name="set-up-local-workstation"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Imposta e configura la Git CLI. | Per installare e configurare l'interfaccia a riga di comando Git (CLI) nella workstation locale, segui le istruzioni Getting [Started — Installing Git nella documentazione Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git). | DevOps ingegnere | 
| Crea la cartella del progetto e aggiungi i file. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingegnere | 

### Fornisci l'architettura di destinazione utilizzando la configurazione Terraform
<a name="provision-the-target-architecture-using-the-terraform-configuration"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Distribuire la soluzione. | Per distribuire risorse nell'obiettivo Account AWS, utilizza i seguenti passaggi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingegnere | 

### Verifica della distribuzione
<a name="verify-the-deployment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Convalida la distribuzione. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingegnere | 

### Pulisci l'infrastruttura
<a name="clean-up-infrastructure"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Pulisci l'infrastruttura. | Per ripulire l'infrastruttura creata in precedenza, procedi nel seguente modo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingegnere | 

## risoluzione dei problemi
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Errore durante la convalida delle credenziali del provider | Quando esegui Terraform `apply` o `destroy` i comandi dal tuo computer locale, potresti riscontrare un errore simile al seguente:<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>Questo errore è causato dalla scadenza del token di sicurezza per le credenziali utilizzate nella configurazione del computer locale.Per risolvere l'errore, consulta [Impostare e visualizzare le impostazioni di configurazione](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods) nella documentazione AWS Command Line Interface (AWS CLI). | 

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

**AWS resources**
+ [Limita l'accesso agli Application Load Balancer](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html)
+ [Indirizza il traffico Internet con AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html)

**Documentazione Terraform**
+ [AWS Provider](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)
+ [Installa Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ [Stato remoto](https://developer.hashicorp.com/terraform/language/state/remote)

## Informazioni aggiuntive
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-additional"></a>

**Flusso di lavoro problematico**

![\[Flusso di lavoro che produce l'ingresso DNS out-of-date ALB. CloudFront\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/03c30b18-4dd7-4dd4-b960-5a5cc58cec63/images/bb3c2c93-c749-435d-9b1d-2bbf6f0cf085.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Quando l'utente accede all'applicazione, la chiamata va a. CloudFront

1. CloudFront indirizza le chiamate al rispettivo Application Load Balancer (ALB).

1. L'ALB include gli indirizzi IP di destinazione, che sono gli indirizzi IP dell'application pod. Da lì, l'ALB fornisce all'utente i risultati attesi.

Tuttavia, questo flusso di lavoro presenta un problema. Le distribuzioni delle applicazioni avvengono tramite grafici Helm. Ogni volta che viene effettuata una distribuzione o se qualcuno riavvia Helm, viene ricreato anche il rispettivo ingresso. Di conseguenza, il controller di bilanciamento del carico esterno ricrea l'ALB. Inoltre, durante ogni ricreazione, l'ALB viene ricreato con un nome DNS diverso. Per questo motivo, CloudFront avrà una voce obsoleta nelle impostazioni di origine. A causa di questa voce non aggiornata, l'applicazione non sarà raggiungibile dall'utente. Questo problema comporta tempi di inattività per gli utenti.

**Soluzione alternativa**

Un'altra soluzione possibile è creare un [DNS esterno](https://github.com/kubernetes-sigs/external-dns) per l'ALB e quindi indirizzarlo all'endpoint della zona ospitata privata Amazon Route 53. CloudFront Tuttavia, questo approccio aggiunge un ulteriore salto nel flusso dell'applicazione, che potrebbe causare latenza dell'applicazione. La soluzione della funzione Lambda di questo pattern non interrompe il flusso di corrente.