

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Automatisieren Sie mithilfe von Terraform CloudFront Updates, wenn sich die Load Balancer-Endpunkte ändern
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change"></a>

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

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

Wenn Benutzer von Amazon Elastic Kubernetes Service (Amazon EKS) ihre Eingangskonfiguration über Helm-Diagramme löschen und erneut installieren, wird ein neuer Application Load Balancer (ALB) erstellt. Dies führt zu einem Problem, da Amazon CloudFront weiterhin auf den DNS-Eintrag der alten ALB verweist. Infolgedessen sind Dienste, die für diesen Endpunkt bestimmt sind, nicht erreichbar. (Weitere Informationen zu diesem problematischen Workflow finden Sie unter [Zusätzliche Informationen](#automate-cloudfront-updates-when-load-balancer-endpoints-change-additional).)

Um dieses Problem zu lösen, beschreibt dieses Muster die Verwendung einer benutzerdefinierten AWS Lambda Funktion, die mit Python entwickelt wurde. Diese Lambda-Funktion erkennt anhand von EventBridge Amazon-Regeln automatisch, wenn eine neue ALB erstellt wird. Mithilfe von aktualisiert die Funktion dann die CloudFront Konfiguration mit der DNS-Adresse der neuen ALB und stellt so sicher, dass der Datenverkehr an den richtigen Endpunkt weitergeleitet wird. AWS SDK für Python (Boto3)

Diese automatisierte Lösung gewährleistet die Servicekontinuität ohne zusätzliches Routing oder Latenz. Der Prozess trägt dazu bei, dass CloudFront immer auf den richtigen ALB-DNS-Endpunkt verwiesen wird, auch wenn sich die zugrunde liegende Infrastruktur ändert.

## Voraussetzungen und Einschränkungen
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-prereqs"></a>

**Voraussetzungen**
+ Ein aktiver AWS-Konto.
+ Eine Beispiel-Webanwendung zum Testen und Validieren, die mithilfe von Helm auf Amazon EKS bereitgestellt wird. Weitere Informationen finden Sie unter [Bereitstellen von Anwendungen mit Helm auf Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) in der Amazon EKS-Dokumentation.
+ Konfigurieren Sie CloudFront die Konfiguration für die Weiterleitung von Anrufen an eine ALB, die von einem [Helm-Ingress-Controller](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/) erstellt wurde. Weitere Informationen finden [Sie unter Installieren von Load AWS Balancer Controller with Helm](https://docs.aws.amazon.com/eks/latest/userguide/lbc-helm.html) in der Amazon EKS-Dokumentation und [Beschränken Sie den Zugriff auf Application Load Balancers](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html) in der CloudFront Dokumentation.
+ Terraform [wurde in einem lokalen Workspace installiert](https://developer.hashicorp.com/terraform/install?product_intent=terraform) und konfiguriert.

**Einschränkungen**
+ Einige AWS-Services sind nicht in allen verfügbar. AWS-Regionen Informationen zur Verfügbarkeit in den einzelnen Regionen finden Sie unter [AWS Dienste nach Regionen](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Informationen zu bestimmten Endpunkten finden Sie unter [Dienstendpunkte und Kontingente](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html). Wählen Sie dort den Link für den Dienst aus.

**Produktversionen**
+ Terraform Version 1.0.0 oder höher
+ [Terraform AWS Provider Version 4.20 oder höher](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)

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

Das folgende Diagramm zeigt den Workflow und die Architekturkomponenten für dieses Muster.

![\[Workflow zur Aktualisierung CloudFront mit einer neuen ALB-DNS-Adresse, die mithilfe EventBridge der Regel erkannt wurde.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/03c30b18-4dd7-4dd4-b960-5a5cc58cec63/images/28854767-0902-4398-80af-b19141dd94e4.png)


Diese Lösung führt die folgenden Schritte aus:

1. Der Amazon EKS-Ingress Controller erstellt bei jedem Neustart oder einer Bereitstellung von Helm einen neuen Application Load Balancer (ALB).

1. EventBridge sucht nach Ereignissen zur ALB-Erstellung.

1. Das ALB-Erstellungsereignis löst die Lambda-Funktion aus.

1. Die Lambda-Funktion wurde auf der Grundlage von Python 3.9 bereitgestellt und verwendet zum Aufrufen die Boto3-API. AWS-Services Die Lambda-Funktion aktualisiert den CloudFront Eintrag mit dem neuesten Load Balancer-DNS-Namen, der von Create Load Balancer-Ereignissen empfangen wurde.

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

**AWS-Services**
+ [Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html) beschleunigt die Verteilung Ihrer Webinhalte, indem es sie über ein weltweites Netzwerk von Rechenzentren bereitstellt, was die Latenz senkt und die Leistung verbessert.
+ Mit [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) können Sie Kubernetes ausführen, AWS ohne dass Sie Ihre eigene Kubernetes-Steuerebene oder Knoten installieren oder verwalten müssen.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) ist ein serverloser Event-Bus-Service, mit dem Sie Ihre Anwendungen mit Echtzeitdaten aus einer Vielzahl von Quellen verbinden können. Zum Beispiel AWS Lambda Funktionen, HTTP-Aufruf-Endpunkte, die API-Ziele verwenden, oder Event-Busse in anderen. AWS-Konten
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) ist ein Datenverarbeitungsservice, mit dem Sie Code ausführen können, ohne dass Sie Server bereitstellen oder verwalten müssen. Es führt Ihren Code nur bei Bedarf aus und skaliert automatisch, sodass Sie nur für die tatsächlich genutzte Rechenzeit zahlen.
+ [AWS SDK für Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)ist ein Softwareentwicklungskit, mit dem Sie Ihre Python-Anwendung, -Bibliothek oder Ihr Skript integrieren können AWS-Services.

**Andere Tools**
+ [Python](https://www.python.org/) ist eine Allzweck-Computerprogrammiersprache.
+ [Terraform](https://www.terraform.io/) ist ein IaC-Tool (Infrastructure as Code) HashiCorp , mit dem Sie Cloud- und lokale Ressourcen erstellen und verwalten können.

**Code-Repository**

Der Code für dieses Muster ist im Repository GitHub [aws-cloudfront-automation-terraform-samples](https://github.com/aws-samples/aws-cloudfront-automation-terraform-samples) verfügbar.

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

### Richten Sie eine lokale Workstation ein
<a name="set-up-local-workstation"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Richten Sie die Git-CLI ein und konfigurieren Sie sie. | Um die Git-Befehlszeilenschnittstelle (CLI) auf Ihrer lokalen Workstation zu installieren und zu konfigurieren, folgen Sie den Anweisungen [Erste Schritte — Installation von Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) in der Git-Dokumentation. | DevOps Ingenieur | 
| Erstellen Sie den Projektordner und fügen Sie die Dateien hinzu. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps Ingenieur | 

### Stellen Sie die Zielarchitektur mithilfe der Terraform-Konfiguration bereit
<a name="provision-the-target-architecture-using-the-terraform-configuration"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Stellen Sie die Lösung bereit. | Gehen Sie wie folgt vor AWS-Konto, um Ressourcen im Ziel bereitzustellen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps Ingenieur | 

### Überprüfen der Bereitstellung
<a name="verify-the-deployment"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Validieren Sie die Bereitstellung. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps Ingenieur | 

### Infrastruktur aufräumen
<a name="clean-up-infrastructure"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Säubere die Infrastruktur. | Gehen Sie wie folgt vor, um die Infrastruktur zu bereinigen, die Sie zuvor erstellt haben:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps Ingenieur | 

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


| Problem | Lösung | 
| --- | --- | 
| Fehler beim Überprüfen der Anbieteranmeldedaten | Wenn Sie Terraform `apply` oder `destroy` Befehle von Ihrem lokalen Computer aus ausführen, tritt möglicherweise ein Fehler auf, der dem folgenden ähnelt:<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>Dieser Fehler wird durch den Ablauf des Sicherheitstokens für die in der Konfiguration Ihres lokalen Computers verwendeten Anmeldeinformationen verursacht.Informationen zur Behebung des Fehlers finden Sie unter [Konfigurationseinstellungen einrichten und anzeigen](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods) in der AWS Command Line Interface (AWS CLI) -Dokumentation. | 

## Zugehörige Ressourcen
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-resources"></a>

**AWS Ressourcen**
+ [Beschränken Sie den Zugriff auf Application Load Balancers](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html)
+ [Internetverkehr mit AWS Load Balancer Controller weiterleiten](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html)

**Terraform-Dokumentation**
+ [AWS Anbieter](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)
+ [Installieren Sie Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ [Fernstatus](https://developer.hashicorp.com/terraform/language/state/remote)

## Zusätzliche Informationen
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-additional"></a>

**Problematischer Arbeitsablauf**

![\[Workflow, der einen out-of-date ALB-DNS-Eintrag in CloudFront erzeugt.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/03c30b18-4dd7-4dd4-b960-5a5cc58cec63/images/bb3c2c93-c749-435d-9b1d-2bbf6f0cf085.png)


Das Diagramm zeigt den folgenden Workflow:

1. Wenn der Benutzer auf die Anwendung zugreift, geht der Anruf an. CloudFront

1. CloudFront leitet die Aufrufe an den jeweiligen Application Load Balancer (ALB) weiter.

1. Der ALB enthält die Ziel-IP-Adressen, bei denen es sich um die IP-Adressen des Anwendungs-Pods handelt. Von dort aus stellt der ALB dem Benutzer die erwarteten Ergebnisse bereit.

Dieser Arbeitsablauf weist jedoch auf ein Problem hin. Die Anwendungsbereitstellungen erfolgen über Helm-Diagramme. Immer wenn es eine Bereitstellung gibt oder wenn jemand Helm neu startet, wird der entsprechende Eingang ebenfalls neu erstellt. Infolgedessen erstellt der externe Load Balancer-Controller den ALB neu. Außerdem wird die ALB bei jeder Neuerstellung mit einem anderen DNS-Namen neu erstellt. Aus diesem Grund CloudFront wird es in den Ursprungseinstellungen einen veralteten Eintrag geben. Aufgrund dieses veralteten Eintrags ist die Anwendung für den Benutzer nicht erreichbar. Dieses Problem führt zu Ausfallzeiten für Benutzer.

**Alternative Lösung**

Eine andere mögliche Lösung besteht darin, ein [externes DNS](https://github.com/kubernetes-sigs/external-dns) für die ALB zu erstellen und es dann auf den Endpunkt der privaten gehosteten Zone von Amazon Route 53 zu verweisen. CloudFront Dieser Ansatz fügt dem Anwendungsablauf jedoch einen weiteren Sprung hinzu, was zu Anwendungslatenz führen kann. Die Lambda-Funktionslösung dieses Musters stört den Stromfluss nicht.