

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.

# Container und Microservices
<a name="containersandmicroservices-pattern-list"></a>

**Topics**
+ [Greifen Sie von einem Amazon EKS-Container aus auf eine Amazon Neptune-Datenbank zu](access-amazon-neptune-database-from-amazon-eks-container.md)
+ [Greifen Sie mithilfe von AWS PrivateLink und einem Network Load Balancer privat auf Container-Anwendungen auf Amazon ECS zu](access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.md)
+ [Greifen Sie privat auf Container-Anwendungen auf Amazon ECS zu, indem Sie AWS Fargate PrivateLink, AWS und einen Network Load Balancer verwenden](access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.md)
+ [Greifen Sie mit AWS PrivateLink und einem Network Load Balancer privat auf Container-Anwendungen auf Amazon EKS zu](access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer.md)
+ [Automatisieren Sie Backups für Amazon RDS for PostgreSQL PostgreSQL-DB-Instances mithilfe von AWS Batch](automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch.md)
+ [Automatisieren Sie die Bereitstellung von Node Termination Handler in Amazon EKS mithilfe einer CI/CD Pipeline](automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.md)
+ [Automatisches Erstellen und Bereitstellen einer Java-Anwendung auf Amazon EKS mithilfe einer CI/CD Pipeline](automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.md)
+ [Kopieren Sie Amazon ECR-Container-Images zwischen und AWS-Konten AWS-Regionen](copy-ecr-container-images-across-accounts-regions.md)
+ [Erstellen Sie eine Amazon ECS-Aufgabendefinition und mounten Sie mithilfe von Amazon EFS ein Dateisystem auf EC2 Instances](create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.md)
+ [Stellen Sie Lambda-Funktionen mit Container-Images bereit](deploy-lambda-functions-with-container-images.md)
+ [Bereitstellen von Java-Microservices auf Amazon ECS mithilfe von AWS Fargate](deploy-java-microservices-on-amazon-ecs-using-aws-fargate.md)
+ [Stellen Sie Kubernetes-Ressourcen und -Pakete mithilfe von Amazon EKS und einem Helm-Chart-Repository in Amazon S3 bereit](deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3.md)
+ [Stellen Sie mithilfe von Terraform einen CockroachDB-Cluster in Amazon EKS bereit](deploy-cockroachdb-on-eks-using-terraform.md)
+ [Stellen Sie einen Beispiel-Java-Microservice auf Amazon EKS bereit und machen Sie den Microservice mithilfe eines Application Load Balancer verfügbar](deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.md)
+ [Stellen Sie eine GRPC-basierte Anwendung auf einem Amazon EKS-Cluster bereit und greifen Sie mit einem Application Load Balancer darauf zu](deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.md)
+ [Stellen Sie containerisierte Anwendungen bereit, wenn AWS IoT Greengrass V2 sie als Docker-Container ausgeführt werden](deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.md)
+ [Container mithilfe von Elastic Beanstalk bereitstellen](deploy-containers-by-using-elastic-beanstalk.md)
+ [Generieren Sie eine statische ausgehende IP-Adresse mithilfe einer Lambda-Funktion, Amazon VPC und einer serverlosen Architektur](generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.md)
+ [Automatische Identifizierung doppelter Container-Images bei der Migration zu einem Amazon ECR-Repository](identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.md)
+ [Installieren Sie SSM Agent mithilfe von Kubernetes auf Amazon EKS-Worker-Knoten DaemonSet](install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset.md)
+ [Installieren Sie den SSM-Agent und den CloudWatch Agenten auf Amazon EKS-Worker-Knoten mit preBootstrapCommands](install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands.md)
+ [Migrieren Sie NGINX Ingress Controller, wenn Sie den Amazon EKS Auto Mode aktivieren](migrate-nginx-ingress-controller-eks-auto-mode.md)
+ [Migrieren Sie Ihre Container-Workloads von Azure Red Hat OpenShift (ARO) zu Red Hat OpenShift Service in AWS (ROSA)](migrate-container-workloads-from-aro-to-rosa.md)
+ [Führen Sie Amazon ECS-Aufgaben auf Amazon WorkSpaces mit Amazon ECS Anywhere aus](run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere.md)
+ [Führen Sie einen ASP.NET Core-Web-API-Docker-Container auf einer Amazon EC2 Linux-Instance aus](run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.md)
+ [Führen Sie statusbehaftete Workloads mit persistentem Datenspeicher aus, indem Sie Amazon EFS auf Amazon EKS mit AWS Fargate verwenden](run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate.md)
+ [Richten Sie ereignisgesteuertes Auto Scaling in Amazon EKS mithilfe von Amazon EKS Pod Identity und KEDA ein](event-driven-auto-scaling-with-eks-pod-identity-and-keda.md)
+ [Optimieren Sie PostgreSQL-Bereitstellungen auf Amazon EKS mithilfe von PGO](streamline-postgresql-deployments-amazon-eks-pgo.md)
+ [Vereinfachen Sie die Anwendungsauthentifizierung mit gegenseitigem TLS in Amazon ECS mithilfe von Application Load Balancer](simplify-application-authentication-with-mutual-tls-in-amazon-ecs.md)
+ [Mehr Muster](containersandmicroservices-more-patterns-pattern-list.md)

# Greifen Sie von einem Amazon EKS-Container aus auf eine Amazon Neptune-Datenbank zu
<a name="access-amazon-neptune-database-from-amazon-eks-container"></a>

*Ramakrishnan Palaninathan, Amazon Web Services*

## Zusammenfassung
<a name="access-amazon-neptune-database-from-amazon-eks-container-summary"></a>

Dieses Muster stellt eine Verbindung zwischen Amazon Neptune, einer vollständig verwalteten Graphdatenbank, und Amazon Elastic Kubernetes Service (Amazon EKS), einem Container-Orchestrierungsservice, her, um auf eine Neptune-Datenbank zuzugreifen. Neptune-DB-Cluster sind auf eine virtuelle private Cloud (VPC) beschränkt. AWS Aus diesem Grund erfordert der Zugriff auf Neptune eine sorgfältige Konfiguration der VPC, um Konnektivität zu ermöglichen.

Im Gegensatz zu Amazon Relational Database Service (Amazon RDS) für PostgreSQL ist Neptune nicht auf typische Datenbankzugriffsanmeldeinformationen angewiesen. Stattdessen verwendet es AWS Identity and Access Management (IAM) -Rollen für die Authentifizierung. Um von Amazon EKS aus eine Verbindung zu Neptune herzustellen, muss daher eine IAM-Rolle mit den erforderlichen Berechtigungen für den Zugriff auf Neptune eingerichtet werden.

Darüber hinaus sind Neptune-Endpoints nur innerhalb der VPC zugänglich, in der sich der Cluster befindet. Das bedeutet, dass Sie Netzwerkeinstellungen konfigurieren müssen, um die Kommunikation zwischen Amazon EKS und Neptune zu erleichtern. Abhängig von Ihren spezifischen Anforderungen und Netzwerkpräferenzen gibt es [verschiedene Ansätze zur Konfiguration der VPC, um](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-vpc.html) eine nahtlose Konnektivität zwischen Neptune und Amazon EKS zu ermöglichen. Jede Methode bietet unterschiedliche Vorteile und Überlegungen, sodass Sie Ihre Datenbankarchitektur flexibel an die Anforderungen Ihrer Anwendung anpassen können.

## Voraussetzungen und Einschränkungen
<a name="access-amazon-neptune-database-from-amazon-eks-container-prereqs"></a>

**Voraussetzungen**
+ Installieren Sie die neueste Version von **kubectl** (siehe [Anweisungen](https://kubernetes.io/docs/tasks/tools/#kubectl)). Um deine Version zu überprüfen, führe folgenden Befehl aus: 

  ```
  kubectl version --short
  ```
+ Installieren Sie die neueste Version von **eksctl** (siehe [Anweisungen](https://eksctl.io/installation/)). Um deine Version zu überprüfen, führe folgenden Befehl aus: 

  ```
  eksctl info
  ```
+ Installieren Sie die neueste Version von AWS Command Line Interface (AWS CLI) Version 2 (siehe [Anweisungen](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)). Um Ihre Version zu überprüfen, führen Sie folgenden Befehl aus: 

  ```
  aws --version
  ```
+ Erstellen Sie einen Neptune-DB-Cluster (siehe [Anweisungen](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-cfn-create.html)). Stellen Sie sicher, dass die Kommunikation zwischen der VPC des Clusters und Amazon EKS über [VPC-Peering](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html) oder eine andere Methode hergestellt [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-getting-started.html)wird. Stellen Sie außerdem sicher, dass der Status des Clusters „verfügbar“ lautet und dass es für die Sicherheitsgruppe eine Regel für eingehenden Datenverkehr auf Port 8182 gibt.
+ [Konfigurieren Sie einen IAM OpenID Connect (OIDC) -Anbieter auf einem vorhandenen Amazon EKS-Cluster (siehe Anweisungen).](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)

**Produktversionen**
+ [Amazon EKS 1,27](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)
+ [Version 1.3.0.0 der Amazon Neptune Neptune-Engine (15.11.2023)](https://docs.aws.amazon.com/neptune/latest/userguide/engine-releases-1.3.0.0.html)

## Architektur
<a name="access-amazon-neptune-database-from-amazon-eks-container-architecture"></a>

Das folgende Diagramm zeigt die Verbindung zwischen Kubernetes-Pods in einem Amazon EKS-Cluster und Neptune, um Zugriff auf eine Neptune-Datenbank zu ermöglichen.

![\[Pods in einem Kubernetes-Knoten mit Amazon Neptune verbinden.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/2fcf9e00-1664-462a-825e-b0fdd962f478/images/86da67e5-340e-4b29-acc6-2da416ce57eb.png)


**Automatisierung und Skalierung**

Sie können den Amazon EKS [Horizontal Pod Autoscaler](https://docs.aws.amazon.com/eks/latest/userguide/horizontal-pod-autoscaler.html) verwenden, um diese Lösung zu skalieren.

## Tools
<a name="access-amazon-neptune-database-from-amazon-eks-container-tools"></a>

**Services**
+ 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.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) hilft Ihnen dabei, den Zugriff auf Ihre AWS Ressourcen sicher zu verwalten, indem kontrolliert wird, wer authentifiziert und autorisiert ist, diese zu verwenden.
+ [Amazon Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/intro.html) ist ein Graphdatenbank-Service, mit dem Sie Anwendungen erstellen und ausführen können, die mit stark verbundenen Datensätzen arbeiten.

## Best Practices
<a name="access-amazon-neptune-database-from-amazon-eks-container-best-practices"></a>

Bewährte Methoden finden Sie unter [Identity and Access Management](https://aws.github.io/aws-eks-best-practices/security/docs/iam/) in den *Amazon EKS Best Practices Guides*.

## Epen
<a name="access-amazon-neptune-database-from-amazon-eks-container-epics"></a>

### Festlegen von Umgebungsvariablen
<a name="set-environment-variables"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Überprüfen Sie den Clusterkontext. | Bevor Sie mit Ihrem Amazon EKS-Cluster mithilfe von Helm oder anderen Befehlszeilentools interagieren, müssen Sie Umgebungsvariablen definieren, die die Details Ihres Clusters kapseln. Diese Variablen werden in nachfolgenden Befehlen verwendet, um sicherzustellen, dass sie auf den richtigen Cluster und die richtigen Ressourcen abzielen.Stellen Sie zunächst sicher, dass Sie im richtigen Clusterkontext arbeiten. Dadurch wird sichergestellt, dass alle nachfolgenden Befehle an den vorgesehenen Kubernetes-Cluster gesendet werden. Führen Sie den folgenden Befehl aus, um den aktuellen Kontext zu überprüfen.<pre>kubectl config current-context</pre> | AWS-Administrator, Cloud-Administrator | 
| Definieren Sie die `CLUSTER_NAME` Variable. | Definieren Sie die `CLUSTER_NAME` Umgebungsvariable für Ihren Amazon EKS-Cluster. Ersetzen Sie im folgenden Befehl den Beispielwert `us-west-2` durch den AWS-Region für Ihren Cluster korrekten Wert. Ersetzen Sie den Beispielwert `eks-workshop` durch Ihren vorhandenen Clusternamen.<pre>export CLUSTER_NAME=$(aws eks describe-cluster --region us-west-2 --name eks-workshop --query "cluster.name" --output text)</pre> | AWS-Administrator, Cloud-Administrator | 
| Ausgabe validieren. | Führen Sie den folgenden Befehl aus, um zu überprüfen, ob die Variablen richtig gesetzt wurden.<pre>echo $CLUSTER_NAME</pre>Stellen Sie sicher, dass die Ausgabe dieses Befehls mit der Eingabe übereinstimmt, die Sie im vorherigen Schritt angegeben haben. | AWS-Administrator, Cloud-Administrator | 

### Erstellen Sie eine IAM-Rolle und verknüpfen Sie sie mit Kubernetes
<a name="create-iam-role-and-associate-it-with-kubernetes"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Ein -Service-Konto aktualisieren | Sie verwenden [IAM-Rollen für Dienstkonten](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html?sc_channel=el&sc_campaign=appswave&sc_content=eks-integrate-secrets-manager&sc_geo=mult&sc_country=mult&sc_outcome=acq), um Ihre Kubernetes-Servicekonten IAM-Rollen zuzuordnen, um ein detailliertes Berechtigungsmanagement für Ihre Anwendungen zu ermöglichen, die auf Amazon EKS ausgeführt werden. Sie können [eksctl](https://eksctl.io/) verwenden, um eine IAM-Rolle zu erstellen und einem bestimmten Kubernetes-Servicekonto in Ihrem Amazon EKS-Cluster zuzuordnen. Die AWS verwaltete Richtlinie `NeptuneFullAccess` ermöglicht Schreib- und Lesezugriff auf Ihren angegebenen Neptune-Cluster.Bevor Sie diese Befehle ausführen können, muss Ihrem Cluster ein [OIDC-Endpunkt](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html?sc_channel=el&sc_campaign=appswave&sc_content=eks-integrate-secrets-manager&sc_geo=mult&sc_country=mult&sc_outcome=acq) zugeordnet sein.Erstellen Sie ein Dienstkonto, das Sie einer AWS verwalteten Richtlinie mit dem Namen zuordnen möchten. `NeptuneFullAccess`<pre>eksctl create iamserviceaccount --name eks-neptune-sa --namespace default --cluster $CLUSTER_NAME --attach-policy-arn arn:aws:iam::aws:policy/NeptuneFullAccess --approve --override-existing-serviceaccounts</pre>wo `eks-neptune-sa ` ist der Name des Dienstkontos, das Sie erstellen möchten.Nach Abschluss zeigt dieser Befehl die folgende Antwort an:<pre>2024-02-07 01:12:39 [ℹ] created serviceaccount "default/eks-neptune-sa"</pre> | AWS-Administrator, Cloud-Administrator | 
| Stellen Sie sicher, dass das Konto ordnungsgemäß eingerichtet ist. | Stellen Sie sicher, dass das `eks-neptune-sa` Dienstkonto im Standard-Namespace in Ihrem Cluster korrekt eingerichtet ist.<pre>kubectl get sa eks-neptune-sa -o yaml</pre>Die Ausgabe sollte in etwa wie folgt aussehen:<pre>apiVersion: v1<br />kind: ServiceAccount<br />metadata:<br />  annotations:<br />    eks.amazonaws.com/role-arn: arn:aws:iam::123456789123:role/eksctl-eks-workshop-addon-iamserviceaccount-d-Role1-Q35yKgdQOlmM<br />  creationTimestamp: "2024-02-07T01:12:39Z"<br />  labels:<br />    app.kubernetes.io/managed-by: eksctl<br />  name: eks-neptune-sa<br />  namespace: default<br />  resourceVersion: "5174750"<br />  uid: cd6ba2f7-a0f5-40e1-a6f4-4081e0042316</pre> | AWS-Administrator, Cloud-Administrator | 
| Überprüfen Sie die Konnektivität. | Stellen Sie einen Beispiel-Pod bereit, der aufgerufen wurde, `pod-util` und überprüfen Sie die Konnektivität mit Neptune.<pre>apiVersion: v1<br />kind: Pod<br />metadata:<br />  name: pod-util<br />  namespace: default<br />spec:<br />  serviceAccountName: eks-neptune-sa<br />  containers:<br />  - name: pod-util<br />    image: public.ecr.aws/patrickc/troubleshoot-util<br />    command:<br />      - sleep<br />      - "3600"<br />    imagePullPolicy: IfNotPresent</pre><pre>kubectl apply -f pod-util.yaml</pre><pre>kubectl exec --stdin --tty pod-util -- /bin/bash<br />bash-5.1# curl -X POST -d '{"gremlin":"g.V().limit(1)"}' https://db-neptune-1.cluster-xxxxxxxxxxxx.us-west-2.neptune.amazonaws.com:8182/gremlin<br />{"requestId":"a4964f2d-12b1-4ed3-8a14-eff511431a0e","status":{"message":"","code":200,"attributes":{"@type":"g:Map","@value":[]}},"result":{"data":{"@type":"g:List","@value":[]},"meta":{"@type":"g:Map","@value":[]}}}<br />bash-5.1# exit<br />exit</pre> | AWS-Administrator, Cloud-Administrator | 

### Überprüfen Sie die Verbindungsaktivität
<a name="validate-connection-activity"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Aktivieren Sie die IAM-Datenbankauthentifizierung. | Standardmäßig ist die IAM-Datenbankauthentifizierung deaktiviert, wenn Sie einen Neptune-DB-Cluster erstellen. Sie können die IAM-Datenbankauthentifizierung aktivieren oder deaktivieren, indem Sie den verwenden. AWS-ManagementkonsoleFolgen Sie den Schritten in der AWS Dokumentation, um die [IAM-Datenbankauthentifizierung in Neptune zu aktivieren](https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-enable.html). | AWS-Administrator, Cloud-Administrator | 
| Überprüfen Sie die Verbindungen. | In diesem Schritt interagieren Sie mit dem `pod-util` Container, der sich bereits im Ausführungsstatus befindet, um **awscurl** zu installieren und die Verbindung zu überprüfen.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-amazon-neptune-database-from-amazon-eks-container.html) | AWS-Administrator, Cloud-Administrator | 

## Fehlerbehebung
<a name="access-amazon-neptune-database-from-amazon-eks-container-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| Ich kann nicht auf die Neptun-Datenbank zugreifen. | Überprüfen Sie die IAM-Richtlinie, die mit dem Dienstkonto verknüpft ist. Stellen Sie sicher, dass sie die erforderlichen Aktionen (z. B.`neptune:Connec,neptune:DescribeDBInstances`) für die Operationen, die Sie ausführen möchten, zulässt. | 

## Zugehörige Ressourcen
<a name="access-amazon-neptune-database-from-amazon-eks-container-resources"></a>
+ [Kubernetes-Workloads Zugriff auf die AWS Nutzung von Kubernetes-Servicekonten gewähren](https://docs.aws.amazon.com/eks/latest/userguide/service-accounts.html) (Amazon EKS-Dokumentation)
+ [IAM-Rollen für Dienstkonten](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) (Amazon EKS-Dokumentation)
+ [Einen neuen Neptune-DB-Cluster erstellen (Amazon Neptune Neptune-Dokumentation](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-create-cluster.html))

# Greifen Sie mithilfe von AWS PrivateLink und einem Network Load Balancer privat auf Container-Anwendungen auf Amazon ECS zu
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Zusammenfassung
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-summary"></a>

Dieses Muster beschreibt, wie Sie eine Docker-Container-Anwendung privat auf Amazon Elastic Container Service (Amazon ECS) hinter einem Network Load Balancer hosten und mithilfe von AWS auf die Anwendung zugreifen. PrivateLink Sie können dann ein privates Netzwerk verwenden, um sicher auf Dienste in der Amazon Web Services (AWS) Cloud zuzugreifen. Amazon Relational Database Service (Amazon RDS) hostet die relationale Datenbank für die Anwendung, die auf Amazon ECS mit hoher Verfügbarkeit (HA) ausgeführt wird. Amazon Elastic File System (Amazon EFS) wird verwendet, wenn die Anwendung persistenten Speicher benötigt.

Der Amazon ECS-Service, auf dem die Docker-Anwendungen ausgeführt werden, mit einem Network Load Balancer am Frontend kann mit einem Virtual Private Cloud (VPC) -Endpunkt für den Zugriff über AWS verknüpft werden. PrivateLink Dieser VPC-Endpunktdienst kann dann mit anderen gemeinsam genutzt werden, VPCs indem deren VPC-Endpunkte verwendet werden.

Sie können auch [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html) anstelle einer Amazon EC2 Auto Scaling Scaling-Gruppe verwenden. Weitere Informationen finden Sie unter [Privaten Zugriff auf Containeranwendungen auf Amazon ECS mithilfe von AWS Fargate PrivateLink, AWS und einem Network Load Balancer](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html?did=pg_card).

## Voraussetzungen und Einschränkungen
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-prereqs"></a>

**Voraussetzungen**
+ Ein aktives AWS-Konto
+ [AWS-Befehlszeilenschnittstelle (AWS CLI) Version 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html), installiert und konfiguriert unter Linux, macOS oder Windows
+ [Docker](https://www.docker.com/), installiert und konfiguriert unter Linux, MacOS oder Windows
+ Eine Anwendung, die auf Docker läuft

## Architektur
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-architecture"></a>

![\[Verwenden von AWS PrivateLink für den Zugriff auf eine Container-App auf Amazon ECS hinter einem Network Load Balancer.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/a316bf46-24db-4514-957d-abc60f8f6962/images/573951ed-74bb-4023-9d9c-43e77e4f8eda.png)


 

**Technologie-Stack**
+ Amazon CloudWatch
+ Amazon Elastic Compute Cloud (Amazon EC2)
+ Amazon EC2 Auto Scaling
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon ECS
+ Amazon RDS
+ Amazon Simple Storage Service (Amazon-S3)
+ AWS Lambda
+ AWS PrivateLink
+ AWS Secrets Manager
+ Application Load Balancer
+ Network Load Balancer
+ VPC

*Automatisierung und Skalierung*
+ Sie können [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) verwenden CloudFormation, um dieses Muster mithilfe von [Infrastructure as Code](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html) zu erstellen.

## Tools
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-tools"></a>
+ [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) — Amazon Elastic Compute Cloud (Amazon EC2) bietet skalierbare Rechenkapazität in der AWS-Cloud.
+ [Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html) — Amazon EC2 Auto Scaling hilft Ihnen sicherzustellen, dass Ihnen die richtige Anzahl von EC2 Amazon-Instances zur Verfügung steht, um die Last für Ihre Anwendung zu bewältigen.
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) — Amazon Elastic Container Service (Amazon ECS) ist ein hoch skalierbarer, schneller Container-Management-Service, der es einfach macht, Container in einem Cluster auszuführen, zu stoppen und zu verwalten.
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) — Amazon Elastic Container Registry (Amazon ECR) ist ein verwalteter AWS-Container-Image-Registry-Service, der sicher, skalierbar und zuverlässig ist.
+ [Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) — Amazon Elastic File System (Amazon EFS) bietet ein einfaches, skalierbares, vollständig verwaltetes elastisches NFS-Dateisystem zur Verwendung mit AWS-Cloud-Services und lokalen Ressourcen.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) — Lambda ist ein Rechenservice zum Ausführen von Code ohne Bereitstellung oder Verwaltung von Servern.
+ [Amazon RDS](https://docs.aws.amazon.com/rds/) — Amazon Relational Database Service (Amazon RDS) ist ein Webservice, der die Einrichtung, den Betrieb und die Skalierung einer relationalen Datenbank in der AWS-Cloud erleichtert.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) — Amazon Simple Storage Service (Amazon S3) ist Speicher für das Internet. Der Service ist darauf ausgelegt, Cloud Computing für Entwickler zu erleichtern.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) — Secrets Manager hilft Ihnen dabei, hartcodierte Anmeldeinformationen in Ihrem Code, einschließlich Passwörter, zu ersetzen, indem es einen API-Aufruf an Secrets Manager bereitstellt, um das Geheimnis programmgesteuert abzurufen.
+ [Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) — Amazon Virtual Private Cloud (Amazon VPC) hilft Ihnen, AWS-Ressourcen in einem von Ihnen definierten virtuellen Netzwerk zu starten.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) — Elastic Load Balancing verteilt eingehenden Anwendungs- oder Netzwerkverkehr auf mehrere Ziele, wie EC2 Amazon-Instances, Container und IP-Adressen, in mehreren Availability Zones.
+ [Docker](https://www.docker.com/) — Docker hilft Entwicklern dabei, jede Anwendung als leichten, portablen und autarken Container zu packen, zu versenden und auszuführen.

## Epen
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-epics"></a>

### Netzwerkkomponenten erstellen
<a name="create-networking-components"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine VPC. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Cloud-Administrator | 

### Erstellen Sie die Load Balancer
<a name="create-the-load-balancers"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie einen Network Load Balancer.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Cloud-Administrator | 
| Erstellen Sie einen Application Load Balancer. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Cloud-Administrator | 

### Erstellen eines Amazon EFS-Dateisystems
<a name="create-an-amazon-efs-file-system"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie ein Amazon EFS-Dateisystem. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Cloud-Administrator | 
| Mounten Sie Ziele für die Subnetze. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Cloud-Administrator | 
| Stellen Sie sicher, dass die Subnetze als Ziele bereitgestellt sind.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Cloud-Administrator | 

### Erstellen eines S3-Buckets
<a name="create-an-s3-bucket"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie einen S3-Bucket.  | Öffnen Sie die Amazon S3 S3-Konsole und erstellen Sie bei Bedarf einen S3-Bucket, um die statischen Ressourcen Ihrer Anwendung zu speichern. | Cloud-Administrator | 

### Ein Secrets Manager Manager-Geheimnis erstellen
<a name="create-a-secrets-manager-secret"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie einen AWS-KMS-Schlüssel, um das Secrets Manager Manager-Geheimnis zu verschlüsseln. | Öffnen Sie die AWS Key Management Service (AWS KMS) -Konsole und erstellen Sie einen KMS-Schlüssel. | Cloud-Administrator | 
|  Erstellen Sie ein Secrets Manager Manager-Geheimnis, um das Amazon RDS-Passwort zu speichern. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Cloud-Administrator  | 

### Eine Amazon RDS-Instance erstellen
<a name="create-an-amazon-rds-instance"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen einer DB-Subnetzgruppe  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Cloud-Administrator | 
| Erstellen Sie eine Amazon RDS-Instance. | Erstellen und konfigurieren Sie eine Amazon RDS-Instance in den privaten Subnetzen. Stellen Sie sicher, dass **Multi-AZ** für HA aktiviert ist. | Cloud-Administrator | 
| Laden Sie Daten in die Amazon RDS-Instance.  | Laden Sie die für Ihre Anwendung erforderlichen relationalen Daten in Ihre Amazon RDS-Instance. Dieser Prozess hängt von den Anforderungen Ihrer Anwendung sowie davon ab, wie Ihr Datenbankschema definiert und entworfen ist. | Cloud-Administrator, DBA | 

### Erstellen Sie die Amazon ECS-Komponenten
<a name="create-the-amazon-ecs-components"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie einen ECS-Cluster. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Cloud-Administrator | 
| Erstellen Sie die Docker-Images.  | Erstellen Sie die Docker-Images, indem Sie den Anweisungen im Abschnitt *Verwandte Ressourcen* folgen. | Cloud-Administrator | 
| Erstellen Sie Amazon ECR-Repositorys. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Cloud-Administrator, DevOps Ingenieur | 
| Authentifizieren Sie Ihren Docker-Client für das Amazon ECR-Repository.  | Um Ihren Docker-Client für das Amazon ECR-Repository zu authentifizieren, führen Sie den `aws ecr get-login-password` Befehl "in der AWS-CLI aus. | Cloud-Administrator | 
| Übertragen Sie die Docker-Images in das Amazon ECR-Repository.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Cloud-Administrator | 
| Erstellen Sie eine Amazon ECS-Aufgabendefinition.  | Eine Aufgabendefinition ist erforderlich, um Docker-Container in Amazon ECS auszuführen. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html)Hilfe beim Einrichten Ihrer Aufgabendefinition finden Sie unter „Eine Aufgabendefinition erstellen“ im Abschnitt *Verwandte Ressourcen*. Stellen Sie sicher, dass Sie die Docker-Images bereitstellen, die Sie an Amazon ECR übertragen haben. | Cloud-Administrator | 
| Erstellen Sie einen Amazon-ECS-Service.  | Erstellen Sie einen Amazon ECS-Service mithilfe des ECS-Clusters, den Sie zuvor erstellt haben. Stellen Sie sicher, dass Sie Amazon EC2 als Starttyp und die im vorherigen Schritt erstellte Aufgabendefinition sowie die Zielgruppe des Application Load Balancer auswählen. | Cloud-Administrator | 

### Eine Amazon EC2 Auto Scaling Scaling-Gruppe erstellen
<a name="create-an-amazon-ec2-auto-scaling-group"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen einer Startkonfiguration | Öffnen Sie die EC2 Amazon-Konsole und erstellen Sie eine Startkonfiguration. Stellen Sie sicher, dass die Benutzerdaten den Code enthalten, der es den EC2 Instances ermöglicht, dem gewünschten ECS-Cluster beizutreten. Ein Beispiel für den erforderlichen Code finden Sie im Abschnitt *Verwandte Ressourcen*. | Cloud-Administrator | 
| Erstellen Sie eine Amazon EC2 Auto Scaling Scaling-Gruppe.  | Kehren Sie zur EC2 Amazon-Konsole zurück und wählen Sie unter **Auto Scaling** die Option **Auto Scaling Scaling-Gruppen** aus. Richten Sie eine Amazon EC2 Auto Scaling Scaling-Gruppe ein. Stellen Sie sicher, dass Sie die privaten Subnetze auswählen und die Konfiguration starten, die Sie zuvor erstellt haben. | Cloud-Administrator | 

### AWS einrichten PrivateLink
<a name="set-up-aws-privatelink"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Richten Sie den PrivateLink AWS-Endpunkt ein. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html)Weitere Informationen finden Sie im Abschnitt *Verwandte Ressourcen*. | Cloud-Administrator | 

### Erstellen eines VPC-Endpunkts
<a name="create-a-vpc-endpoint"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie einen VPC-Endpunkt. | Erstellen Sie einen VPC-Endpunkt für den PrivateLink AWS-Endpunkt, den Sie zuvor erstellt haben. Der vollqualifizierte Domainname (FQDN) des VPC-Endpunkts zeigt auf den PrivateLink AWS-Endpunkt-FQDN. Dadurch wird eine elastic network interface zum VPC-Endpunktdienst erstellt, auf die die DNS-Endpunkte zugreifen können. | Cloud-Administrator | 

### So erstellen Sie die Lambda-Funktion:
<a name="create-the-lambda-function"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| So erstellen Sie die Lambda-Funktion: | Erstellen Sie auf der AWS Lambda Lambda-Konsole eine Lambda-Funktion, um die IP-Adressen des Application Load Balancer als Ziele für den Network Load Balancer zu aktualisieren. Weitere Informationen dazu finden Sie im Blogbeitrag [Verwenden von AWS Lambda zur Aktivierung statischer IP-Adressen für Application Load Balancers](https://aws.amazon.com/blogs/networking-and-content-delivery/using-aws-lambda-to-enable-static-ip-addresses-for-application-load-balancers/). | App-Developer | 

## Zugehörige Ressourcen
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-resources"></a>

**Erstellen Sie die Load Balancer:**
+ [Verwenden Sie einen Network Load Balancer für Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/nlb.html)
+ [Einen Network Load Balancer erstellen](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html)
+ [Verwenden Sie einen Application Load Balancer für Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/alb.html)
+ [Erstellen Sie einen Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)

**Erstellen Sie ein Amazon EFS-Dateisystem:**
+ [Erstellen Sie ein Amazon EFS-Dateisystem](https://docs.aws.amazon.com/efs/latest/ug/creating-using-create-fs.html)
+ [Bereitstellungsziele in Amazon EFS erstellen](https://docs.aws.amazon.com/efs/latest/ug/accessing-fs.html)

**Erstellen Sie einen S3-Bucket:**
+ [Erstellen Sie einen S3-Bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#creating-bucket)

**Erstellen Sie ein Secrets Manager Manager-Geheimnis:**
+ [Schlüssel in AWS KMS erstellen](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)
+ [Erstellen Sie ein Geheimnis in AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)

**Erstellen Sie eine Amazon RDS-Instance:**
+ [Eine Amazon RDS-DB-Instance erstellen](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)

**Erstellen Sie die Amazon ECS-Komponenten:**
+ [Erstellen Sie einen Amazon ECS-Cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-ec2-cluster-console-v2.html)
+ [Erstellen Sie ein Docker-Image](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html)
+ [Erstellen Sie ein Amazon ECR-Repository](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)
+ [Authentifizieren Sie Docker mit dem Amazon ECR-Repository](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html#registry_auth)
+ [Ein Bild in ein Amazon ECR-Repository übertragen](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)
+ [Amazon ECS-Aufgabendefinition erstellen](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)
+ [Einen Amazon ECS-Service erstellen](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-console-v2.html)

**Erstellen Sie eine Amazon EC2 Auto Scaling Scaling-Gruppe:**
+ [Erstellen Sie eine Startkonfiguration](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-config.html)
+ [Erstellen einer Auto-Scaling-Gruppe mithilfe einer Startkonfiguration](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg.html)
+ [Bootstrap-Container-Instances mit EC2 Amazon-Benutzerdaten](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/bootstrap_container_instance.html)

**AWS einrichten PrivateLink:**
+ [VPC-Endpunktdienste (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-share-your-services.html)

**Erstellen Sie einen VPC-Endpunkt:**
+ [Schnittstelle VPC-Endpunkte (AWS) PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)

**Erstellen Sie die Lambda-Funktion:**
+ [Erstellen Sie eine Lambda-Funktion](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)

**Andere Ressourcen:**
+ [Verwendung statischer IP-Adressen für Application Load Balancer](https://aws.amazon.com/blogs/networking-and-content-delivery/using-static-ip-addresses-for-application-load-balancers/)
+ [Sicherer Zugriff auf Services über AWS PrivateLink](https://d1.awsstatic.com/whitepapers/aws-privatelink.pdf)

# Greifen Sie privat auf Container-Anwendungen auf Amazon ECS zu, indem Sie AWS Fargate PrivateLink, AWS und einen Network Load Balancer verwenden
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Zusammenfassung
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-summary"></a>

Dieses Muster beschreibt, wie Sie eine Docker-Container-Anwendung privat in der Amazon Web Services (AWS) -Cloud hosten, indem Sie Amazon Elastic Container Service (Amazon ECS) mit einem AWS Fargate-Starttyp hinter einem Network Load Balancer verwenden und mithilfe von AWS auf die Anwendung zugreifen. PrivateLink Amazon Relational Database Service (Amazon RDS) hostet die relationale Datenbank für die Anwendung, die auf Amazon ECS mit hoher Verfügbarkeit (HA) ausgeführt wird. Sie können Amazon Elastic File System (Amazon EFS) verwenden, wenn die Anwendung persistenten Speicher benötigt.

Dieses Muster verwendet einen [Fargate-Starttyp](https://docs.aws.amazon.com/AmazonECS/latest/userguide/launch_types.html) für den Amazon ECS-Service, auf dem die Docker-Anwendungen ausgeführt werden, mit einem Network Load Balancer am Frontend. Es kann dann mit einem Virtual Private Cloud (VPC) -Endpunkt für den Zugriff über AWS PrivateLink verknüpft werden. Dieser VPC-Endpunktdienst kann dann mit anderen gemeinsam genutzt werden, VPCs indem deren VPC-Endpunkte verwendet werden.

Sie können Fargate mit Amazon ECS verwenden, um Container auszuführen, ohne Server oder Cluster von Amazon Elastic Compute Cloud (Amazon EC2) -Instances verwalten zu müssen. Sie können anstelle von Fargate auch eine Amazon EC2 Auto Scaling Scaling-Gruppe verwenden. Weitere Informationen finden Sie unter [Privaten Zugriff auf Containeranwendungen auf Amazon ECS mithilfe von AWS PrivateLink und einem Network Load Balancer](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html?did=pg_card&trk=pg_card).

## Voraussetzungen und Einschränkungen
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-prereqs"></a>

**Voraussetzungen**
+ Ein aktives AWS-Konto
+ [AWS-Befehlszeilenschnittstelle (AWS CLI) Version 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html), installiert und konfiguriert unter Linux, macOS oder Windows
+ [Docker](https://www.docker.com/), installiert und konfiguriert unter Linux, MacOS oder Windows
+ Eine Anwendung, die auf Docker läuft

## Architektur
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-architecture"></a>

![\[Wird PrivateLink für den Zugriff auf eine Container-App auf Amazon ECS mit einem AWS Fargate-Starttyp verwendet.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/31cca5e2-8d8b-45ec-b872-a06b0dd97007/images/57cc9995-45f4-4039-a0bf-2d2b3d6a05de.png)


**Technologie-Stack**
+ Amazon CloudWatch
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon ECS
+ Amazon EFS
+ Amazon RDS
+ Amazon Simple Storage Service (Amazon-S3)
+ AWS Fargate
+ AWS PrivateLink
+ AWS Secrets Manager
+ Application Load Balancer
+ Network Load Balancer
+ VPC

**Automatisierung und Skalierung**
+ Sie können [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) verwenden CloudFormation, um dieses Muster mithilfe von [Infrastructure as Code](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html) zu erstellen.

## Tools
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-tools"></a>

**AWS-Services**
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) ist ein verwalteter AWS-Container-Image-Registry-Service, der sicher, skalierbar und zuverlässig ist.
+ [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) ist ein hoch skalierbarer, schneller Container-Management-Service, der das Ausführen, Stoppen und Verwalten von Containern in einem Cluster vereinfacht.
+ [Amazon Elastic File System (Amazon EFS)](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) bietet ein einfaches, skalierbares, vollständig verwaltetes elastisches NFS-Dateisystem zur Verwendung mit AWS-Cloud-Services und lokalen Ressourcen.
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)ist eine Technologie, die Sie mit Amazon ECS verwenden können, um Container auszuführen, ohne Server oder Cluster von EC2 Amazon-Instances verwalten zu müssen.
+ [Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/rds/index.html) ist ein Webservice, der die Einrichtung, den Betrieb und die Skalierung einer relationalen Datenbank in der erleichtert. AWS Cloud
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) ist Speicher für das Internet. Der Service ist darauf ausgelegt, Cloud Computing für Entwickler zu erleichtern.
+ Mit [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/) können Sie fest codierte Anmeldeinformationen im Code (einschließlich Passwörter) durch einen API-Aufruf an Secrets Manager ersetzen und das Geheimnis programmgesteuert abrufen.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) hilft Ihnen, AWS-Ressourcen in einem von Ihnen definierten virtuellen Netzwerk zu starten.
+ [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) verteilt eingehenden Anwendungs- oder Netzwerkverkehr auf mehrere Ziele wie EC2 Instances, Container und IP-Adressen in mehreren Availability Zones.

**Andere Tools**
+ [Docker](https://www.docker.com/) hilft Entwicklern dabei, jede Anwendung einfach als leichten, tragbaren und autarken Container zu packen, zu versenden und auszuführen.

## Epen
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-epics"></a>

### Netzwerkkomponenten erstellen
<a name="create-networking-components"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine VPC. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Cloud-Administrator | 

### Erstellen Sie die Load Balancer
<a name="create-the-load-balancers"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie einen Network Load Balancer.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html)Hilfe zu dieser und anderen Geschichten finden Sie im Abschnitt *Verwandte Ressourcen*. | Cloud-Administrator | 
| Erstellen Sie einen Application Load Balancer. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Cloud-Administrator | 

### Erstellen eines Amazon EFS-Dateisystems
<a name="create-an-amazon-efs-file-system"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie ein Amazon EFS-Dateisystem. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Cloud-Administrator | 
| Mounten Sie Ziele für die Subnetze. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Cloud-Administrator | 
| Stellen Sie sicher, dass die Subnetze als Ziele bereitgestellt sind.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Cloud-Administrator | 

### Erstellen eines S3-Buckets
<a name="create-an-s3-bucket"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie einen S3-Bucket. | Öffnen Sie die Amazon S3 S3-Konsole und [erstellen Sie bei Bedarf einen S3-Bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#creating-bucket), um die statischen Ressourcen Ihrer Anwendung zu speichern. | Cloud-Administrator | 

### Ein Secrets Manager Manager-Geheimnis erstellen
<a name="create-a-secrets-manager-secret"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
|  Erstellen Sie einen AWS-KMS-Schlüssel, um das Secrets Manager Manager-Geheimnis zu verschlüsseln. | Öffnen Sie die AWS Key Management Service (AWS KMS) -Konsole und erstellen Sie einen KMS-Schlüssel. | Cloud-Administrator | 
|  Erstellen Sie ein Secrets Manager Manager-Geheimnis, um das Amazon RDS-Passwort zu speichern. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Cloud-Administrator | 

### Eine Amazon RDS-Instance erstellen
<a name="create-an-amazon-rds-instance"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen einer DB-Subnetzgruppe  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Cloud-Administrator | 
| Erstellen Sie eine Amazon RDS-Instance. | Erstellen und konfigurieren Sie eine Amazon RDS-Instance in den privaten Subnetzen. Stellen Sie sicher, dass **Multi-AZ** für Hochverfügbarkeit (HA) aktiviert ist. | Cloud-Administrator | 
| Laden Sie Daten in die Amazon RDS-Instance.  | Laden Sie die für Ihre Anwendung erforderlichen relationalen Daten in Ihre Amazon RDS-Instance. Dieser Prozess hängt von den Anforderungen Ihrer Anwendung sowie davon ab, wie Ihr Datenbankschema definiert und entworfen ist. | DBA | 

### Erstellen Sie die Amazon ECS-Komponenten
<a name="create-the-amazon-ecs-components"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie einen ECS-Cluster. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Cloud-Administrator | 
| Erstellen Sie die Docker-Images. | [Erstellen Sie die Docker-Images, indem Sie den Anweisungen in der AWS Dokumentation folgen.](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html) | Cloud-Administrator | 
| Erstellen Sie ein Amazon-ECR-Repository. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Cloud-Administrator, DevOps Ingenieur | 
| Übertragen Sie die Docker-Images in das Amazon ECR-Repository.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Cloud-Administrator | 
| Erstellen Sie eine Amazon ECS-Aufgabendefinition.  | Eine Aufgabendefinition ist erforderlich, um Docker-Container in Amazon ECS auszuführen. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html)Hilfe beim Einrichten Ihrer Aufgabendefinition finden Sie unter „Eine Aufgabendefinition erstellen“ im Abschnitt *Verwandte Ressourcen*. Stellen Sie sicher, dass Sie die Docker-Images bereitstellen, die Sie an Amazon ECR übertragen haben. | Cloud-Administrator | 
| Erstellen Sie einen ECS-Service und wählen Sie Fargate als Starttyp. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Cloud-Administrator | 

### AWS einrichten PrivateLink
<a name="set-up-aws-privatelink"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Richten Sie den PrivateLink AWS-Endpunkt ein. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Cloud-Administrator | 

### Erstellen eines VPC-Endpunkts
<a name="create-a-vpc-endpoint"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie einen VPC-Endpunkt. | [Erstellen Sie einen VPC-Endpunkt](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) für den PrivateLink AWS-Endpunkt, den Sie zuvor erstellt haben. Der vollqualifizierte Domainname (FQDN) des VPC-Endpunkts zeigt auf den PrivateLink AWS-Endpunkt-FQDN. Dadurch wird eine elastic network interface zum VPC-Endpunktdienst erstellt, auf die die Domain Name Service-Endpunkte zugreifen können. | Cloud-Administrator | 

### Legen Sie das Ziel fest
<a name="set-the-target"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Fügen Sie den Application Load Balancer als Ziel hinzu. | [Folgen Sie den Anweisungen in der Dokumentation, um den Application Load Balancer als Ziel für den Network Load Balancer hinzuzufügen.AWS](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/application-load-balancer-target.html) | App-Developer | 

## Zugehörige Ressourcen
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-resources"></a>

**Erstellen Sie die Load Balancer:**
+ [Verwenden Sie einen Network Load Balancer für Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/nlb.html)
+ [Einen Network Load Balancer erstellen](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html)
+ [Verwenden Sie einen Application Load Balancer für Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/alb.html)
+ [Erstellen Sie einen Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)

**Erstellen Sie ein Amazon EFS-Dateisystem:**
+ [Erstellen Sie ein Amazon EFS-Dateisystem](https://docs.aws.amazon.com/efs/latest/ug/creating-using-create-fs.html)
+ [Bereitstellungsziele in Amazon EFS erstellen](https://docs.aws.amazon.com/efs/latest/ug/accessing-fs.html)

**Erstellen Sie ein Secrets Manager Manager-Geheimnis:**
+ [Schlüssel in AWS KMS erstellen](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)
+ [Erstellen Sie ein Geheimnis in AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)

**Erstellen Sie eine Amazon RDS-Instance:**
+ [Eine Amazon RDS-DB-Instance erstellen](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)

**Erstellen Sie die Amazon ECS-Komponenten**
+ [Erstellen Sie ein Amazon ECR-Repository](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)
+ [Authentifizieren Sie Docker mit dem Amazon ECR-Repository](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html#registry_auth)
+ [Ein Bild in ein Amazon ECR-Repository übertragen](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)
+ [Amazon ECS-Aufgabendefinition erstellen](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)
+ [Einen Amazon ECS-Service erstellen](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-console-v2.html)

**Andere Ressourcen:**
+ [Sicherer Zugriff auf Services über AWS PrivateLink](https://d1.awsstatic.com/whitepapers/aws-privatelink.pdf)

# Greifen Sie mit AWS PrivateLink und einem Network Load Balancer privat auf Container-Anwendungen auf Amazon EKS zu
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Zusammenfassung
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-summary"></a>

Dieses Muster beschreibt, wie Sie eine Docker-Container-Anwendung privat auf Amazon Elastic Kubernetes Service (Amazon EKS) hinter einem Network Load Balancer hosten und mithilfe von AWS auf die Anwendung zugreifen. PrivateLink Sie können dann ein privates Netzwerk verwenden, um sicher auf Dienste in der Amazon Web Services (AWS) Cloud zuzugreifen. 

Der Amazon EKS-Cluster, auf dem die Docker-Anwendungen ausgeführt werden, mit einem Network Load Balancer am Frontend kann mit einem Virtual Private Cloud (VPC) -Endpunkt für den Zugriff über AWS verknüpft werden. PrivateLink Dieser VPC-Endpunktdienst kann dann mit anderen gemeinsam genutzt werden, VPCs indem deren VPC-Endpunkte verwendet werden.

Das in diesem Muster beschriebene Setup ist eine sichere Methode, um den Anwendungszugriff zwischen VPCs AWS-Konten gemeinsam zu nutzen. Es sind keine speziellen Konnektivitäts- oder Routing-Konfigurationen erforderlich, da die Verbindung zwischen den Kunden- und Anbieterkonten auf dem globalen AWS-Backbone erfolgt und nicht über das öffentliche Internet erfolgt.

## Voraussetzungen und Einschränkungen
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-prereqs"></a>

**Voraussetzungen**
+ [Docker](https://www.docker.com/), installiert und konfiguriert unter Linux, MacOS oder Windows.
+ Eine Anwendung, die auf Docker läuft.
+ Ein aktives AWS-Konto.
+ [AWS-Befehlszeilenschnittstelle (AWS CLI) Version 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html), installiert und konfiguriert unter Linux, macOS oder Windows.
+ Ein vorhandener Amazon EKS-Cluster mit markierten privaten Subnetzen, der für das Hosten von Anwendungen konfiguriert ist. Weitere Informationen finden Sie unter [Subnet-Tagging](https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html#vpc-subnet-tagging) in der Amazon EKS-Dokumentation. 
+ Kubectl, installiert und konfiguriert für den Zugriff auf Ressourcen in Ihrem Amazon EKS-Cluster. Weitere Informationen finden Sie unter [Installation von kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) in der Amazon EKS-Dokumentation. 

## Architektur
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-architecture"></a>

![\[Verwenden Sie PrivateLink und einen Network Load Balancer, um auf eine Anwendung in einem Amazon EKS-Container zuzugreifen.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/ce977924-012c-4fb6-8e51-94d6e5c829a6/images/378456a3-f4d1-4a57-bb36-879c240cabfb.png)


**Technologie-Stack**
+ Amazon EKS
+ AWS PrivateLink
+ Network Load Balancer

**Automatisierung und Skalierung**
+ Kubernetes-Manifeste können in einem Git-basierten Repository verfolgt und verwaltet und mithilfe von Continuous Integration and Continuous Delivery (CI/CD) in AWS bereitgestellt werden. CodePipeline 
+ Sie können AWS verwenden CloudFormation , um dieses Muster mithilfe von Infrastructure as Code (IaC) zu erstellen.

## Tools
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-tools"></a>
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) — AWS Command Line Interface (AWS CLI) ist ein Open-Source-Tool, mit dem Sie mithilfe von Befehlen in Ihrer Befehlszeilen-Shell mit AWS-Services interagieren können.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) — Elastic Load Balancing verteilt eingehenden Anwendungs- oder Netzwerkverkehr auf mehrere Ziele, wie Amazon Elastic Compute Cloud (Amazon EC2) -Instances, Container und IP-Adressen, in einer oder mehreren Availability Zones.
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) — Amazon Elastic Kubernetes Service (Amazon EKS) ist ein verwalteter Service, mit dem Sie Kubernetes auf AWS ausführen können, ohne Ihre eigene Kubernetes-Steuerebene oder Knoten installieren, betreiben und warten zu müssen.
+ [Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) — Amazon Virtual Private Cloud (Amazon VPC) hilft Ihnen, AWS-Ressourcen in einem von Ihnen definierten virtuellen Netzwerk zu starten.
+ [Kubectl — Kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) ist ein Befehlszeilenprogramm zum Ausführen von Befehlen für Kubernetes-Cluster.

## Epen
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-epics"></a>

### Stellen Sie die Kubernetes-Bereitstellungs- und Service-Manifestdateien bereit
<a name="deploy-the-kubernetes-deployment-and-service-manifest-files"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
|  Erstellen Sie die Manifestdatei für die Kubernetes-Bereitstellung. | Erstellen Sie eine Bereitstellungsmanifestdatei, indem Sie die folgende Beispieldatei Ihren Anforderungen entsprechend ändern.<pre>apiVersion: apps/v1<br />kind: Deployment<br />metadata:<br />  name: sample-app<br />spec:<br />  replicas: 3<br />  selector:<br />    matchLabels:<br />      app: nginx<br />  template:<br />    metadata:<br />      labels:<br />        app: nginx<br />    spec:<br />      containers:<br />        - name: nginx<br />          image: public.ecr.aws/z9d2n7e1/nginx:1.19.5<br />          ports:<br />            - name: http<br />              containerPort: 80</pre>Dies ist eine NGINX-Beispielkonfigurationsdatei, die mithilfe des NGINX-Docker-Images bereitgestellt wird. Weitere Informationen finden Sie in der Docker-Dokumentation unter [So verwenden Sie das offizielle NGINX-Docker-Image](https://www.docker.com/blog/how-to-use-the-official-nginx-docker-image/). | DevOps Ingenieur | 
| Stellen Sie die Kubernetes-Bereitstellungsmanifestdatei bereit. | Führen Sie den folgenden Befehl aus, um die Bereitstellungsmanifestdatei auf Ihren Amazon EKS-Cluster anzuwenden:`kubectl apply –f <your_deployment_file_name> ` | DevOps Ingenieur | 
|  Erstellen Sie die Manifestdatei des Kubernetes-Dienstes.  | Erstellen Sie eine Dienstmanifestdatei, indem Sie die folgende Beispieldatei Ihren Anforderungen entsprechend ändern.<pre>apiVersion: v1<br />kind: Service<br />metadata:<br />  name: sample-service<br />  annotations:<br />    service.beta.kubernetes.io/aws-load-balancer-type: nlb<br />    service.beta.kubernetes.io/aws-load-balancer-internal: "true"<br />spec:<br />  ports:<br />    - port: 80<br />      targetPort: 80<br />      protocol: TCP<br />  type: LoadBalancer<br />  selector:<br />    app: nginx</pre>Stellen Sie sicher, dass Sie Folgendes angegeben haben`annotations`, um einen internen Network Load Balancer zu definieren:<pre>service.beta.kubernetes.io/aws-load-balancer-type: nlb<br />service.beta.kubernetes.io/aws-load-balancer-internal: "true"</pre> | DevOps Ingenieur | 
| Stellen Sie die Manifestdatei des Kubernetes-Dienstes bereit. | Führen Sie den folgenden Befehl aus, um die Service-Manifest-Datei auf Ihren Amazon EKS-Cluster anzuwenden:`kubectl apply -f <your_service_file_name>` | DevOps Ingenieur | 

### Erstellen Sie die Endpunkte
<a name="create-the-endpoints"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Notieren Sie sich den Namen des Network Load Balancers.  | Führen Sie den folgenden Befehl aus, um den Namen des Network Load Balancer abzurufen:`kubectl get svc sample-service -o wide`Notieren Sie sich den Namen des Network Load Balancers, der für die Erstellung eines PrivateLink AWS-Endpunkts erforderlich ist. | DevOps Ingenieur | 
| Erstellen Sie einen PrivateLink AWS-Endpunkt. | Melden Sie sich bei der AWS-Managementkonsole an, öffnen Sie die Amazon VPC-Konsole und erstellen Sie dann einen PrivateLink AWS-Endpunkt. Ordnen Sie diesen Endpunkt dem Network Load Balancer zu, damit die Anwendung privat für Kunden verfügbar ist. Weitere Informationen finden Sie unter [VPC Endpoint Services (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html) in der Amazon VPC-Dokumentation.Wenn das Verbraucherkonto Zugriff auf die Anwendung benötigt, muss die [AWS-Konto-ID des Verbraucherkontos](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html) zur Liste der zulässigen Prinzipale für die PrivateLink AWS-Endpunktkonfiguration hinzugefügt werden. Weitere Informationen finden Sie unter [Hinzufügen und Entfernen von Berechtigungen für Ihren Endpunkt-Service](https://docs.aws.amazon.com/vpc/latest/userguide/add-endpoint-service-permissions.html) in der Amazon VPC-Dokumentation. | Cloud-Administrator  | 
| Erstellen Sie einen VPC-Endpunkt. | Wählen Sie in der Amazon VPC-Konsole **Endpoint Services** und dann **Create Endpoint Service** aus. Erstellen Sie einen VPC-Endpunkt für den PrivateLink AWS-Endpunkt.Der vollqualifizierte Domainname (FQDN) des VPC-Endpunkts verweist auf den FQDN für den AWS-Endpunkt. PrivateLink Dadurch wird eine elastic network interface zum VPC-Endpunktdienst erstellt, auf die die DNS-Endpunkte zugreifen können.  | Cloud-Administrator | 

## Zugehörige Ressourcen
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-resources"></a>
+ [Verwenden Sie das offizielle NGINX Docker-Image](https://www.docker.com/blog/how-to-use-the-official-nginx-docker-image/)
+ [Network Load Balancing in Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/load-balancing.html) 
+ [VPC-Endpunktdienste (AWS PrivateLink) erstellen](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html) 
+ [Hinzufügen und Entfernen von Berechtigungen für Ihren Endpunkt-Service](https://docs.aws.amazon.com/vpc/latest/userguide/add-endpoint-service-permissions.html)

# Automatisieren Sie Backups für Amazon RDS for PostgreSQL PostgreSQL-DB-Instances mithilfe von AWS Batch
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Zusammenfassung
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-summary"></a>

Das Sichern Ihrer PostgreSQL-Datenbanken ist eine wichtige Aufgabe und kann in der Regel mit dem [Hilfsprogramm pg\$1dump](https://www.postgresql.org/docs/current/app-pgdump.html) erledigt werden, das standardmäßig den Befehl COPY verwendet, um ein Schema und einen Datendump einer PostgreSQL-Datenbank zu erstellen. Dieser Vorgang kann sich jedoch wiederholen, wenn Sie regelmäßige Backups für mehrere PostgreSQL-Datenbanken benötigen. Wenn Ihre PostgreSQL-Datenbanken in der Cloud gehostet werden, können Sie auch die [automatische Backup-Funktion](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html) von Amazon Relational Database Service (Amazon RDS) für PostgreSQL nutzen. Dieses Muster beschreibt, wie regelmäßige Backups für Amazon RDS for PostgreSQL PostgreSQL-DB-Instances mithilfe des Dienstprogramms pg\$1dump automatisiert werden.

Hinweis: In den Anweisungen wird davon ausgegangen, dass Sie Amazon RDS verwenden. Sie können diesen Ansatz jedoch auch für PostgreSQL-Datenbanken verwenden, die außerhalb von Amazon RDS gehostet werden. Um Backups zu erstellen, muss die AWS Lambda Lambda-Funktion auf Ihre Datenbanken zugreifen können.

Ein zeitbasiertes Amazon CloudWatch Events-Ereignis initiiert eine Lambda-Funktion, die nach bestimmten [Backup-Tags sucht, die auf die Metadaten der PostgreSQL-DB-Instances auf Amazon RDS angewendet](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html) wurden. Wenn die PostgreSQL-DB-Instances das Tag **bkp:Automated DBDump = Active** und andere erforderliche Backup-Tags haben, sendet die Lambda-Funktion einzelne Jobs für jede Datenbanksicherung an AWS Batch. 

AWS Batch verarbeitet diese Jobs und lädt die Backup-Daten in einen Amazon Simple Storage Service (Amazon S3) -Bucket hoch. Dieses Muster verwendet eine Dockerfile- und eine Datei entrypoint.sh, um ein Docker-Container-Image zu erstellen, das zum Erstellen von Backups im AWS Batch Batch-Job verwendet wird. Nach Abschluss des Sicherungsvorgangs zeichnet AWS Batch die Backup-Details in einer Inventartabelle auf Amazon DynamoDB auf. Als zusätzliche Schutzmaßnahme löst ein CloudWatch Events-Ereignis eine Amazon Simple Notification Service (Amazon SNS) -Benachrichtigung aus, wenn ein Job in AWS Batch fehlschlägt. 

## Voraussetzungen und Einschränkungen
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-prereqs"></a>

**Voraussetzungen**
+ Ein aktives AWS-Konto.
+ Eine bestehende verwaltete oder nicht verwaltete Rechenumgebung. Weitere Informationen finden Sie unter [Verwaltete und nicht verwaltete Rechenumgebungen](https://docs.aws.amazon.com/batch/latest/userguide/compute_environments.html) in der AWS Batch Batch-Dokumentation. 
+ [Docker-Image der AWS-Befehlszeilenschnittstelle (CLI), Version 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-docker.html), installiert und konfiguriert.
+ Bestehende Amazon RDS for PostgreSQL PostgreSQL-DB-Instances.  
+ Ein vorhandener S3-Bucket. 
+ [Docker](https://www.docker.com/), installiert und konfiguriert unter Linux, MacOS oder Windows.
+ Vertrautheit mit der Programmierung in Lambda. 

## Architektur
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-architecture"></a>

![\[Architektur zur Sicherung von Amazon RDS for PostgreSQL PostgreSQL-DB-Instances mithilfe des Dienstprogramms pg_dump.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/3283f739-980b-43d4-aca0-9d77a2ce3b85/images/352e2eab-1b7d-44ec-840a-a772a175e873.png)


 

**Technologie-Stack**
+  CloudWatch Amazon-Veranstaltungen
+ Amazon DynamoDB
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon RDS
+ Amazon SNS
+ Amazon S3
+ AWS Batch
+ AWS Key Management Service (AWS KMS)
+ AWS Lambda
+ AWS Secrets Manager
+ Docker

## Tools
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-tools"></a>
+ [Amazon CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) — CloudWatch Events bietet einen Stream von Systemereignissen, die Änderungen an AWS-Ressourcen beschreiben, nahezu in Echtzeit.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) — DynamoDB ist ein vollständig verwalteter NoSQL-Datenbankservice, der schnelle und vorhersehbare Leistung mit nahtloser Skalierbarkeit bietet.
+ [Amazon ECR](https://docs.aws.amazon.com/ecr/index.html) — Amazon Elastic Container Registry (Amazon ECR) ist ein verwalteter AWS-Container-Image-Registry-Service, der sicher, skalierbar und zuverlässig ist.
+ [Amazon RDS](https://docs.aws.amazon.com/rds/index.html) — Amazon Relational Database Service (Amazon RDS) ist ein Webservice, der die Einrichtung, den Betrieb und die Skalierung einer relationalen Datenbank in der AWS-Cloud erleichtert.
+ [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) — Amazon Simple Notification Service (Amazon SNS) ist ein verwalteter Service, der die Nachrichtenzustellung von Herausgebern an Abonnenten ermöglicht.
+ [Amazon S3](https://docs.aws.amazon.com/s3/index.html) — Amazon Simple Storage Service (Amazon S3) ist ein Speicher für das Internet.
+ [AWS Batch](https://docs.aws.amazon.com/batch/index.html) — Mit AWS Batch können Sie Batch-Computing-Workloads in der AWS-Cloud ausführen.
+ [AWS KMS](https://docs.aws.amazon.com/kms/index.html) — AWS Key Management Service (AWS KMS) ist ein verwalteter Service, mit dem Sie auf einfache Weise die zur Verschlüsselung Ihrer Daten verwendeten Verschlüsselungsschlüssel erstellen und kontrollieren können.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/index.html) — Lambda ist ein Rechenservice, mit dem Sie Code ausführen können, ohne Server bereitstellen oder verwalten zu müssen.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/index.html) — Secrets Manager hilft Ihnen dabei, hartcodierte Anmeldeinformationen in Ihrem Code, einschließlich Passwörter, durch einen API-Aufruf an Secrets Manager zu ersetzen, um das Geheimnis programmgesteuert abzurufen.
+ [Docker](https://www.docker.com/) — Docker hilft Entwicklern dabei, jede Anwendung als leichten, tragbaren und autarken Container einfach zu packen, zu versenden und auszuführen.

Auf Ihre PostgreSQL-DB-Instances auf Amazon RDS müssen [Tags auf ihre Metadaten angewendet werden](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html). Die Lambda-Funktion sucht nach Tags, um DB-Instances zu identifizieren, die gesichert werden sollten, und die folgenden Tags werden normalerweise verwendet.


| 
| 
| Markierung | Description | 
| --- |--- |
| bkp:Automated = Aktiv DBDump  | Identifiziert eine Amazon RDS-DB-Instance als Kandidaten für Backups. | 
| bkp: = AutomatedBackupSecret <secret\$1name > | Identifiziert das Secrets Manager Manager-Geheimnis, das die Amazon RDS-Anmeldeinformationen enthält. | 
| bkp: DBDump Automatisierter S3-Bucket = <s3\$1bucket\$1name> | Identifiziert den S3-Bucket, an den Backups gesendet werden sollen. | 
| BKPDBDump: Automatisierte FrequenzBKP:Automatisierte DBDump Zeit | Identifizieren Sie die Häufigkeit und die Zeiten, zu denen Datenbanken gesichert werden sollten.  | 
| bkp:pgdumpcommand = <pgdump\$1command> | Identifiziert die Datenbanken, für die die Backups erstellt werden müssen. | 

## Epen
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-epics"></a>

### Erstellen Sie eine Inventartabelle in DynamoDB
<a name="create-an-inventory-table-in-dynamodb"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine Tabelle in DynamoDB. | Melden Sie sich bei der AWS-Managementkonsole an, öffnen Sie die Amazon DynamoDB DynamoDB-Konsole und erstellen Sie eine Tabelle. Hilfe zu dieser und anderen Geschichten finden Sie im Abschnitt *Verwandte Ressourcen*. | Cloud-Administrator, Datenbankadministrator | 
| Vergewissern Sie sich, dass die Tabelle erstellt wurde.  | Führen Sie den Befehl `aws dynamodb describe-table --table-name <table-name> \| grep TableStatus` aus. Wenn die Tabelle existiert, gibt der Befehl das `"TableStatus": "ACTIVE",` Ergebnis zurück. | Cloud-Administrator, Datenbankadministrator | 

### Erstellen Sie ein SNS-Thema für fehlgeschlagene Auftragsereignisse in AWS Batch
<a name="create-an-sns-topic-for-failed-job-events-in-aws-batch"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie ein SNS-Thema. | Öffnen Sie die Amazon SNS SNS-Konsole, wählen Sie **Themen** und erstellen Sie ein SNS-Thema mit dem Namen. `JobFailedAlert` Abonnieren Sie das Thema mit einer aktiven E-Mail-Adresse und überprüfen Sie Ihren E-Mail-Posteingang, um die SNS-Abonnement-E-Mail von AWS Notifications zu bestätigen. | Cloud-Administrator | 
| Erstellen Sie eine Ereignisregel für fehlgeschlagene Jobs für AWS Batch.  | Öffnen Sie die CloudWatch Amazon-Konsole, wählen Sie **Ereignisse** und dann **Regel erstellen** aus. Wählen Sie **Erweiterte Optionen anzeigen** und anschließend **Bearbeiten**. Ersetzen Sie unter „**Ein Muster erstellen, das Ereignisse für die Verarbeitung durch Ihre Ziele auswählt**“ den vorhandenen Text durch den Code „Fehlgeschlagenes Auftragsereignis“ aus dem Abschnitt „*Zusätzliche Informationen*“. Dieser Code definiert eine CloudWatch Ereignisregel, die ausgelöst wird, wenn AWS Batch ein `Failed` Ereignis hat. | Cloud-Administrator | 
| Ziel für eine Ereignisregel hinzufügen.  | Wählen Sie unter **Ziele** die Option **Ziele hinzufügen** und wählen Sie das `JobFailedAlert` SNS-Thema aus. Konfigurieren Sie die verbleibenden Details und erstellen Sie die Cloudwatch Events-Regel. | Cloud-Administrator | 

### Erstellen Sie ein Docker-Image und übertragen Sie es in ein Amazon ECR-Repository
<a name="build-a-docker-image-and-push-it-to-an-amazon-ecr-repository"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie ein Amazon-ECR-Repository. | Öffnen Sie die Amazon ECR-Konsole und wählen Sie die AWS-Region aus, in der Sie Ihr Repository erstellen möchten. Wählen Sie **Repositories** und dann **Create** repository aus. Konfigurieren Sie das Repository gemäß Ihren Anforderungen. | Cloud-Administrator | 
| Schreiben Sie eine Docker-Datei.  | Melden Sie sich bei Docker an und verwenden Sie die „Beispieldatei Dockerfile“ und „Beispieldatei entrypoint.sh“ aus dem Abschnitt *Zusätzliche Informationen*, um ein Dockerfile zu erstellen. | DevOps Ingenieur | 
| Erstellen Sie ein Docker-Image und übertragen Sie es in das Amazon ECR-Repository. | Erstellen Sie das Dockerfile in ein Docker-Image und übertragen Sie es in das Amazon ECR-Repository. *Hilfe zu dieser Geschichte finden Sie im Abschnitt Verwandte Ressourcen.* | DevOps Ingenieur | 

### Erstellen Sie die AWS Batch Batch-Komponenten
<a name="create-the-aws-batch-components"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine AWS Batch Batch-Auftragsdefinition. | Öffnen Sie die AWS Batch Batch-Konsole und erstellen Sie eine Auftragsdefinition, die den Uniform Resource Identifier (URI) des Amazon ECR-Repositorys als Eigenschaft `Image` enthält. | Cloud-Administrator | 
| Konfigurieren Sie die AWS Batch Batch-Jobwarteschlange.  | Wählen Sie in der AWS Batch Batch-Konsole **Job-Warteschlangen** und anschließend **Warteschlange erstellen** aus. Erstellen Sie eine Auftragswarteschlange, in der Jobs gespeichert werden, bis AWS Batch sie auf den Ressourcen in Ihrer Rechenumgebung ausführt. Wichtig: Stellen Sie sicher, dass Sie Logik für AWS Batch schreiben, um die Backup-Details in der DynamoDB-Inventartabelle aufzuzeichnen. | Cloud-Administrator | 

### Eine Lambda-Funktion erstellen und planen
<a name="create-and-schedule-a-lambda-function"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine Lambda-Funktion, um nach Tags zu suchen. | Erstellen Sie eine Lambda-Funktion, die nach Tags in Ihren PostgreSQL-DB-Instances sucht und Backup-Kandidaten identifiziert. Stellen Sie sicher, dass Ihre Lambda-Funktion das `bkp:AutomatedDBDump = Active` Tag und alle anderen erforderlichen Tags identifizieren kann. Wichtig: Die Lambda-Funktion muss auch in der Lage sein, Jobs zur AWS Batch Batch-Jobwarteschlange hinzuzufügen. | DevOps Ingenieur | 
| Erstellen Sie ein zeitbasiertes Ereignis für CloudWatch Ereignisse.  | Öffnen Sie die CloudWatch Amazon-Konsole und erstellen Sie ein CloudWatch Events-Ereignis, das einen Cron-Ausdruck verwendet, um Ihre Lambda-Funktion regelmäßig auszuführen. Wichtig: Alle geplanten Ereignisse verwenden die UTC-Zeitzone. | Cloud-Administrator | 

### Testen Sie die Backup-Automatisierung
<a name="test-the-backup-automation"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie einen Amazon KMS-Schlüssel. | Öffnen Sie die Amazon KMS-Konsole und erstellen Sie einen KMS-Schlüssel, der zur Verschlüsselung der in AWS Secrets Manager gespeicherten Amazon RDS-Anmeldeinformationen verwendet werden kann. | Cloud-Administrator | 
| Erstellen Sie ein AWS Secrets Manager Manager-Geheimnis. | Öffnen Sie die AWS Secrets Manager Manager-Konsole und speichern Sie Ihre Amazon RDS for PostgreSQL PostgreSQL-Datenbankanmeldedaten als geheim. | Cloud-Administrator | 
| Fügen Sie den PostgreSQL-DB-Instances die erforderlichen Tags hinzu. | Öffnen Sie die Amazon RDS-Konsole und fügen Sie Tags zu den PostgreSQL-DB-Instances hinzu, die Sie automatisch sichern möchten. Sie können die Tags aus der Tabelle im Abschnitt *Tools* verwenden. Wenn Sie Backups von mehreren PostgreSQL-Datenbanken innerhalb derselben Amazon RDS-Instance benötigen, verwenden Sie diese `-d test:-d test1` als Wert für das `bkp:pgdumpcommand` Tag. `test`und `test1` sind Datenbanknamen. Stellen Sie sicher, dass nach dem Doppelpunkt (:) kein Leerzeichen steht. | Cloud-Administrator | 
| Überprüfen Sie die Backup-Automatisierung.  | Um die Backup-Automatisierung zu überprüfen, können Sie entweder die Lambda-Funktion aufrufen oder warten, bis der Backup-Zeitplan beginnt. Nachdem der Sicherungsvorgang abgeschlossen ist, überprüfen Sie, ob die DynamoDB-Inventartabelle einen gültigen Backup-Eintrag für Ihre PostgreSQL-DB-Instances enthält. Wenn sie übereinstimmen, ist der Backup-Automatisierungsprozess erfolgreich. | Cloud-Administrator | 

## Zugehörige Ressourcen
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-resources"></a>

**Erstellen Sie eine Inventartabelle in DynamoDB**
+ [Eine Amazon DynamoDB-Tabelle erstellen](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-1.html)

 

**Erstellen Sie ein SNS-Thema für fehlgeschlagene Auftragsereignisse in AWS Batch**
+ [Ein Amazon SNS SNS-Thema erstellen](https://docs.aws.amazon.com/sns/latest/dg/sns-tutorial-create-topic.html)
+ [Senden Sie SNS-Benachrichtigungen für fehlgeschlagene Auftragsereignisse in AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/batch_sns_tutorial.html)

 

**Erstellen Sie ein Docker-Image und übertragen Sie es in ein Amazon ECR-Repository**
+ [Erstellen Sie ein Amazon ECR-Repository](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)    
+ [Schreiben Sie eine Dockerfile, erstellen Sie ein Docker-Image und übertragen Sie es an Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html)

 

**Erstellen Sie die AWS Batch Batch-Komponenten**
+ [Eine AWS Batch Batch-Auftragsdefinition erstellen](https://docs.aws.amazon.com/batch/latest/userguide/Batch_GetStarted.html#first-run-step-1)    
+ [Konfigurieren Sie Ihre Rechenumgebung und die AWS Batch Batch-Job-Warteschlange](https://docs.aws.amazon.com/batch/latest/userguide/Batch_GetStarted.html#first-run-step-2)   
+ [Erstellen Sie eine Auftragswarteschlange in AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/create-job-queue.html)

 

**Erstellen Sie eine Lambda-Funktion**
+ [Erstellen Sie eine Lambda-Funktion und schreiben Sie Code](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html)
+ [Verwenden Sie Lambda mit DynamoDB](https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html)

 

**Erstellen Sie ein Veranstaltungsereignis CloudWatch **
+ [Erstellen Sie ein zeitbasiertes CloudWatch Veranstaltungsereignis](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/Create-CloudWatch-Events-Scheduled-Rule.html)   
+ [Verwenden Sie Cron-Ausdrücke in Cloudwatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html)

 

**Testen Sie die Backup-Automatisierung**
+ [Einen Amazon KMS-Schlüssel erstellen](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)    
+ [Ein Secrets Manager Manager-Geheimnis erstellen](https://docs.aws.amazon.com/secretsmanager/latest/userguide/tutorials_basic.html)
+ [Hinzufügen von Tags zu einer Amazon RDS-Instance](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html)

## Zusätzliche Informationen
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-additional"></a>

**Fehlgeschlagenes Auftragsereignis:**

```
{
  "detail-type": [
    "Batch Job State Change"
  ],
  "source": [
    "aws.batch"
  ],
  "detail": {
    "status": [
      "FAILED"
    ]
  }
}
```

**Beispiel für eine Docker-Datei:**

```
FROM alpine:latest
RUN apk --update add py-pip postgresql-client jq bash && \
pip install awscli && \
rm -rf /var/cache/apk/*
ADD entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
```

**Beispieldatei entrypoint.sh:**

```
 #!/bin/bash
set -e
DATETIME=`date +"%Y-%m-%d_%H_%M"`
FILENAME=RDS_PostGres_dump_${RDS_INSTANCE_NAME}
FILE=${FILENAME}_${DATETIME}

aws configure --profile new-profile set role_arn arn:aws:iam::${TargetAccountId}:role/${TargetAccountRoleName}
aws configure --profile new-profile set credential_source EcsContainer

echo "Central Account access provider IAM role is: "
aws sts get-caller-identity

echo "Target Customer Account access provider IAM role is: "
aws sts get-caller-identity --profile new-profile

securestring=$(aws secretsmanager get-secret-value --secret-id $SECRETID --output json --query 'SecretString' --region=$REGION --profile new-profile)

if [[ ${securestring} ]]; then
    echo "successfully accessed secrets manager and got the credentials"
    export PGPASSWORD=$(echo $securestring | jq --raw-output | jq -r '.DB_PASSWORD')
    PGSQL_USER=$(echo $securestring | jq --raw-output | jq -r '.DB_USERNAME')
    echo "Executing pg_dump for the PostGres endpoint ${PGSQL_HOST}"
    # pg_dump -h $PGSQL_HOST -U $PGSQL_USER -n dms_sample | gzip -9 -c  | aws s3 cp - --region=$REGION  --profile new-profile s3://$BUCKET/$FILE
    # in="-n public:-n private"
    IFS=':' list=($EXECUTE_COMMAND);
    for command in "${list[@]}";
      do
        echo $command;
        pg_dump -h $PGSQL_HOST -U $PGSQL_USER ${command} | gzip -9 -c  | aws s3 cp - --region=$REGION --profile new-profile s3://${BUCKET}/${FILE}-${command}".sql.gz"
        echo $?;
        if  [[ $? -ne 0 ]]; then
            echo "Error occurred in database backup process. Exiting now....."
            exit 1
        else
            echo "Postgresql dump was successfully taken for the RDS endpoint ${PGSQL_HOST} and is uploaded to the following S3 location s3://${BUCKET}/${FILE}-${command}.sql.gz"
            #write the details into the inventory table in central account
            echo "Writing to DynamoDB inventory table"
            aws dynamodb put-item --table-name ${RDS_POSTGRES_DUMP_INVENTORY_TABLE} --region=$REGION --item '{ "accountId": { "S": "'"${TargetAccountId}"'" }, "dumpFileUrl": {"S": "'"s3://${BUCKET}/${FILE}-${command}.sql.gz"'" }, "DumpAvailableTime": {"S": "'"`date +"%Y-%m-%d::%H::%M::%S"` UTC"'"}}'
            echo $?
            if  [[ $? -ne 0 ]]; then
                echo "Error occurred while putting item to DynamoDb Inventory Table. Exiting now....."
                exit 1
            else
                echo "Successfully written to DynamoDb Inventory Table ${RDS_POSTGRES_DUMP_INVENTORY_TABLE}"
            fi
        fi
      done;
else
    echo "Something went wrong {$?}"
    exit 1
fi

exec "$@"
```

# Automatisieren Sie die Bereitstellung von Node Termination Handler in Amazon EKS mithilfe einer CI/CD Pipeline
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline"></a>

*Sandip Gangapadhyay, Sandeep Gawande, Viyoma Sachdeva, Pragtideep Singh und John Vargas, Amazon Web Services*

## Zusammenfassung
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-summary"></a>

**Hinweis**: AWS CodeCommit ist für Neukunden nicht mehr verfügbar. Bestandskunden von AWS CodeCommit können den Service weiterhin wie gewohnt nutzen. [Weitere Informationen](https://aws.amazon.com/blogs/devops/how-to-migrate-your-aws-codecommit-repository-to-another-git-provider/)

In der Amazon Web Services (AWS) Cloud können Sie [AWS Node Termination Handler](https://github.com/aws/aws-node-termination-handler), ein Open-Source-Projekt, verwenden, um das Herunterfahren der Amazon Elastic Compute Cloud (Amazon EC2) -Instance innerhalb von Kubernetes problemlos zu handhaben. AWS Node Termination Handler hilft sicherzustellen, dass die Kubernetes-Steuerebene angemessen auf Ereignisse reagiert, die dazu führen können, dass Ihre EC2 Instance nicht mehr verfügbar ist. Zu diesen Ereignissen gehören die folgenden:
+ [EC2 geplante Wartung der Instanz](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instances-status-check_sched.html)
+ [Unterbrechungen der Amazon EC2 Spot-Instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html)
+ [Auto Scaling Scaling-Gruppenskalierung](https://docs.aws.amazon.com/autoscaling/ec2/userguide/AutoScalingGroupLifecycle.html#as-lifecycle-scale-in)
+ [Auto Scaling Scaling-Gruppen-Rebalancing zwischen](https://docs.aws.amazon.com/autoscaling/ec2/userguide/auto-scaling-benefits.html#AutoScalingBehavior.InstanceUsage) Availability Zones
+ EC2 Kündigung der Instanz über die API oder die AWS-Managementkonsole

Wenn ein Ereignis nicht behandelt wird, wird Ihr Anwendungscode möglicherweise nicht ordnungsgemäß beendet. Es kann auch länger dauern, bis die volle Verfügbarkeit wiederhergestellt ist, oder es wird versehentlich die Arbeit an Knoten geplant, die ausfallen. Der `aws-node-termination-handler` (NTH) kann in zwei verschiedenen Modi betrieben werden: Instance Metadata Service (IMDS) oder Queue Processor. Weitere Informationen zu den beiden Modi finden Sie in der [Readme-Datei](https://github.com/aws/aws-node-termination-handler#readme).

Dieses Muster verwendet AWS CodeCommit und automatisiert die Bereitstellung von NTH mithilfe von Queue Processor über eine CI/CD-Pipeline (Continuous Integration and Continuous Delivery).

**Anmerkung**  
Wenn Sie von [EKS verwaltete Knotengruppen verwenden, benötigen](https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html) Sie die nicht. `aws-node-termination-handler`

## Voraussetzungen und Einschränkungen
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-prereqs"></a>

**Voraussetzungen**
+ Ein aktives AWS-Konto.
+ Ein Webbrowser, der für die Verwendung mit der AWS-Managementkonsole unterstützt wird. Sehen Sie sich die [Liste der unterstützten Browser](https://aws.amazon.com/premiumsupport/knowledge-center/browsers-management-console/) an.
+ Das AWS Cloud Development Kit (AWS CDK) ist [installiert](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install).
+ `kubectl`[, das Kubernetes-Befehlszeilentool, installiert.](https://kubernetes.io/docs/tasks/tools/)
+ `eksctl`[, die AWS-Befehlszeilenschnittstelle (AWS CLI) für Amazon Elastic Kubernetes Service (Amazon EKS), installiert.](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html)
+ Ein laufender EKS-Cluster mit Version 1.20 oder höher.
+ Eine selbstverwaltete Knotengruppe, die an den EKS-Cluster angehängt ist. Führen Sie den folgenden Befehl aus, um einen Amazon EKS-Cluster mit einer selbstverwalteten Knotengruppe zu erstellen.

  ```
  eksctl create cluster --managed=false --region <region> --name <cluster_name>
  ```

  Weitere Informationen dazu finden Sie in `eksctl` der [eksctl-Dokumentation](https://eksctl.io/usage/creating-and-managing-clusters/).
+ AWS Identity and Access Management (IAM) OpenID Connect (OIDC) -Anbieter für Ihren Cluster. Weitere Informationen finden Sie unter [Einen IAM-OIDC-Anbieter für Ihren Cluster erstellen](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html).

**Einschränkungen**
+ Sie müssen eine AWS-Region verwenden, die den Amazon EKS-Service unterstützt.

**Produktversionen**
+ Kubernetes Version 1.20 oder höher
+ `eksctl`Version 0.107.0 oder höher
+ AWS CDK Version 2.27.0 oder höher

## Architektur
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-architecture"></a>

**Zieltechnologie-Stack**
+ Eine Virtual Private Cloud (VPC)
+ Ein EKS-Cluster
+ Amazon-Simple-Queue-Service (Amazon SQS)
+ IAM
+ Kubernetes

**Zielarchitektur******

Das folgende Diagramm zeigt eine allgemeine Ansicht der end-to-end Schritte, wenn die Knotenbeendigung gestartet wird.

![\[Eine VPC mit einer Auto Scaling Scaling-Gruppe, einem EKS-Cluster mit Node Termination Handler und einer SQS-Warteschlange.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/970dfb73-9526-4942-a974-e8eef6416596/images/9e0125ae-d55b-49dd-ae70-ccaedf03832a.png)


Der im Diagramm dargestellte Arbeitsablauf besteht aus den folgenden allgemeinen Schritten:

1. Das Ereignis EC2 zum Beenden der automatischen Skalierungsinstanz wird an die SQS-Warteschlange gesendet.

1. Der NTH Pod sucht nach neuen Nachrichten in der SQS-Warteschlange.

1. Der NTH-Pod empfängt die neue Nachricht und geht wie folgt vor:
   + Sperrt den Knoten ab, sodass der neue Pod nicht auf dem Knoten ausgeführt wird.
   + Entleert den Knoten, sodass der vorhandene Pod evakuiert wird
   + Sendet ein Lifecycle-Hook-Signal an die Auto Scaling Scaling-Gruppe, sodass der Knoten beendet werden kann.

**Automatisierung und Skalierung**
+ Der Code wird von AWS CDK verwaltet und bereitgestellt, unterstützt durch AWS CloudFormation Nested Stacks.
+ Die [Amazon EKS-Kontrollebene](https://docs.aws.amazon.com/eks/latest/userguide/disaster-recovery-resiliency.html) läuft über mehrere Availability Zones, um eine hohe Verfügbarkeit zu gewährleisten.
+ [Für die [automatische Skalierung](https://docs.aws.amazon.com/eks/latest/userguide/autoscaling.html) unterstützt Amazon EKS den Kubernetes [Cluster Autoscaler](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler) und Karpenter.](https://karpenter.sh/)

## Tools
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-tools"></a>

**AWS-Services**
+ Das [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) ist ein Softwareentwicklungs-Framework, das Sie bei der Definition und Bereitstellung der AWS-Cloud-Infrastruktur im Code unterstützt.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) ist ein vollständig verwalteter Build-Service, mit dem Sie Quellcode kompilieren, Komponententests ausführen und bereitstellungsbereite Artefakte erstellen können.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) ist ein Versionskontrollservice, mit dem Sie Git-Repositorys privat speichern und verwalten können, ohne Ihr eigenes Quellcodeverwaltungssystem verwalten zu müssen.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) hilft Ihnen dabei, die verschiedenen Phasen einer Softwareversion schnell zu modellieren und zu konfigurieren und die Schritte zu automatisieren, die für die kontinuierliche Veröffentlichung von Softwareänderungen erforderlich sind.
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) hilft Ihnen, Kubernetes auf AWS auszuführen, ohne Ihre eigene Kubernetes-Steuerebene oder Knoten installieren oder verwalten zu müssen.
+ [Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html) hilft Ihnen dabei, die Anwendungsverfügbarkeit aufrechtzuerhalten, und ermöglicht es Ihnen, EC2 Amazon-Instances gemäß den von Ihnen definierten Bedingungen automatisch hinzuzufügen oder zu entfernen.
+ [Amazon Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) bietet eine sichere, dauerhafte und verfügbare gehostete Warteschlange, mit der Sie verteilte Softwaresysteme und -komponenten integrieren und entkoppeln können.

**Andere Tools**
+ [kubectl](https://kubernetes.io/docs/reference/kubectl/kubectl/) ist ein Kubernetes-Befehlszeilentool zum Ausführen von Befehlen für Kubernetes-Cluster. Sie können kubectl verwenden, um Anwendungen bereitzustellen, Clusterressourcen zu überprüfen und zu verwalten und Protokolle anzuzeigen.

**Code**

Der Code für dieses Muster ist im [deploy-nth-to-eks](https://github.com/aws-samples/deploy-nth-to-eks)Repo auf .com verfügbar. GitHub Das Code-Repo enthält die folgenden Dateien und Ordner.
+ `nth folder`— Das Helm-Diagramm, die Wertedateien und die Skripts zum Scannen und Bereitstellen der CloudFormation AWS-Vorlage für Node Termination Handler.
+ `config/config.json`— Die Konfigurationsparameterdatei für die Anwendung. Diese Datei enthält alle Parameter, die für die Bereitstellung von CDK erforderlich sind.
+ `cdk`— AWS-CDK-Quellcode.
+ `setup.sh`— Das Skript, das zur Bereitstellung der AWS CDK-Anwendung verwendet wurde, um die erforderliche CI/CD Pipeline und andere erforderliche Ressourcen zu erstellen.
+ `uninstall.sh`— Das Skript, das zum Bereinigen der Ressourcen verwendet wurde.

Um den Beispielcode zu verwenden, folgen Sie den Anweisungen im Abschnitt *Epics*.

## Best Practices
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-best-practices"></a>

Bewährte Methoden für die Automatisierung von AWS Node Termination Handler finden Sie im Folgenden:
+ [EKS-Leitfäden mit bewährten Methoden](https://aws.github.io/aws-eks-best-practices/)
+ [Node Termination Handler — Konfiguration](https://github.com/aws/aws-node-termination-handler/tree/main/config/helm/aws-node-termination-handler)

## Epen
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-epics"></a>

### So richten Sie Ihre Umgebung ein
<a name="set-up-your-environment"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Klonen Sie das Repo. | Um das Repo mithilfe von SSH (Secure Shell) zu klonen, führen Sie den folgenden Befehl aus.<pre>git clone git@github.com:aws-samples/deploy-nth-to-eks.git</pre>Um das Repo mithilfe von HTTPS zu klonen, führen Sie den folgenden Befehl aus.<pre>git clone https://github.com/aws-samples/deploy-nth-to-eks.git</pre>Beim Klonen des Repos wird ein Ordner mit dem Namen erstellt. `deploy-nth-to-eks`Wechseln Sie zu diesem Verzeichnis.<pre>cd deploy-nth-to-eks</pre> | App-Entwickler, AWS DevOps, DevOps Ingenieur | 
| Stellen Sie die kubeconfig-Datei ein. | Geben Sie Ihre AWS-Anmeldeinformationen in Ihrem Terminal ein und bestätigen Sie, dass Sie berechtigt sind, die Cluster-Rolle zu übernehmen. Sie können den folgenden Beispielcode verwenden.<pre>aws eks update-kubeconfig --name <Cluster_Name> --region <region>--role-arn <Role_ARN></pre> | AWS DevOps, DevOps Ingenieur, App-Entwickler | 

### Stellen Sie die CI/CD Pipeline bereit
<a name="deploy-the-ci-cd-pipeline"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Richten Sie die Parameter ein. | Richten Sie in der `config/config.json` Datei die folgenden erforderlichen Parameter ein.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.html) | App-Entwickler, AWS DevOps, DevOps Ingenieur | 
| Erstellen Sie die CI/CD Pipeline für die Bereitstellung von NTH. | Führen Sie das Skript setup.sh aus.<pre>./setup.sh</pre>Das Skript stellt die AWS-CDK-Anwendung bereit, die das CodeCommit Repo mit Beispielcode, der Pipeline und CodeBuild Projekten auf der Grundlage der Benutzereingabeparameter in `config/config.json` der Datei erstellt.Dieses Skript fragt bei der Installation von npm-Paketen mit dem Befehl sudo nach dem Passwort. | App-Entwickler, AWS DevOps, DevOps Ingenieur | 
| Überprüfen Sie die CI/CD Pipeline. | Öffnen Sie die AWS-Managementkonsole und überprüfen Sie die folgenden Ressourcen, die im Stack erstellt wurden.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.html)Nachdem die Pipeline erfolgreich ausgeführt wurde, `aws-node-termination-handler` wird die Helm-Version im EKS-Cluster installiert. Außerdem `aws-node-termination-handler` läuft ein Pod mit dem Namen im `kube-system` Namespace im Cluster. | App-Entwickler, AWS DevOps, DevOps Ingenieur | 

### Testen Sie die NTH-Bereitstellung
<a name="test-nth-deployment"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Simulieren Sie ein Auto Scaling-Gruppen-Scale-In-Ereignis. | Gehen Sie wie folgt vor, um ein automatisches Skalierungs-Scale-In-Ereignis zu simulieren:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.html) |  | 
| Überprüfen Sie die Protokolle. | Während des Scale-In-Ereignisses sperrt der NTH-Pod den entsprechenden Worker-Knoten ab und entleert ihn (die EC2 Instanz, die im Rahmen des Scale-In-Ereignisses beendet wird). *Verwenden Sie den Code im Abschnitt Zusätzliche Informationen, um die Protokolle zu überprüfen.* | App-Entwickler, AWS DevOps, DevOps Ingenieur | 

### Bereinigen
<a name="clean-up"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Bereinigen Sie alle AWS-Ressourcen. | Führen Sie den folgenden Befehl aus, um die nach diesem Muster erstellten Ressourcen zu bereinigen.<pre>./uninstall.sh</pre>Dadurch werden alle in diesem Muster erstellten Ressourcen bereinigt, indem der CloudFormation Stapel gelöscht wird. | DevOps Ingenieur | 

## Fehlerbehebung
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| Die NPM-Registrierung ist nicht richtig eingestellt. | Während der Installation dieser Lösung installiert das Skript npm install, um alle erforderlichen Pakete herunterzuladen. Wenn Sie während der Installation die Meldung „Modul kann nicht gefunden werden“ sehen, ist die npm-Registrierung möglicherweise nicht richtig eingerichtet. Führen Sie den folgenden Befehl aus, um die aktuelle Registrierungseinstellung zu sehen.<pre>npm config get registry</pre>Führen Sie den folgenden Befehl aus`https://registry.npmjs.org/`, um die Registrierung mit einzurichten.<pre>npm config set registry https://registry.npmjs.org</pre> | 
| Verzögern Sie die SQS-Nachrichtenzustellung. | Wenn Sie die SQS-Nachrichtenzustellung an den NTH Pod verzögern möchten, können Sie im Rahmen Ihrer Problembehandlung den Parameter für die Verzögerung der SQS-Zustellung anpassen. Weitere Informationen finden Sie unter [Amazon SQS SQS-Verzögerungswarteschlangen](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-delay-queues.html). | 

## Zugehörige Ressourcen
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-resources"></a>
+ [Quellcode für den AWS Node Termination Handler](https://github.com/aws/aws-node-termination-handler)
+ [EC2 Werkstatt](https://ec2spotworkshops.com/using_ec2_spot_instances_with_eks/070_selfmanagednodegroupswithspot/deployhandler.html)
+ [AWS CodePipeline](https://aws.amazon.com/codepipeline/)
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://aws.amazon.com/eks/)
+ [AWS-Cloud-Entwicklungskit](https://aws.amazon.com/cdk/)
+ [AWS CloudFormation](https://aws.amazon.com/cloudformation/)

## Zusätzliche Informationen
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-additional"></a>

1. Suchen Sie den Namen des NTH-Pods.

```
kubectl get pods -n kube-system |grep aws-node-termination-handler
aws-node-termination-handler-65445555-kbqc7   1/1     Running   0          26m
kubectl get pods -n kube-system |grep aws-node-termination-handler
aws-node-termination-handler-65445555-kbqc7   1/1     Running   0          26m
```

2. Überprüfen Sie die Protokolle. Ein Beispielprotokoll sieht wie folgt aus. Es zeigt, dass der Knoten gesperrt und entleert wurde, bevor das Signal zum Abschluss des Auto Scaling Scaling-Gruppenlebenszyklus-Hooks gesendet wurde.

```
kubectl -n kube-system logs aws-node-termination-handler-65445555-kbqc7
022/07/17 20:20:43 INF Adding new event to the event store event={"AutoScalingGroupName":"eksctl-my-cluster-target-nodegroup-ng-10d99c89-NodeGroup-ZME36IGAP7O1","Description":"ASG Lifecycle Termination event received. Instance will be interrupted at 2022-07-17 20:20:42.702 +0000 UTC \n","EndTime":"0001-01-01T00:00:00Z","EventID":"asg-lifecycle-term-33383831316538382d353564362d343332362d613931352d383430666165636334333564","InProgress":false,"InstanceID":"i-0409f2a9d3085b80e","IsManaged":true,"Kind":"SQS_TERMINATE","NodeLabels":null,"NodeName":"ip-192-168-75-60.us-east-2.compute.internal","NodeProcessed":false,"Pods":null,"ProviderID":"aws:///us-east-2c/i-0409f2a9d3085b80e","StartTime":"2022-07-17T20:20:42.702Z","State":""}
2022/07/17 20:20:44 INF Requesting instance drain event-id=asg-lifecycle-term-33383831316538382d353564362d343332362d613931352d383430666165636334333564 instance-id=i-0409f2a9d3085b80e kind=SQS_TERMINATE node-name=ip-192-168-75-60.us-east-2.compute.internal provider-id=aws:///us-east-2c/i-0409f2a9d3085b80e
2022/07/17 20:20:44 INF Pods on node node_name=ip-192-168-75-60.us-east-2.compute.internal pod_names=["aws-node-qchsw","aws-node-termination-handler-65445555-kbqc7","kube-proxy-mz5x5"]
2022/07/17 20:20:44 INF Draining the node
2022/07/17 20:20:44 ??? WARNING: ignoring DaemonSet-managed Pods: kube-system/aws-node-qchsw, kube-system/kube-proxy-mz5x5
2022/07/17 20:20:44 INF Node successfully cordoned and drained node_name=ip-192-168-75-60.us-east-2.compute.internal reason="ASG Lifecycle Termination event received. Instance will be interrupted at 2022-07-17 20:20:42.702 +0000 UTC \n"
2022/07/17 20:20:44 INF Completed ASG Lifecycle Hook (NTH-K8S-TERM-HOOK) for instance i-0409f2a9d3085b80e
```

# Automatisches Erstellen und Bereitstellen einer Java-Anwendung auf Amazon EKS mithilfe einer CI/CD Pipeline
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline"></a>

*MAHESH RAGHUNANDANAN, Jomcy Pappachen und James Radtke, Amazon Web Services*

## Zusammenfassung
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-summary"></a>

Dieses Muster beschreibt, wie Sie eine CI/CD-Pipeline (Continuous Integration and Continuous Delivery) erstellen, die automatisch eine Java-Anwendung mit empfohlenen DevSecOps Vorgehensweisen für einen Amazon Elastic Kubernetes Service (Amazon EKS) -Cluster auf dem erstellt und bereitstellt. AWS Cloud Dieses Muster verwendet eine Begrüßungsanwendung, die mit einem Spring Boot Java-Framework entwickelt wurde und Apache Maven verwendet.

Sie können den Ansatz dieses Musters verwenden, um den Code für eine Java-Anwendung zu erstellen, die Anwendungsartefakte als Docker-Image zu verpacken, das Image sicherheitstechnisch zu scannen und das Image als Workload-Container auf Amazon EKS hochzuladen. Der Ansatz dieses Musters ist nützlich, wenn Sie von einer eng gekoppelten monolithischen Architektur zu einer Microservices-Architektur migrieren möchten. Dieser Ansatz hilft Ihnen auch dabei, den gesamten Lebenszyklus einer Java-Anwendung zu überwachen und zu verwalten, wodurch ein höheres Maß an Automatisierung gewährleistet und Fehler oder Bugs vermieden werden können.

## Voraussetzungen und Einschränkungen
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-prereqs"></a>

**Voraussetzungen**
+ Ein aktiver AWS-Konto.
+ AWS Command Line Interface (AWS CLI) Version 2, installiert und konfiguriert. Weitere Informationen dazu finden Sie AWS CLI in der AWS CLI Dokumentation unter [Installation oder Aktualisierung auf die neueste Version von](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html).

  AWS CLI Version 2 muss mit derselben AWS Identity and Access Management (IAM-) Rolle konfiguriert werden, die den Amazon EKS-Cluster erstellt, da nur diese Rolle berechtigt ist, dem weitere IAM-Rollen hinzuzufügen. `aws-auth` `ConfigMap` Informationen und Schritte zur Konfiguration AWS CLI finden Sie in [der Dokumentation unter Einstellungen konfigurieren](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html). AWS CLI 
+ IAM-Rollen und -Berechtigungen mit vollem Zugriff auf AWS CloudFormation. Weitere Informationen dazu finden Sie in der Dokumentation unter [Steuern des Zugriffs mit IAM](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html) CloudFormation .
+ Ein vorhandener Amazon EKS-Cluster mit Details zum IAM-Rollennamen und zum Amazon-Ressourcennamen (ARN) der IAM-Rolle für Worker-Knoten im EKS-Cluster.
+ Kubernetes Cluster Autoscaler, installiert und konfiguriert in Ihrem Amazon EKS-Cluster. Weitere Informationen finden Sie unter [Skalieren von Cluster-Berechnungen mit Karpenter und Cluster Autoscaler](https://docs.aws.amazon.com/eks/latest/userguide/cluster-autoscaler.html) in der Amazon EKS-Dokumentation. 
+ Zugriff auf Code im Repository. GitHub 

**Wichtig**  
AWS Security Hub CSPM ist als Teil der CloudFormation Vorlagen aktiviert, die im Code für dieses Muster enthalten sind. Standardmäßig wird Security Hub CSPM nach der Aktivierung mit einer kostenlosen 30-Tage-Testversion geliefert. Nach der Testphase fallen hierfür Kosten an. AWS-Service Weitere Informationen zur Preisgestaltung finden Sie unter [AWS Security Hub CSPM  – Preise](https://aws.amazon.com/security-hub/pricing/).

**Produktversionen**
+ Helm Version 3.4.2 oder höher
+ Apache Maven Version 3.6.3 oder höher
+ BridgeCrew Checkov Version 2.2 oder höher
+ Aqua Security Trivy Version 0.37 oder höher

## Architektur
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-architecture"></a>

**Technologie-Stack**
+ AWS CodeBuild
+ AWS CodeCommit
+ Amazon CodeGuru
+ AWS CodePipeline
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon EKS
+ Amazon EventBridge
+ AWS Security Hub CSPM
+ Amazon-Simple-Notification-Service (Amazon-SNS)

**Zielarchitektur**

![\[Workflow für die Bereitstellung einer Java-Anwendung in Amazon EKS.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/95a5b5c2-d7fb-41eb-9089-455318c0d585/images/4f5fd8c2-2b6d-4945-aa64-fcf317521711.png)


Das Diagramm zeigt den folgenden Workflow:

1. Der Entwickler aktualisiert den Java-Anwendungscode im Basiszweig des CodeCommit Repositorys, wodurch eine Pull-Anfrage (PR) erstellt wird.

1. Sobald die PR eingereicht wurde, überprüft Amazon CodeGuru Reviewer den Code automatisch, analysiert ihn auf der Grundlage von Best Practices für Java und gibt dem Entwickler Empfehlungen.

1. Nachdem der PR mit dem Basiszweig zusammengeführt wurde, wird ein EventBridge Amazon-Event erstellt.

1. Das EventBridge Ereignis initiiert die CodePipeline Pipeline, die gestartet wird.

1. CodePipeline führt die CodeSecurity Scan-Phase aus (kontinuierliche Sicherheit).

1. AWS CodeBuild startet den Sicherheitsscan-Prozess, bei dem die Helm-Dateien für die Dockerfile- und Kubernetes-Bereitstellung mithilfe von Checkov gescannt werden und der Quellcode der Anwendung auf der Grundlage inkrementeller Codeänderungen gescannt wird. Der Anwendungsquellcodescan wird vom [CodeGuru Reviewer Command Line Interface (CLI) -Wrapper](https://github.com/aws/aws-codeguru-cli) durchgeführt.
**Anmerkung**  
Ab dem 7. November 2025 können Sie in Amazon CodeGuru Reviewer keine neuen Repository-Verknüpfungen erstellen. Weitere Informationen zu Services mit ähnlichen Funktionen wie CodeGuru Reviewer finden Sie in der [ CodeGuru Reviewer-Dokumentation unter Änderung der Verfügbarkeit von Amazon](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/codeguru-reviewer-availability-change.html) CodeGuru Reviewer. 

1. Wenn die Sicherheitsscan-Phase erfolgreich ist, wird die Build-Phase (kontinuierliche Integration) eingeleitet.

1. In der CodeBuild Build-Phase erstellt das Artefakt, packt das Artefakt in ein Docker-Image, scannt das Image mithilfe von Aqua Security Trivy auf Sicherheitslücken und speichert das Image in Amazon ECR.

1. Die in Schritt 8 erkannten Sicherheitslücken werden zur weiteren Analyse durch Entwickler oder Techniker auf Security Hub CSPM hochgeladen. Security Hub CSPM bietet einen Überblick und Empfehlungen zur Behebung der Sicherheitslücken.

1. E-Mail-Benachrichtigungen über aufeinanderfolgende Phasen innerhalb der CodePipeline Pipeline werden über Amazon SNS gesendet.

1. Nachdem die Phasen der kontinuierlichen Integration abgeschlossen sind, CodePipeline beginnt die Bereitstellungsphase (kontinuierliche Bereitstellung).

1. Das Docker-Image wird mithilfe von Helm-Diagrammen als Container-Workload (Pod) in Amazon EKS bereitgestellt.

1. Der Anwendungs-Pod ist mit dem Amazon CodeGuru Profiler-Agent konfiguriert, der die Profilerstellungsdaten der Anwendung (CPU, Heap-Nutzung und Latenz) an CodeGuru Profiler sendet, sodass Entwickler das Verhalten der Anwendung besser verstehen können.

## Tools
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-tools"></a>

**AWS-Services**
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)hilft Ihnen dabei, AWS Ressourcen einzurichten, sie schnell und konsistent bereitzustellen und sie während ihres gesamten Lebenszyklus regionsübergreifend zu verwalten. AWS-Konten 
+  [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)ist ein vollständig verwalteter Build-Service, der Ihnen hilft, Quellcode zu kompilieren, Komponententests durchzuführen und Artefakte zu erstellen, die sofort einsatzbereit sind.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)ist ein Versionskontrolldienst, mit dem Sie Git-Repositorys privat speichern und verwalten können, ohne Ihr eigenes Quellcodeverwaltungssystem verwalten zu müssen.
+ [Amazon CodeGuru Profiler](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/what-is-codeguru-profiler.html) sammelt Laufzeitleistungsdaten aus Ihren Live-Anwendungen und gibt Empfehlungen, die Ihnen bei der Feinabstimmung Ihrer Anwendungsleistung helfen können.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)hilft Ihnen dabei, die verschiedenen Phasen einer Softwareversion schnell zu modellieren und zu konfigurieren und die Schritte zu automatisieren, die für die kontinuierliche Veröffentlichung von Softwareänderungen erforderlich sind.
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) ist ein verwalteter Container-Image-Registry-Service, der sicher, skalierbar und zuverlässig ist.
+ 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, der Ihnen hilft, Ihre Anwendungen mit Echtzeitdaten aus einer Vielzahl von Quellen zu verbinden, darunter AWS Lambda Funktionen, HTTP-Aufruf-Endpunkte, die API-Ziele verwenden, oder Event-Busse in anderen. AWS-Konten
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) hilft Ihnen dabei, den Zugriff auf Ihre AWS Ressourcen sicher zu verwalten, indem kontrolliert wird, wer authentifiziert und autorisiert ist, diese zu verwenden.
+ [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html)bietet einen umfassenden Überblick über Ihren Sicherheitsstatus. AWS Es hilft Ihnen auch dabei, Ihre AWS Umgebung anhand von Industriestandards und Best Practices im Bereich Sicherheit zu überprüfen.
+ [Amazon Simple Notification Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) unterstützt Sie bei der Koordination und Verwaltung des Nachrichtenaustauschs zwischen Herausgebern und Kunden, einschließlich Webservern und E-Mail-Adressen.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) ist ein cloudbasierter Objektspeicherservice, der Sie beim Speichern, Schützen und Abrufen beliebiger Datenmengen unterstützt.

**Andere Dienste**
+ [Helm](https://helm.sh/docs/) ist ein Open-Source-Paketmanager für Kubernetes.
+ [Apache Maven](https://maven.apache.org/) ist ein Tool für die Verwaltung und Untersuchung von Softwareprojekten.
+ [BridgeCrew Checkov](https://www.checkov.io/1.Welcome/What%20is%20Checkov.html) ist ein statisches Code-Analyse-Tool zum Scannen von IaC-Dateien (Infrastructure as Code) auf Fehlkonfigurationen, die zu Sicherheits- oder Compliance-Problemen führen können.
+ [Aqua Security Trivy](https://github.com/aquasecurity/trivy) ist ein umfassender Scanner für Sicherheitslücken in Container-Images, Dateisystemen und Git-Repositorys sowie für Konfigurationsprobleme.

**Code**

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

## Best Practices
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-best-practices"></a>
+ Dieses Muster folgt den [bewährten IAM-Sicherheitsmethoden](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html), um das Prinzip der geringsten Rechte für IAM-Entitäten in allen Phasen der Lösung anzuwenden. Wenn Sie die Lösung um zusätzliche Tools AWS-Services oder Tools von Drittanbietern erweitern möchten, empfehlen wir Ihnen, den Abschnitt zur [Anwendung von Berechtigungen mit den geringsten Rechten in der IAM-Dokumentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) zu lesen.
+ Wenn Sie über mehrere Java-Anwendungen verfügen, empfehlen wir, für jede Anwendung separate CI/CD Pipelines zu erstellen.
+ Wenn Sie eine Monolith-Anwendung haben, empfehlen wir, die Anwendung nach Möglichkeit in Microservices aufzuteilen. Microservices sind flexibler, sie erleichtern die Bereitstellung von Anwendungen als Container und bieten einen besseren Einblick in den gesamten Aufbau und die Bereitstellung der Anwendung.

## Epen
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-epics"></a>

### Richte die Umgebung ein
<a name="set-up-the-environment"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Klonen Sie das GitHub Repository. | Führen Sie den folgenden Befehl aus, um das Repository zu klonen.<pre>git clone https://github.com/aws-samples/aws-codepipeline-devsecops-amazoneks</pre> | App-Entwickler, DevOps Ingenieur | 
| Erstellen Sie einen S3-Bucket und laden Sie den Code hoch. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps, Cloud-Administrator, DevOps Ingenieur | 
| Erstellen Sie einen CloudFormation Stack. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps, DevOps Ingenieur | 
| Validieren Sie die CloudFormation Stack-Bereitstellung. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps, DevOps Ingenieur | 
| Löschen Sie den S3-Bucket. | Leeren und löschen Sie den S3-Bucket, den Sie zuvor erstellt haben. Weitere Informationen finden Sie unter [Löschen eines Buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) in der Amazon S3 S3-Dokumentation. | AWS DevOps, DevOps Ingenieur | 

### Konfigurieren Sie die Helm-Charts
<a name="configure-the-helm-charts"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Konfigurieren Sie die Helm-Charts Ihrer Java-Anwendung. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | DevOps Ingenieur | 
| Überprüfen Sie Helm-Diagramme auf Syntaxfehler. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | DevOps Ingenieur | 

### Richten Sie die CI/CD Java-Pipeline ein
<a name="set-up-the-java-ci-cd-pipeline"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie die CI/CD Pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps | 

### Aktivieren Sie die Integration zwischen Security Hub CSPM und Aqua Security
<a name="activate-integration-between-ash-and-aqua-security"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Schalten Sie die Aqua Security-Integration ein. | Dieser Schritt ist erforderlich, um die von Trivy gemeldeten Ergebnisse der Docker-Image-Sicherheitslücke an Security Hub CSPM hochzuladen. Da Security Hub CSPM-Integrationen CloudFormation nicht unterstützt werden, muss dieser Vorgang manuell durchgeführt werden.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS-Administrator, DevOps Ingenieur | 

### Konfigurieren Sie CodeBuild die Konfiguration für die Ausführung von Helm- oder kubectl-Befehlen
<a name="configure-acb-to-run-helm-or-kubectl-commands"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
|  CodeBuild Erlaubt die Ausführung von Helm- oder kubectl-Befehlen im Amazon EKS-Cluster. |  CodeBuild Um für die Verwendung von Helm oder `kubectl` Befehlen mit dem Amazon EKS-Cluster authentifiziert zu werden, müssen Sie die IAM-Rollen zum hinzufügen. `aws-auth` `ConfigMap` Fügen Sie in diesem Fall den ARN der IAM-Rolle hinzu. Dabei handelt es sich um die IAM-Rolle`EksCodeBuildkubeRoleARN`, die für den CodeBuild Service erstellt wurde, um auf den Amazon EKS-Cluster zuzugreifen und Workloads darauf bereitzustellen. Dies ist eine einmalige Aktivität.Das folgende Verfahren muss vor der Genehmigung der Bereitstellung abgeschlossen sein CodePipeline.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html)Der `aws_auth` `ConfigMap` ist konfiguriert und der Zugriff ist gewährt.  | DevOps | 

### Überprüfen Sie die CI/CD Pipeline
<a name="validate-the-ci-cd-pipeline"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Stellen Sie sicher, dass die CI/CD Pipeline automatisch initiiert wird. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html)Weitere Informationen zum Starten der Pipeline mithilfe CodePipeline von finden Sie in der [Dokumentation unter Starten einer Pipeline in](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-about-starting.html)CodePipeline, [Manuelles Starten einer Pipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-rerun-manually.html) und [Starten einer Pipeline nach einem Zeitplan](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-trigger-source-schedule.html). CodePipeline  | DevOps | 
| Genehmigen Sie die Bereitstellung. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | DevOps | 
| Überprüfen Sie die Anwendungsprofilerstellung. | Nachdem die Bereitstellung abgeschlossen und der Anwendungs-Pod in Amazon EKS bereitgestellt wurde, versucht der in der Anwendung konfigurierte Amazon CodeGuru Profiler-Agent, Profilerstellungsdaten der Anwendung (CPU, Heap-Zusammenfassung, Latenz und Engpässe) an Profiler zu senden. CodeGuru Bei der ersten Bereitstellung einer Anwendung benötigt Profiler etwa 15 Minuten, um die CodeGuru Profilerstellungsdaten zu visualisieren. | AWS DevOps | 

## Zugehörige Ressourcen
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-resources"></a>
+ [AWS CodePipeline Dokumentation](https://docs.aws.amazon.com/codepipeline/index.html)
+ [Bilder mit Trivy in einem AWS CodePipeline(AWS Blogbeitrag) scannen](https://aws.amazon.com/blogs/containers/scanning-images-with-trivy-in-an-aws-codepipeline/)
+ [Verbesserung Ihrer Java-Anwendungen mit Amazon CodeGuru Profiler](https://aws.amazon.com/blogs/devops/improving-your-java-applications-using-amazon-codeguru-profiler) (AWS Blogbeitrag)
+ [AWS Syntax des Security Finding Format (ASFF)](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-findings-format-syntax.html)
+ [ EventBridge Amazon-Ereignismuster](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)
+ [Helm aufrüsten](https://helm.sh/docs/helm/helm_upgrade/)

## Zusätzliche Informationen
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-additional"></a>
+ CodeGuru Profiler sollte in Bezug auf die Funktionalität nicht mit dem AWS X-Ray Dienst verwechselt werden. Wir empfehlen Ihnen, CodeGuru Profiler zu verwenden, um die teuersten Codezeilen zu identifizieren, die zu Engpässen oder Sicherheitsproblemen führen könnten, und diese zu beheben, bevor sie zu einem potenziellen Risiko werden. Der X-Ray-Dienst dient der Überwachung der Anwendungsleistung.
+ In diesem Muster sind Ereignisregeln dem Standard-Event-Bus zugeordnet. Bei Bedarf können Sie das Muster erweitern, um einen benutzerdefinierten Event-Bus zu verwenden.
+ Dieses Muster verwendet CodeGuru Reviewer als statisches Tool zum Testen der Anwendungssicherheit (SAST) für Anwendungscode. Sie können diese Pipeline auch für andere Tools wie SonarQube Checkmarx verwenden. Sie können die Anweisungen zur Einrichtung des Scans für jedes dieser Tools hinzufügen, `buildspec/buildspec_secscan.yaml` um die CodeGuru Scananweisungen zu ersetzen.
**Anmerkung**  
Ab dem 7. November 2025 können Sie in Amazon CodeGuru Reviewer keine neuen Repository-Verknüpfungen erstellen. Weitere Informationen zu Services mit ähnlichen Funktionen wie CodeGuru Reviewer finden Sie in der [ CodeGuru Reviewer-Dokumentation unter Änderung der Verfügbarkeit von Amazon](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/codeguru-reviewer-availability-change.html) CodeGuru Reviewer.

# Kopieren Sie Amazon ECR-Container-Images zwischen und AWS-Konten AWS-Regionen
<a name="copy-ecr-container-images-across-accounts-regions"></a>

*Faisal Shahdad, Amazon Web Services*

## Zusammenfassung
<a name="copy-ecr-container-images-across-accounts-regions-summary"></a>

Dieses Muster zeigt Ihnen, wie Sie einen serverlosen Ansatz verwenden, um markierte Bilder aus vorhandenen Amazon Elastic Container Registry (Amazon ECR) -Repositorys in andere und zu replizieren. AWS-Konten AWS-Regionen Die Lösung verwaltet AWS Step Functions den Replikationsablauf und bietet AWS Lambda Funktionen zum Kopieren großer Container-Images.

Amazon ECR verwendet native [regionsübergreifende](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry-settings-examples.html#registry-settings-examples-crr-single) und [kontoübergreifende Replikationsfunktionen, die Container-Images über Regionen und Konten](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry-settings-examples.html#registry-settings-examples-crossaccount) hinweg replizieren. Diese Funktionen replizieren Bilder jedoch erst ab dem Moment, in dem die Replikation aktiviert ist. Es gibt keinen Mechanismus, um vorhandene Images in verschiedenen Regionen und Konten zu replizieren. 

Dieses Muster hilft Teams für künstliche Intelligenz (KI), containerisierte Modelle für maschinelles Lernen (ML), Frameworks (z. B., PyTorch TensorFlow, und Hugging Face) und Abhängigkeiten an andere Konten und Regionen zu verteilen. Dies kann Ihnen helfen, Servicebeschränkungen zu überwinden und GPU-Rechenressourcen zu optimieren. Sie können Amazon ECR-Repositorys auch selektiv von bestimmten Quellkonten und Regionen replizieren. Weitere Informationen finden Sie unter [Regionsübergreifende Replikation in Amazon ECR ist gelandet](https://aws.amazon.com/blogs/containers/cross-region-replication-in-amazon-ecr-has-landed/).

## Voraussetzungen und Einschränkungen
<a name="copy-ecr-container-images-across-accounts-regions-prereqs"></a>

**Voraussetzungen**
+ Zwei oder mehr aktive Konten AWS-Konten (mindestens ein Quellkonto und ein Zielkonto)
+ Entsprechende AWS Identity and Access Management (IAM-) Berechtigungen in allen Konten
+ Docker zum Erstellen des Lambda-Container-Images
+ AWS Command Line Interface (AWS CLI) für alle Konten konfiguriert

**Einschränkungen**
+ **Ausschluss von Bildern ohne Tags —** Die Lösung kopiert nur Container-Images mit expliziten Tags. Bilder ohne Tags, die mit Digests existieren, werden übersprungen. `SHA256`
+ **Einschränkungen des Lambda-Ausführungstimeouts —** AWS Lambda ist auf ein maximales Ausführungstimeout von 15 Minuten begrenzt, das möglicherweise nicht ausreicht, um große Container-Images oder Repositorys zu kopieren.
+ **Manuelles Container-Image-Management —** Für den `crane-app.py` Python-Code muss das Lambda-Container-Image neu erstellt und bereitgestellt werden.
+ **Begrenzte Kapazität für die parallel Verarbeitung —** Die `MaxConcurrency` Statuseinstellung begrenzt, wie viele Repositorys Sie gleichzeitig kopieren können. Sie können diese Einstellung jedoch in der AWS CloudFormation Vorlage des Quellkontos ändern. Beachten Sie, dass höhere Parallelitätswerte dazu führen können, dass Sie die Serviceratenlimits und Lambda-Ausführungskontingente auf Kontoebene überschreiten.

## Architektur
<a name="copy-ecr-container-images-across-accounts-regions-architecture"></a>

**Zielstapel**

Das Muster besteht aus vier Hauptkomponenten:
+ **Infrastruktur des Quellkontos —** CloudFormation Vorlage, die die Orchestrierungskomponenten erstellt
+ **Infrastruktur des Zielkontos —** CloudFormation Vorlage, die kontenübergreifende Zugriffsrollen erstellt
+ **Lambda-Funktion —** Python-basierte Funktion, die Crane für effizientes Kopieren von Bildern verwendet
+ **Container-Image —** Docker-Container, der die Lambda-Funktion mit den erforderlichen Tools verpackt

**Zielarchitektur**

![\[alt text not found\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/787185e7-664b-4ed8-b30f-1d9507f13377/images/cc7d9823-3dc8-4090-a203-910b1ac4447c.png)


**Arbeitsablauf für Step Functions**

Die Step Functions Functions-Zustandsmaschine orchestriert Folgendes, wie in der folgenden Abbildung dargestellt:
+ `PopulateRepositoryList`**—** Scannt Amazon ECR-Repositorys und füllt Amazon DynamoDB
+ `GetRepositoryList`**—** Ruft eine eindeutige Repository-Liste von DynamoDB ab
+ `DeduplicateRepositories`**—** Stellt sicher, dass keine doppelte Verarbeitung erfolgt
+ `CopyRepositories`**— Verwaltet** das parallel Kopieren von Repositorys
+ `NotifySuccess`/`NotifyFailure`**—** Amazon Simple Notification Service (Amazon SNS) -Benachrichtigungen basierend auf dem Ausführungsergebnis

![\[alt text not found\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/787185e7-664b-4ed8-b30f-1d9507f13377/images/1b740084-ba2b-4956-aa12-ebbf52be5e7d.png)


## Tools
<a name="copy-ecr-container-images-across-accounts-regions-tools"></a>

**Amazon-Tools**
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) hilft Ihnen dabei, die Kennzahlen Ihrer AWS Ressourcen und der Anwendungen, auf denen Sie laufen, AWS in Echtzeit zu überwachen.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) ist ein vollständig verwalteter NoSQL-Datenbank-Service, der schnelle und planbare Leistung mit nahtloser Skalierbarkeit bereitstellt.
+ [Amazon Simple Notification Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) unterstützt Sie bei der Koordination und Verwaltung des Nachrichtenaustauschs zwischen Herausgebern und Kunden, einschließlich Webservern und E-Mail-Adressen.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) hilft Ihnen dabei, den Zugriff auf Ihre AWS Ressourcen sicher zu verwalten, indem kontrolliert wird, wer authentifiziert und autorisiert ist, diese zu verwenden.
+ [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 Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)ist ein serverloser Orchestrierungsservice, mit dem Sie Lambda-Funktionen und andere Funktionen kombinieren können, um geschäftskritische Anwendungen AWS-Services zu erstellen.

**Andere Tools**
+ [Crane](https://michaelsauter.github.io/crane/index.html) ist ein Docker-Orchestrierungstool. Es ähnelt Docker Compose, bietet jedoch zusätzliche Funktionen.
+ [Docker](https://www.docker.com/) ist eine Reihe von Platform-as-a-Service (PaaS) -Produkten, die Virtualisierung auf Betriebssystemebene nutzen, um Software in Containern bereitzustellen.

**Code-Repository**
+ Der Code für dieses Muster ist im GitHub [sample-ecr-copy Repository](https://github.com/aws-samples/sample-ecr-copy) verfügbar. Sie können die CloudFormation Vorlage aus dem Repository verwenden, um die zugrunde liegenden Ressourcen zu erstellen.

## Best Practices
<a name="copy-ecr-container-images-across-accounts-regions-best-practices"></a>

Folgen Sie dem Prinzip der geringsten Rechte und gewähren Sie die für die Ausführung einer Aufgabe erforderlichen Mindestberechtigungen. Weitere Informationen finden Sie in der IAM-Dokumentation unter [Gewährung der geringsten Rechte](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) und [bewährte Methoden zur Sicherheit](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html).

## Epen
<a name="copy-ecr-container-images-across-accounts-regions-epics"></a>

### Vorbereitung Ihrer Umgebung
<a name="prepare-your-environment"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
|  AWS CLI Profile konfigurieren. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps Ingenieur, Dateningenieur, ML-Ingenieur | 
| Sammeln Sie die erforderlichen Informationen. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps Ingenieur, Dateningenieur, ML-Ingenieur | 
| Klonen Sie das Repository | Klonen Sie das Repository des Patterns auf Ihre lokale Workstation:<pre>git clone https://github.com/aws-samples/sample-ecr-copy</pre> | DevOps Ingenieur, Dateningenieur, ML-Ingenieur | 

### Stellen Sie die Infrastruktur für das Zielkonto bereit
<a name="deploy-infrastructure-for-the-destination-account"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Bestätigen Sie die Vorlage. | Validieren Sie die CloudFormation Vorlage:<pre>aws cloudformation validate-template \<br />  --template-body file://"Destination Account cf_template.yml" \<br />  --profile destination-account</pre> | DevOps Ingenieur, ML-Ingenieur, Dateningenieur | 
| Stellen Sie die Zielinfrastruktur bereit. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Dateningenieur, ML-Ingenieur, DevOps Ingenieur | 
| Überprüfen Sie die Bereitstellung. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps Ingenieur, ML-Ingenieur, Dateningenieur | 

### Das Lambda-Container-Image erstellen und bereitstellen
<a name="build-and-deploy-the-lam-container-image"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Bereiten Sie den Container-Build vor. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Dateningenieur, ML-Ingenieur, DevOps Ingenieur | 
| Erstellen Sie das Container-Image. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Dateningenieur, ML-Ingenieur, DevOps Ingenieur | 
| Erstellen Sie ein Repository und laden Sie das Bild hoch. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Dateningenieur, ML-Ingenieur, DevOps Ingenieur | 
| Überprüfen Sie das Bild. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Dateningenieur, ML-Ingenieur, DevOps Ingenieur | 

### Stellen Sie die Infrastruktur des Quellkontos bereit
<a name="deploy-the-source-account-infrastructure"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Bereiten Sie die Bereitstellungsparameter vor. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Dateningenieur, DevOps Ingenieur, ML-Ingenieur | 
| Überprüfen Sie die Quellvorlage. | Validieren Sie die CloudFormation Quellvorlage:<pre>aws cloudformation validate-template \<br />  --template-body file://"Source Account Cf template.yml" \<br />  --profile source-account</pre> | Dateningenieur, ML-Ingenieur, DevOps Ingenieur | 
| Stellen Sie die Quellinfrastruktur bereit. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Dateningenieur, ML-Ingenieur, DevOps Ingenieur | 
| Überprüfen Sie die Bereitstellung und sammeln Sie die Ergebnisse. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps Ingenieur, ML-Ingenieur, Dateningenieur | 
| Bestätigen Sie Ihr E-Mail-Abonnement. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Dateningenieur, ML-Ingenieur, DevOps Ingenieur | 

### Führen Sie den Kopiervorgang aus und überwachen Sie ihn
<a name="run-and-monitor-the-copy-process"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Führen Sie den Kopiervorgang aus und überwachen Sie ihn. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps Ingenieur, ML-Ingenieur, Dateningenieur | 
| Führen Sie die Step-Funktion aus. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps Ingenieur, ML-Ingenieur, Dateningenieur | 
| Überwachen Sie den Fortschritt. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps Ingenieur, ML-Ingenieur, Dateningenieur | 
| Überprüfen Sie die Ergebnisse. | Warten Sie, bis der Vorgang abgeschlossen ist (wird alle 30 Sekunden aktualisiert):<pre>while true; do<br />  STATUS=$(aws stepfunctions describe-execution \<br />    --execution-arn $EXECUTION_ARN \<br />    --profile source-account \<br />    --region $SOURCE_REGION \<br />    --query 'status' \<br />    --output text)<br />  <br />  echo "Current status: $STATUS"<br />  <br />  if [[ "$STATUS" == "SUCCEEDED" || "$STATUS" == "FAILED" || "$STATUS" == "TIMED_OUT" || "$STATUS" == "ABORTED" ]]; then<br />    break<br />  fi<br />  <br />  sleep 30<br />done<br /><br />echo "Final execution status: $STATUS"</pre> | DevOps Ingenieur, ML-Ingenieur, Dateningenieur | 
| Überprüfen Sie die Bilder. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps Ingenieur, Dateningenieur, ML-Ingenieur | 

## Fehlerbehebung
<a name="copy-ecr-container-images-across-accounts-regions-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| Step-Funktionen können nicht ausgeführt werden. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | 

## Zugehörige Ressourcen
<a name="copy-ecr-container-images-across-accounts-regions-resources"></a>
+ [Dokumentation zum Kran](https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md)
+ [Was ist Amazon Elastic Container Registry?](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)
+ [Was ist AWS Lambda?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)
+ [Was ist Step Functions?](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)

## Zusätzliche Informationen
<a name="copy-ecr-container-images-across-accounts-regions-additional"></a>

**Konfigurationsparameter**


| 
| 
| Parameter | Description | Beispiel | 
| --- |--- |--- |
| `SourceAccountId` |  AWS-Konto Quell-ID | `11111111111` | 
| `DestinationAccountId` |  AWS-Konto Ziel-ID | `22222222222` | 
| `DestinationRegion` | Ziel AWS-Region | `us-east-2` | 
| `SourceRegion` | Quelle AWS-Region | `us-east-1` | 
| `NotificationEmail` | E-Mail für Benachrichtigungen | `abc@xyz.com` | 
| `RepositoryList` | Zu kopierende Repositorien | `repo1,repo2,repo3` | 
| `LambdaImageUri` | Lambda-Container-Image-URI | `${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com/ecr-copy-lambda:latest` | 

# Erstellen Sie eine Amazon ECS-Aufgabendefinition und mounten Sie mithilfe von Amazon EFS ein Dateisystem auf EC2 Instances
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs"></a>

*Durga Prasad Cheepuri, Amazon Web Services*

## Zusammenfassung
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-summary"></a>

Dieses Muster enthält Codebeispiele und Schritte zum Erstellen einer Amazon Elastic Container Service (Amazon ECS) -Aufgabendefinition, die auf Amazon Elastic Compute Cloud (Amazon EC2) -Instances in der Amazon Web Services (AWS) -Cloud ausgeführt wird, während Amazon Elastic File System (Amazon EFS) zum Mounten eines Dateisystems auf diesen EC2 Instances verwendet wird. Amazon ECS-Aufgaben, die Amazon EFS verwenden, mounten automatisch die Dateisysteme, die Sie in der Aufgabendefinition angeben, und stellen diese Dateisysteme den Containern der Aufgabe in allen Availability Zones in einer AWS-Region zur Verfügung.

Um Ihre Anforderungen an persistenten Speicher und gemeinsam genutzten Speicher zu erfüllen, können Sie Amazon ECS und Amazon EFS zusammen verwenden. Sie können Amazon EFS beispielsweise verwenden, um persistente Benutzerdaten und Anwendungsdaten für Ihre Anwendungen mit aktiven und Standby-ECS-Containerpaaren zu speichern, die in verschiedenen Availability Zones laufen, um eine hohe Verfügbarkeit zu gewährleisten. Sie können Amazon EFS auch verwenden, um gemeinsam genutzte Daten zu speichern, auf die parallel von ECS-Containern und verteilten Job-Workloads zugegriffen werden kann.

Um Amazon EFS mit Amazon ECS zu verwenden, können Sie einer Aufgabendefinition eine oder mehrere Volume-Definitionen hinzufügen. Eine Volume-Definition umfasst eine Amazon EFS-Dateisystem-ID, eine Zugriffspunkt-ID und eine Konfiguration für die AWS Identity and Access Management (IAM) -Autorisierung oder die Transport Layer Security (TLS) -Verschlüsselung bei der Übertragung. Sie können Containerdefinitionen innerhalb von Aufgabendefinitionen verwenden, um die Aufgabendefinitionsvolumes anzugeben, die bei der Ausführung des Containers bereitgestellt werden. Wenn eine Aufgabe ausgeführt wird, die ein Amazon EFS-Dateisystem verwendet, stellt Amazon ECS sicher, dass das Dateisystem bereitgestellt ist und für die Container verfügbar ist, die Zugriff darauf benötigen.

## Voraussetzungen und Einschränkungen
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-prereqs"></a>

**Voraussetzungen**
+ Ein aktives AWS-Konto
+ Eine Virtual Private Cloud (VPC) mit einem Virtual Private Network (VPN) -Endpunkt oder einem Router
+ (Empfohlen) [Amazon ECS-Container-Agent 1.38.0 oder höher](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-versions.html) aus Gründen der Kompatibilität mit Amazon EFS-Zugriffspunkten und IAM-Autorisierungsfunktionen (Weitere Informationen finden Sie im AWS-Blogbeitrag [Neu für Amazon EFS — IAM-Autorisierung und](https://aws.amazon.com/blogs/aws/new-for-amazon-efs-iam-authorization-and-access-points/) Zugriffspunkte.)

**Einschränkungen**
+ Amazon ECS-Container-Agent-Versionen vor 1.35.0 unterstützen keine Amazon EFS-Dateisysteme für Aufgaben, die den EC2 Starttyp verwenden.

## Architektur
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-architecture"></a>

Das folgende Diagramm zeigt ein Beispiel für eine Anwendung, die Amazon ECS verwendet, um eine Aufgabendefinition zu erstellen und ein Amazon EFS-Dateisystem auf EC2 Instances in ECS-Containern zu mounten.

![\[Amazon ECS architecture with task definition, ECS service, containers, and EFS file system integration.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/090a3f03-a4c6-47e3-b1ae-b0eb5c5b269c/images/343e0f1d-44ee-4ec2-8392-aeddc0e48b83.png)


Das Diagramm zeigt den folgenden Workflow:

1. Erstellen Sie ein Amazon EFS-Dateisystem.

1. Erstellen Sie eine Aufgabendefinition mit einem Container.

1. Konfigurieren Sie die Container-Instances für das Mounten des Amazon EFS-Dateisystems. Die Aufgabendefinition verweist auf die Volume-Mounts, sodass die Container-Instance das Amazon EFS-Dateisystem verwenden kann. ECS-Aufgaben haben Zugriff auf dasselbe Amazon EFS-Dateisystem, unabhängig davon, auf welcher Container-Instance diese Aufgaben erstellt werden.

1. Erstellen Sie einen Amazon ECS-Service mit drei Instanzen der Aufgabendefinition.

**Technologie-Stack**
+ Amazon EC2
+ Amazon ECS
+ Amazon EFS

## Tools
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-tools"></a>
+ [Amazon EC2](https://docs.aws.amazon.com/ec2/?id=docs_gateway) — Amazon Elastic Compute Cloud (Amazon EC2) bietet skalierbare Rechenkapazität in der AWS-Cloud. Sie können Amazon verwenden EC2 , um so viele oder so wenige virtuelle Server zu starten, wie Sie benötigen, und Sie können nach oben oder unten skalieren.
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) — Amazon Elastic Container Service (Amazon ECS) ist ein hoch skalierbarer, schneller Container-Management-Service zum Ausführen, Stoppen und Verwalten von Containern in einem Cluster. Sie können Ihre Aufgaben und Services auf einer serverlosen Infrastruktur ausführen, die von AWS Fargate verwaltet wird. Um mehr Kontrolle über Ihre Infrastruktur zu erhalten, können Sie Ihre Aufgaben und Dienste alternativ auf einem Cluster von EC2 Instances ausführen, die Sie verwalten.
+ [Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) — Amazon Elastic File System (Amazon EFS) bietet ein einfaches, skalierbares, vollständig verwaltetes elastisches NFS-Dateisystem zur Verwendung mit AWS-Cloud-Services und lokalen Ressourcen.
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) — Die AWS-Befehlszeilenschnittstelle (AWS CLI) ist ein Open-Source-Tool für die Interaktion mit AWS-Services über Befehle in Ihrer Befehlszeilen-Shell. Mit minimaler Konfiguration können Sie AWS-CLI-Befehle, die Funktionen implementieren, die denen entsprechen, die von der browserbasierten AWS-Managementkonsole bereitgestellt werden, von einer Befehlszeile aus ausführen.

## Epen
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-epics"></a>

### Erstellen eines Amazon EFS-Dateisystems
<a name="create-an-amazon-efs-file-system"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie mithilfe der AWS-Managementkonsole ein Amazon EFS-Dateisystem. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.html) | AWS DevOps | 

### Erstellen Sie eine Amazon ECS-Aufgabendefinition, indem Sie entweder ein Amazon EFS-Dateisystem oder die AWS-CLI CLI
<a name="create-an-amazon-ecs-task-definition-by-using-either-an-amazon-efs-file-system-or-the-aws-cli"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine Aufgabendefinition mit einem Amazon EFS-Dateisystem. | Erstellen Sie eine Aufgabendefinition mithilfe der [neuen Amazon ECS-Konsole](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html) oder der [klassischen Amazon ECS-Konsole](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition-classic.html) mit den folgenden Konfigurationen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.html) | AWS DevOps | 
| Erstellen Sie mit der AWS-CLI eine Aufgabendefinition. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.html) | AWS DevOps | 

## Zugehörige Ressourcen
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-resources"></a>
+ [Amazon ECS-Aufgabendefinitionen](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)
+ [Amazon EFS-Volumes](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/efs-volumes.html)

## Anlagen
<a name="attachments-090a3f03-a4c6-47e3-b1ae-b0eb5c5b269c"></a>

[Um auf zusätzliche Inhalte zuzugreifen, die mit diesem Dokument verknüpft sind, entpacken Sie die folgende Datei: attachment.zip](samples/p-attach/090a3f03-a4c6-47e3-b1ae-b0eb5c5b269c/attachments/attachment.zip)

# Stellen Sie Lambda-Funktionen mit Container-Images bereit
<a name="deploy-lambda-functions-with-container-images"></a>

*Ram Kandaswamy, Amazon Web Services*

## Zusammenfassung
<a name="deploy-lambda-functions-with-container-images-summary"></a>

AWS Lambda unterstützt Container-Images als Bereitstellungsmodell. Dieses Muster zeigt, wie Lambda-Funktionen über Container-Images bereitgestellt werden. 

Lambda ist ein serverloser, ereignisgesteuerter Rechendienst, mit dem Sie Code für praktisch jede Art von Anwendung oder Backend-Service ausführen können, ohne Server bereitstellen oder verwalten zu müssen. Mit der Container-Image-Unterstützung für Lambda-Funktionen profitieren Sie von bis zu 10 GB Speicherplatz für Ihr Anwendungsartefakt und können vertraute Container-Image-Entwicklungstools verwenden.

Das Beispiel in diesem Muster verwendet Python als zugrunde liegende Programmiersprache, aber Sie können auch andere Sprachen wie Java, Node.js oder Go verwenden. Ziehen Sie als Quelle ein Git-basiertes System wie GitHub,, oder Bitbucket in Betracht GitLab, oder verwenden Sie Amazon Simple Storage Service (Amazon S3).

## Voraussetzungen und Einschränkungen
<a name="deploy-lambda-functions-with-container-images-prereqs"></a>

**Voraussetzungen**
+ Amazon Elastic Container Registry (Amazon ECR) aktiviert
+ Anwendungscode
+ Docker-Images mit dem Runtime-Interface-Client und der neuesten Version von Python
+ Grundkenntnisse in Git

**Einschränkungen**
+ Die maximal unterstützte Bildgröße beträgt 10 GB.
+ Die maximale Laufzeit für eine Lambda-basierte Container-Bereitstellung beträgt 15 Minuten.

## Architektur
<a name="deploy-lambda-functions-with-container-images-architecture"></a>

**Zielarchitektur**

![\[Vierstufiger Prozess zur Erstellung der Lambda-Funktion.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/e421cc58-d33e-493d-b0bb-c3ffe39c2eb9/images/7f36d3d8-d161-497a-b036-26d886a16c69.png)


 

1. Sie erstellen ein Git-Repository und übertragen den Anwendungscode in das Repository.

1. Das AWS CodeBuild Projekt wird durch Commit-Änderungen ausgelöst.

1. Das CodeBuild Projekt erstellt das Docker-Image und veröffentlicht das erstellte Image in Amazon ECR.

1. Sie erstellen die Lambda-Funktion mithilfe des Images in Amazon ECR.

**Automatisierung und Skalierung**

Dieses Muster kann mithilfe von AWS CloudFormation AWS Cloud Development Kit (AWS CDK), oder API-Operationen aus einem SDK automatisiert werden. Lambda kann automatisch auf der Grundlage der Anzahl der Anfragen skaliert werden, und Sie können es mithilfe der Parallelitätsparameter optimieren. Weitere Informationen finden Sie in der [Lambda-Dokumentation](https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html).

## Tools
<a name="deploy-lambda-functions-with-container-images-tools"></a>

**AWS-Services**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)Mit AWS richten CloudFormationhelps Sie AWS Ressourcen ein, stellen sie schnell und konsistent bereit und verwalten sie während ihres gesamten Lebenszyklus über AWS-Konten und AWS-Regionen. Dieses Muster verwendet [AWS CloudFormation Application Composer](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/app-composer-for-cloudformation.html), mit dem Sie CloudFormation Vorlagen visuell anzeigen und bearbeiten können.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)ist ein vollständig verwalteter Build-Service, mit dem Sie Quellcode kompilieren, Komponententests ausführen und bereitstellungsbereite Artefakte erstellen können.
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) ist ein verwalteter Container-Image-Registry-Service, der sicher, skalierbar und zuverlässig ist.
+ [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. Er führt Ihren Code nur bei Bedarf aus und skaliert automatisch, sodass Sie nur für die tatsächlich genutzte Rechenzeit zahlen.

**Andere Tools**
+ [Docker](https://www.docker.com/) ist eine Reihe von Platform-as-a-Service (PaaS) -Produkten, die Virtualisierung auf Betriebssystemebene nutzen, um Software in Containern bereitzustellen.
+ [GitHub](https://docs.github.com/en/repositories/creating-and-managing-repositories/quickstart-for-repositories), [GitLab](https://docs.gitlab.com/ee/user/get_started/get_started_projects.html), und [Bitbucket](https://support.atlassian.com/bitbucket-cloud/docs/tutorial-learn-bitbucket-with-git/) sind einige der am häufigsten verwendeten Git-basierten Quellcodeverwaltungssysteme, um Quellcodeänderungen zu verfolgen.

## Best Practices
<a name="deploy-lambda-functions-with-container-images-best-practices"></a>
+ Mache deine Funktion so effizient und klein wie möglich, um zu vermeiden, dass unnötige Dateien geladen werden.
+ Bemühen Sie sich, statische Ebenen in Ihrer Docker-Dateiliste weiter oben zu platzieren, und platzieren Sie Ebenen, die sich häufiger ändern, weiter unten. Dadurch wird das Caching verbessert, was die Leistung verbessert.
+ Der Image-Besitzer ist für die Aktualisierung und das Patchen des Images verantwortlich. Fügen Sie diesen Aktualisierungsrhythmus zu Ihren betrieblichen Abläufen hinzu. Weitere Informationen finden Sie in der [AWS Lambda -Dokumentation](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html#function-code).

## Epen
<a name="deploy-lambda-functions-with-container-images-epics"></a>

### Erstellen Sie ein Projekt in CodeBuild
<a name="create-a-project-in-codebuild"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie ein Git-Repository. | Erstellen Sie ein Git-Repository, das den Quellcode der Anwendung, das Dockerfile und die `buildspec.yaml` Datei enthält.  | Developer | 
| Erstellen Sie ein Projekt CodeBuild . | Gehen Sie wie folgt vor, um ein CodeBuild Projekt zum Erstellen des benutzerdefinierten Lambda-Images zu verwenden: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-lambda-functions-with-container-images.html) | Developer | 
| Bearbeiten Sie das Dockerfile. | Das Dockerfile sollte sich im Verzeichnis der obersten Ebene befinden, in dem Sie die Anwendung entwickeln. Der Python-Code sollte sich im `src` Ordner befinden.Verwenden Sie bei der Erstellung des Images die [offiziellen von Lambda unterstützten Images](https://gallery.ecr.aws/lambda?page=1). Andernfalls tritt ein Bootstrap-Fehler auf, der den Packvorgang erschwert.Einzelheiten finden Sie im Abschnitt [Zusätzliche Informationen](#deploy-lambda-functions-with-container-images-additional). | Developer | 
| Erstellen Sie ein Repository in Amazon ECR. | Erstellen Sie ein Container-Repository in Amazon ECR. Im folgenden Beispielbefehl lautet der Name des erstellten Repositorys: `cf-demo`<pre>aws ecr create-repository --cf-demo </pre>Das Repository wird in der `buildspec.yaml` Datei referenziert. | AWS-Administrator, Entwickler | 
| Verschieben Sie das Image zu Amazon ECR. | Sie können es verwenden CodeBuild , um den Image-Build-Prozess durchzuführen. CodeBuild benötigt die Erlaubnis, mit Amazon ECR zu interagieren und mit S3 zu arbeiten. Im Rahmen des Prozesses wird das Docker-Image erstellt und in die Amazon ECR-Registrierung übertragen. Einzelheiten zur Vorlage und zum Code finden Sie im Abschnitt [Zusätzliche Informationen](#deploy-lambda-functions-with-container-images-additional). | Developer | 
| Stellen Sie sicher, dass sich das Bild im Repository befindet. | Um zu überprüfen, ob sich das Bild im Repository befindet, wählen Sie in der Amazon ECR-Konsole **Repositories** aus. Das Bild sollte mit Tags und den Ergebnissen eines Schwachstellenscanberichts aufgeführt werden, wenn diese Funktion in den Amazon ECR-Einstellungen aktiviert war.  Weitere Informationen finden Sie in der [AWS-Dokumentation](https://docs.aws.amazon.com/cli/latest/reference/ecr/put-registry-scanning-configuration.html). | Developer | 

### Erstellen Sie die Lambda-Funktion, um das Image auszuführen
<a name="create-the-lambda-function-to-run-the-image"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| So erstellen Sie die Lambda-Funktion: | Wählen Sie in der Lambda-Konsole **Create function** und dann **Container image** aus. Geben Sie den Funktionsnamen und die URI für das Bild ein, das sich im Amazon ECR-Repository befindet, und wählen Sie dann **Funktion erstellen**. Weitere Informationen finden Sie in der [AWS Lambda Lambda-Dokumentation](https://docs.aws.amazon.com/lambda/latest/dg/API_CreateFunction.html). | App-Developer | 
| Testen Sie die Lambda-Funktion. | **Um die Funktion aufzurufen und zu testen, wählen Sie Test.** Weitere Informationen finden Sie in der [AWS Lambda Lambda-Dokumentation](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html). | App-Developer | 

## Fehlerbehebung
<a name="deploy-lambda-functions-with-container-images-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| Der Build ist nicht erfolgreich. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-lambda-functions-with-container-images.html) | 

## Zugehörige Ressourcen
<a name="deploy-lambda-functions-with-container-images-resources"></a>
+ [Basisbilder für Lambda](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-images.html)
+ [Docker-Beispiel für CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/sample-docker.html)
+ [Übergeben Sie temporäre Anmeldeinformationen](https://aws.amazon.com/premiumsupport/knowledge-center/codebuild-temporary-credentials-docker/)

## Zusätzliche Informationen
<a name="deploy-lambda-functions-with-container-images-additional"></a>

**Bearbeiten Sie das Dockerfile**

Der folgende Code zeigt die Befehle, die Sie im Dockerfile bearbeiten:

```
FROM public.ecr.aws/lambda/python:3.xx

# Copy function code
COPY app.py ${LAMBDA_TASK_ROOT} 
COPY requirements.txt  ${LAMBDA_TASK_ROOT} 

# install dependencies
RUN pip3 install --user -r requirements.txt

# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "app.lambda_handler" ]
```

Verwenden Sie im `FROM` Befehl den entsprechenden Wert für die Python-Version, die von Lambda unterstützt wird (z. B.`3.12`). Dies wird das Basis-Image sein, das im öffentlichen Amazon ECR-Image-Repository verfügbar ist. 

Der `COPY app.py ${LAMBDA_TASK_ROOT}` Befehl kopiert den Code in das Stammverzeichnis der Aufgabe, das von der Lambda-Funktion verwendet wird. Dieser Befehl verwendet die Umgebungsvariable, sodass wir uns keine Gedanken über den tatsächlichen Pfad machen müssen. Die auszuführende Funktion wird als Argument an den `CMD [ "app.lambda_handler" ]` Befehl übergeben.

Der `COPY requirements.txt` Befehl erfasst die für den Code erforderlichen Abhängigkeiten. 

Der `RUN pip install --user -r requirements.txt` Befehl installiert die Abhängigkeiten im lokalen Benutzerverzeichnis. 

Führen Sie den folgenden Befehl aus, um Ihr Image zu erstellen.

```
docker build -t <image name> .
```

**Fügen Sie das Bild in Amazon ECR hinzu**

Ersetzen Sie den Code im folgenden Code `aws_account_id` durch die Kontonummer und ersetzen Sie ihn, `us-east-1` wenn Sie eine andere Region verwenden. Die `buildspec` Datei verwendet die CodeBuild Buildnummer, um Image-Versionen eindeutig als Tag-Wert zu identifizieren. Sie können dies an Ihre Anforderungen anpassen.

*Der benutzerdefinierte Buildspec-Code*

```
phases:
  install:
    runtime-versions:
       python: 3.xx
  pre_build:
    commands:
      - python3 --version
      - pip3 install --upgrade pip
      - pip3 install --upgrade awscli
      - sudo docker info
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...
      - ls
      - cd app
      - docker build -t cf-demo:$CODEBUILD_BUILD_NUMBER .
      - docker container ls
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker image...
      - aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.us-east-1.amazonaws.com
      - docker tag cf-demo:$CODEBUILD_BUILD_NUMBER aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER
      - docker push aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER
```

# Bereitstellen von Java-Microservices auf Amazon ECS mithilfe von AWS Fargate
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate"></a>

*Vijay Thompson und Sandeep Bondugula, Amazon Web Services*

## Zusammenfassung
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-summary"></a>

Dieses Muster bietet Anleitungen für die Bereitstellung containerisierter Java-Mikroservices auf Amazon Elastic Container Service (Amazon ECS) mithilfe von AWS Fargate. Das Muster verwendet Amazon Elastic Container Registry (Amazon ECR) nicht für die Containerverwaltung. Stattdessen werden Docker-Images von einem Docker-Hub abgerufen. 

## Voraussetzungen und Einschränkungen
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-prereqs"></a>

**Voraussetzungen**
+ Eine bestehende Java-Microservices-Anwendung auf einem Docker-Hub
+ Ein öffentliches Docker-Repository
+ Ein aktives AWS-Konto
+ Vertrautheit mit AWS-Services, einschließlich Amazon ECS und Fargate
+ Docker-, Java- und Spring Boot-Framework
+ Amazon Relational Database Service (Amazon RDS) ist betriebsbereit (optional)
+ Eine virtuelle private Cloud (VPC), wenn für die Anwendung Amazon RDS erforderlich ist (optional)

## Architektur
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-architecture"></a>

**Quelltechnologie-Stack**
+ Java-Mikroservices (z. B. in Spring Boot implementiert) und auf Docker bereitgestellt

**Quellarchitektur**

![\[Quellarchitektur für Java-Microservices, die auf Docker bereitgestellt werden\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/65185957-2b8b-43a6-964c-95ce0a45ba17/images/0a946ca8-fe37-4ede-85cb-a80a1c36105d.png)


**Zieltechnologie-Stack**
+ Ein Amazon ECS-Cluster, der jeden Microservice mithilfe von Fargate hostet
+ Ein VPC-Netzwerk zum Hosten des Amazon ECS-Clusters und der zugehörigen Sicherheitsgruppen 
+ Eine cluster/task Definition für jeden Microservice, der Container mithilfe von Fargate hochfährt

**Zielarchitektur**

![\[Zielarchitektur auf Java-Mikroservices auf Amazon ECS\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/65185957-2b8b-43a6-964c-95ce0a45ba17/images/b21349ea-21fc-4688-b76a-1bde479858aa.png)


## Tools
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-tools"></a>

**Tools**
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) macht es überflüssig, Ihre eigene Container-Orchestrierungssoftware zu installieren und zu betreiben, einen Cluster von virtuellen Maschinen zu verwalten und zu skalieren oder Container auf diesen virtuellen Maschinen zu planen. 
+ Mit [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html) können Sie Container ausführen, ohne Server oder Amazon Elastic Compute Cloud (Amazon EC2) -Instances verwalten zu müssen. Es wird in Verbindung mit Amazon Elastic Container Service (Amazon ECS) verwendet.
+ [Docker](https://www.docker.com/) ist eine Softwareplattform, mit der Sie Anwendungen schnell erstellen, testen und bereitstellen können. Docker packt Software in standardisierte Einheiten, sogenannte *Container*, die alles enthalten, was die Software zum Ausführen benötigt, einschließlich Bibliotheken, Systemtools, Code und Laufzeit. 

**Docker-Code**

Das folgende Dockerfile gibt die verwendete Version des Java Development Kit (JDK) an, in der die Java-Archivdatei (JAR) vorhanden ist, die Portnummer, die verfügbar gemacht wird, und den Einstiegspunkt für die Anwendung.

```
FROM openjdk:11
ADD target/Spring-docker.jar Spring-docker.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","Spring-docker.jar"]
```

## Epen
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-epics"></a>

### Neue Aufgabendefinitionen erstellen
<a name="create-new-task-definitions"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine Aufgabendefinition. | Für die Ausführung eines Docker-Containers in Amazon ECS ist eine Aufgabendefinition erforderlich. Öffnen Sie die Amazon ECS-Konsole unter [https://console.aws.amazon.com/ecs/](https://console.aws.amazon.com/ecs/), wählen Sie **Aufgabendefinitionen** und erstellen Sie dann eine neue Aufgabendefinition. Weitere Informationen finden Sie in der [Amazon ECS-Dokumentation](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html). | AWS-Systemadministrator, App-Entwickler | 
| Wählen Sie den Starttyp. | Wählen Sie **Fargate** als Starttyp. | AWS-Systemadministrator, App-Entwickler | 
| Konfigurieren Sie die Aufgabe. | Definieren Sie einen Aufgabennamen und konfigurieren Sie die Anwendung mit der entsprechenden Menge an Aufgabenspeicher und CPU. | AWS-Systemadministrator, App-Entwickler | 
| Definieren Sie den Container. | Geben Sie den Namen des Containers an. Geben Sie für das Image den Namen der Docker-Site, den Repository-Namen und den Tag-Namen des Docker-Images ein ()`docker.io/sample-repo/sample-application:sample-tag-name`. Legen Sie Speicherlimits für die Anwendung und Portzuordnungen (`8080, 80`) für die zulässigen Ports fest. | AWS-Systemadministrator, App-Entwickler | 
| Erstellen Sie die Aufgabe. | Wenn die Aufgaben- und Containerkonfigurationen vorhanden sind, erstellen Sie die Aufgabe. Detaillierte Anweisungen finden Sie unter den Links im Abschnitt *Verwandte Ressourcen*. | AWS-Systemadministrator, App-Entwickler | 

### Konfigurieren des Clusters
<a name="configure-the-cluster"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen und konfigurieren Sie einen Cluster. | Wählen Sie als Clustertyp **nur Networking** aus, konfigurieren Sie den Namen und erstellen Sie dann den Cluster oder verwenden Sie einen vorhandenen Cluster, falls verfügbar. Weitere Informationen finden Sie in der [Amazon ECS-Dokumentation](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html). | AWS-Systemadministrator, App-Entwickler | 

### Aufgabe konfigurieren
<a name="configure-task"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine -Aufgabe. | Wählen Sie im Cluster die Option **Neue Aufgabe ausführen aus**. | AWS-Systemadministrator, App-Entwickler | 
| Wählen Sie den Starttyp. | Wählen Sie **Fargate** als Starttyp. | AWS-Systemadministrator, App-Entwickler | 
| Wählen Sie Aufgabendefinition, Revision und Plattformversion. | Wählen Sie die Aufgabe, die Sie ausführen möchten, die Version der Aufgabendefinition und die Plattformversion aus. | AWS-Systemadministrator, App-Entwickler | 
| Wählen Sie den -Cluster. | Wählen Sie den Cluster aus, von dem aus Sie die Aufgabe ausführen möchten. | AWS-Systemadministrator, App-Entwickler | 
| Geben Sie die Anzahl der Aufgaben an. | Konfigurieren Sie die Anzahl der Aufgaben, die ausgeführt werden sollen. Wenn Sie mit zwei oder mehr Aufgaben starten, ist ein Load Balancer erforderlich, um den Datenverkehr auf die Aufgaben zu verteilen. | AWS-Systemadministrator, App-Entwickler | 
| Geben Sie die Aufgabengruppe an. | (Optional) Geben Sie einen Aufgabengruppennamen an, um eine Gruppe verwandter Aufgaben als Aufgabengruppe zu identifizieren. | AWS-Systemadministrator, App-Entwickler | 
| Konfigurieren Sie die Cluster-VPC, die Subnetze und die Sicherheitsgruppen. | Konfigurieren Sie die Cluster-VPC und die Subnetze, in denen Sie die Anwendung bereitstellen möchten. Erstellen oder aktualisieren Sie Sicherheitsgruppen (HTTP, HTTPS und Port 8080), um den Zugriff auf eingehende und ausgehende Verbindungen zu ermöglichen. | AWS-Systemadministrator, App-Entwickler | 
| Konfigurieren Sie öffentliche IP-Einstellungen. | Aktivieren oder deaktivieren Sie die öffentliche IP, je nachdem, ob Sie eine öffentliche IP-Adresse für Fargate-Aufgaben verwenden möchten. Die empfohlene Standardoption ist **Aktiviert**. | AWS-Systemadministrator, App-Entwickler | 
| Überprüfen Sie die Einstellungen und erstellen Sie die Aufgabe | Überprüfen Sie Ihre Einstellungen und wählen Sie dann **Task ausführen**. | AWS-Systemadministrator, App-Entwickler | 

### Überschneiden
<a name="cut-over"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Kopieren Sie die Anwendungs-URL. | Wenn der Aufgabenstatus auf Wird *ausgeführt* aktualisiert wurde, wählen Sie die Aufgabe aus. Kopieren Sie im Bereich Netzwerk die öffentliche IP. | AWS-Systemadministrator, App-Entwickler | 
| Testen Sie Ihre Anwendung. | Geben Sie in Ihrem Browser die öffentliche IP ein, um die Anwendung zu testen. | AWS-Systemadministrator, App-Entwickler | 

## Zugehörige Ressourcen
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-resources"></a>
+ [Docker-Grundlagen für Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html) (Amazon ECS-Dokumentation)
+ [Amazon ECS auf AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html) (Amazon ECS-Dokumentation)
+ [Eine Aufgabendefinition erstellen](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html) (Amazon ECS-Dokumentation)
+ [Einen Cluster erstellen](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html) (Amazon ECS-Dokumentation)
+ [Konfiguration grundlegender Serviceparameter](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/basic-service-params.html) (Amazon ECS-Dokumentation)
+ [Konfiguration eines Netzwerks](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-configure-network.html) (Amazon ECS-Dokumentation)
+ [Bereitstellung von Java-Microservices auf Amazon ECS](https://aws.amazon.com/blogs/compute/deploying-java-microservices-on-amazon-ec2-container-service/) (Blogbeitrag)

# Stellen Sie Kubernetes-Ressourcen und -Pakete mithilfe von Amazon EKS und einem Helm-Chart-Repository in Amazon S3 bereit
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3"></a>

*Sagar Panigrahi, Amazon Web Services*

## Zusammenfassung
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-summary"></a>

Dieses Muster hilft Ihnen, Kubernetes-Anwendungen unabhängig von ihrer Komplexität effizient zu verwalten. Das Muster integriert Helm in Ihre bestehenden CI/CD-Pipelines (Continuous Integration and Continuous Delivery), um Anwendungen in einem Kubernetes-Cluster bereitzustellen. Helm ist ein Kubernetes-Paketmanager, der Sie bei der Verwaltung von Kubernetes-Anwendungen unterstützt. Helm-Diagramme helfen bei der Definition, Installation und Aktualisierung komplexer Kubernetes-Anwendungen. Diagramme können versioniert und in Helm-Repositorys gespeichert werden, wodurch die mittlere Wiederherstellungszeit (MTTR) bei Ausfällen verbessert wird. 

Dieses Muster verwendet Amazon Elastic Kubernetes Service (Amazon EKS) für den Kubernetes-Cluster. Es verwendet Amazon Simple Storage Service (Amazon S3) als Helm-Diagramm-Repository, sodass die Diagramme zentral verwaltet und von Entwicklern im gesamten Unternehmen abgerufen werden können.

## Voraussetzungen und Einschränkungen
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-prereqs"></a>

**Voraussetzungen**
+ Ein aktives Amazon Web Services (AWS) -Konto mit einer Virtual Private Cloud (VPC)
+ Ein Amazon-EKS-Cluster 
+ Worker-Knoten, die innerhalb des Amazon EKS-Clusters eingerichtet sind und bereit sind, Workloads aufzunehmen
+ Kubectl für die Konfiguration der Amazon EKS kubeconfig-Datei für den Zielcluster auf dem Client-Computer
+ Zugriff auf AWS Identity and Access Management (IAM) zur Erstellung des S3-Buckets
+ IAM-Zugriff (programmatischer oder Rollenzugriff) auf Amazon S3 vom Client-Computer
+ Quellcodeverwaltung und eine Pipeline CI/CD 

**Einschränkungen**
+ Derzeit wird das Aktualisieren, Löschen oder Verwalten von benutzerdefinierten Ressourcendefinitionen (CRDs) nicht unterstützt.
+ Wenn Sie eine Ressource verwenden, die auf eine CRD verweist, muss die CRD separat installiert werden (außerhalb des Diagramms).

**Produktversionen**
+ Helm v3.6.3

## Architektur
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-architecture"></a>

**Zieltechnologie-Stack**
+ Amazon EKS
+ Amazon VPC
+ Amazon S3
+ Verwaltung des Quellcodes
+ Helm
+ Kubectl

**Zielarchitektur**

![\[Client Helm und Kubectl stellen ein Helm-Chart-Repo in Amazon S3 für Amazon EKS-Cluster bereit.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/d3f993e6-4d96-4cb9-a075-c4debe431fd7/images/2f09f7bb-440a-4c4b-b29f-08d136d1ada4.png)


 

**Automatisierung und Skalierung**
+ AWS CloudFormation kann verwendet werden, um die Erstellung der Infrastruktur zu automatisieren. Weitere Informationen finden Sie unter [Erstellen von Amazon EKS-Ressourcen mit AWS CloudFormation](https://docs.aws.amazon.com/eks/latest/userguide/creating-resources-with-cloudformation.html) in der Amazon EKS-Dokumentation.
+ Helm soll in Ihr vorhandenes CI/CD Automatisierungstool integriert werden, um die Paketierung und Versionierung von Helm-Diagrammen zu automatisieren (außerhalb des Geltungsbereichs dieses Musters).
+ GitVersion oder Jenkins-Build-Nummern können verwendet werden, um die Versionierung von Diagrammen zu automatisieren.

## Tools
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-tools"></a>

**Tools**
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) — Amazon Elastic Kubernetes Service (Amazon EKS) ist ein verwalteter Service für die Ausführung von Kubernetes auf AWS, ohne dass Sie Ihre eigene Kubernetes-Steuerebene einrichten oder verwalten müssen. Kubernetes ist ein Open-Source-System zur Automatisierung der Bereitstellung, Skalierung und Verwaltung von Anwendungen in Containern.
+ [Helm — Helm](https://helm.sh/docs/) ist ein Paketmanager für Kubernetes, der Sie bei der Installation und Verwaltung von Anwendungen auf Ihrem Kubernetes-Cluster unterstützt.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/gsg/GetStartedWithS3.html) — Amazon Simple Storage Service (Amazon S3) ist Speicher für das Internet. Mit Amazon S3 können Sie jederzeit beliebige Mengen von Daten von überall aus im Internet speichern und aufrufen.
+ [Kubectl — Kubectl](https://kubernetes.io/docs/reference/kubectl/overview/) ist ein Befehlszeilenprogramm zum Ausführen von Befehlen für Kubernetes-Cluster.

**Code**

Der Beispielcode ist angehängt.

## Epen
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-epics"></a>

### Helm konfigurieren und initialisieren
<a name="configure-and-initialize-helm"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Installieren Sie den Helm-Client. | Verwenden Sie den folgenden Befehl, um den Helm-Client herunterzuladen und auf Ihrem lokalen System zu installieren. <pre>sudo curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash</pre> | DevOps Ingenieur | 
| Validieren Sie die Helm-Installation. | Um zu überprüfen, ob Helm mit dem Kubernetes-API-Server innerhalb des Amazon EKS-Clusters kommunizieren kann, führen Sie folgenden Befehl aus. `helm version` | DevOps Ingenieur | 

### Erstellen und installieren Sie ein Helm-Diagramm im Amazon EKS-Cluster
<a name="create-and-install-a-helm-chart-in-the-amazon-eks-cluster"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie ein Helm-Diagramm für NGINX. | Führen Sie den Befehl aus, um ein Helmdiagramm mit dem Namen `my-nginx` auf dem Client-Computer zu erstellen. `helm create my-nginx` | DevOps Ingenieur | 
| Überprüfen Sie die Struktur des Diagramms. | Um die Struktur des Diagramms zu überprüfen, führen Sie den Befehl tree aus`tree my-nginx/`. | DevOps Ingenieur | 
| Deaktivieren Sie die Erstellung eines Dienstkontos im Diagramm. | Stellen Sie unter dem `serviceAccount` Abschnitt den `create` Schlüssel auf ein`false`. `values.yaml` Dies ist deaktiviert, da für dieses Muster kein Dienstkonto erstellt werden muss. | DevOps Ingenieur | 
| Überprüfe (linte) das geänderte Diagramm auf syntaktische Fehler. | Führen Sie den folgenden Befehl aus, um das Diagramm vor der Installation im Zielcluster auf syntaktische Fehler zu überprüfen. `helm lint my-nginx/` | DevOps Ingenieur | 
| Installieren Sie das Diagramm, um Kubernetes-Ressourcen bereitzustellen. | Verwenden Sie den folgenden Befehl, um die Helm-Chart-Installation auszuführen. <pre>helm install --name my-nginx-release --debug my-nginx/ --namespace helm-space </pre>Das optionale `debug` Flag gibt alle Debug-Meldungen während der Installation aus. Das `namespace` Flag gibt den Namespace an, in dem der Ressourcenteil dieses Diagramms erstellt wird. | DevOps Ingenieur | 
| Überprüfen Sie die Ressourcen im Amazon EKS-Cluster. | Verwenden Sie den folgenden Befehl, um die Ressourcen zu überprüfen, die als Teil des Helm-Diagramms im `helm-space` Namespace erstellt wurden. <pre>kubectl get all -n helm-space</pre> | DevOps Ingenieur | 

### Führen Sie einen Rollback zu einer früheren Version einer Kubernetes-Anwendung durch
<a name="roll-back-to-a-previous-version-of-a-kubernetes-application"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Ändern und aktualisieren Sie die Version. | Um das Diagramm zu ändern`values.yaml`, ändern Sie den `replicaCount` Wert in`2`. Aktualisieren Sie dann die bereits installierte Version, indem Sie den folgenden Befehl ausführen.<pre>helm upgrade my-nginx-release my-nginx/ --namespace helm-space</pre> | DevOps Ingenieur | 
| Sehen Sie sich die Geschichte der Helm-Version an. | Führen Sie den folgenden Befehl aus, um alle Versionen für eine bestimmte Version aufzulisten, die mit Helm installiert wurden. <pre>helm history my-nginx-release</pre> | DevOps Ingenieur | 
| Überprüfen Sie die Details für eine bestimmte Version. | Bevor Sie zu einer funktionierenden Version wechseln oder ein Rollback durchführen und für eine zusätzliche Überprüfungsebene vor der Installation einer Revision, sollten Sie mit dem folgenden Befehl überprüfen, welche Werte an die einzelnen Versionen übergeben wurden.<pre>helm get --revision=2 my-nginx-release</pre> | DevOps Ingenieur | 
| Gehen Sie zurück zu einer früheren Version. | Verwenden Sie den folgenden Befehl, um zu einer früheren Version zurückzukehren. <pre>helm rollback my-nginx-release 1 </pre>In diesem Beispiel wird auf Version 1 zurückgesetzt. | DevOps Ingenieur | 

### Initialisieren Sie einen S3-Bucket als Helm-Repository
<a name="initialize-an-s3-bucket-as-a-helm-repository"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie einen S3-Bucket für Helm-Charts. | Erstellen Sie einen eindeutigen S3-Bucket. Erstellen Sie im Bucket einen Ordner mit dem Namen`charts`. Das Beispiel in diesem Muster verwendet `s3://my-helm-charts/charts` als Zieldiagramm-Repository. | Cloud-Administrator | 
| Installieren Sie das Helm-Plugin für Amazon S3. | Verwenden Sie den folgenden Befehl, um das Helm-S3-Plugin auf Ihrem Client-Computer zu installieren. <pre>helm plugin install https://github.com/hypnoglow/helm-s3.git --version 0.10.0</pre>Hinweis: Helm V3-Unterstützung ist mit der Plugin-Version 0.9.0 und höher verfügbar. | DevOps Ingenieur | 
| Initialisieren Sie das Amazon S3 Helm-Repository.  | Verwenden Sie den folgenden Befehl, um den Zielordner als Helm-Repository zu initialisieren. <pre>helm S3 init s3://my-helm-charts/charts </pre>Der Befehl erstellt eine `index.yaml` Datei im Ziel, um alle Diagramminformationen zu verfolgen, die an diesem Speicherort gespeichert sind. | DevOps Ingenieur | 
| Fügen Sie das Amazon S3 S3-Repository zu Helm hinzu. | Verwenden Sie den folgenden Befehl, um das Repository auf dem Client-Computer hinzuzufügen.<pre>helm repo add my-helm-charts s3://my-helm-charts/charts </pre>Dieser Befehl fügt dem Ziel-Repository auf dem Helm-Client-Computer einen Alias hinzu. | DevOps Ingenieur | 
| Überprüfen Sie die Repository-Liste. | Führen `helm repo list` Sie den Befehl aus, um die Liste der Repositorys auf dem Helm-Client-Computer anzuzeigen. | DevOps Ingenieur | 

### Package und Speichern von Diagrammen im Amazon S3 Helm-Repository
<a name="package-and-store-charts-in-the-amazon-s3-helm-repository"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Verpacken Sie die Karte. | Führen Sie den Befehl aus, um das von Ihnen erstellte `my-nginx` Diagramm zu verpacken`helm package ./my-nginx/`. Der Befehl packt den gesamten Inhalt des `my-nginx` Diagrammordners in eine Archivdatei, die anhand der Versionsnummer benannt wird, die in der `Chart.yaml` Datei angegeben ist. | DevOps Ingenieur | 
| Speichern Sie das Paket im Amazon S3 Helm-Repository. | Um das Paket in das Helm-Repository in Amazon S3 hochzuladen, führen Sie den folgenden Befehl aus und verwenden Sie dabei den richtigen Namen der `.tgz` Datei.<pre>helm s3 push ./my-nginx-0.1.0.tgz my-helm-charts</pre> | DevOps Ingenieur | 
| Suchen Sie nach der Helm-Karte. | Führen Sie den folgenden Befehl aus, um zu überprüfen, ob das Diagramm sowohl lokal als auch im Helm-Repository in Amazon S3 angezeigt wird.<pre>helm search repo my-nginx</pre> | DevOps Ingenieur | 

### Ein Diagramm ändern, versionieren und verpacken
<a name="modify-version-and-package-a-chart"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Ändern und verpacken Sie das Diagramm. | Stellen Sie in `values.yaml` den `replicaCount` Wert auf ein`1`. Verpacken Sie dann das Diagramm`helm package ./my-nginx/`, indem Sie es ausführen und diesmal die Version in `Chart.yaml` ändern`0.1.1`. Die Versionierung wird idealerweise durch Automatisierung mithilfe von Tools wie GitVersion Jenkins Build Numbers in einer Pipeline aktualisiert. CI/CD Die Automatisierung der Versionsnummer ist für dieses Muster nicht vorgesehen. | DevOps Ingenieur | 
| Pushen Sie die neue Version in das Helm-Repository in Amazon S3. | Führen Sie den folgenden Befehl aus, um das neue Paket mit Version 0.1.1 in das `my-helm-charts` Helm-Repository in Amazon S3 zu übertragen.<pre>helm s3 push ./my-nginx-0.1.1.tgz my-helm-charts</pre> | DevOps Ingenieur | 

### Suchen und installieren Sie ein Diagramm aus dem Amazon S3 Helm-Repository
<a name="search-for-and-install-a-chart-from-the-amazon-s3-helm-repository"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Suchen Sie nach allen Versionen des my-nginx-Diagramms. | Um alle verfügbaren Versionen eines Diagramms anzuzeigen, führen Sie den folgenden Befehl mit der Markierung aus. `--versions`<pre>helm search repo my-nginx --versions</pre>Ohne die Markierung zeigt Helm standardmäßig die zuletzt hochgeladene Version eines Diagramms an. | DevOps Ingenieur | 
| Installieren Sie ein Diagramm aus dem Amazon S3 Helm-Repository. | Die Suchergebnisse der vorherigen Aufgabe zeigen die verschiedenen Versionen des `my-nginx` Diagramms. Verwenden Sie den folgenden Befehl, um die neue Version (0.1.1) aus dem Amazon S3 Helm-Repository zu installieren.<pre>helm upgrade my-nginx-release my-helm-charts/my-nginx --version 0.1.1 --namespace helm-space</pre> | DevOps Ingenieur | 

## Zugehörige Ressourcen
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-resources"></a>
+ [HELM-Dokumentation](https://helm.sh/docs/)
+ [helm-S3-Plugin (MIT-Lizenz)](https://github.com/hypnoglow/helm-s3.git)
+ [BINÄRDATEI FÜR HELM-Cli](https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3)
+ [Amazon EKS-Dokumentation](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)

## Anlagen
<a name="attachments-d3f993e6-4d96-4cb9-a075-c4debe431fd7"></a>

[Um auf zusätzliche Inhalte zuzugreifen, die mit diesem Dokument verknüpft sind, entpacken Sie die folgende Datei: attachment.zip](samples/p-attach/d3f993e6-4d96-4cb9-a075-c4debe431fd7/attachments/attachment.zip)

# Stellen Sie mithilfe von Terraform einen CockroachDB-Cluster in Amazon EKS bereit
<a name="deploy-cockroachdb-on-eks-using-terraform"></a>

*Sandip Gangapadhyay und Kalyan Senthilnathan, Amazon Web Services*

## Zusammenfassung
<a name="deploy-cockroachdb-on-eks-using-terraform-summary"></a>

[Dieses Muster bietet ein HashiCorp Terraform-Modul für die Bereitstellung eines [CockroachDB-Clusters mit mehreren Knoten auf Amazon Elastic Kubernetes Service (Amazon EKS) mithilfe des CockroachDB-Operators](https://www.cockroachlabs.com/docs/stable/).](https://www.cockroachlabs.com/docs/v25.4/cockroachdb-operator-overview) CockroachDB ist eine verteilte SQL-Datenbank, die automatisches horizontales Sharding, hohe Verfügbarkeit und konsistente Leistung über geografisch verteilte Cluster hinweg bietet. Dieses Muster verwendet Amazon EKS als verwaltete Kubernetes-Plattform und implementiert [Cert-Manager](https://cert-manager.io/docs/) für TLS-gesicherte Knotenkommunikation. Es verwendet auch einen [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) für die Verteilung des Datenverkehrs und erstellt CockroachDB [StatefulSets](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/)mit Pods, die Daten aus Gründen der Fehlertoleranz und Leistung automatisch replizieren.

**Zielpublikum**

Um dieses Muster zu implementieren, empfehlen wir, dass Sie mit den folgenden Informationen vertraut sind:
+ HashiCorp Terraform-Konzepte und IaC-Praktiken (Infrastructure-as-Code)
+ AWS-Services, insbesondere Amazon EKS
+ Grundlagen von Kubernetes StatefulSets, einschließlich Betreiber und Servicekonfigurationen
+ Verteilte SQL-Datenbanken
+ Sicherheitskonzepte wie die Verwaltung von TLS-Zertifikaten.
+ DevOps Praktiken, CI/CD Workflows und Infrastrukturautomatisierung

## Voraussetzungen und Einschränkungen
<a name="deploy-cockroachdb-on-eks-using-terraform-prereqs"></a>

**Voraussetzungen**
+ Ein aktiver AWS-Konto
+ Berechtigungen zur Bereitstellung von Ressourcen in einem Amazon EKS-Cluster
+ Ein Amazon EKS-Cluster, Version v1.23 oder höher, mit beschrifteten Knoten `node=cockroachdb`
+ [Amazon Elastic Block Store Container Storage Interface (CSI) -Treiberversion](https://github.com/kubernetes-sigs/aws-ebs-csi-driver) 1.19.0 oder höher, installiert im Amazon EKS-Cluster
+ [Terraform CLI Version 1.0.0 oder höher, installiert](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ [kubectl, installiert](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)
+ Git, [installiert](https://git-scm.com/install/)
+ AWS Command Line Interface [(AWS CLI) Version 2.9.18 oder höher, [installiert und konfiguriert](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)

**Einschränkungen**
+ Der CockroachDB-Kubernetes-Operator unterstützt nicht mehrere Kubernetes-Cluster für Bereitstellungen in mehreren Regionen. [Weitere Einschränkungen finden Sie unter [CockroachDB über mehrere Kubernetes-Cluster orchestrieren (CockroachDB-Dokumentation) und CockroachDB Kubernetes Operator ()](https://www.cockroachlabs.com/docs/stable/orchestrate-cockroachdb-with-kubernetes-multi-cluster.html#eks).](https://github.com/cockroachdb/cockroach-operator) GitHub
+ Das automatische Löschen persistenter Volumenansprüche () ist derzeit standardmäßig deaktiviert. PVCs Das bedeutet, dass der Betreiber nach der Außerbetriebnahme und Entfernung eines Nodes das persistente Volume, das auf seinem Pod installiert war, nicht entfernt. Weitere Informationen finden Sie unter [Automatisches Beschneiden von PVC](https://www.cockroachlabs.com/docs/stable/scale-cockroachdb-kubernetes.html#automatic-pvc-pruning) in der CockroachDB-Dokumentation.

**Produktversionen**
+ CockroachDB Version 22.2.2

## Architektur
<a name="deploy-cockroachdb-on-eks-using-terraform-architecture"></a>

**Zielarchitektur**

Das folgende Diagramm zeigt eine hochverfügbare CockroachDB-Bereitstellung in drei AWS Availability Zones innerhalb einer Virtual Private Cloud (VPC). Die CockroachDB-Pods werden über Amazon EKS verwaltet. Die Architektur veranschaulicht, wie Benutzer über einen Network Load Balancer auf die Datenbank zugreifen, der den Datenverkehr auf die CockroachDB-Pods verteilt. Die Pods werden auf Amazon Elastic Compute Cloud (Amazon EC2) -Instances in jeder Availability Zone ausgeführt, was Stabilität und Fehlertoleranz bietet.

![\[Eine hochverfügbare CockroachDB-Bereitstellung in drei AWS-Verfügbarkeitszonen innerhalb einer VPC.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/e22d81ab-b85c-4709-8579-4c9cdb4afdb6/images/4b163abf-6fdc-4310-840c-bda621ab25dd.png)


**Ressourcen erstellt**

Durch die Bereitstellung des in diesem Muster verwendeten Terraform-Moduls werden die folgenden Ressourcen erstellt:

1. **Network Load Balancer** — Diese Ressource dient als Einstiegspunkt für Client-Anfragen und verteilt den Verkehr gleichmäßig auf die CockroachDB-Instanzen.

1. **CockroachDB StatefulSet** — StatefulSet Definiert den gewünschten Status der CockroachDB-Bereitstellung innerhalb des Amazon EKS-Clusters. Es verwaltet die geordnete Bereitstellung, Skalierung und Aktualisierung von CockroachDB-Pods.

1. **CockroachDB-Pods — Diese Pods sind Instanzen von CockroachDB**, die als Container innerhalb von Kubernetes-Pods ausgeführt werden. Diese Pods speichern und verwalten die Daten im gesamten verteilten Cluster.

1. **CockroachDB-Datenbank** — Dies ist die verteilte Datenbank, die von CockroachDB verwaltet wird und sich über mehrere Pods erstreckt. Sie repliziert Daten für hohe Verfügbarkeit, Fehlertoleranz und Leistung.

## Tools
<a name="deploy-cockroachdb-on-eks-using-terraform-tools"></a>

**AWS-Services**
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) ist ein Open-Source-Tool, mit dem Sie AWS-Services über Befehle in Ihrer Befehlszeilen-Shell interagieren können.
+ Mit [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) können Sie Kubernetes ausführen, AWS ohne dass Sie Ihre eigene Kubernetes-Steuerebene oder Knoten installieren oder verwalten müssen.

**Andere Tools**
+ [HashiCorp Terraform](https://www.terraform.io/docs) ist ein Infrastructure-as-Code-Tool (IaC), mit dem Sie mithilfe von Code Cloud-Infrastruktur und -Ressourcen bereitstellen und verwalten können.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/) ist eine Befehlszeilenschnittstelle, mit der Sie Befehle für Kubernetes-Cluster ausführen können.

**Code-Repository**

Der Code für dieses Muster ist im Repository GitHub [Deploy a CockroachDB in Amazon EKS using](https://github.com/aws-samples/crdb-cluster-eks-terraform) Terraform verfügbar. Das Code-Repository enthält die folgenden Dateien und Ordner für Terraform:
+ `modules`Ordner — Dieser Ordner enthält das Terraform-Modul für CockroachDB
+ `main`Ordner — Dieser Ordner enthält das Root-Modul, das das untergeordnete CockroachDB-Modul aufruft, um den CockroachDB-Datenbankcluster zu erstellen.

## Best Practices
<a name="deploy-cockroachdb-on-eks-using-terraform-best-practices"></a>
+ Skalieren Sie nicht auf weniger als drei Knoten herunter. Dies wird auf CockroachDB als Anti-Pattern angesehen und kann zu Fehlern führen. Weitere Informationen finden Sie unter [Cluster Scaling](https://www.cockroachlabs.com/docs/stable/scale-cockroachdb-kubernetes.html) in der CockroachDB-Dokumentation.
+ Implementieren Sie Amazon EKS-Autoscaling mithilfe von Karpernter oder Cluster Autoscaler. Dadurch kann der CockroachDB-Cluster horizontal skaliert und neue Knoten automatisch hinzugefügt werden. Weitere Informationen finden Sie unter [Skalieren von Cluster-Berechnungen mit Karpenter und Cluster Autoscaler](https://docs.aws.amazon.com/eks/latest/userguide/autoscaling.html) in der Amazon EKS-Dokumentation.
**Anmerkung**  
Aufgrund der `podAntiAffinity` Kubernetes-Planungsregel kann nur ein CockroachDB-Pod in einem Amazon EKS-Knoten geplant werden.
+ Bewährte Sicherheitsmethoden für Amazon EKS finden Sie unter [Bewährte Sicherheitsmethoden](https://docs.aws.amazon.com/eks/latest/best-practices/security.html) in der Amazon EKS-Dokumentation.
+ Bewährte Methoden zur SQL-Leistung für CockroachDB finden Sie unter [Bewährte Methoden zur SQL-Leistung](https://www.cockroachlabs.com/docs/stable/performance-best-practices-overview.html) in der CockroachDB-Dokumentation.
+ Weitere Informationen zur Einrichtung eines Amazon Simple Storage Service (Amazon S3) -Remote-Backends für die Terraform-Statusdatei finden Sie unter [Amazon S3](https://developer.hashicorp.com/terraform/language/backend/s3) in der Terraform-Dokumentation.

## Epen
<a name="deploy-cockroachdb-on-eks-using-terraform-epics"></a>

### So richten Sie Ihre Umgebung ein
<a name="set-up-your-environment"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Klonen Sie das Code-Repository. | Geben Sie den folgenden Befehl ein, um das Repository zu klonen:<pre>git clone https://github.com/aws-samples/crdb-cluster-eks-terraform.git</pre> | DevOps Ingenieur, Git | 
| Aktualisieren Sie die Terraform-Variablen. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps Ingenieur, Terraform | 

### Stellen Sie die Ressourcen bereit
<a name="deploy-the-resources"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Stellen Sie die Infrastruktur bereit. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps Ingenieur, Terraform | 

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


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Überprüfen Sie die Erstellung von Ressourcen. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps Ingenieur | 
| (Optional) Skalieren Sie nach oben oder unten. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps Ingenieur, Terraform | 

### Bereinigen
<a name="clean-up"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Löschen Sie die Infrastruktur. | Durch die Skalierung der Knoten auf `0` werden die Rechenkosten gesenkt. Es fallen jedoch weiterhin Gebühren für die persistenten Amazon EBS-Volumes an, die mit diesem Modul erstellt wurden. Um Speicherkosten zu vermeiden, gehen Sie wie folgt vor, um alle Volumes zu löschen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | Terraform | 

## Fehlerbehebung
<a name="deploy-cockroachdb-on-eks-using-terraform-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| Fehler beim Überprüfen der Anbieteranmeldedaten | Wenn Sie den Terraform `apply` - oder `destroy` Befehl ausführen, tritt möglicherweise der folgende Fehler auf:`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.`Dieser Fehler wird durch den Ablauf des Sicherheitstokens für die in der Konfiguration Ihres lokalen Computers verwendeten Anmeldeinformationen verursacht. Anweisungen zur Behebung des Fehlers finden Sie in der AWS CLI Dokumentation unter [Konfigurationseinstellungen einrichten und anzeigen](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods). | 
| CockroachDB-Pods befinden sich im Status „Ausstehend“ | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | 

## Zugehörige Ressourcen
<a name="deploy-cockroachdb-on-eks-using-terraform-resources"></a>
+ [Stellen Sie CockroachDB in einem einzigen Kubernetes-Cluster](https://www.cockroachlabs.com/docs/dev/deploy-cockroachdb-with-kubernetes.html) bereit (CockroachDB-Dokumentation)
+ [Orchestrieren](https://www.cockroachlabs.com/docs/dev/orchestrate-cockroachdb-with-kubernetes-multi-cluster.html) Sie CockroachDB über mehrere Kubernetes-Cluster hinweg (CockroachDB-Dokumentation)
+ [AWS Anbieter](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (Terraform-Dokumentation)

## Anlagen
<a name="attachments-e22d81ab-b85c-4709-8579-4c9cdb4afdb6"></a>

[Um auf zusätzliche Inhalte zuzugreifen, die mit diesem Dokument verknüpft sind, entpacken Sie die folgende Datei: attachment.zip](samples/p-attach/e22d81ab-b85c-4709-8579-4c9cdb4afdb6/attachments/attachment.zip)

# Stellen Sie einen Beispiel-Java-Microservice auf Amazon EKS bereit und machen Sie den Microservice mithilfe eines Application Load Balancer verfügbar
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer"></a>

*Vijay Thompson und Akkamahadevi Hiremath, Amazon Web Services*

## Zusammenfassung
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-summary"></a>

Dieses Muster beschreibt, wie ein Java-Microservice als containerisierte Anwendung auf Amazon Elastic Kubernetes Service (Amazon EKS) mithilfe des `eksctl` Befehlszeilenprogramms und Amazon Elastic Container Registry (Amazon ECR) bereitgestellt wird. Sie können einen Application Load Balancer für den Lastenausgleich des Anwendungsdatenverkehrs verwenden.

## Voraussetzungen und Einschränkungen
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-prereqs"></a>

**Voraussetzungen**
+ Ein aktives AWS-Konto
+ Die AWS-Befehlszeilenschnittstelle (AWS CLI) Version 1.7 oder höher, installiert und konfiguriert auf macOS, Linux oder Windows
+ Ein laufender [Docker-Daemon](https://docs.docker.com/config/daemon/)
+ Das `eksctl` Befehlszeilenprogramm, installiert und konfiguriert auf macOS, Linux oder Windows (Weitere Informationen finden Sie unter [Erste Schritte mit Amazon EKS — eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) in der Amazon EKS-Dokumentation.)
+ Das `kubectl` Befehlszeilenprogramm, installiert und konfiguriert unter macOS, Linux oder Windows (Weitere Informationen finden Sie unter [Installation oder Aktualisierung von kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) in der Amazon EKS-Dokumentation.)

**Einschränkungen**
+ Dieses Muster deckt die Installation eines SSL-Zertifikats für den Application Load Balancer nicht ab.

## Architektur
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-architecture"></a>

**Zieltechnologie-Stack**
+ Amazon ECR
+ Amazon EKS
+ Elastic Load Balancing

**Zielarchitektur**

Das folgende Diagramm zeigt eine Architektur für die Containerisierung eines Java-Microservices auf Amazon EKS.

![\[Ein Java-Microservice, der als containerisierte Anwendung auf Amazon EKS bereitgestellt wird.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/e1dd8ab0-9e1e-4d2b-b7af-89d3e583e57c/images/aaca4fd9-5aaa-4df5-aebd-02a2ed881c3b.png)


## Tools
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-tools"></a>
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) ist ein verwalteter Container-Image-Registry-Service, der sicher, skalierbar und zuverlässig ist.
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) hilft Ihnen dabei, Kubernetes auf AWS auszuführen, ohne Ihre eigene Kubernetes-Steuerebene oder Knoten installieren oder verwalten zu müssen.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) ist ein Open-Source-Tool, mit dem Sie über Befehle in Ihrer Befehlszeilen-Shell mit AWS-Services interagieren können.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) verteilt Ihren eingehenden Traffic automatisch auf mehrere Ziele, wie Amazon Elastic Compute Cloud (Amazon EC2) -Instances, Container und IP-Adressen, in einer oder mehreren Availability Zones.
+ [eksctl](https://eksctl.io/) hilft Ihnen bei der Erstellung von Clustern auf Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) ermöglicht die Ausführung von Befehlen für Kubernetes-Cluster.
+ [Docker](https://www.docker.com/) hilft Ihnen beim Erstellen, Testen und Bereitstellen von Anwendungen in Paketen, die als Container bezeichnet werden.

## Epen
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-epics"></a>

### Erstellen Sie einen Amazon EKS-Cluster mithilfe von eksctl
<a name="create-an-amazon-eks-cluster-by-using-eksctl"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie einen Amazon-EKS-Cluster.  | Um einen Amazon EKS-Cluster zu erstellen, der zwei t2.small EC2 Amazon-Instances als Knoten verwendet, führen Sie den folgenden Befehl aus:<pre>eksctl create cluster --name <your-cluster-name> --version <version-number> --nodes=1 --node-type=t2.small</pre>Der Vorgang kann zwischen 15 und 20 Minuten dauern. Nachdem der Cluster erstellt wurde, wird die entsprechende Kubernetes-Konfiguration zu Ihrer [kubeconfig-Datei](https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html) hinzugefügt. Sie können die `kubeconfig` Datei mit verwenden, `kubectl`**** um die Anwendung in späteren Schritten bereitzustellen. | Entwickler, Systemadministrator | 
| Überprüfen Sie den Amazon EKS-Cluster. | Um zu überprüfen, ob der Cluster erstellt wurde und Sie eine Verbindung zu ihm herstellen können, führen Sie den `kubectl get nodes` Befehl aus. | Entwickler, Systemadministrator | 

### Erstellen Sie ein Amazon ECR-Repository und übertragen Sie das Docker-Image.
<a name="create-an-amazon-ecr-repository-and-push-the-docker-image"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie ein Amazon-ECR-Repository. | Folgen Sie den Anweisungen unter [Erstellen eines privaten Repositorys](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) in der Amazon ECR-Dokumentation. | Entwickler, Systemadministrator | 
| Erstellen Sie eine POM-XML-Datei. | Erstellen Sie eine `pom.xml` Datei, die auf dem *POM-Beispieldateicode* im Abschnitt [Zusätzliche Informationen](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) dieses Musters basiert. | Entwickler, Systemadministrator | 
| Erstellen Sie eine Quelldatei. | Erstellen Sie anhand des folgenden `HelloWorld.java` Beispiels eine Quelldatei mit dem Namen im `src/main/java/eksExample` Pfad:<pre>package eksExample;<br />import static spark.Spark.get;<br /><br />public class HelloWorld {<br />    public static void main(String[] args) {<br />        get("/", (req, res) -> {<br />            return "Hello World!";<br />        });<br />    }<br />}</pre>Achten Sie darauf, die folgende Verzeichnisstruktur zu verwenden:<pre>├── Dockerfile<br />├── deployment.yaml<br />├── ingress.yaml<br />├── pom.xml<br />├── service.yaml<br />└── src<br />    └── main<br />        └── java<br />            └── eksExample<br />                └── HelloWorld.java</pre> |  | 
| Erstellen Sie eine Docker-Datei. | Erstellen Sie einen auf dem *Dockerfile-Beispiel `Dockerfile`* basierenden Code im Abschnitt [Zusätzliche Informationen](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) dieses Musters. | Entwickler, Systemadministrator | 
| Erstellen Sie das Docker-Image und übertragen Sie es. | Führen Sie in dem Verzeichnis, in dem Sie das Image erstellen, taggen und an Amazon ECR übertragen möchten, die folgenden Befehle aus: `Dockerfile`<pre>aws ecr get-login-password --region <region>| docker login --username <username> --password-stdin <account_number>.dkr.ecr.<region>.amazonaws.com<br />docker buildx build --platform linux/amd64 -t hello-world-java:v1 .<br />docker tag hello-world-java:v1 <account_number>.dkr.ecr.<region>.amazonaws.com/<repository_name>:v1<br />docker push <account_number>.dkr.ecr.<region>.amazonaws.com/<repository_name>:v1</pre>Ändern Sie die AWS-Region, die Kontonummer und die Repository-Details in den vorherigen Befehlen. Notieren Sie sich unbedingt die Bild-URL für die spätere Verwendung.Ein macOS-System mit einem M1-Chip hat ein Problem beim Erstellen eines Images, das mit Amazon EKS kompatibel ist, das auf einer AMD64 Plattform ausgeführt wird. Um dieses Problem zu beheben, verwenden Sie [docker buildx](https://docs.docker.com/engine/reference/commandline/buildx/), um ein Docker-Image zu erstellen, das auf Amazon EKS funktioniert. |  | 

### Stellen Sie die Java-Microservices bereit
<a name="deploy-the-java-microservices"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine Bereitstellungsdatei.  | Erstellen Sie eine YAML-Datei, die `deployment.yaml` auf dem Code der *Beispiel-Bereitstellungsdatei* im Abschnitt [Zusätzliche Informationen](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) dieses Musters basiert.Verwenden Sie die Bild-URL, die Sie zuvor kopiert haben, als Pfad der Bilddatei für das Amazon ECR-Repository. | Entwickler, Systemadministrator | 
| Stellen Sie die Java-Microservices auf dem Amazon EKS-Cluster bereit.  | Führen Sie den `kubectl apply -f deployment.yaml` Befehl aus, um eine Bereitstellung in Ihrem Amazon EKS-Cluster zu erstellen. | Entwickler, Systemadministrator | 
| Überprüfen Sie den Status der Pods. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Entwickler, Systemadministrator | 
| Erstellen Sie einen Service. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Entwickler, Systemadministrator | 
| Installieren Sie das AWS Load Balancer Controller-Add-on. | Folgen Sie den Anweisungen unter [Installation des AWS Load Balancer Controller-Add-ons](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html) in der Amazon EKS-Dokumentation.Sie müssen das Add-on installiert haben, um einen Application Load Balancer oder Network Load Balancer für einen Kubernetes-Dienst zu erstellen. | Entwickler, Systemadministrator | 
| Erstellen Sie eine Eingangsressource. | Erstellen Sie eine YAML-Datei, die auf der `ingress.yaml` Grundlage des *Beispielcodes für eine Ingress-Ressourcendatei* im Abschnitt [Zusätzliche Informationen dieses Musters](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) aufgerufen wird. | Entwickler, Systemadministrator | 
| Erstellen Sie einen Application Load Balancer. | Führen Sie den Befehl aus, um die Eingangsressource bereitzustellen und einen Application Load Balancer zu erstellen. `kubectl apply -f ingress.yaml` | Entwickler, Systemadministrator | 

### Testen der Anwendung
<a name="test-the-application"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Testen und verifizieren Sie die Anwendung. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Entwickler, Systemadministrator | 

## Zugehörige Ressourcen
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-resources"></a>
+ [Ein privates Repository erstellen](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) (Amazon ECR-Dokumentation)
+ [Ein Docker-Image pushen](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) (Amazon ECR-Dokumentation)
+ [Eingangscontroller](https://www.eksworkshop.com/beginner/130_exposing-service/ingress_controller_alb/) (Amazon EKS-Workshop)
+ [Docker buildx (Docker-Dokumente](https://docs.docker.com/engine/reference/commandline/buildx/))

## Zusätzliche Informationen
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional"></a>

**Beispiel für eine POM-Datei**

```
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>


  <groupId>helloWorld</groupId>
  <artifactId>helloWorld</artifactId>
  <version>1.0-SNAPSHOT</version>


  <dependencies>
    <dependency>
      <groupId>com.sparkjava</groupId><artifactId>spark-core</artifactId><version>2.0.0</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.4</version>
        <configuration><finalName>eksExample</finalName><archive><manifest>
              <addClasspath>true</addClasspath><mainClass>eksExample.HelloWorld</mainClass><classpathPrefix>dependency-jars/</classpathPrefix>
            </manifest></archive>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version>
        <configuration><source>1.8</source><target>1.8</target></configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <goals><goal>attached</goal></goals><phase>package</phase>
            <configuration>
              <finalName>eksExample</finalName>
              <descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs>
              <archive><manifest><mainClass>eksExample.HelloWorld</mainClass></manifest></archive>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
```

**Beispiel Dockerfile**

```
FROM bellsoft/liberica-openjdk-alpine-musl:17

RUN apk add maven
WORKDIR /code

# Prepare by downloading dependencies
ADD pom.xml /code/pom.xml
RUN ["mvn", "dependency:resolve"]
RUN ["mvn", "verify"]

# Adding source, compile and package into a fat jar
ADD src /code/src
RUN ["mvn", "package"]

EXPOSE 4567
CMD ["java", "-jar", "target/eksExample-jar-with-dependencies.jar"]
```

**Beispiel für eine Bereitstellungsdatei**

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: microservice-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app.kubernetes.io/name: java-microservice
  template:
    metadata:
      labels:
        app.kubernetes.io/name: java-microservice
    spec:
      containers:
      - name: java-microservice-container
        image: .dkr.ecr.amazonaws.com/:
        ports:
        - containerPort: 4567
```

**Beispiel für eine Servicedatei**

```
apiVersion: v1
kind: Service
metadata:
  name: "service-java-microservice"
spec:
  ports:
    - port: 80
      targetPort: 4567
      protocol: TCP
  type: NodePort
  selector:
    app.kubernetes.io/name: java-microservice
```

**Beispiel für eine Ingress-Ressourcendatei**

```
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: "java-microservice-ingress"
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/load-balancer-name: apg2
    alb.ingress.kubernetes.io/target-type: ip
  labels:
    app: java-microservice
spec:
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: "service-java-microservice"
                port:
                  number: 80
```

# Stellen Sie eine GRPC-basierte Anwendung auf einem Amazon EKS-Cluster bereit und greifen Sie mit einem Application Load Balancer darauf zu
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer"></a>

*Kirankumar Chandrashekar und Huy Nguyen, Amazon Web Services*

## Zusammenfassung
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-summary"></a>

Dieses Muster beschreibt, wie Sie eine GRPC-basierte Anwendung auf einem Amazon Elastic Kubernetes Service (Amazon EKS) -Cluster hosten und über einen Application Load Balancer sicher darauf zugreifen.

[gRPC](https://grpc.io/) ist ein Open-Source-RPC-Framework (Remote Procedure Call), das in jeder Umgebung ausgeführt werden kann. Sie können es für Microservice-Integrationen und Client-Server-Kommunikation verwenden. Weitere Informationen zu gRPC finden Sie im AWS-Blogbeitrag [Application Load Balancer Balancer-Unterstützung für end-to-end HTTP/2](https://aws.amazon.com/blogs/aws/new-application-load-balancer-support-for-end-to-end-http-2-and-grpc/) und gRPC.

Dieses Muster zeigt Ihnen, wie Sie eine GRPC-basierte Anwendung hosten, die auf Kubernetes-Pods auf Amazon EKS ausgeführt wird. Der gRPC-Client stellt über das HTTP/2-Protokoll mit einer verschlüsselten Verbindung eine Verbindung zu einem SSL/TLS Application Load Balancer her. Der Application Load Balancer leitet den Datenverkehr an die gRPC-Anwendung weiter, die auf Amazon EKS-Pods ausgeführt wird. Die Anzahl der gRPC-Pods kann mithilfe des [Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/horizontal-pod-autoscaler.html) Horizontal Pod Autoscaler automatisch auf der Grundlage des Datenverkehrs skaliert werden. Die Zielgruppe des Application Load Balancers führt Integritätsprüfungen an den Amazon EKS-Knoten durch, bewertet, ob das Ziel fehlerfrei ist, und leitet den Datenverkehr nur an fehlerfreie Knoten weiter.

## Voraussetzungen und Einschränkungen
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-prereqs"></a>

**Voraussetzungen**
+ Ein aktives AWS-Konto.
+ [Docker](https://www.docker.com/), installiert und konfiguriert unter Linux, MacOS oder Windows.
+ [AWS-Befehlszeilenschnittstelle (AWS CLI) Version 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html), installiert und konfiguriert unter Linux, macOS oder Windows.
+ [eksctl](https://github.com/eksctl-io/eksctl#installation), installiert und konfiguriert unter Linux, MacOS oder Windows.
+ `kubectl`, installiert und konfiguriert für den Zugriff auf Ressourcen in Ihrem Amazon EKS-Cluster. Weitere Informationen finden Sie unter [Installation oder Aktualisierung von kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) in der Amazon EKS-Dokumentation. 
+ [g RPCurl](https://github.com/fullstorydev/grpcurl), installiert und konfiguriert.
+ Ein neuer oder vorhandener Amazon EKS-Cluster. Weitere Informationen finden Sie unter [Erste Schritte mit Amazon EKS.](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)
+ Ihr Computerterminal ist für den Zugriff auf den Amazon EKS-Cluster konfiguriert. Weitere Informationen finden [Sie in der Amazon EKS-Dokumentation unter Konfiguration Ihres Computers für die Kommunikation mit Ihrem Cluster](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html#eks-configure-kubectl).
+ [AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html), bereitgestellt im Amazon EKS-Cluster.
+ Ein vorhandener DNS-Hostname mit einem gültigen SSL oder SSL/TLS Zertifikat. Sie können ein Zertifikat für Ihre Domain erhalten, indem Sie AWS Certificate Manager (ACM) verwenden oder ein vorhandenes Zertifikat auf ACM hochladen. Weitere Informationen zu diesen beiden Optionen finden Sie unter [Anfordern eines öffentlichen Zertifikats und Importieren von Zertifikaten](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html) [in AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html) in der ACM-Dokumentation.

## Architektur
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-architecture"></a>

Das folgende Diagramm zeigt die durch dieses Muster implementierte Architektur.

![\[Architektur für GRPC-basierte Anwendungen auf Amazon EKS\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/abf727c1-ff8b-43a7-923f-bce825d1b459/images/281936fa-bc43-4b4e-a343-ba1eab97df38.png)


 

Das folgende Diagramm zeigt einen Workflow, bei dem SSL/TLS Datenverkehr von einem gRPC-Client empfangen wird, der auf einen Application Load Balancer auslagert. Der Datenverkehr wird im Klartext an den gRPC-Server weitergeleitet, da er aus einer Virtual Private Cloud (VPC) stammt.

![\[Workflow zum Senden von SSL/TLS Datenverkehr an einen gRPC-Server\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/abf727c1-ff8b-43a7-923f-bce825d1b459/images/09e0c3f6-0c39-40b7-908f-8c4c693a5f02.png)


## Tools
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-tools"></a>

**AWS-Services**
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) ist ein Open-Source-Tool, mit dem Sie über Befehle in Ihrer Befehlszeilen-Shell mit AWS-Services interagieren können.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) verteilt den eingehenden Anwendungs- oder Netzwerkverkehr auf mehrere Ziele. Sie können beispielsweise den Datenverkehr auf Amazon Elastic Compute Cloud (Amazon EC2) -Instances, Container und IP-Adressen in einer oder mehreren Availability Zones verteilen.
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) ist ein verwalteter Container-Image-Registry-Service, der sicher, skalierbar und zuverlässig ist. 
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) hilft Ihnen, Kubernetes auf AWS auszuführen, ohne Ihre eigene Kubernetes-Steuerebene oder Knoten installieren oder verwalten zu müssen.  

**Tools**
+ [eksctl](https://eksctl.io/) ist ein einfaches CLI-Tool zum Erstellen von Clustern auf Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) ist ein Befehlszeilenprogramm zum Ausführen von Befehlen für Kubernetes-Cluster.
+ [AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html) unterstützt Sie bei der Verwaltung von AWS Elastic Load Balancers für einen Kubernetes-Cluster.
+ [g RPCurl](https://github.com/fullstorydev/grpcurl) ist ein Befehlszeilentool, mit dem Sie mit gRPC-Diensten interagieren können.

**Code-Repository**

Der Code für dieses Muster ist im GitHub [grpc-traffic-on-alb-to-eks-Repository](https://github.com/aws-samples/grpc-traffic-on-alb-to-eks.git) verfügbar.

## Epen
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-epics"></a>

### Erstellen Sie das Docker-Image des gRPC-Servers und übertragen Sie es auf Amazon ECR
<a name="build-and-push-the-grpc-serverrsquor-s-docker-image-to-amazon-ecr"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie ein Amazon-ECR-Repository. | Melden Sie sich bei der AWS-Managementkonsole an, öffnen Sie die [Amazon ECR-Konsole](https://console.aws.amazon.com/ecr/) und erstellen Sie dann ein Amazon ECR-Repository. Weitere Informationen finden Sie unter [Erstellen eines Repositorys](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) in der Amazon ECR-Dokumentation. Stellen Sie sicher, dass Sie die URL des Amazon ECR-Repositorys aufzeichnen.Sie können auch ein Amazon ECR-Repository mit AWS CLI erstellen, indem Sie den folgenden Befehl ausführen:<pre>aws ecr create-repository --repository-name helloworld-grpc</pre> | Cloud-Administrator | 
| Erstellen Sie das Docker-Image.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps Ingenieur | 
| Senden Sie das Docker-Image an Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps Ingenieur | 

### Stellen Sie die Kubernetes-Manifeste im Amazon EKS-Cluster bereit
<a name="deploy-the-kubernetes-manifests-to-the-amazon-eks-cluster"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Ändern Sie die Werte in der Kubernetes-Manifestdatei. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps Ingenieur | 
| Stellen Sie die Kubernetes-Manifestdatei bereit.  | Stellen Sie die `grpc-sample.yaml` Datei im Amazon EKS-Cluster bereit, indem Sie den folgenden `kubectl` Befehl ausführen: <pre>kubectl apply -f ./kubernetes/grpc-sample.yaml</pre> | DevOps Ingenieur | 

### Erstellen Sie den DNS-Eintrag für den FQDN des Application Load Balancers
<a name="create-the-dns-record-for-the-application-load-balancerapos-s-fqdn"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Notieren Sie den FQDN für den Application Load Balancer. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps Ingenieur | 

### Testen der Lösung
<a name="test-the-solution"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Testen Sie den gRPC-Server.  | Verwenden Sie gRPCurl , um den Endpunkt zu testen, indem Sie den folgenden Befehl ausführen:<pre>grpcurl grpc.example.com:443 list <br />grpc.reflection.v1alpha.ServerReflection<br />helloworld.helloworld</pre>Ersetze es `grpc.example.com` durch deinen DNS-Namen. | DevOps Ingenieur | 
| Testen Sie den gRPC-Server mit einem gRPC-Client.  | Ersetzen Sie im `helloworld_client_ssl.py` gRPC-Beispielclient den Hostnamen von `grpc.example.com` durch den Hostnamen, der für den gRPC-Server verwendet wird.  Das folgende Codebeispiel zeigt die Antwort des gRPC-Servers auf die Anfrage des Clients:<pre>python ./app/helloworld_client_ssl.py<br />message: "Hello to gRPC server from Client"<br /><br />message: "Thanks for talking to gRPC server!! Welcome to hello world. Received message is \"Hello to gRPC server from Client\""<br />received: true</pre>Dies zeigt, dass der Client mit dem Server kommunizieren kann und dass die Verbindung erfolgreich ist. | DevOps Ingenieur | 

### Bereinigen
<a name="clean-up"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Entfernen Sie den DNS-Eintrag. | Entfernen Sie den DNS-Eintrag, der auf den zuvor erstellten FQDN des Application Load Balancers verweist.  | Cloud-Administrator | 
| Entfernen Sie den Load Balancer. | Wählen Sie auf der [Amazon EC2 EC2-Konsole](https://console.aws.amazon.com/ec2/) **Load Balancers** und entfernen Sie dann den Load Balancer, den der Kubernetes-Controller für Ihre Eingangsressource erstellt hat. | Cloud-Administrator | 
| Löschen Sie den Amazon EKS-Cluster. | Löschen Sie den Amazon EKS-Cluster mithilfe von`eksctl`:<pre>eksctl delete cluster -f ./eks.yaml</pre> | AWS DevOps | 

## Zugehörige Ressourcen
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-resources"></a>
+ [Network Load Balancing in Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/load-balancing.html)
+ [Zielgruppen für Ihre Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-group-protocol-version)

## Zusätzliche Informationen
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-additional"></a>

**Beispiel für eine Ingress-Ressource:**

```
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/healthcheck-protocol: HTTP
    alb.ingress.kubernetes.io/ssl-redirect: "443"
    alb.ingress.kubernetes.io/backend-protocol-version: "GRPC"
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:<AWS-Region>:<AccountId>:certificate/<certificate_ID>
  labels:
    app: grpcserver
    environment: dev
  name: grpcserver
  namespace: grpcserver
spec:
  ingressClassName: alb
  rules:
  - host: grpc.example.com # <----- replace this as per your host name for which the SSL certtficate is available in ACM
    http:
      paths:
      - backend:
          service:
            name: grpcserver
            port:
              number: 9000
        path: /
        pathType: Prefix
```

**Beispiel für eine Bereitstellungsressource:**

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: grpcserver
  namespace: grpcserver
spec:
  selector:
    matchLabels:
      app: grpcserver
  replicas: 1
  template:
    metadata:
      labels:
        app: grpcserver
    spec:
      containers:
      - name: grpc-demo
        image: <your_aws_account_id>.dkr.ecr.us-east-1.amazonaws.com/helloworld-grpc:1.0   #<------- Change to the URI that the Docker image is pushed to
        imagePullPolicy: Always
        ports:
        - name: grpc-api
          containerPort: 9000
        env:
        - name: POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
      restartPolicy: Always
```

**Beispielausgabe:**

```
NAME             CLASS           HOSTS                          Address                PORTS          AGE
 grpcserver      <none>      <DNS-HostName>                  <ELB-address>              80            27d
```

# Stellen Sie containerisierte Anwendungen bereit, wenn AWS IoT Greengrass V2 sie als Docker-Container ausgeführt werden
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container"></a>

*Salih Bakir, Giuseppe Di Bella und Gustav Svalander, Amazon Web Services*

## Zusammenfassung
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-summary"></a>

AWS IoT Greengrass Version 2, wenn es als Docker-Container bereitgestellt wird, unterstützt es nicht nativ das Ausführen von Docker-Anwendungscontainern. Dieses Muster zeigt Ihnen, wie Sie ein benutzerdefiniertes Container-Image erstellen, das auf der neuesten Version basiert und AWS IoT Greengrass V2 die Funktionalität Docker-in-Docker (DinD) aktiviert. Mit DinD können Sie containerisierte Anwendungen in der Umgebung ausführen. AWS IoT Greengrass V2 

Sie können dieses Muster als eigenständige Lösung einsetzen oder es in Container-Orchestrierungsplattformen wie Amazon ECS Anywhere integrieren. In beiden Bereitstellungsmodellen behalten Sie den vollen AWS IoT Greengrass V2 Funktionsumfang, einschließlich der AWS IoT SiteWise Edge-Verarbeitungsfunktionen, bei und ermöglichen gleichzeitig skalierbare, containerbasierte Bereitstellungen. 

## Voraussetzungen und Einschränkungen
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-prereqs"></a>

**Voraussetzungen**
+ Ein aktiver. AWS-Konto
+ Allgemeine AWS IoT Greengrass Version 2 Voraussetzungen finden Sie in der AWS IoT Greengrass Version 2 Dokumentation unter [Voraussetzungen](https://docs.aws.amazon.com/greengrass/v2/developerguide/getting-started-prerequisites.html). 
+ Docker Engine, installiert und konfiguriert unter Linux, macOS oder Windows.
+ Docker Compose (wenn Sie die Docker Compose-Befehlszeilenschnittstelle (CLI) zum Ausführen von Docker-Images verwenden).
+ Ein Linux-Betriebssystem.
+ Ein Hypervisor mit einem Hostserver, der Virtualisierung unterstützt.
+ Systemanforderungen:
  + 2 GB RAM (mindestens)
  + 5 GB verfügbarer Festplattenspeicher (mindestens)
  + Für AWS IoT SiteWise Edge eine x86\$164-Quad-Core-CPU mit 16 GB RAM und 50 GB verfügbarem Festplattenspeicher. Weitere Informationen AWS IoT SiteWise zur Datenverarbeitung finden Sie in der Dokumentation unter Anforderungen an das [Datenverarbeitungspaket](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/configure-gateway-ggv2.html#w2aac17c19c13b7). AWS IoT SiteWise 

**Produktversionen**
+ AWS IoT Greengrass Version 2 Version 2.5.3 oder höher
+ Docker-in-Docker Version 1.0.0 oder höher
+ Docker Compose Version 1.22 oder höher
+ Docker Engine Version 20.10.12 oder höher

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

## Architektur
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-architecture"></a>

**Zieltechnologie-Stack**
+ **Datenquellen** — IoT-Geräte, Sensoren oder Industrieanlagen, die Daten für die Verarbeitung generieren
+ **AWS IoT Greengrass V2**— Läuft als Docker-Container mit D-in-D Funktionen und wird auf Edge-Infrastrukturen bereitgestellt
+ **Containerisierte Anwendungen — Benutzerdefinierte Anwendungen**, die in der AWS IoT Greengrass V2 Umgebung als verschachtelte Docker-Container ausgeführt werden
+ **(Optional) Amazon ECS Anywhere** — Container-Orchestrierung, die die AWS IoT Greengrass V2 Container-Bereitstellung verwaltet
+ **Andere AWS-Services** — AWS IoT Core AWS IoT SiteWise, und andere AWS-Services für die Datenverarbeitung und -verwaltung

**Zielarchitektur**

Das folgende Diagramm zeigt ein Beispiel für eine Zielbereitstellungsarchitektur, die Amazon ECS Anywhere, ein Container-Management-Tool, verwendet.

![\[Bereitstellungsarchitektur mit Amazon ECS Anywhere.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/2ecf5354-40e0-4fd9-9798-086719059784/images/5ed2652e-9604-4809-8962-b167e1991658.png)


Das Diagramm zeigt den folgenden Workflow:

**1: Container-Image-Speicher** — Amazon ECR speichert die AWS IoT Greengrass Container-Images und alle benutzerdefinierten Anwendungscontainer, die für die Edge-Verarbeitung benötigt werden.

**2** und **3: Container-Bereitstellung** — Amazon ECS Anywhere stellt das AWS IoT Greengrass Container-Image von Amazon ECR am Edge-Standort bereit und verwaltet so den Container-Lebenszyklus und den Bereitstellungsprozess.

**4: Bereitstellung von Komponenten** — Der bereitgestellte AWS IoT Greengrass Core stellt seine relevanten Komponenten automatisch auf der Grundlage seiner Konfiguration bereit. Zu den Komponenten gehören AWS IoT SiteWise Edge und andere notwendige Edge-Verarbeitungskomponenten innerhalb der containerisierten Umgebung.

**5: Datenaufnahme** — Nach der vollständigen Konfiguration AWS IoT Greengrass beginnt die Erfassung von Telemetrie- und Sensordaten aus verschiedenen IoT-Datenquellen am Edge-Standort.

**6: Datenverarbeitung und Cloud-Integration** — Der containerisierte AWS IoT Greengrass Kern verarbeitet Daten lokal mithilfe der eingesetzten Komponenten (einschließlich AWS IoT SiteWise Edge für industrielle Daten). Anschließend werden die verarbeiteten Daten zur weiteren Analyse und Speicherung an AWS Cloud Dienste gesendet.

## Tools
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-tools"></a>

**AWS-Services**
+ [Amazon ECS Anywhere](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch-type-external.html) unterstützt Sie bei der Bereitstellung, Verwendung und Verwaltung von Amazon ECS-Aufgaben und -Services in Ihrer eigenen Infrastruktur.
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) bietet skalierbare Rechenkapazität in der AWS Cloud. Sie können so viele virtuelle Server wie nötig nutzen und sie schnell nach oben oder unten skalieren.
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) ist ein verwalteter Container-Image-Registry-Service, der sicher, skalierbar und zuverlässig ist.
+ [AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/what-is-iot-greengrass.html)ist ein Open-Source-Edge-Runtime- und Cloud-Dienst für das Internet der Dinge (IoT), mit dem Sie IoT-Anwendungen auf Ihren Geräten erstellen, bereitstellen und verwalten können.
+ [AWS IoT SiteWise](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/what-is-sitewise.html)hilft Ihnen dabei, Daten von Industrieanlagen in großem Maßstab zu sammeln, zu modellieren, zu analysieren und zu visualisieren.

**Andere Tools**
+ [Docker](https://www.docker.com/) ist eine Reihe von Platform-as-a-Service (PaaS) -Produkten, die Virtualisierung auf Betriebssystemebene nutzen, um Software in Containern bereitzustellen.
+ [Docker Compose](https://docs.docker.com/compose/) ist ein Tool zum Definieren und Ausführen von Multi-Container-Anwendungen.
+ [Docker Engine](https://docs.docker.com/engine/) ist eine Open-Source-Containerisierungstechnologie zum Erstellen und Containerisieren von Anwendungen.

**Code-Repository**

Der Code für dieses Muster ist im GitHub [AWS IoT Greengrass Docker-in-Dockerv2-Repository](https://github.com/aws-samples/aws-iot-greengrass-docker-in-docker) verfügbar.

## Epen
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-epics"></a>

### Baue das Bild AWS IoT Greengrass V2 Docker-in-Docker
<a name="build-the-gg2-docker-in-docker-image"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Klonen Sie und navigieren Sie zum Repository. | Verwenden Sie den folgenden Befehl, um das Repository zu klonen: `git clone https://github.com/aws-samples/aws-iot-greengrass-v2-docker-in-docker.git`Verwenden Sie den folgenden Befehl, um zu dem `docker` Verzeichnis zu navigieren:`cd aws-iot-greengrass-v2-docker-in-docker/docker` | DevOps Ingenieur, AWS DevOps | 
| Erstellen Sie das Docker-Image. | Führen Sie den folgenden Befehl aus, um das Docker-Image mit der (neuesten) Standardversion zu erstellen:`docker build -t x86_64/aws-iot-greengrass:latest .`Oder führen Sie den folgenden Befehl aus, um das Docker-Image mit einer bestimmten Version zu erstellen:`docker build --build-arg GREENGRASS_RELEASE_VERSION=2.12.0 -t x86_64/aws-iot-greengrass:2.12.0 .`Führen Sie den folgenden Befehl aus, um den Build zu überprüfen:`docker images \| grep aws-iot-greengrass`  | AWS DevOps, DevOps Ingenieur, App-Entwickler | 
| (Optional) Push zu Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | App-Entwickler, AWS DevOps, DevOps Ingenieur | 

### AWS Anmeldeinformationen konfigurieren
<a name="configure-aws-credentials"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Wählen Sie die Authentifizierungsmethode aus. | Wählen Sie eine der folgenden Optionen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | AWS-Administrator | 
| Konfigurieren Sie die Authentifizierungsmethode. | Verwenden Sie für die von Ihnen gewählte Authentifizierungsmethode die folgenden Konfigurationsanweisungen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | AWS-Administrator | 

### Mit Docker Compose ausführen
<a name="run-with-docker-compose"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Konfiguration `docker-compose.yml`. | Aktualisieren Sie die `docker-compose.yml` Datei wie folgt mit Umgebungsvariablen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps Ingenieur | 
| Container starten und verifizieren. | Führen Sie den folgenden Befehl aus, um im Vordergrund zu starten:`docker-compose up --build`Oder führen Sie den folgenden Befehl aus, um im Hintergrund zu starten:`docker-compose up --build -d`Führen Sie den folgenden Befehl aus, um den Status zu überprüfen:`docker-compose ps`Führen Sie den folgenden Befehl aus, um Protokolle zu überwachen:`docker-compose logs -f` | DevOps Ingenieur | 

### Mit Docker CLI ausführen
<a name="run-with-docker-cli"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Führen Sie den Container mit Docker CLI aus. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps Ingenieur | 
| Behälter verifizieren. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps Ingenieur | 

### Container-Anwendungen verwalten
<a name="manage-containerized-applications"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Stellen Sie Anwendungen bereit. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | App-Developer | 
| Zugreifen und testen Docker-in-Docker. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps Ingenieur | 

### (Optional) Integration mit Amazon ECS Anywhere
<a name="optional-integrate-with-ecs-anywhere"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Richten Sie den Amazon ECS-Cluster ein. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | AWS-Administrator | 
| Stellen Sie die Amazon ECS-Aufgabe bereit. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | AWS-Administrator | 

### Stoppen und aufräumen
<a name="stop-and-cleanup"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Behälter anhalten. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps Ingenieur | 

## Fehlerbehebung
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| Der Container kann mit Berechtigungsfehlern nicht gestartet werden. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)`--privileged`gewährt dem Container erweiterte Rechte. | 
| Die Bereitstellung schlägt mit Fehlern bei den Anmeldeinformationen fehl. | Gehen Sie wie folgt vor, um zu überprüfen, ob die Anmeldeinformationen korrekt konfiguriert sind:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Stellen Sie sicher, dass die IAM-Berechtigungen`iot:CreateThing`,`iot:CreatePolicy`, `iot:AttachPolicy``iam:CreateRole`, und `iam:AttachRolePolicy` enthalten. | 
| Es kann keine Verbindung zum Docker-Daemon im Container hergestellt werden. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | 
| Der Container hat nicht mehr genügend Speicherplatz. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Stellen Sie sicher, dass der Festplattenspeicher mindestens 5 GB für Basisoperationen und 50 GB für AWS IoT SiteWise Edge beträgt | 
| Probleme beim Erstellen. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | 
| Probleme mit der Netzwerkverbindung. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Stellen Sie sicher, dass die Firewall ausgehenden HTTPS- (443) und MQTT- (8883) -Verkehr zulässt. | 
| Greengrass-Komponenten können nicht bereitgestellt werden. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Überprüfen Sie die komponentenspezifischen Protokolle im `/greengrass/v2/logs/` Verzeichnis. | 
| Der Container wird sofort nach dem Start beendet. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Stellen Sie sicher, dass alle erforderlichen Umgebungsvariablen korrekt gesetzt sind, wenn`PROVISION=true`. Stellen Sie sicher, dass das `--init` Flag beim Starten des Containers verwendet wird. | 

## Zugehörige Ressourcen
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-resources"></a>

**AWS Ressourcen**
+ [Amazon Elastic Container Service](https://aws.amazon.com/ecs/)
+ [Konfigurieren Sie die Edge-Datenverarbeitung für AWS IoT SiteWise Modelle und Anlagen](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/edge-processing.html)
+ [Was ist AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/what-is-iot-greengrass.html)

**Sonstige Ressourcen**
+ [Docker-Dokumentation](https://docs.docker.com/)

## Zusätzliche Informationen
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-additional"></a>
+ Für die AWS IoT SiteWise Edge-Datenverarbeitung muss Docker in der AWS IoT Greengrass Umgebung verfügbar sein.
+ Um einen verschachtelten Container auszuführen, müssen Sie den AWS IoT Greengrass Container mit Anmeldeinformationen auf Administratorebene ausführen.

# Container mithilfe von Elastic Beanstalk bereitstellen
<a name="deploy-containers-by-using-elastic-beanstalk"></a>

*Thomas Scott und Jean-Baptiste Guillois, Amazon Web Services*

## Zusammenfassung
<a name="deploy-containers-by-using-elastic-beanstalk-summary"></a>

In der Amazon Web Services (AWS) Cloud unterstützt AWS Elastic Beanstalk Docker als verfügbare Plattform, sodass Container mit der erstellten Umgebung ausgeführt werden können. Dieses Muster zeigt, wie Container mithilfe des Elastic Beanstalk-Service bereitgestellt werden. Bei der Bereitstellung dieses Musters wird die auf der Docker-Plattform basierende Webserver-Umgebung verwendet.

Um Elastic Beanstalk für die Bereitstellung und Skalierung von Webanwendungen und Services zu verwenden, laden Sie Ihren Code hoch und die Bereitstellung erfolgt automatisch. Kapazitätsbereitstellung, Lastenausgleich, automatische Skalierung und Überwachung des Anwendungszustands sind ebenfalls enthalten. Wenn Sie Elastic Beanstalk verwenden, können Sie die volle Kontrolle über die AWS-Ressourcen übernehmen, die Elastic Beanstalk in Ihrem Namen erstellt. Für die Nutzung von Elastic Beanstalk fallen keine zusätzlichen Gebühren an. Sie zahlen nur für die AWS-Ressourcen, die zum Speichern und Ausführen Ihrer Anwendungen verwendet werden.

Dieses Muster enthält Anweisungen für die Bereitstellung mithilfe der [AWS Elastic Beanstalk Command Line Interface (EB CLI)](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-advanced.html) und der AWS-Managementkonsole.

**Anwendungsfälle**

Zu den Anwendungsfällen für Elastic Beanstalk gehören die folgenden: 
+ Stellen Sie eine Prototypumgebung bereit, um eine Frontend-Anwendung zu demonstrieren. (Dieses Muster verwendet ein Dockerfile**** als Beispiel.)
+ Stellen Sie eine API bereit, um API-Anfragen für eine bestimmte Domain zu bearbeiten.
+ Stellen Sie eine Orchestrierungslösung mithilfe von Docker-Compose bereit (`docker-compose.yml`wird in diesem Muster**** nicht als praktisches Beispiel verwendet).

## Voraussetzungen und Einschränkungen
<a name="deploy-containers-by-using-elastic-beanstalk-prereqs"></a>

**Voraussetzungen**
+ Ein AWS-Konto
+ AWS EB CLI lokal installiert
+ Docker ist auf einem lokalen Computer installiert

**Einschränkungen**
+ Im kostenlosen Tarif gibt es ein Docker-Pull-Limit von 100 Pulls pro 6 Stunden pro IP-Adresse.

## Architektur
<a name="deploy-containers-by-using-elastic-beanstalk-architecture"></a>

**Zieltechnologie-Stack**
+ Amazon Elastic Compute Cloud (Amazon EC2) -Instanzen
+ Sicherheitsgruppe
+ Application Load Balancer
+ Auto Scaling-Gruppe

**Zielarchitektur**

![\[Architektur für die Bereitstellung von Containern mit Elastic Beanstalk.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/dfabcdc2-747f-40e2-a603-08ea31ba71d3/images/1d17ff09-1aea-4c72-adb5-eaf741601428.png)


**Automatisierung und Skalierung**

AWS Elastic Beanstalk kann automatisch auf der Grundlage der Anzahl der gestellten Anfragen skalieren. Zu den für eine Umgebung erstellten AWS-Ressourcen gehören ein Application Load Balancer, eine Auto Scaling Scaling-Gruppe und eine oder mehrere EC2 Amazon-Instances. 

Der Load Balancer befindet sich vor den EC2 Amazon-Instances, die Teil der Auto Scaling Scaling-Gruppe sind. Amazon EC2 Auto Scaling startet automatisch zusätzliche EC2 Amazon-Instances, um der zunehmenden Belastung Ihrer Anwendung Rechnung zu tragen. Wenn die Auslastung Ihrer Anwendung abnimmt, stoppt Amazon EC2 Auto Scaling Instances, hält aber mindestens eine Instance am Laufen.

**Automatische Skalierung löst aus**

Die Auto Scaling Scaling-Gruppe in Ihrer Elastic Beanstalk Beanstalk-Umgebung verwendet zwei CloudWatch Amazon-Alarme, um Skalierungsvorgänge einzuleiten. Mit den Standardauslösern wird die Skalierung durchgeführt, wenn der durchschnittliche ausgehende Netzwerkdatenverkehr von der jeweiligen Instance innerhalb von 5 Minuten 6 MB über- oder 2 MB unterschreitet. Um Amazon EC2 Auto Scaling effektiv zu nutzen, konfigurieren Sie Trigger, die für Ihre Anwendung, Ihren Instance-Typ und Ihre Serviceanforderungen geeignet sind. Sie können die Skalierung anhand unterschiedlicher Statistiken wie Latenz, Festplatten-I/O-Vorgänge, CPU-Auslastung und Anforderungsanzahl ausführen. Weitere Informationen finden Sie unter [Auto Scaling-Trigger](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environments-cfg-autoscaling-triggers.html).

## Tools
<a name="deploy-containers-by-using-elastic-beanstalk-tools"></a>

**AWS-Services**
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) ist ein Open-Source-Tool, mit dem Sie über Befehle in Ihrer Befehlszeilen-Shell mit AWS-Services interagieren können.
+ [AWS EB Command Line Interface (EB CLI)](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install.html) ist ein Befehlszeilenclient, mit dem Sie Elastic Beanstalk Beanstalk-Umgebungen erstellen, konfigurieren und verwalten können.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) verteilt den eingehenden Anwendungs- oder Netzwerkverkehr auf mehrere Ziele. Sie können beispielsweise den Traffic auf Amazon Elastic Compute Cloud (Amazon EC2) -Instances, Container und IP-Adressen in einer oder mehreren Availability Zones verteilen.

**Andere Dienste**
+ [Docker](https://www.docker.com/) packt Software in standardisierte Einheiten, sogenannte Container, die Bibliotheken, Systemtools, Code und Laufzeit enthalten.

**Code**

Der Code für dieses Muster ist im GitHub [Cluster Sample Application](https://github.com/aws-samples/cluster-sample-app) Repository verfügbar.

## Epen
<a name="deploy-containers-by-using-elastic-beanstalk-epics"></a>

### Mit einem Dockerfile erstellen
<a name="build-with-a-dockerfile"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Klonen Sie das Remote-Repository. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | App-Entwickler, AWS-Administrator, AWS DevOps | 
| Initialisieren Sie das Elastic Beanstalk Docker-Projekt. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | App-Entwickler, AWS-Administrator, AWS DevOps | 
| Testen Sie das Projekt lokal. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | App-Entwickler, AWS-Administrator, AWS DevOps | 

### Mit EB CLI bereitstellen
<a name="deploy-using-eb-cli"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Führen Sie den Bereitstellungsbefehl aus | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | App-Entwickler, AWS-Administrator, AWS DevOps | 
| Greifen Sie auf die bereitgestellte Version zu. | Nachdem der Bereitstellungsbefehl abgeschlossen ist, greifen Sie mit dem `eb open` Befehl auf das Projekt zu. | App-Entwickler, AWS-Administrator, AWS DevOps | 

### Mit der Konsole bereitstellen
<a name="deploy-using-the-console"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Stellen Sie die Anwendung mithilfe des Browsers bereit. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | App-Entwickler, AWS-Administrator, AWS DevOps | 
| Greifen Sie auf die bereitgestellte Version zu. | Greifen Sie nach der Bereitstellung auf die bereitgestellte Anwendung zu und wählen Sie die angegebene URL aus. | App-Entwickler, AWS-Administrator, AWS DevOps | 

## Zugehörige Ressourcen
<a name="deploy-containers-by-using-elastic-beanstalk-resources"></a>
+ [Webserver-Umgebungen](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts-webserver.html)
+ [Installieren Sie die EB CLI auf macOS](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-osx.html)
+ [Manuelles Installieren der EB-CLI](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-advanced.html)

## Zusätzliche Informationen
<a name="deploy-containers-by-using-elastic-beanstalk-additional"></a>

**Vorteile der Verwendung von Elastic Beanstalk**
+ Automatische Bereitstellung der Infrastruktur
+ Automatische Verwaltung der zugrunde liegenden Plattform
+ Automatisches Patchen und Updates zur Unterstützung der Anwendung
+ Automatische Skalierung der Anwendung
+ Möglichkeit, die Anzahl der Knoten anzupassen
+ Möglichkeit, bei Bedarf auf die Infrastrukturkomponenten zuzugreifen
+ Einfache Bereitstellung im Vergleich zu anderen Container-Bereitstellungslösungen

# Generieren Sie eine statische ausgehende IP-Adresse mithilfe einer Lambda-Funktion, Amazon VPC und einer serverlosen Architektur
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture"></a>

*Thomas Scott, Amazon Web Services*

## Zusammenfassung
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-summary"></a>

Dieses Muster beschreibt, wie eine statische ausgehende IP-Adresse in der Amazon Web Services (AWS) -Cloud mithilfe einer serverlosen Architektur generiert wird. Ihr Unternehmen kann von diesem Ansatz profitieren, wenn es Dateien mithilfe des Secure File Transfer Protocol (SFTP) an eine separate Geschäftseinheit senden möchte. Das bedeutet, dass die Geschäftseinheit Zugriff auf eine IP-Adresse haben muss, über die Dateien ihre Firewall passieren können. 

Der Ansatz des Musters hilft Ihnen bei der Erstellung einer AWS Lambda Lambda-Funktion, die eine [Elastic IP-Adresse](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) als ausgehende IP-Adresse verwendet. Wenn Sie die Schritte in diesem Muster befolgen, können Sie eine Lambda-Funktion und eine Virtual Private Cloud (VPC) erstellen, die ausgehenden Datenverkehr über ein Internet-Gateway mit einer statischen IP-Adresse weiterleitet. Um die statische IP-Adresse zu verwenden, fügen Sie die Lambda-Funktion der VPC und ihren Subnetzen hinzu. 

## Voraussetzungen und Einschränkungen
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-prereqs"></a>

**Voraussetzungen**
+ Ein aktives AWS-Konto. 
+ AWS Identity and Access Management (IAM) -Berechtigungen zum Erstellen und Bereitstellen einer Lambda-Funktion sowie zum Erstellen einer VPC und ihrer Subnetze. Weitere Informationen dazu finden Sie unter [Ausführungsrolle und Benutzerberechtigungen](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-permissions) in der AWS Lambda Lambda-Dokumentation.
+ Wenn Sie den Ansatz dieses Musters mithilfe von Infrastructure as Code (IaC) implementieren möchten, benötigen Sie eine integrierte Entwicklungsumgebung (IDE) wie AWS Cloud9. Weitere Informationen dazu finden Sie unter [Was ist AWS Cloud9](https://docs.aws.amazon.com/cloud9/latest/user-guide/welcome.html)? in der AWS Cloud9 Cloud9-Dokumentation.

## Architektur
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-architecture"></a>

Das folgende Diagramm zeigt die serverlose Architektur für dieses Muster.

![\[AWS Cloud VPC architecture with two availability zones, public and private subnets, NAT gateways, and a Lambda function.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/eb1d0b05-df33-45ae-b27e-36090055b300/images/c15cc6da-ce4e-4ea0-9feb-de1c845d3ce8.png)


Das Diagramm zeigt den folgenden Workflow:

1. Ausgehender Verkehr geht `NAT gateway 1` rein. `Public subnet 1`

1. Ausgehender Verkehr geht `NAT gateway 2` rein. `Public subnet 2`

1. Die Lambda-Funktion kann in `Private subnet 1` oder `Private subnet 2` ausgeführt werden.

1. `Private subnet 1`und leitet `Private subnet 2` den Verkehr zu den NAT-Gateways in den öffentlichen Subnetzen weiter.

1. Die NAT-Gateways senden ausgehenden Datenverkehr von den öffentlichen Subnetzen an das Internet-Gateway.

1. Ausgehende Daten werden vom Internet-Gateway zum externen Server übertragen.



**Technologie-Stack**
+ Lambda
+ Amazon Virtual Private Cloud (Amazon VPC)

 

**Automatisierung und Skalierung**

Sie können Hochverfügbarkeit (HA) sicherstellen, indem Sie zwei öffentliche und zwei private Subnetze in unterschiedlichen Availability Zones verwenden. Selbst wenn eine Availability Zone nicht mehr verfügbar ist, funktioniert die Pattern-Lösung weiterhin.

## Tools
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-tools"></a>
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) — AWS Lambda ist ein Rechenservice, der die Ausführung von Code unterstützt, ohne Server bereitzustellen oder zu verwalten. Lambda führt Ihren Code nur bei Bedarf aus und skaliert automatisch – von einigen Anforderungen pro Tag bis zu Tausenden pro Sekunde. Sie bezahlen nur für die Datenverarbeitungszeit, die Sie wirklich nutzen und es werden keine Gebühren in Rechnung gestellt, wenn Ihr Code nicht ausgeführt wird.
+ [Amazon VPC](https://docs.aws.amazon.com/vpc/) — Amazon Virtual Private Cloud (Amazon VPC) stellt einen logisch isolierten Bereich der AWS-Cloud bereit, in dem Sie AWS-Ressourcen in einem von Ihnen definierten virtuellen Netzwerk starten können. Dieses virtuelle Netzwerk entspricht weitgehend einem herkömmlichen Netzwerk, wie Sie es in Ihrem Rechenzentrum betreiben, kann jedoch die Vorzüge der skalierbaren Infrastruktur von AWS nutzen.

## Epen
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-epics"></a>

### Erstellen einer neuen VPC
<a name="create-a-new-vpc"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen einer neuen VPC. | Melden Sie sich bei der AWS-Managementkonsole an, öffnen Sie die Amazon VPC-Konsole und erstellen Sie dann eine VPC mit `Lambda VPC` dem Namen `10.0.0.0/25` ** IPv4 **CIDR-Bereich.Weitere Informationen zum Erstellen einer VPC finden Sie unter [Erste Schritte mit Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-getting-started.html#getting-started-create-vpc) in der Amazon VPC-Dokumentation.  | AWS-Administrator | 

### Erstellen Sie zwei öffentliche Subnetze
<a name="create-two-public-subnets"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie das erste öffentliche Subnetz. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | AWS-Administrator | 
| Erstellen Sie das zweite öffentliche Subnetz. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | AWS-Administrator | 

### Erstellen Sie zwei private Subnetze
<a name="create-two-private-subnets"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie das erste private Subnetz. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | AWS-Administrator | 
| Erstellen Sie das zweite private Subnetz. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | AWS-Administrator | 

### Erstellen Sie zwei Elastic IP-Adressen für Ihre NAT-Gateways
<a name="create-two-elastic-ip-addresses-for-your-nat-gateways"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
|  Erstellen Sie die erste Elastic IP-Adresse. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html)Diese Elastic IP-Adresse wird für Ihr erstes NAT-Gateway verwendet.  | AWS-Administrator | 
| Erstellen Sie die zweite Elastic IP-Adresse. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html)Diese Elastic IP-Adresse wird für Ihr zweites NAT-Gateway verwendet. | AWS-Administrator | 

### Ein Internet-Gateway erstellen
<a name="create-an-internet-gateway"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen eines Internet-Gateways | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | AWS-Administrator | 
| Verbinden Sie das Internet-Gateway mit der VPC. | Wählen Sie zuerst das Internet-Gateway aus, das Sie eben erstellt haben, und anschließend **Actions, Attach to VPC (Aktionen, An VPC anfügen)**. | AWS-Administrator | 

### Erstellen Sie zwei NAT-Gateways
<a name="create-two-nat-gateways"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie das erste NAT-Gateway. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | AWS-Administrator | 
| Erstellen Sie das zweite NAT-Gateway. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | AWS-Administrator | 

### Erstellen Sie Routentabellen für Ihre öffentlichen und privaten Subnetze
<a name="create-route-tables-for-your-public-and-private-subnets"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie die Routing-Tabelle für das öffentliche Subnetz. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | AWS-Administrator | 
| Erstellen Sie die Routing-Tabelle für das Public-Two-Subnetz. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | AWS-Administrator | 
| Erstellen Sie die Routing-Tabelle für das private One-Subnetz. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | AWS-Administrator | 
| Erstellen Sie die Routing-Tabelle für das Private-Two-Subnetz. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | AWS-Administrator | 

### Erstellen Sie die Lambda-Funktion, fügen Sie sie der VPC hinzu und testen Sie die Lösung
<a name="create-the-lambda-function-add-it-to-the-vpc-and-test-the-solution"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine neue Lambda-Funktion. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | AWS-Administrator | 
| Fügen Sie die Lambda-Funktion zu Ihrer VPC hinzu. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | AWS-Administrator | 
| Schreiben Sie Code, um einen externen Service aufzurufen. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | AWS-Administrator | 

## Zugehörige Ressourcen
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-resources"></a>
+ [Konfigurieren einer Lambda-Funktion für den Zugriff auf Ressourcen in einer VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html)

# Automatische Identifizierung doppelter Container-Images bei der Migration zu einem Amazon ECR-Repository
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository"></a>

*Rishabh Yadav und Rishi Singla, Amazon Web Services*

## Zusammenfassung
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-summary"></a>

Das Muster bietet eine automatisierte Lösung zur Identifizierung, ob es sich bei Bildern, die in verschiedenen Container-Repositorys gespeichert sind, um Duplikate handelt. Diese Prüfung ist nützlich, wenn Sie planen, Bilder aus anderen Container-Repositorys zu Amazon Elastic Container Registry (Amazon ECR) zu migrieren.

Für grundlegende Informationen beschreibt das Muster auch die Komponenten eines Container-Images, wie z. B. den Image-Digest, das Manifest und die Tags. Wenn Sie eine Migration zu Amazon ECR planen, entscheiden Sie sich möglicherweise dafür, Ihre Container-Images zwischen den Container-Registern zu synchronisieren, indem Sie die Digests der Images vergleichen. Bevor Sie Ihre Container-Images migrieren, müssen Sie überprüfen, ob diese Images bereits im Amazon ECR-Repository vorhanden sind, um Duplikate zu vermeiden. Es kann jedoch schwierig sein, Duplikate durch den Vergleich von Image-Digests zu erkennen, und dies kann zu Problemen in der ersten Migrationsphase führen.  Dieses Muster vergleicht die Digests zweier ähnlicher Bilder, die in unterschiedlichen Container-Registern gespeichert sind, und erklärt, warum die Digests variieren, damit Sie Bilder genau vergleichen können.

## Voraussetzungen und Einschränkungen
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-prereqs"></a>
+ Ein aktiver AWS-Konto
+ Zugriff auf das [öffentliche Amazon ECR-Register](https://gallery.ecr.aws/)
+ Vertrautheit mit den folgenden Themen: AWS-Services
  + [AWS CodeCommit](https://aws.amazon.com/codecommit/)
  + [AWS CodePipeline](https://aws.amazon.com/codepipeline/)
  + [AWS CodeBuild](https://aws.amazon.com/codebuild/)
  + [AWS Identity and Access Management (ICH BIN)](https://aws.amazon.com/iam/)
  + [Amazon Simple Storage Service (Amazon-S3)](https://aws.amazon.com/s3/)
+ Konfigurierte CodeCommit Anmeldeinformationen (siehe [Anweisungen](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html))

## Architektur
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-architecture"></a>

**Container-Image-Komponenten**

Das folgende Diagramm zeigt einige der Komponenten eines Container-Images. Diese Komponenten werden im Anschluss an das Diagramm beschrieben.

![\[Manifest, Konfiguration, Dateisystemschichten und Digests.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/7db5020c-6f5b-4e91-b91a-5b8ae844be1b/images/71b99c67-a934-4f94-8af8-2a8431fb91f5.png)


**Begriffe und Definitionen**

Die folgenden Begriffe sind in der [Image Specification der Open Container Initiative (OCI)](https://github.com/opencontainers/image-spec/blob/main/spec.md) definiert.
+ **Registry:** Ein Dienst für die Speicherung und Verwaltung von Bildern.
+ **Client:** Ein Tool, das mit Registern kommuniziert und mit lokalen Bildern arbeitet.
+ **Push:** Der Prozess zum Hochladen von Bildern in eine Registry.
+ **Pull:** Der Prozess zum Herunterladen von Bildern aus einer Registry.
+ **Blob:** Die binäre Form von Inhalten, die in einer Registry gespeichert werden und mit einem Digest adressiert werden können.
+ **Index:** Ein Konstrukt, das mehrere Image-Manifeste für verschiedene Computerplattformen (wie x86-64 oder ARM 64-Bit) oder Medientypen identifiziert. Weitere Informationen finden Sie in der [OCI Image Index Specification](https://github.com/opencontainers/image-spec/blob/main/image-index.md).
+ **Manifest:** Ein JSON-Dokument, das ein Bild oder Artefakt definiert, das über den Endpunkt des Manifests hochgeladen wird. Ein Manifest kann mithilfe von Deskriptoren auf andere Blobs in einem Repository verweisen. Weitere Informationen finden Sie in der [OCI](https://github.com/opencontainers/image-spec/blob/main/manifest.md) Image Manifest Specification.
+ **Dateisystemebene:** Systembibliotheken und andere Abhängigkeiten für ein Bild.
+ **Konfiguration:** Ein Blob, der Artefakt-Metadaten enthält und auf den im Manifest verwiesen wird. Weitere Informationen finden Sie in der [OCI-Image-Konfigurationsspezifikation](https://github.com/opencontainers/image-spec/blob/main/config.md).
+ **Objekt oder Artefakt:** Ein konzeptionelles Inhaltselement, das als Blob gespeichert und einem zugehörigen Manifest mit einer Konfiguration zugeordnet ist.
+ **Zusammenfassung:** Eine eindeutige Kennung, die aus einem kryptografischen Hash des Inhalts eines Manifests erstellt wird. Der Image-Digest hilft dabei, ein unveränderliches Container-Image eindeutig zu identifizieren. Wenn Sie ein Image mithilfe des zugehörigen Digest abrufen, laden Sie jedes Mal dasselbe Image auf ein beliebiges Betriebssystem oder eine beliebige Architektur herunter. Weitere Informationen finden Sie in der [OCI-Image-Spezifikation](https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests).
+ **Tag:** Ein für Menschen lesbarer Manifestbezeichner. Im Vergleich zu Image-Digests, die unveränderlich sind, sind Tags dynamisch. Ein Tag, der auf ein Bild verweist, kann sich ändern und von einem Bild zum anderen verschoben werden, obwohl der zugrunde liegende Bildauszug derselbe bleibt.

**Zielarchitektur**

Das folgende Diagramm zeigt die allgemeine Architektur der Lösung, die durch dieses Muster bereitgestellt wird, um doppelte Container-Images zu identifizieren, indem Bilder verglichen werden, die in Amazon ECR und privaten Repositorys gespeichert sind.

![\[Automatische Erkennung von Duplikaten mit und. CodePipeline CodeBuild\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/7db5020c-6f5b-4e91-b91a-5b8ae844be1b/images/5ee62bc8-db8d-48a3-9e79-f3392b6e9bf7.png)


## Tools
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-tools"></a>

**AWS-Services**
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)hilft Ihnen dabei, AWS Ressourcen einzurichten, sie schnell und konsistent bereitzustellen und sie während ihres gesamten Lebenszyklus regionsübergreifend AWS-Konten zu verwalten.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)ist ein vollständig verwalteter Build-Service, der Ihnen hilft, Quellcode zu kompilieren, Komponententests durchzuführen und Artefakte zu erstellen, die sofort einsatzbereit sind.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)ist ein Versionskontrolldienst, mit dem Sie Git-Repositorys privat speichern und verwalten können, ohne Ihr eigenes Quellcodeverwaltungssystem verwalten zu müssen.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)hilft Ihnen dabei, die verschiedenen Phasen einer Softwareversion schnell zu modellieren und zu konfigurieren und die Schritte zu automatisieren, die für die kontinuierliche Veröffentlichung von Softwareänderungen erforderlich sind.
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) ist ein verwalteter Container-Image-Registry-Service, der sicher, skalierbar und zuverlässig ist.

**Kode**

Der Code für dieses Muster ist im GitHub Repository verfügbar.**** [Automatisierte Lösung zur Identifizierung doppelter Container-Images zwischen Repositorys](https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories/).

## Best Practices
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-best-practices"></a>
+ [CloudFormation bewährte Verfahren](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html)
+ [AWS CodePipeline bewährte Verfahren](https://docs.aws.amazon.com/codepipeline/latest/userguide/best-practices.html)

## Epen
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-epics"></a>

### Container-Images aus öffentlichen und privaten Amazon ECR-Repositorys abrufen
<a name="pull-container-images-from-ecr-public-and-private-repositories"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Rufen Sie ein Bild aus dem öffentlichen Amazon ECR-Repository ab. | Führen Sie im Terminal den folgenden Befehl aus, um das Bild `amazonlinux` aus dem öffentlichen Amazon ECR-Repository abzurufen.<pre>$~ % docker pull public.ecr.aws/amazonlinux/amazonlinux:2018.03 </pre>Wenn das Bild auf Ihren lokalen Computer abgerufen wurde, sehen Sie den folgenden Pull-Digest, der den Bildindex darstellt.<pre>2018.03: Pulling from amazonlinux/amazonlinux<br />4ddc0f8d367f: Pull complete <br /><br />Digest: sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5<br /><br />Status: Downloaded newer image for public.ecr.aws/amazonlinux/amazonlinux:2018.03<br />public.ecr.aws/amazonlinux/amazonlinux:2018.03</pre> | App-Entwickler, AWS DevOps, AWS-Administrator | 
| Pushen Sie das Bild in ein privates Amazon ECR-Repository. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | AWS-Administrator, AWS DevOps, App-Entwickler | 
| Rufen Sie dasselbe Bild aus dem privaten Amazon ECR-Repository ab. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | App-Entwickler, AWS DevOps, AWS-Administrator | 

### Vergleichen Sie die Image-Manifeste
<a name="compare-the-image-manifests"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Suchen Sie das Manifest des Bilds, das im öffentlichen Amazon ECR-Repository gespeichert ist. | Führen Sie im Terminal den folgenden Befehl aus, um das Manifest des Images `public.ecr.aws/amazonlinux/amazonlinux:2018.03` aus dem öffentlichen Amazon ECR-Repository abzurufen.<pre>$~ % docker manifest inspect public.ecr.aws/amazonlinux/amazonlinux:2018.03<br />{<br />   "schemaVersion": 2,<br />   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",<br />   "manifests": [<br />      {<br />         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",<br />         "size": 529,<br />         "digest": "sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",<br />         "platform": {<br />            "architecture": "amd64",<br />            "os": "linux"<br />         }<br />      }<br />   ]<br />}</pre> | AWS-Administrator, AWS DevOps, App-Entwickler | 
| Suchen Sie das Manifest des Images, das im privaten Amazon ECR-Repository gespeichert ist. | Führen Sie im Terminal den folgenden Befehl aus, um das Manifest des Images `<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest` aus dem privaten Amazon ECR-Repository abzurufen.<pre>$~ % docker manifest inspect <account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest                                          <br />{<br />	"schemaVersion": 2,<br />	"mediaType": "application/vnd.docker.distribution.manifest.v2+json",<br />	"config": {<br />		"mediaType": "application/vnd.docker.container.image.v1+json",<br />		"size": 1477,<br />		"digest": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68"<br />	},<br />	"layers": [<br />		{<br />			"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",<br />			"size": 62267075,<br />			"digest": "sha256:4ddc0f8d367f424871a060e2067749f32bd36a91085e714dcb159952f2d71453"<br />		}<br />	]<br />}</pre> | AWS DevOps, AWS-Systemadministrator, App-Entwickler | 
| Vergleichen Sie den von Docker abgerufenen Digest mit dem Manifest-Digest für das Image im privaten Amazon ECR-Repository. | Eine weitere Frage ist, warum sich der vom Befehl **docker pull** bereitgestellte Digest vom Digest des Manifests für das Image unterscheidet. `<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest`Der für **Docker Pull** verwendete Digest stellt den Digest des Image-Manifests dar, das in einer Registrierung gespeichert ist. Dieser Digest wird als Stamm einer Hash-Kette betrachtet, da das Manifest den Hash des Inhalts enthält, der heruntergeladen und in Docker importiert wird.Die in Docker verwendete Image-ID finden Sie in diesem Manifest als. `config.digest` Dies stellt die Image-Konfiguration dar, die Docker verwendet. Man könnte also sagen, dass das Manifest der Umschlag ist und das Bild der Inhalt des Umschlags. Der Manifest-Digest unterscheidet sich immer von der Bild-ID. Ein bestimmtes Manifest sollte jedoch immer dieselbe Image-ID erzeugen. Da es sich bei dem Manifest-Digest um eine Hash-Kette handelt, können wir nicht garantieren, dass sie für eine bestimmte Image-ID immer dieselbe ist. In den meisten Fällen erzeugt es denselben Digest, obwohl Docker dies nicht garantieren kann. Der mögliche Unterschied im Manifest-Digest ist darauf zurückzuführen, dass Docker die mit gzip komprimierten Blobs nicht lokal speichert. Daher kann das Exportieren von Ebenen zu einem anderen Digest führen, obwohl der unkomprimierte Inhalt derselbe bleibt. Die Bild-ID überprüft, ob der unkomprimierte Inhalt identisch ist. Das heißt, die Bild-ID ist jetzt eine inhaltsadressierbare Kennung (). `chainID`Um diese Informationen zu bestätigen, können Sie die Ausgabe des Befehls **docker inspect** in den öffentlichen und privaten Repositorys von Amazon ECR vergleichen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)Die Ergebnisse bestätigen, dass beide Bilder denselben Bild-ID-Digest und Ebenen-Digest haben.ID: `f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68`Schichten: `d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2`Darüber hinaus basieren die Digests auf den Bytes des Objekts, das lokal verwaltet wird (die lokale Datei ist ein Tar der Container-Image-Ebene), oder des Blobs, der an den Registrierungsserver übertragen wird. Wenn Sie das Blob jedoch in eine Registrierung übertragen, wird das Tar komprimiert und der Digest wird in der komprimierten TAR-Datei berechnet. Daher ist der Unterschied im **Docker Pull** Digest-Wert auf die Komprimierung zurückzuführen, die auf Registrierungsebene (Amazon ECR privat oder öffentlich) angewendet wird.Diese Erklärung bezieht sich speziell auf die Verwendung eines Docker-Clients. Sie werden dieses Verhalten bei anderen Clients wie **nerdctl** oder **Finch** nicht feststellen, da sie das Bild bei Push- und Pull-Vorgängen nicht automatisch komprimieren. | AWS DevOps, AWS-Systemadministrator, App-Entwickler | 

### Identifizieren Sie automatisch doppelte Bilder zwischen öffentlichen und privaten Amazon ECR-Repositorys
<a name="automatically-identify-duplicate-images-between-ecr-public-and-private-repositories"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Klonen Sie das Repository | Klonen Sie das Github-Repository für dieses Muster in einen lokalen Ordner:<pre>$git clone https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories</pre> | AWS-Administrator, AWS DevOps | 
| Richten Sie eine CI/CD Pipeline ein. | Das GitHub Repository enthält eine `.yaml` Datei, die einen CloudFormation Stack erstellt, in dem eine Pipeline eingerichtet werden kann AWS CodePipeline.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)Die Pipeline wird in zwei Schritten (CodeCommit und CodeBuild, wie im Architekturdiagramm dargestellt) eingerichtet, um Bilder im privaten Repository zu identifizieren, die auch im öffentlichen Repository vorhanden sind. Die Pipeline ist mit den folgenden Ressourcen konfiguriert:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | AWS-Administrator, AWS DevOps | 
| Füllen Sie das CodeCommit Repository aus. | Gehen Sie wie folgt vor, um das CodeCommit Repository zu füllen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | AWS-Administrator, AWS DevOps | 
| Bereinigen Sie. | Um future Gebühren zu vermeiden, löschen Sie die Ressourcen, indem Sie die folgenden Schritte ausführen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | AWS-Administrator | 

## Fehlerbehebung
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| Wenn Sie versuchen, ein CodeCommit Repository über das Terminal oder die Befehlszeile zu pushen, abzurufen oder auf andere Weise mit ihm zu interagieren, werden Sie aufgefordert, einen Benutzernamen und ein Passwort einzugeben, und Sie müssen die Git-Anmeldeinformationen für Ihren IAM-Benutzer angeben. | Die häufigsten Ursachen für diesen Fehler sind die folgenden:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)Je nach Ihrem Betriebssystem und der lokalen Umgebung müssen Sie möglicherweise einen Anmeldeinformationsmanager installieren, den in Ihr Betriebssystem integrierten Anmeldeinformationsmanager konfigurieren oder Ihre lokale Umgebung so anpassen, dass Anmeldeinformationen gespeichert werden. Wenn auf Ihrem Computer beispielsweise macOS ausgeführt wird, können Sie das Keychain Access-Hilfsprogramm verwenden, um Ihre Anmeldeinformationen zu speichern. Wenn Sie einen Windows-Computer nutzen, können Sie das Git-Dienstprogramm zur Verwaltung von Anmeldeinformationen (Git Credential Manager) verwenden, das zusammen mit Git für Windows installiert wird. Weitere Informationen finden Sie in der CodeCommit Dokumentation unter [Einrichtung für HTTPS-Benutzer mit Git-Anmeldeinformationen](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html) und unter [Credential Storage](https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage) in der Git-Dokumentation. | 
| Wenn Sie ein Bild in das Amazon ECR-Repository übertragen, treten Fehler vom Typ HTTP 403 oder „no basic auth credentials“ auf. | **Diese Fehlermeldungen können beim Befehl **docker push oder docker** **pull** auftreten, auch wenn Sie sich erfolgreich mit dem Befehl aws ecr bei Docker authentifiziert haben. get-login-password** Bekannte Ursachen sind:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | 

## Zugehörige Ressourcen
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-resources"></a>
+ [Automatisierte Lösung zur Identifizierung doppelter Container-Images zwischen Repositorys](https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories/) (GitHub Repository)
+ [Öffentliche Galerie Amazon ECR](https://gallery.ecr.aws/)
+ [Private Bilder in Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/images.html) (Amazon ECR-Dokumentation)
+ [AWS::CodePipeline::Pipeline Ressource (Dokumentation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-pipeline.html))CloudFormation 
+ [Spezifikation des OCI-Bildformats](https://github.com/opencontainers/image-spec/blob/main/spec.md)

## Zusätzliche Informationen
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-additional"></a>

**Ausgabe der Docker-Inspektion für Bilder im öffentlichen Amazon ECR-Repository**

```
[
    {
        "Id": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68",
        "RepoTags": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest",
            "public.ecr.aws/amazonlinux/amazonlinux:2018.03"
        ],
        "RepoDigests": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository@sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",
            "public.ecr.aws/amazonlinux/amazonlinux@sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2023-02-23T06:20:11.575053226Z",
        "Container": "ec7f2fc7d2b6a382384061247ef603e7d647d65f5cd4fa397a3ccbba9278367c",
        "ContainerConfig": {
            "Hostname": "ec7f2fc7d2b6",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"/bin/bash\"]"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "20.10.17",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 167436755,
        "VirtualSize": 167436755,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/merged",
                "UpperDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/diff",
                "WorkDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2"
            ]
        },
        "Metadata": {
            "LastTagTime": "2023-03-02T10:28:47.142155987Z"
        }
    }
]
```

**Ausgabe der Docker-Inspektion für Bilder im privaten Amazon ECR-Repository**

```
[
    {
        "Id": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68",
        "RepoTags": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest",
            "public.ecr.aws/amazonlinux/amazonlinux:2018.03"
        ],
        "RepoDigests": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository@sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",
            "public.ecr.aws/amazonlinux/amazonlinux@sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2023-02-23T06:20:11.575053226Z",
        "Container": "ec7f2fc7d2b6a382384061247ef603e7d647d65f5cd4fa397a3ccbba9278367c",
        "ContainerConfig": {
            "Hostname": "ec7f2fc7d2b6",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"/bin/bash\"]"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "20.10.17",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 167436755,
        "VirtualSize": 167436755,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/merged",
                "UpperDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/diff",
                "WorkDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2"
            ]
        },
        "Metadata": {
            "LastTagTime": "2023-03-02T10:28:47.142155987Z"
        }
    }
]
```

# Installieren Sie SSM Agent mithilfe von Kubernetes auf Amazon EKS-Worker-Knoten DaemonSet
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset"></a>

*Mahendra Revanasiddappa, Amazon Web Services*

## Zusammenfassung
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-summary"></a>

**Hinweis, September 2021: Mit** der neuesten für Amazon EKS optimierten Version wird der SSM-Agent automatisch AMIs installiert. Weitere Informationen finden Sie in den [Versionshinweisen](https://github.com/awslabs/amazon-eks-ami/releases/tag/v20210621) für Juni 2021 AMIs.

In Amazon Elastic Kubernetes Service (Amazon EKS) sind Worker-Knoten aufgrund von Sicherheitsrichtlinien nicht mit Secure Shell (SSH) -Schlüsselpaaren verknüpft. Dieses Muster zeigt, wie Sie den DaemonSet Kubernetes-Ressourcentyp verwenden können, um den AWS Systems Manager Agent (SSM Agent) auf allen Worker-Knoten zu installieren, anstatt ihn manuell zu installieren oder das Amazon Machine Image (AMI) für die Knoten zu ersetzen. DaemonSet verwendet einen Cron-Job auf dem Worker-Knoten, um die Installation des SSM-Agenten zu planen. Sie können dieses Muster auch verwenden, um andere Pakete auf Worker-Knoten zu installieren.

Wenn Sie Probleme im Cluster beheben, können Sie durch die Installation von SSM Agent on Demand ohne SSH-Schlüsselpaare eine SSH-Sitzung mit dem Worker-Knoten einrichten, Protokolle sammeln oder die Instanzkonfiguration überprüfen.

## Voraussetzungen und Einschränkungen
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-prereqs"></a>

**Voraussetzungen**
+ Ein vorhandener Amazon EKS-Cluster mit Amazon Elastic Compute Cloud (Amazon EC2) -Worker-Knoten.
+ Container-Instances sollten über die erforderlichen Berechtigungen für die Kommunikation mit dem SSM-Service verfügen. Die von AWS Identity and Access Management (IAM) verwaltete Rolle **Amazon SSMManaged InstanceCore** stellt die erforderlichen Berechtigungen bereit, damit der SSM-Agent auf EC2 Instances ausgeführt werden kann. Weitere Informationen finden Sie in der [Dokumentation zu AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html).

**Einschränkungen**
+ Dieses Muster gilt nicht für AWS Fargate, da es auf der Fargate-Plattform DaemonSets nicht unterstützt wird.
+ Dieses Muster gilt nur für Linux-basierte Worker-Knoten.
+ Die DaemonSet Pods werden im privilegierten Modus ausgeführt. Wenn der Amazon EKS-Cluster über einen Webhook verfügt, der Pods im privilegierten Modus blockiert, wird der SSM-Agent nicht installiert.

## Architektur
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-architecture"></a>

Das folgende Diagramm veranschaulicht die Architektur für dieses Muster.

![\[Verwenden von Kubernetes DaemonSet zur Installation des SSM-Agenten auf Amazon EKS-Worker-Knoten.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/016d53f3-45c1-4913-b542-67124e1462b8/images/3a6dfd00-e54b-44d5-843a-4c26ce9826c9.png)


## Tools
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-tools"></a>

**Tools**
+ [kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) ist ein Befehlszeilenprogramm, das für die Interaktion mit einem Amazon EKS-Cluster verwendet wird. Dieses Muster wird verwendet`kubectl`, um einen DaemonSet auf dem Amazon EKS-Cluster bereitzustellen, der den SSM-Agent auf allen Worker-Knoten installiert.
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) macht es Ihnen leicht, Kubernetes auf AWS auszuführen, ohne Ihre eigene Kubernetes-Steuerebene oder Knoten installieren, betreiben und warten zu müssen. Kubernetes ist ein Open-Source-System zur Automatisierung der Bereitstellung, Skalierung und Verwaltung von Anwendungen in Containern.
+ Mit [AWS Systems Manager Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html) können Sie Ihre EC2 Instances, lokalen Instances und virtuellen Maschinen (VMs) über eine interaktive, browserbasierte Shell mit einem Klick oder über die AWS-Befehlszeilenschnittstelle (AWS CLI) verwalten.

**Code**

Verwenden Sie den folgenden Code, um eine DaemonSet Konfigurationsdatei zu erstellen, mit der der SSM-Agent auf dem Amazon EKS-Cluster installiert wird. Folgen Sie den Anweisungen im Abschnitt [Epics](#install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-epics).

```
cat << EOF > ssm_daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    k8s-app: ssm-installer
  name: ssm-installer
  namespace: kube-system
spec:
  selector:
    matchLabels:
      k8s-app: ssm-installer
  template:
    metadata:
      labels:
        k8s-app: ssm-installer
    spec:
      containers:
      - name: sleeper
        image: busybox
        command: ['sh', '-c', 'echo I keep things running! && sleep 3600']
      initContainers:
      - image: amazonlinux
        imagePullPolicy: Always
        name: ssm
        command: ["/bin/bash"]
        args: ["-c","echo '* * * * * root yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm & rm -rf /etc/cron.d/ssmstart' > /etc/cron.d/ssmstart"]
        securityContext:
          allowPrivilegeEscalation: true
        volumeMounts:
        - mountPath: /etc/cron.d
          name: cronfile
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      volumes:
      - name: cronfile
        hostPath:
          path: /etc/cron.d
          type: Directory
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      terminationGracePeriodSeconds: 30
EOF
```

## Epen
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-epics"></a>

### Richten Sie kubectl ein
<a name="set-up-kubectl"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Installieren und konfigurieren Sie kubectl für den Zugriff auf den EKS-Cluster. | Falls es noch `kubectl` nicht installiert und für den Zugriff auf den Amazon EKS-Cluster konfiguriert ist, finden Sie weitere Informationen unter [Installation von kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) in der Amazon EKS-Dokumentation. | DevOps | 

### Stellen Sie das bereit DaemonSet
<a name="deploy-the-daemonset"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie die DaemonSet Konfigurationsdatei. | Verwenden Sie den Code im Abschnitt [Code](#install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-tools) weiter oben in diesem Muster, um eine DaemonSet Konfigurationsdatei namens zu erstellen`ssm_daemonset.yaml`, die im Amazon EKS-Cluster bereitgestellt wird. Der von gestartete Pod DaemonSet hat einen Hauptcontainer und einen `init` Container. Der Hauptcontainer hat einen `sleep` Befehl. Der `init` Container enthält einen `command` Abschnitt, der eine Cron-Job-Datei zur Installation des SSM-Agenten im Pfad erstellt. `/etc/cron.d/` Der Cron-Job wird nur einmal ausgeführt, und die von ihm erstellte Datei wird nach Abschluss des Jobs automatisch gelöscht. Wenn der Init-Container fertig ist, wartet der Hauptcontainer 60 Minuten, bevor er beendet wird. Nach 60 Minuten wird ein neuer Pod gestartet. Dieser Pod installiert den SSM-Agent, falls er fehlt, oder aktualisiert den SSM-Agenten auf die neueste Version.Bei Bedarf können Sie den `sleep` Befehl so ändern, dass der Pod einmal täglich neu gestartet oder häufiger ausgeführt wird.  | DevOps | 
| Stellen Sie den DaemonSet auf dem Amazon EKS-Cluster bereit. | Verwenden Sie den folgenden Befehl, um die DaemonSet Konfigurationsdatei, die Sie im vorherigen Schritt erstellt haben, auf dem Amazon EKS-Cluster bereitzustellen:<pre>kubectl apply -f ssm_daemonset.yaml </pre>Dieser Befehl erstellt einen DaemonSet , um die Pods auf Worker-Knoten auszuführen, um den SSM-Agent zu installieren. | DevOps | 

## Zugehörige Ressourcen
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-resources"></a>
+ [Installation von kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) (Amazon EKS-Dokumentation)
+ [Session Manager einrichten](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started.html) (AWS Systems Manager Manager-Dokumentation)

# Installieren Sie den SSM-Agent und den CloudWatch Agenten auf Amazon EKS-Worker-Knoten mit preBootstrapCommands
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands"></a>

*Akkamahadevi Hiremath, Amazon Web Services*

## Zusammenfassung
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-summary"></a>

Dieses Muster enthält Codebeispiele und Schritte zur Installation des AWS Systems Manager Agent (SSM Agent) und des Amazon-Agenten auf Amazon CloudWatch Elastic Kubernetes Service (Amazon EKS) -Worker-Knoten in der Amazon Web Services (AWS) -Cloud während der Amazon EKS-Clustererstellung. Sie können den SSM-Agent und CloudWatch den SSM-Agenten installieren, indem Sie die `preBootstrapCommands` Eigenschaft aus dem `eksctl` [Konfigurationsdateischema](https://eksctl.io/usage/schema/) (Weaveworks-Dokumentation) verwenden. Anschließend können Sie den SSM-Agent verwenden, um eine Verbindung zu Ihren Worker-Knoten herzustellen, ohne ein Amazon Elastic Compute Cloud (Amazon EC2) -Schlüsselpaar zu verwenden. Darüber hinaus können Sie den CloudWatch Agenten verwenden, um die Speicher- und Festplattenauslastung auf Ihren Amazon EKS-Worker-Knoten zu überwachen.

## Voraussetzungen und Einschränkungen
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-prereqs"></a>

**Voraussetzungen**
+ Ein aktives AWS-Konto
+ Das [Befehlszeilenprogramm eksctl](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html), installiert und konfiguriert auf macOS, Linux oder Windows
+ Das [kubectl-Befehlszeilenprogramm](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html), installiert und konfiguriert auf macOS, Linux oder Windows

**Einschränkungen**
+ Wir empfehlen, das Hinzufügen von Skripten mit langer Laufzeit zur `preBootstrapCommands`**** Eigenschaft zu vermeiden, da dies den Knoten daran hindert, dem Amazon EKS-Cluster während der Skalierungsaktivitäten beizutreten. Wir empfehlen Ihnen, stattdessen ein [benutzerdefiniertes Amazon Machine Image (AMI)](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.customenv.html) zu erstellen.
+ Dieses Muster gilt nur für Amazon EC2 Linux-Instances.

## Architektur
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-architecture"></a>

**Technologie-Stack**
+ Amazon CloudWatch
+ Amazon Elastic Kubernetes Service (Amazon EKS)
+ AWS Systems Manager Parameter Store

**Zielarchitektur**

Das folgende Diagramm zeigt ein Beispiel für einen Benutzer, der mithilfe des SSM-Agenten, der mit dem installiert wurde, eine Verbindung zu Amazon EKS-Worker-Knoten herstellt. `preBootstrapCommands`

![\[User connecting to Amazon EKS worker nodes via Systems Manager, with SSM Agent and CloudWatch agent on each node.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/b37a3cdb-204f-4014-8317-3600a793dac7/images/9a5760af-23bb-4616-97b0-b401a9d080cf.png)


Das Diagramm zeigt den folgenden Workflow:

1. Der Benutzer erstellt mithilfe der `eksctl` Konfigurationsdatei mit der `preBootstrapCommands` Eigenschaft, die den SSM-Agenten und CloudWatch den Agenten installiert, einen Amazon EKS-Cluster.

1. Alle neuen Instances, die dem Cluster aufgrund von Skalierungsaktivitäten später beitreten, werden mit dem vorinstallierten SSM-Agenten und -Agenten erstellt. CloudWatch 

1. Der Benutzer stellt EC2 mithilfe des SSM-Agenten eine Verbindung zu Amazon her und überwacht dann mithilfe des CloudWatch Agenten die Speicher- und Festplattenauslastung.

## Tools
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-tools"></a>
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) hilft Ihnen dabei, die Metriken Ihrer AWS-Ressourcen und der Anwendungen, die Sie auf AWS ausführen, in Echtzeit zu überwachen.
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) hilft Ihnen, Kubernetes auf AWS auszuführen, ohne Ihre eigene Kubernetes-Steuerebene oder Knoten installieren oder verwalten zu müssen.
+ [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) bietet sicheren, hierarchischen Speicher für die Verwaltung von Konfigurationsdaten und Geheimnissen.
+ [AWS Systems Manager Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html) unterstützt Sie bei der Verwaltung Ihrer EC2 Instances, lokalen Instances und virtuellen Maschinen über eine interaktive, browserbasierte Shell mit einem Klick oder über die AWS-Befehlszeilenschnittstelle (AWS CLI).
+ [eksctl](https://eksctl.io/usage/schema/) ist ein Befehlszeilenprogramm zum Erstellen und Verwalten von Kubernetes-Clustern auf Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) ist ein Befehlszeilenprogramm für die Kommunikation mit dem Cluster-API-Server.

## Epen
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-epics"></a>

### Amazon-EKS-Cluster erstellen
<a name="create-an-amazon-eks-cluster"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Speichern Sie die CloudWatch Agenten-Konfigurationsdatei. | Speichern Sie die CloudWatch Agentenkonfigurationsdatei im [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) in der AWS-Region, in der Sie Ihren Amazon EKS-Cluster erstellen möchten. [Erstellen Sie dazu einen Parameter](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html) im AWS Systems Manager Parameter Store und notieren Sie sich den Namen des Parameters (z. B.`AmazonCloudwatch-linux`).Weitere Informationen finden Sie im *Beispielcode der CloudWatch Agenten-Konfigurationsdatei* im Abschnitt [Zusätzliche Informationen](#install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-additional) dieses Musters. | DevOps Ingenieur | 
| Erstellen Sie die eksctl-Konfigurationsdatei und den Cluster.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands.html) | AWS DevOps | 

### Stellen Sie sicher, dass der SSM-Agent und der CloudWatch SSM-Agent funktionieren
<a name="verify-that-the-ssm-agent-and-cloudwatch-agent-work"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Testen Sie den SSM-Agenten. | Verwenden Sie SSH, um eine Verbindung zu Ihren Amazon EKS-Clusterknoten herzustellen, indem Sie [eine der Methoden verwenden, die in der AWS Systems Manager Manager-Dokumentation unter Sitzung starten](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#start-ec2-console%20%20or%20https:%2F%2Fdocs.aws.amazon.com%2Fsystems-manager%2Flatest%2Fuserguide%2Fsession-manager-working-with-sessions-start.html%23sessions-start-cli) beschrieben werden. | AWS DevOps | 
| Testen Sie den CloudWatch Agenten. | Verwenden Sie die CloudWatch Konsole, um den CloudWatch Agenten zu validieren:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands.html) | AWS DevOps | 

## Zugehörige Ressourcen
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-resources"></a>
+ [Installation und Ausführung des CloudWatch Agenten auf Ihren Servern](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html) ( CloudWatch Amazon-Dokumentation)
+ [Einen Systems Manager Manager-Parameter erstellen (Konsole)](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html) (AWS Systems Manager Manager-Dokumentation)
+ [Erstellen Sie die CloudWatch Agenten-Konfigurationsdatei](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file.html) ( CloudWatch Amazon-Dokumentation)
+ [Starten einer Sitzung (AWS CLI)](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#sessions-start-cli) (AWS Systems Manager Manager-Dokumentation)
+ [Starten einer Sitzung ( EC2 Amazon-Konsole)](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#start-ec2-console) (AWS Systems Manager Manager-Dokumentation)

## Zusätzliche Informationen
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-additional"></a>

**Beispiel für eine CloudWatch Agenten-Konfigurationsdatei**

Im folgenden Beispiel ist der CloudWatch Agent so konfiguriert, dass er die Festplatten- und Speicherauslastung auf Amazon Linux-Instances überwacht:

```
{
    "agent": {
        "metrics_collection_interval": 60,
        "run_as_user": "cwagent"
    },
    "metrics": {
        "append_dimensions": {
            "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
            "ImageId": "${aws:ImageId}",
            "InstanceId": "${aws:InstanceId}",
            "InstanceType": "${aws:InstanceType}"
        },
        "metrics_collected": {
            "disk": {
                "measurement": [
                    "used_percent"
                ],
                "metrics_collection_interval": 60,
                "resources": [
                    "*"
                ]
            },
            "mem": {
                "measurement": [
                    "mem_used_percent"
                ],
                "metrics_collection_interval": 60
            }
        }
    }
}
```

**Beispiel für eine eksctl-Konfigurationsdatei**

```
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: test
  region: us-east-2
  version: "1.24"
managedNodeGroups:
  - name: test
    minSize: 2
    maxSize: 4
    desiredCapacity: 2
    volumeSize: 20
    instanceType: t3.medium
    preBootstrapCommands:
    - sudo yum install amazon-ssm-agent -y
    - sudo systemctl enable amazon-ssm-agent
    - sudo systemctl start amazon-ssm-agent
    - sudo yum install amazon-cloudwatch-agent -y
    - sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c ssm:AmazonCloudwatch-linux
    iam:
      attachPolicyARNs:
        - arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy
        - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
        - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly
        - arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
        - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
```

**Zusätzliche Codedetails**
+ In der letzten Zeile der `preBootstrapCommands` Eigenschaft `AmazonCloudwatch-linux` steht der Name des Parameters, der im AWS System Manager Parameter Store erstellt wurde. Sie müssen `AmazonCloudwatch-linux` in Parameter Store in derselben AWS-Region angeben, in der Sie den Amazon EKS-Cluster erstellt haben. Sie können auch einen Dateipfad angeben, wir empfehlen jedoch, Systems Manager zu verwenden, um die Automatisierung und Wiederverwendbarkeit zu vereinfachen.
+ Wenn Sie `preBootstrapCommands` in der `eksctl` Konfigurationsdatei verwenden, werden in der AWS-Managementkonsole zwei Startvorlagen angezeigt. Die erste Startvorlage enthält die unter angegebenen Befehle`preBootstrapCommands`. Die zweite Vorlage enthält die in den Amazon EKS-Benutzerdaten angegebenen Befehle `preBootstrapCommands` und die standardmäßigen Amazon EKS-Benutzerdaten. Diese Daten sind erforderlich, damit die Knoten dem Cluster beitreten können. Die Auto Scaling Scaling-Gruppe der Knotengruppe verwendet diese Benutzerdaten, um neue Instances hochzufahren.
+ Wenn Sie das `iam` Attribut in der `eksctl` Konfigurationsdatei verwenden, müssen Sie die standardmäßigen Amazon EKS-Richtlinien mit allen zusätzlichen Richtlinien auflisten, die in Ihren angehängten AWS Identity and Access Management (IAM) -Richtlinien erforderlich sind. Im Codeausschnitt aus dem Schritt „*Eksctl-Konfigurationsdatei und Cluster erstellen*“ wurden zusätzliche Richtlinien hinzugefügt, um sicherzustellen, dass der CloudWatch Agent `CloudWatchAgentServerPolicy` und `AmazonSSMMangedInstanceCore` der SSM-Agent wie erwartet funktionieren. Die`AmazonEKSWorkerNodePolicy`,`AmazonEKS_CNI_Policy`, `AmazonEC2ContainerRegistryReadOnly` Richtlinien sind verbindliche Richtlinien, die erforderlich sind, damit der Amazon EKS-Cluster ordnungsgemäß funktioniert.

# Migrieren Sie NGINX Ingress Controller, wenn Sie den Amazon EKS Auto Mode aktivieren
<a name="migrate-nginx-ingress-controller-eks-auto-mode"></a>

*Olawale Olaleye und Shamanth Devagari, Amazon Web Services*

## Zusammenfassung
<a name="migrate-nginx-ingress-controller-eks-auto-mode-summary"></a>

[Der automatische EKS-Modus](https://docs.aws.amazon.com/eks/latest/userguide/automode.html) für Amazon Elastic Kubernetes Service (Amazon EKS) kann den Betriebsaufwand für die Ausführung Ihrer Workloads auf Kubernetes-Clustern reduzieren. In diesem Modus können Sie auch AWS die Infrastruktur in Ihrem Namen einrichten und verwalten. Wenn Sie den EKS-Automatikmodus auf einem vorhandenen Cluster aktivieren, müssen Sie die Migration der [NGINX Ingress](https://docs.nginx.com/nginx-ingress-controller/overview/about/) Controller-Konfigurationen sorgfältig planen. Dies liegt daran, dass die direkte Übertragung von Network Load Balancers nicht möglich ist.

Sie können eine blue/green Bereitstellungsstrategie verwenden, um eine NGINX Ingress Controller-Instance zu migrieren, wenn Sie den EKS-Automatikmodus in einem vorhandenen Amazon EKS-Cluster aktivieren.

## Voraussetzungen und Einschränkungen
<a name="migrate-nginx-ingress-controller-eks-auto-mode-prereqs"></a>

**Voraussetzungen**
+ Ein aktiver AWS-Konto
+ Ein [Amazon EKS-Cluster](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html), auf dem Kubernetes Version 1.29 oder höher ausgeführt wird
+ Amazon EKS-Add-Ons mit [Mindestversionen](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html#auto-addons-required)
+ Aktuelle Version von [kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html#kubectl-install-update)
+ Eine bestehende [NGINX](https://kubernetes.github.io/ingress-nginx/deploy/#aws) Ingress Controller-Instanz
+ (Optional) Eine [gehostete Zone](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-working-with.html) in Amazon Route 53 für DNS-basierte Verkehrsverlagerung

## Architektur
<a name="migrate-nginx-ingress-controller-eks-auto-mode-architecture"></a>

Eine *blaue/grüne Bereitstellung ist eine Bereitstellungsstrategie*, bei der Sie zwei separate, aber identische Umgebungen erstellen. Blue/green Bereitstellungen bieten Release-und Rollback-Funktionen nahezu ohne Ausfallzeiten. Die Grundidee besteht darin, den Datenverkehr zwischen zwei identischen Umgebungen zu verlagern, in denen unterschiedliche Versionen Ihrer Anwendung ausgeführt werden.

Die folgende Abbildung zeigt die Migration von Network Load Balancers von zwei verschiedenen NGINX Ingress Controller-Instanzen, wenn der EKS-Automatikmodus aktiviert wird. Sie verwenden eine blue/green Bereitstellung, um den Verkehr zwischen den beiden Network Load Balancers zu verlagern.

![\[Verwenden einer blue/green Bereitstellungsstrategie zur Migration von NGINX Ingress Controller-Instanzen.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/57e8c14f-cb50-4027-8ef6-ce8ea3f2db25/images/211a029a-90d8-4c92-8200-19e54062f936.png)


*Der ursprüngliche Namespace ist der blaue Namespace.* Hier werden der ursprüngliche NGINX Ingress Controller-Dienst und die ursprüngliche Instanz ausgeführt, bevor Sie den EKS Auto Mode aktivieren. Der ursprüngliche Dienst und die ursprüngliche Instanz stellen eine Verbindung zu einem Network Load Balancer her, dessen DNS-Name in Route 53 konfiguriert ist. Der [Load AWS Balancer Controller](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.11/) hat diesen Network Load Balancer in der Ziel-Virtual Private Cloud (VPC) bereitgestellt.

Das Diagramm zeigt den folgenden Workflow zum Einrichten einer Umgebung für eine Bereitstellung: blue/green 

1. *Installieren und konfigurieren Sie eine weitere NGINX Ingress Controller-Instanz in einem anderen Namespace, einem grünen Namespace.*

1. Konfigurieren Sie in Route 53 einen DNS-Namen für einen neuen Network Load Balancer.

## Tools
<a name="migrate-nginx-ingress-controller-eks-auto-mode-tools"></a>

**AWS-Services**
+ Mit [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) können Sie Kubernetes ausführen, AWS ohne dass Sie Ihre eigene Kubernetes-Steuerebene oder Knoten installieren oder verwalten müssen.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) verteilt den eingehenden Anwendungs- oder Netzwerkverkehr auf mehrere Ziele. Sie können beispielsweise den Traffic auf Amazon Elastic Compute Cloud (Amazon EC2) -Instances, Container und IP-Adressen in einer oder mehreren Availability Zones verteilen.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) ist ein hochverfügbarer und skalierbarer DNS-Web-Service.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) hilft Ihnen dabei, AWS Ressourcen in einem von Ihnen definierten virtuellen Netzwerk bereitzustellen. Dieses virtuelle Netzwerk entspricht einem herkömmlichen Netzwerk, wie Sie es in Ihrem Rechenzentrum betreiben würden, mit den Vorteilen der Verwendung der skalierbaren Infrastruktur von AWS.

**Andere Tools**
+ [Helm](https://helm.sh/) ist ein Open-Source-Paketmanager für Kubernetes, der Sie bei der Installation und Verwaltung von Anwendungen auf Ihrem Kubernetes-Cluster unterstützt.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) ist eine Befehlszeilenschnittstelle, mit der Sie Befehle für Kubernetes-Cluster ausführen können.
+ Der [NGINX Ingress Controller](https://docs.nginx.com/nginx-ingress-controller/overview/about/) verbindet Kubernetes-Apps und -Dienste mit Anforderungsbearbeitung, Authentifizierung, benutzerdefinierten Self-Service-Ressourcen und Debugging.

## Epen
<a name="migrate-nginx-ingress-controller-eks-auto-mode-epics"></a>

### Überprüfen Sie die bestehende Umgebung
<a name="review-the-existing-environment"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Vergewissern Sie sich, dass die ursprüngliche NGINX Ingress Controller-Instanz betriebsbereit ist. | Geben Sie den folgenden Befehl ein, um zu überprüfen, ob die Ressourcen im `ingress-nginx` Namespace betriebsbereit sind. Wenn Sie den NGINX Ingress Controller in einem anderen Namespace bereitgestellt haben, aktualisieren Sie den Namespace-Namen in diesem Befehl.<pre>kubectl get all -n ingress-nginx</pre>Vergewissern Sie sich in der Ausgabe, dass sich die NGINX Ingress Controller-Pods im laufenden Zustand befinden. Im Folgenden finden Sie ein Beispiel für eine Ausgabe:<pre>NAME                                           READY   STATUS      RESTARTS      AGE<br />pod/ingress-nginx-admission-create-xqn9d       0/1     Completed   0             88m<br />pod/ingress-nginx-admission-patch-lhk4j        0/1     Completed   1             88m<br />pod/ingress-nginx-controller-68f68f859-xrz74   1/1     Running     2 (10m ago)   72m<br /><br />NAME                                         TYPE           CLUSTER-IP       EXTERNAL-IP                                                                     PORT(S)                      AGE<br />service/ingress-nginx-controller             LoadBalancer   10.100.67.255    k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com   80:30330/TCP,443:31462/TCP   88m<br />service/ingress-nginx-controller-admission   ClusterIP      10.100.201.176   <none>                                                                          443/TCP                      88m<br /><br />NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/ingress-nginx-controller   1/1     1            1           88m<br /><br />NAME                                                 DESIRED   CURRENT   READY   AGE<br />replicaset.apps/ingress-nginx-controller-68f68f859   1         1         1       72m<br />replicaset.apps/ingress-nginx-controller-d8c96cf68   0         0         0       88m<br /><br />NAME                                       STATUS     COMPLETIONS   DURATION   AGE<br />job.batch/ingress-nginx-admission-create   Complete   1/1           4s         88m<br />job.batch/ingress-nginx-admission-patch    Complete   1/1           5s         88m</pre> | DevOps Ingenieur | 

### Stellen Sie einen HTTPd Beispiel-Workload bereit, um den NGINX Ingress Controller zu verwenden
<a name="deploy-a-sample-httpd-workload-to-use-the-nginx-ingress-controller"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie die Kubernetes-Ressourcen. | Geben Sie die folgenden Befehle ein, um ein Beispiel für eine Kubernetes-Bereitstellung, einen Service und einen Ingress zu erstellen:<pre>kubectl create deployment demo --image=httpd --port=80</pre><pre>kubectl expose deployment demo</pre><pre> kubectl create ingress demo --class=nginx \<br />  --rule nginxautomode.local.dev/=demo:80</pre> | DevOps Ingenieur | 
| Überprüfen Sie die eingesetzten Ressourcen. | Geben Sie den folgenden Befehl ein, um eine Liste der bereitgestellten Ressourcen anzuzeigen:<pre>kubectl get all,ingress</pre>Vergewissern Sie sich in der Ausgabe, dass sich der HTTPd Beispiel-Pod im laufenden Zustand befindet. Im Folgenden finden Sie ein Beispiel für eine Ausgabe:<pre>NAME                        READY   STATUS    RESTARTS   AGE<br />pod/demo-7d94f8cb4f-q68wc   1/1     Running   0          59m<br /><br />NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE<br />service/demo         ClusterIP   10.100.78.155   <none>        80/TCP    59m<br />service/kubernetes   ClusterIP   10.100.0.1      <none>        443/TCP   117m<br /><br />NAME                   READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/demo   1/1     1            1           59m<br /><br />NAME                              DESIRED   CURRENT   READY   AGE<br />replicaset.apps/demo-7d94f8cb4f   1         1         1       59m<br /><br />NAME                             CLASS   HOSTS                                  ADDRESS                                                                         PORTS   AGE<br />ingress.networking.k8s.io/demo   nginx   nginxautomode.local.dev                k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com                 80      56m</pre> | DevOps Ingenieur | 
| Bestätigen Sie, dass der Dienst erreichbar ist. | Geben Sie den folgenden Befehl ein, um zu bestätigen, dass der Dienst über den DNS-Namen des Network Load Balancer erreichbar ist:<pre>curl -H "Host: nginxautomode.local.dev" http://k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com</pre>Folgendes ist die erwartete Ausgabe:<pre><html><body><h1>It works!</h1></body></html></pre> | DevOps Ingenieur | 
| (Optional) Erstellen Sie einen DNS-Eintrag. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | DevOps Ingenieur, AWS DevOps | 

### Aktivieren Sie den automatischen EKS-Modus auf dem vorhandenen Cluster
<a name="enable-eks-auto-mode-on-the-existing-cluster"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Aktivieren Sie den EKS-Automatikmodus. | Folgen Sie den Anweisungen unter [Aktivieren des automatischen EKS-Modus auf einem vorhandenen Cluster](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html) (Amazon EKS-Dokumentation). | AWS DevOps | 

### Installieren Sie einen neuen NGINX Ingress Controller
<a name="install-a-new-nginx-ingress-controller"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Konfigurieren Sie eine neue NGINX Ingress Controller-Instanz. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | DevOps Ingenieur | 
| Stellen Sie die neue NGINX Instance Controller-Instanz bereit. | Geben Sie den folgenden Befehl ein, um die geänderte Manifestdatei anzuwenden:<pre>kubectl apply -f deploy.yaml</pre> | DevOps Ingenieur | 
| Bestätigen Sie die erfolgreiche Bereitstellung. | Geben Sie den folgenden Befehl ein, um zu überprüfen, ob die Ressourcen im `ingress-nginx-v2` Namespace betriebsbereit sind:<pre>kubectl get all -n ingress-nginx-v2</pre>Vergewissern Sie sich in der Ausgabe, dass sich die NGINX Ingress Controller-Pods im laufenden Zustand befinden. Im Folgenden finden Sie ein Beispiel für eine Ausgabe:<pre>NAME                                            READY   STATUS      RESTARTS   AGE<br />pod/ingress-nginx-admission-create-7shrj        0/1     Completed   0          24s<br />pod/ingress-nginx-admission-patch-vkxr5         0/1     Completed   1          24s<br />pod/ingress-nginx-controller-757bfcbc6d-4fw52   1/1     Running     0          24s<br /><br />NAME                                         TYPE           CLUSTER-IP       EXTERNAL-IP                                                                     PORT(S)                      AGE<br />service/ingress-nginx-controller             LoadBalancer   10.100.208.114   k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com   80:31469/TCP,443:30658/TCP   24s<br />service/ingress-nginx-controller-admission   ClusterIP      10.100.150.114   <none>                                                                          443/TCP                      24s<br /><br />NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/ingress-nginx-controller   1/1     1            1           24s<br /><br />NAME                                                  DESIRED   CURRENT   READY   AGE<br />replicaset.apps/ingress-nginx-controller-757bfcbc6d   1         1         1       24s<br /><br />NAME                                       STATUS     COMPLETIONS   DURATION   AGE<br />job.batch/ingress-nginx-admission-create   Complete   1/1           4s         24s<br />job.batch/ingress-nginx-admission-patch    Complete   1/1           5s         24s</pre> | DevOps Ingenieur | 
| Erstellen Sie einen neuen Ingress für den HTTPd Beispiel-Workload. | Geben Sie den folgenden Befehl ein, um einen neuen Ingress für den vorhandenen HTTPd Beispiel-Workload zu erstellen:<pre>kubectl create ingress demo-new --class=nginx-v2 \<br />  --rule nginxautomode.local.dev/=demo:80</pre> | DevOps Ingenieur | 
| Vergewissern Sie sich, dass der neue Ingress funktioniert. | Geben Sie den folgenden Befehl ein, um zu bestätigen, dass der neue Eingang funktioniert:<pre>curl -H "Host: nginxautomode.local.dev" k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com</pre>Das Folgende ist die erwartete Ausgabe:<pre><html><body><h1>It works!</h1></body></html></pre> | DevOps Ingenieur | 

### Überschneiden
<a name="cut-over"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Wechseln Sie zum neuen Namespace. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | AWS DevOps, DevOps Ingenieur | 
| Überprüfe die beiden Eingänge. | Geben Sie den folgenden Befehl ein, um die beiden Ingresses zu überprüfen, die für den HTTPd Beispiel-Workload erstellt wurden:<pre>kubectl get ingress</pre>Im Folgenden finden Sie ein Beispiel für eine Ausgabe:<pre>NAME       CLASS      HOSTS                                  ADDRESS                                                                         PORTS   AGE<br />demo       nginx      nginxautomode.local.dev   k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com                              80      95m<br />demo-new   nginx-v2   nginxautomode.local.dev   k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com                80      33s</pre> | DevOps Ingenieur | 

## Zugehörige Ressourcen
<a name="migrate-nginx-ingress-controller-eks-auto-mode-resources"></a>
+ [Aktivieren Sie den automatischen EKS-Modus auf einem vorhandenen Cluster](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html) (Amazon EKS-Dokumentation)
+ [Fehlerbehebung bei Load Balancers, die vom Kubernetes Service Controller in Amazon EKS erstellt wurden](https://repost.aws/knowledge-center/eks-load-balancers-troubleshooting) (AWS re:POST Knowledge Center)
+ NGINX Ingress Controller ([NGINX-Dokumentation](https://docs.nginx.com/nginx-ingress-controller/))

# Migrieren Sie Ihre Container-Workloads von Azure Red Hat OpenShift (ARO) zu Red Hat OpenShift Service in AWS (ROSA)
<a name="migrate-container-workloads-from-aro-to-rosa"></a>

*Naveen Ramasamy, Srikanth Rangavajhala und Gireesh Sreekantan, Amazon Web Services*

## Zusammenfassung
<a name="migrate-container-workloads-from-aro-to-rosa-summary"></a>

[Dieses Muster enthält step-by-step Anweisungen für die Migration von Container-Workloads von Azure Red Hat (ARO) nach (ROSA). OpenShift Red Hat OpenShift Service in AWS](https://aws.amazon.com/rosa/) ROSA ist ein verwalteter Kubernetes-Dienst, der von Red Hat in Zusammenarbeit mit bereitgestellt wird. AWS Er unterstützt Sie bei der Bereitstellung, Verwaltung und Skalierung Ihrer containerisierten Anwendungen mithilfe der Kubernetes-Plattform und profitiert von der Expertise von Red Hat in Bezug auf Kubernetes und die Infrastruktur. AWS Cloud 

Die Migration von Container-Workloads von ARO, aus anderen Clouds oder von lokalen Umgebungen zu ROSA beinhaltet die Übertragung von Anwendungen, Konfigurationen und Daten von einer Plattform auf eine andere. Dieses Muster trägt dazu bei, einen reibungslosen Übergang zu gewährleisten und gleichzeitig AWS Cloud Services, Sicherheit und Kosteneffizienz zu optimieren. Es umfasst zwei Methoden für die Migration Ihrer Workloads zu ROSA-Clustern: CI/CD und das Migration Toolkit for Containers (MTC).

Dieses Muster deckt beide Methoden ab. Welche Methode Sie wählen, hängt von der Komplexität und Sicherheit Ihres Migrationsprozesses ab. Wenn Sie die volle Kontrolle über den Status Ihrer Anwendung haben und über eine Pipeline eine konsistente Einrichtung gewährleisten können, empfehlen wir Ihnen, diese CI/CD Methode zu verwenden. Wenn Ihr Anwendungsstatus jedoch Unsicherheiten, unvorhergesehene Änderungen oder ein komplexes Ökosystem beinhaltet, empfehlen wir Ihnen, MTC als zuverlässigen und kontrollierten Weg für die Migration Ihrer Anwendung und ihrer Daten auf einen neuen Cluster zu verwenden. Einen detaillierten Vergleich der beiden Methoden finden Sie im Abschnitt [Zusätzliche](#migrate-container-workloads-from-aro-to-rosa-additional) Informationen.

Vorteile der Migration zu ROSA:
+ ROSA lässt sich nahtlos AWS als systemeigener Service integrieren. Es ist leicht zugänglich über das AWS-Managementkonsole und wird über einen einzigen AWS-Konto abgerechnet. Es bietet volle Kompatibilität mit anderen Anbietern AWS-Services und bietet gemeinsamen Support sowohl AWS von RedHat als auch von RedHat.
+ ROSA unterstützt Hybrid- und Multi-Cloud-Implementierungen. Es ermöglicht die konsistente Ausführung von Anwendungen in lokalen Rechenzentren und mehreren Cloud-Umgebungen.
+ ROSA profitiert vom Sicherheitsfokus von Red Hat und bietet Funktionen wie rollenbasierte Zugriffskontrolle (RBAC), Image-Scanning und Schwachstellenanalysen, um eine sichere Container-Umgebung zu gewährleisten.
+ ROSA wurde für die einfache Skalierung von Anwendungen entwickelt und bietet Optionen für hohe Verfügbarkeit. Dadurch können Anwendungen nach Bedarf wachsen und gleichzeitig die Zuverlässigkeit beibehalten.
+ ROSA automatisiert und vereinfacht die Bereitstellung eines Kubernetes-Clusters im Vergleich zu manuellen Einrichtungs- und Verwaltungsmethoden. Dies beschleunigt den Entwicklungs- und Bereitstellungsprozess.
+ ROSA profitiert von AWS Cloud Services und bietet eine nahtlose Integration mit AWS Angeboten wie Datenbankdiensten, Speicherlösungen und Sicherheitsdiensten.

## Voraussetzungen und Einschränkungen
<a name="migrate-container-workloads-from-aro-to-rosa-prereqs"></a>

**Voraussetzungen**
+ Ein aktiver AWS-Konto.
+ Berechtigungen AWS-Services , die für diese Funktion konfiguriert sind, auf die ROSA angewiesen ist, um Funktionen bereitzustellen. Weitere Informationen finden Sie in der ROSA-Dokumentation unter [Voraussetzungen](https://docs.aws.amazon.com/rosa/latest/userguide/set-up.html).
+ ROSA ist auf der [ROSA-Konsole](https://console.aws.amazon.com/rosa) aktiviert. Anweisungen finden Sie in der [ROSA-Dokumentation](https://docs.aws.amazon.com/rosa/latest/userguide/set-up.html#enable-rosa).
+ Der ROSA-Cluster wurde installiert und konfiguriert. Weitere Informationen finden [Sie unter Erste Schritte mit ROSA](https://docs.aws.amazon.com/rosa/latest/userguide/getting-started.html) in der ROSA-Dokumentation. Informationen zu den verschiedenen Methoden zur Einrichtung eines ROSA-Clusters finden Sie im AWS Prescriptive Guidance Guide zu [ROSA-Implementierungsstrategien](https://docs.aws.amazon.com/prescriptive-guidance/latest/red-hat-openshift-on-aws-implementation/).
+ [Netzwerkkonnektivität, die vom lokalen Netzwerk AWS über das Netzwerk [AWS Direct Connect](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/aws-direct-connect.html)(bevorzugt) oder AWS Virtual Private Network () hergestellt wird.Site-to-Site VPN](https://docs.aws.amazon.com/vpc/latest/userguide/vpn-connections.html)
+ Eine Amazon Elastic Compute Cloud (Amazon EC2) -Instance oder ein anderer virtueller Server zur Installation von Tools wie `aws client` OpenShift CLI (`oc`) -Client, ROSA-Client und Git-Binärdatei.

Zusätzliche Voraussetzungen für die CI/CD Methode:
+ Zugriff auf den lokalen Jenkins-Server mit Berechtigungen zum Erstellen einer neuen Pipeline, zum Hinzufügen von Stages, zum Hinzufügen von OpenShift Clustern und zum Ausführen von Builds.
+ Zugriff auf das Git-Repository, in dem der Quellcode der Anwendung verwaltet wird, mit der Berechtigung, einen neuen Git-Branch zu erstellen und Commits für den neuen Branch durchzuführen.

Zusätzliche Voraussetzungen für die MTC-Methode:
+ Ein Amazon Simple Storage Service (Amazon S3) -Bucket, der als Replikationsrepository verwendet wird.
+ Administratorzugriff auf den ARO-Quell-Cluster. Dies ist erforderlich, um die MTC-Verbindung einzurichten.

**Einschränkungen**
+ Einige AWS-Services sind nicht in allen AWS-Regionen verfügbar. Informationen zur Verfügbarkeit in den einzelnen Regionen finden Sie [AWS-Services unter Nach Regionen](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Informationen zu bestimmten Endpunkten finden Sie auf der Seite [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.

## Architektur
<a name="migrate-container-workloads-from-aro-to-rosa-architecture"></a>

ROSA bietet drei Netzwerkbereitstellungsmuster: öffentlich, privat und. [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html) PrivateLinkermöglicht es den Teams von Red Hat Site Reliability Engineering (SRE), den Cluster mithilfe eines privaten Subnetzes zu verwalten, das mit dem PrivateLink Endpunkt des Clusters in einer vorhandenen VPC verbunden ist.

Die Wahl der PrivateLink Option bietet die sicherste Konfiguration. Aus diesem Grund empfehlen wir sie für sensible Workloads oder strenge Compliance-Anforderungen. Informationen zu den Bereitstellungsoptionen für öffentliche und private Netzwerke finden Sie in der [Red OpenShift Hat-Dokumentation](https://docs.openshift.com/rosa/architecture/rosa-architecture-models.html#rosa-hcp-architecture_rosa-architecture-models).

**Wichtig**  
Sie können einen PrivateLink Cluster nur bei der Installation erstellen. Sie können einen zu verwendenden Cluster PrivateLink nach der Installation nicht ändern.

Das folgende Diagramm zeigt die PrivateLink Architektur für einen ROSA-Cluster, der für die Verbindung Direct Connect zu lokalen Umgebungen und ARO-Umgebungen verwendet wird.

![\[ROSA-Cluster, der AWS Direct Connect und AWS verwendet PrivateLink.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/527cedfb-ec21-42be-bf21-d4e4e4f9db51/images/eff9b017-6fc7-4874-b610-849a42071ef4.png)


**AWS Berechtigungen für ROSA**

Für AWS Berechtigungen für ROSA empfehlen wir, AWS -Security-Token-Service (AWS STS) mit kurzlebigen, dynamischen Tokens zu verwenden. Diese Methode verwendet vordefinierte Rollen und Richtlinien mit den geringsten Rechten, um ROSA minimale Berechtigungen für den Betrieb in der ROSA-Installations- AWS-Konto, Steuerungsebene- und Rechenfunktionen zu gewähren, und unterstützt die ROSA-Funktionalität.

**Neuverteilung der CI/CD-Pipeline**

CI/CD pipeline redeployment is the recommended method for users who have a mature CI/CDPipeline. Wenn Sie diese Option wählen, können Sie eine beliebige [DevOps Bereitstellungsstrategie](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/deployment-strategies.html) verwenden, um Ihre Anwendungslast schrittweise auf Bereitstellungen auf ROSA zu verlagern.

**Anmerkung**  
Dieses Muster geht von einem häufigen Anwendungsfall aus, bei dem Sie eine lokale Git-, JFrog Artifactory- und Jenkins-Pipeline haben. [Dieser Ansatz erfordert, dass Sie die Netzwerkkonnektivität von Ihrem lokalen Netzwerk bis AWS hin zum Through herstellen und dass Sie den ROSA-Cluster einrichten Direct Connect, bevor Sie den Anweisungen im Abschnitt Epics folgen.](#migrate-container-workloads-from-aro-to-rosa-epics) Einzelheiten finden Sie im Abschnitt [Voraussetzungen](#migrate-container-workloads-from-aro-to-rosa-prereqs).

Das folgende Diagramm zeigt den Arbeitsablauf für diese Methode.

![\[Migrieren von Containern von ARO zu ROSA mithilfe der CI/CD Methode.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/527cedfb-ec21-42be-bf21-d4e4e4f9db51/images/f658590e-fbd9-4297-a02c-0b516694d436.png)


**MTC-Methode**

Sie können das [Migration Toolkit for Containers (MTC)](https://docs.openshift.com/container-platform/4.13/migration_toolkit_for_containers/about-mtc.html) verwenden,**** um Ihre containerisierten Workloads zwischen verschiedenen Kubernetes-Umgebungen zu migrieren, z. B. von ARO zu ROSA. MTC vereinfacht den Migrationsprozess, indem es mehrere wichtige Aufgaben automatisiert und ein umfassendes Framework für die Verwaltung des Migrationslebenszyklus bereitstellt.

Das folgende Diagramm zeigt den Arbeitsablauf für diese Methode.

![\[Migrieren von Containern von ARO zu ROSA mithilfe der MTC-Methode.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/527cedfb-ec21-42be-bf21-d4e4e4f9db51/images/979bbc7b-2e39-4dd1-b4f0-ea1032880a38.png)


## Tools
<a name="migrate-container-workloads-from-aro-to-rosa-tools"></a>

**AWS-Services**
+ [AWS DataSync](https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html)ist ein Online-Datenübertragungs- und Erkennungsdienst, mit dem Sie Dateien oder Objektdaten zu, von und zwischen AWS Speicherdiensten verschieben können.
+ [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)verbindet Ihr internes Netzwerk über ein Standard-Ethernet-Glasfaserkabel mit einem Direct Connect Standort. Mit dieser Verbindung können Sie virtuelle Schnittstellen direkt zur Öffentlichkeit einrichten AWS-Services und dabei Internetdienstanbieter in Ihrem Netzwerkpfad umgehen.
+ [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)hilft Ihnen dabei, unidirektionale, private Verbindungen von Ihren virtuellen privaten Clouds (VPCs) zu Diensten außerhalb der VPC herzustellen.
+ [Red Hat OpenShift Service in AWS (ROSA)](https://docs.aws.amazon.com/rosa/latest/userguide/what-is-rosa.html) ist ein verwalteter Service, der OpenShift Benutzern von Red Hat dabei hilft, containerisierte Anwendungen zu erstellen, zu skalieren und zu verwalten. AWS
+ [AWS -Security-Token-Service (AWS STS)](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html) hilft Ihnen dabei, temporäre Zugangsdaten mit eingeschränkten Rechten für Benutzer anzufordern.

**Andere Tools**
+ Das [Migration Toolkit for Containers (MTC)](https://docs.openshift.com/container-platform/4.13/migration_toolkit_for_containers/about-mtc.html) bietet eine Konsole und eine API für die Migration von containerisierten Anwendungen von ARO zu ROSA.

## Best Practices
<a name="migrate-container-workloads-from-aro-to-rosa-best-practices"></a>
+ Aus Gründen der [Ausfallsicherheit](https://docs.aws.amazon.com/ROSA/latest/userguide/disaster-recovery-resiliency.html) und wenn Sie über Workloads zur Einhaltung der Sicherheitsbestimmungen verfügen, richten Sie einen Multi-AZ-ROSA-Cluster ein, der Folgendes verwendet: PrivateLink Weitere Informationen finden Sie in der [ROSA-Dokumentation](https://docs.aws.amazon.com/rosa/latest/userguide/getting-started-classic-private-link.html).
**Anmerkung**  
PrivateLink kann nach der Installation nicht konfiguriert werden.
+ Der S3-Bucket, den Sie für das Replikationsrepository verwenden, sollte nicht öffentlich sein. Verwenden Sie die entsprechenden S3-Bucket-Richtlinien, um den Zugriff einzuschränken.
+ Wenn Sie sich für die MTC-Methode entscheiden, verwenden Sie die Option **Stage-Migration**, um das Ausfallzeitfenster während der Umstellung zu reduzieren.
+ Überprüfen Sie Ihre Servicekontingenten vor und nach der Bereitstellung des ROSA-Clusters. Fordern Sie bei Bedarf eine Erhöhung des Kontingents entsprechend Ihren Anforderungen an. Weitere Informationen finden Sie in der [Dokumentation zu Servicekontingenten](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html).
+ Lesen Sie die [ROSA-Sicherheitsrichtlinien](https://docs.aws.amazon.com/ROSA/latest/userguide/security.html) und implementieren Sie bewährte Sicherheitsmethoden.
+ Wir empfehlen, den Standard-Clusteradministrator nach der Installation zu entfernen. Weitere Informationen finden Sie in der [Red OpenShift Hat-Dokumentation](https://docs.openshift.com/container-platform/4.13/post_installation_configuration/cluster-tasks.html).
+ Verwenden Sie die automatische Skalierung von Maschinenpools, um ungenutzte Worker-Knoten im ROSA-Cluster herunterzufahren und so die Kosten zu optimieren. Weitere Informationen finden Sie im [ROSA-Workshop](https://catalog.workshops.aws/aws-openshift-workshop/en-US/5-nodes-storage/3-autoscale-machine-pool).
+ Nutzen Sie den Red Hat Cost Management Service für OpenShift Container Platform, um die Kosten für Clouds und Container besser zu verstehen und nachzuverfolgen. Weitere Informationen finden Sie im [ROSA-Workshop](https://catalog.workshops.aws/aws-openshift-workshop/en-US/10-cost-management).
+ Überwachen und prüfen Sie die Infrastrukturdienste und -anwendungen des ROSA-Clusters mithilfe von AWS-Services. Weitere Informationen finden Sie im [ROSA-Workshop](https://catalog.workshops.aws/aws-openshift-workshop/en-US/8-observability).

## Epen
<a name="migrate-container-workloads-from-aro-to-rosa-epics"></a>

### Option 1: Verwenden Sie eine Pipeline CI/CD
<a name="option-1-use-a-ci-cd-pipeline"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Fügen Sie den neuen ROSA-Cluster zu Jenkins hinzu. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | AWS-Administrator, AWS-Systemadministrator, AWS DevOps | 
| Fügen Sie den `oc` Client zu Ihren Jenkins-Knoten hinzu. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | AWS-Administrator, AWS-Systemadministrator, AWS DevOps | 
| Erstelle einen neuen Git-Branch. | Erstellen Sie einen neuen Branch in Ihrem Git-Repository für`rosa-dev`. Dieser Zweig trennt die Code- oder Konfigurationsparameteränderungen für ROSA von Ihrer bestehenden Pipeline. | AWS DevOps | 
| Tag-Bilder für ROSA. | Verwenden Sie in Ihrer Erstellungsphase ein anderes Tag, um die Bilder zu identifizieren, die aus der ROSA-Pipeline erstellt wurden. | AWS-Administrator, AWS-Systemadministrator, AWS DevOps | 
| Erstellen Sie eine Pipeline. | Erstellen Sie eine neue Jenkins-Pipeline, die Ihrer bestehenden Pipeline ähnelt. Verwenden Sie für diese Pipeline den `rosa-dev` Git-Branch, den Sie zuvor erstellt haben, und stellen Sie sicher, dass die Git-Checkout-, Codescan- und Build-Phasen enthalten sind, die mit Ihrer vorhandenen Pipeline identisch sind. | AWS-Administrator, AWS-Systemadministrator, AWS DevOps | 
| Fügen Sie eine ROSA-Bereitstellungsphase hinzu. | Fügen Sie in der neuen Pipeline eine Phase hinzu, die im ROSA-Cluster bereitgestellt werden soll, und verweisen Sie auf den ROSA-Cluster, den Sie der globalen Jenkins-Konfiguration hinzugefügt haben. | AWS-Administrator, AWS DevOps, AWS-Systemadministrator | 
| Starten Sie einen neuen Build. | Wählen Sie in Jenkins Ihre Pipeline aus und wählen Sie **Jetzt erstellen** oder starten Sie einen neuen Build, indem Sie eine Änderung an dem `rosa-dev` Branch in Git festschreiben. | AWS-Administrator, AWS DevOps, AWS-Systemadministrator | 
| Überprüfen Sie die Bereitstellung. | Verwenden Sie den Befehl **oc** oder die [ROSA-Konsole](https://console.aws.amazon.com/rosa), um zu überprüfen, ob die Anwendung auf Ihrem ROSA-Zielcluster bereitgestellt wurde. | AWS-Administrator, AWS DevOps, AWS-Systemadministrator | 
| Kopieren Sie Daten in den Zielcluster. | Kopieren Sie für statusbehaftete Workloads die Daten vom Quellcluster in den Zielcluster, indem Sie Open-Source-Dienstprogramme wie **rsync** verwenden AWS DataSync , oder Sie können die MTC-Methode verwenden. Weitere Informationen finden Sie in der [AWS DataSync -Dokumentation](https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html). | AWS-Administrator, AWS DevOps, AWS-Systemadministrator | 
| Testen Sie Ihre Anwendung. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | AWS-Administrator, AWS DevOps, AWS-Systemadministrator | 
| Überschneiden. | Wenn Ihre Tests erfolgreich sind, verwenden Sie die entsprechende Amazon Route 53-Richtlinie, um den Datenverkehr von der ARO-gehosteten Anwendung zur ROSA-gehosteten Anwendung zu verlagern. Wenn Sie diesen Schritt abgeschlossen haben, wird die Arbeitslast Ihrer Anwendung vollständig auf den ROSA-Cluster übertragen. | AWS-Administrator, AWS-Systemadministrator | 

### Option 2: Verwenden Sie MTC
<a name="option-2-use-mtc"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Installieren Sie den MTC-Operator. | Installieren Sie den MTC-Operator sowohl auf ARO- als auch auf ROSA-Clustern:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | AWS-Administrator, AWS DevOps, AWS-Systemadministrator | 
| Konfigurieren Sie den Netzwerkverkehr zum Replikationsrepository. | Wenn Sie einen Proxyserver verwenden, konfigurieren Sie ihn so, dass Netzwerkverkehr zwischen dem Replikationsrepository und den Clustern zugelassen wird. Das Replikationsrepository ist ein Zwischenspeicherobjekt, das MTC zur Datenmigration verwendet. Die Quell- und Zielcluster müssen während der Migration Netzwerkzugriff auf das Replikationsrepository haben. | AWS-Administrator, AWS DevOps, AWS-Systemadministrator | 
| Fügen Sie den Quellcluster zu MTC hinzu. | Fügen Sie auf der MTC-Webkonsole den ARO-Quellcluster hinzu. | AWS-Administrator, AWS DevOps, AWS-Systemadministrator | 
| Fügen Sie Amazon S3 als Ihr Replikationsrepository hinzu. | Fügen Sie auf der MTC-Webkonsole den Amazon S3 S3-Bucket (siehe [Voraussetzungen](#migrate-container-workloads-from-aro-to-rosa-prereqs)) als Replikations-Repository hinzu. | AWS-Administrator, AWS DevOps, AWS-Systemadministrator | 
| Erstellen Sie einen Migrationsplan. | Erstellen Sie auf der MTC-Webkonsole einen Migrationsplan und geben Sie als Datenübertragungstyp **Kopieren** an. Dadurch wird MTC angewiesen, die Daten vom Quellcluster (ARO) in den S3-Bucket und vom Bucket in den Zielcluster (ROSA) zu kopieren. | AWS-Administrator, AWS DevOps, AWS-Systemadministrator | 
| Führen Sie den Migrationsplan aus. | Führen Sie den Migrationsplan mithilfe der Option **Stage** oder **Cutover aus**:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | AWS-Administrator, AWS DevOps, AWS-Systemadministrator | 

## Fehlerbehebung
<a name="migrate-container-workloads-from-aro-to-rosa-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| Probleme mit der Verbindung | Wenn Sie Ihre Container-Workloads von ARO zu ROSA migrieren, können Verbindungsprobleme auftreten, die gelöst werden sollten, um eine erfolgreiche Migration sicherzustellen. Um diese Konnektivitätsprobleme (in dieser Tabelle aufgeführt) während der Migration zu beheben, sind eine sorgfältige Planung, Abstimmung mit Ihren Netzwerk- und Sicherheitsteams sowie gründliche Tests unerlässlich. Die Implementierung einer schrittweisen Migrationsstrategie und die Überprüfung der Konnektivität bei jedem Schritt tragen dazu bei, potenzielle Störungen zu minimieren und einen reibungslosen Übergang von ARO zu ROSA sicherzustellen. | 
| Unterschiede in der Netzwerkkonfiguration | ARO und ROSA können unterschiedliche Netzwerkkonfigurationen aufweisen, z. B. virtuelle Netzwerkeinstellungen (VNet), Subnetze und Netzwerkrichtlinien. Stellen Sie für eine korrekte Kommunikation zwischen den Diensten sicher, dass die Netzwerkeinstellungen auf den beiden Plattformen übereinstimmen. | 
| Sicherheitsgruppen- und Firewallregeln | ROSA und ARO haben möglicherweise unterschiedliche Standardeinstellungen für Sicherheitsgruppen und Firewalls. Stellen Sie sicher, dass Sie diese Regeln anpassen und aktualisieren, damit der erforderliche Datenverkehr zur Aufrechterhaltung der Konnektivität zwischen Containern und Diensten während der Migration gewährleistet ist.  | 
| Änderungen der IP-Adresse und des DNS | Wenn Sie Workloads migrieren, können sich IP-Adressen und DNS-Namen ändern. Konfigurieren Sie Anwendungen neu, die auf statischen IPs oder spezifischen DNS-Namen basieren.  | 
| Zugriff auf externe Dienste | Wenn Ihre Anwendung von externen Diensten wie Datenbanken oder abhängig ist APIs, müssen Sie möglicherweise deren Verbindungseinstellungen aktualisieren, um sicherzustellen, dass sie mit den neuen Diensten von ROSA kommunizieren können. | 
| Konfiguration von Azure Private Link | Wenn Sie Azure Private Link oder private Endpunktdienste in ARO verwenden, müssen Sie die entsprechende Funktionalität in ROSA einrichten, um die private Konnektivität zwischen Ressourcen sicherzustellen. | 
| Site-to-Site VPN oder Direct Connect einrichten  | Wenn zwischen Ihrem lokalen Netzwerk und ARO bereits Direct Connect Verbindungen bestehen Site-to-Site VPN oder Verbindungen bestehen, müssen Sie ähnliche Verbindungen mit ROSA herstellen, um eine unterbrechungsfreie Kommunikation mit Ihren lokalen Ressourcen zu gewährleisten. | 
| Einstellungen für Ingress und Load Balancer | Die Konfigurationen für Ingress-Controller und Load Balancer können sich zwischen ARO und ROSA unterscheiden. Konfigurieren Sie diese Einstellungen neu, um den externen Zugriff auf Ihre Dienste aufrechtzuerhalten. | 
| Umgang mit Zertifikaten und TLS | Wenn Ihre Anwendungen SSL-Zertifikate oder TLS verwenden, stellen Sie sicher, dass die Zertifikate gültig und in ROSA korrekt konfiguriert sind. | 
| Zugriff auf die Container-Registrierung | Wenn Ihre Container in einer externen Container-Registry gehostet werden, richten Sie die entsprechenden Authentifizierungs- und Zugriffsberechtigungen für ROSA ein. | 
| Überwachung und Protokollierung | Aktualisieren Sie die Überwachungs- und Protokollierungskonfigurationen entsprechend der neuen Infrastruktur auf ROSA, sodass Sie den Zustand und die Leistung Ihrer Container weiterhin effektiv überwachen können. | 

## Zugehörige Ressourcen
<a name="migrate-container-workloads-from-aro-to-rosa-resources"></a>

**AWS****Verweise**
+ [Was ist Red Hat OpenShift Service in AWS?](https://docs.aws.amazon.com/ROSA/latest/userguide/what-is-rosa.html) (ROSA-Dokumentation)
+ [Erste Schritte mit ROSA](https://docs.aws.amazon.com/ROSA/latest/userguide/getting-started.html) (ROSA-Dokumentation)
+ [Red Hat OpenShift Service in AWS Umsetzungsstrategien](https://docs.aws.amazon.com/prescriptive-guidance/latest/red-hat-openshift-on-aws-implementation/) (AWS Prescriptive Guidance)
+ [Red Hat OpenShift Service in AWS Jetzt GA](https://aws.amazon.com/blogs/aws/red-hat-openshift-service-on-aws-now-generally-availably/) (AWS Blogbeitrag)
+ [ROSA-Werkstatt](https://catalog.workshops.aws/aws-openshift-workshop/en-US/0-introduction)
+ [HÄUFIG GESTELLTE FRAGEN ZU ROSA](https://aws.amazon.com/rosa/faqs/)
+ [Häufig gestellte Fragen zum ROSA-Workshop](https://www.rosaworkshop.io/rosa/14-faq/)
+ [ROSA-Preisgestaltung](https://aws.amazon.com/rosa/pricing/)

** OpenShift Dokumentation zu Red Hat**
+ [Schnelles Installieren eines Clusters auf AWS](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-default.html)
+ [Installation eines Clusters AWS in einem eingeschränkten Netzwerk](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-restricted-networks-aws-installer-provisioned.html)
+ [Installation eines Clusters AWS in einer vorhandenen VPC](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-vpc.html)
+ [Installation eines Clusters auf einer vom Benutzer bereitgestellten Infrastruktur mithilfe von Vorlagen AWS CloudFormation ](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-user-infra.html)
+ [Installation eines Clusters AWS in einem eingeschränkten Netzwerk mit einer vom Benutzer bereitgestellten Infrastruktur](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-restricted-networks-aws.html)
+ [Installation eines Clusters auf AWS einem mit Anpassungen](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-customizations.html)
+ [Erste Schritte mit der OpenShift CLI](https://docs.openshift.com/container-platform/4.13/cli_reference/openshift_cli/getting-started-cli.html)

## Zusätzliche Informationen
<a name="migrate-container-workloads-from-aro-to-rosa-additional"></a>

**Wählen Sie zwischen MTC- und CI/CD Pipeline-Redeployment-Optionen**

Die Migration von Anwendungen von einem OpenShift Cluster auf einen anderen erfordert sorgfältige Überlegungen. Idealerweise wünschen Sie sich einen reibungslosen Übergang, indem Sie eine CI/CD Pipeline verwenden, um die Anwendung erneut bereitzustellen und die Migration persistenter Volume-Daten abzuwickeln. In der Praxis ist eine auf einem Cluster ausgeführte Anwendung jedoch anfällig für unvorhergesehene Änderungen im Laufe der Zeit. Diese Änderungen können dazu führen, dass die Anwendung allmählich von ihrem ursprünglichen Bereitstellungsstatus abweicht. MTC bietet eine Lösung für Szenarien, in denen der genaue Inhalt eines Namespaces ungewiss ist und eine nahtlose Migration aller Anwendungskomponenten auf einen neuen Cluster wichtig ist.

Um die richtige Wahl zu treffen, müssen Sie Ihr spezifisches Szenario bewerten und die Vorteile der einzelnen Ansätze abwägen. Auf diese Weise können Sie eine erfolgreiche und reibungslose Migration sicherstellen, die Ihren Bedürfnissen und Prioritäten entspricht. Im Folgenden finden Sie zusätzliche Richtlinien für die Auswahl zwischen den beiden Optionen.

**Neuverteilung der CI/CD-Pipeline**

Die CI/CD Pipeline-Methode ist der empfohlene Ansatz, wenn Ihre Anwendung mithilfe einer Pipeline problemlos erneut bereitgestellt werden kann. Dadurch wird sichergestellt, dass die Migration kontrolliert und vorhersehbar ist und auf Ihre bestehenden Bereitstellungspraktiken abgestimmt ist. Wenn Sie sich für diese Methode entscheiden, können Sie die [Bereitstellungsstrategien blau/grün](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/bluegreen-deployments.html) oder kanarisch nutzen, um die Last schrittweise auf Bereitstellungen auf ROSA zu verlagern. Für dieses Szenario geht dieses Muster davon aus, dass Jenkins Anwendungsbereitstellungen von der lokalen Umgebung aus orchestriert.

Vorteile:
+ Sie benötigen keinen Administratorzugriff auf den ARO-Quell-Cluster und müssen keine Operatoren auf dem Quell- oder Zielcluster bereitstellen.
+ Dieser Ansatz hilft Ihnen, den Verkehr mithilfe einer DevOps Strategie schrittweise umzustellen.

Nachteile:
+ Es erfordert mehr Aufwand, die Funktionalität Ihrer Anwendung zu testen.
+ Wenn Ihre Anwendung persistente Daten enthält, sind zusätzliche Schritte erforderlich, um die Daten mithilfe von AWS DataSync oder anderen Tools zu kopieren.

**MTC-Migration**

In der Praxis können laufende Anwendungen unvorhergesehene Änderungen erfahren, die dazu führen, dass sie von der ursprünglichen Bereitstellung abweichen. Wählen Sie die MTC-Option, wenn Sie sich über den aktuellen Status Ihrer Anwendung auf dem Quell-Cluster nicht sicher sind. Wenn Ihr Anwendungsökosystem beispielsweise verschiedene Komponenten, Konfigurationen und Datenspeichervolumen umfasst, empfehlen wir Ihnen, MTC zu wählen, um eine vollständige Migration sicherzustellen, die die Anwendung und ihre gesamte Umgebung abdeckt.

Vorteile:
+ MTC bietet eine vollständige Sicherung und Wiederherstellung des Workloads.
+ Es kopiert die persistenten Daten von der Quelle zum Ziel, während der Workload migriert wird.
+ Es ist kein Zugriff auf das Quellcode-Repository erforderlich.

Nachteile:
+ Sie benötigen Administratorrechte, um den MTC-Operator auf den Quell- und Zielclustern zu installieren.
+ Das DevOps Team benötigt eine Schulung, um das MTC-Tool verwenden und Migrationen durchführen zu können. 

# Führen Sie Amazon ECS-Aufgaben auf Amazon WorkSpaces mit Amazon ECS Anywhere aus
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere"></a>

*Akash Kumar, Amazon Web Services*

## Zusammenfassung
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-summary"></a>

Amazon Elastic Container Service (Amazon ECS) Anywhere unterstützt die Bereitstellung von Amazon ECS-Aufgaben in jeder Umgebung, einschließlich der von Amazon Web Services (AWS) verwalteten Infrastruktur und der vom Kunden verwalteten Infrastruktur. Sie können dies tun, während Sie eine vollständig von AWS verwaltete Kontrollebene verwenden, die in der Cloud läuft und immer auf dem neuesten Stand ist. 

Unternehmen nutzen Amazon häufig WorkSpaces für die Entwicklung containerbasierter Anwendungen. Dies erforderte Amazon Elastic Compute Cloud (Amazon EC2) oder AWS Fargate mit einem Amazon ECS-Cluster, um ECS-Aufgaben zu testen und auszuführen. Mit Amazon ECS Anywhere können Sie Amazon jetzt WorkSpaces als externe Instances direkt zu einem ECS-Cluster hinzufügen und Ihre Aufgaben direkt ausführen. Dies reduziert Ihre Entwicklungszeit, da Sie Ihren Container mit einem ECS-Cluster lokal auf Amazon testen können WorkSpaces. Sie können sich auch die Kosten für die Nutzung unserer EC2 Fargate-Instances zum Testen Ihrer Containeranwendungen sparen.

Dieses Muster zeigt, wie ECS-Aufgaben auf Amazon WorkSpaces mit Amazon ECS Anywhere bereitgestellt werden. Es richtet den ECS-Cluster ein und verwendet AWS Directory Service Simple AD, um den zu starten WorkSpaces. Dann startet die ECS-Beispielaufgabe NGINX in der. WorkSpaces

## Voraussetzungen und Einschränkungen
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-prereqs"></a>
+ Ein aktives AWS-Konto
+ AWS-Befehlszeilenschnittstelle (AWS Command Line Interface, AWS CLI)
+ [Auf Ihrem Computer konfigurierte](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) AWS-Anmeldeinformationen

## Architektur
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-architecture"></a>

**Zieltechnologie-Stack**
+ Eine Virtual Private Cloud (VPC)
+ Ein Amazon ECS-Cluster
+ Amazon WorkSpaces
+ AWS Directory Service mit Simple AD

**Zielarchitektur**

![\[ECS Anywhere richtet den ECS-Cluster ein und verwendet Simple AD zum Starten WorkSpaces.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/da8b2249-3423-485c-9fef-6f902025e969/images/fd354d14-f29b-4b9e-8f1a-c3cb7ed4d6bf.png)


 

Die Architektur umfasst die folgenden Dienste und Ressourcen:
+ Ein ECS-Cluster mit öffentlichen und privaten Subnetzen in einer benutzerdefinierten VPC
+ Simple AD in der VPC, um Benutzern Zugriff auf Amazon zu gewähren WorkSpaces
+ Amazon wird in der VPC mit Simple AD WorkSpaces bereitgestellt
+ AWS Systems Manager wurde für das Hinzufügen von Amazon WorkSpaces als verwaltete Instances aktiviert
+ Mithilfe von Amazon ECS und AWS Systems Manager Agent (SSM Agent) WorkSpaces fügte Amazon Systems Manager und dem ECS-Cluster hinzu
+ Ein Beispiel für eine ECS-Aufgabe zur Ausführung WorkSpaces im ECS-Cluster

## Tools
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-tools"></a>
+ [AWS Directory Service Simple Active Directory (Simple AD)](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_simple_ad.html) ist ein eigenständiges verwaltetes Verzeichnis, das von einem Samba 4 Active Directory-kompatiblen Server betrieben wird. Simple AD bietet einen Teil der Funktionen von AWS Managed Microsoft AD, einschließlich der Möglichkeit, Benutzer zu verwalten und eine sichere Verbindung zu EC2 Amazon-Instances herzustellen.
+ [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) ist ein hoch skalierbarer, schneller Container-Management-Service, der das Ausführen, Beenden und Verwalten von Containern in einem Cluster vereinfacht.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) hilft Ihnen dabei, den Zugriff auf Ihre AWS-Ressourcen sicher zu verwalten, indem kontrolliert wird, wer authentifiziert und autorisiert ist, diese zu verwenden.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) unterstützt Sie bei der Verwaltung Ihrer Anwendungen und Infrastruktur, die in der AWS-Cloud ausgeführt werden. Es vereinfacht das Anwendungs- und Ressourcenmanagement, verkürzt die Zeit für die Erkennung und Lösung betrieblicher Probleme und hilft Ihnen, Ihre AWS-Ressourcen sicher und skalierbar zu verwalten.
+ [Amazon WorkSpaces](https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces.html) unterstützt Sie bei der Bereitstellung virtueller, Cloud-basierter Microsoft Windows- oder Amazon Linux-Desktops für Ihre Benutzer, bekannt als *WorkSpaces*. WorkSpaces macht die Beschaffung und Bereitstellung von Hardware oder die Installation komplexer Software überflüssig.

## Epen
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-epics"></a>

### Richten Sie den ECS-Cluster ein
<a name="set-up-the-ecs-cluster"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen und konfigurieren Sie den ECS-Cluster. | Um den ECS-Cluster zu erstellen, folgen Sie den Anweisungen in der [AWS-Dokumentation](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html), einschließlich der folgenden Schritte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere.html) | Cloud-Architekt | 

### Starten Sie Amazon WorkSpaces
<a name="launch-amazon-workspaces"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Richten Sie Simple AD ein und starten Sie Amazon WorkSpaces. | Folgen Sie den Anweisungen in der [AWS-Dokumentation](https://docs.aws.amazon.com/workspaces/latest/adminguide/launch-workspace-simple-ad.html), um ein Simple AD AD-Verzeichnis für Ihre neu erstellte VPC bereitzustellen und Amazon WorkSpaces zu starten. | Cloud-Architekt | 

### AWS Systems Manager für eine Hybridumgebung einrichten
<a name="set-up-aws-systems-manager-for-a-hybrid-environment"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Laden Sie die angehängten Skripte herunter. | Laden Sie auf Ihrem lokalen Computer die `ssm-activation.json` Dateien `ssm-trust-policy.json` und herunter, die sich im Bereich *Anlagen* befinden. | Cloud-Architekt | 
| Fügen Sie die IAM-Rolle hinzu. | Fügen Sie Umgebungsvariablen hinzu, die auf Ihren Geschäftsanforderungen basieren.<pre>export AWS_DEFAULT_REGION=${AWS_REGION_ID}<br />export ROLE_NAME=${ECS_TASK_ROLE}<br />export CLUSTER_NAME=${ECS_CLUSTER_NAME}<br />export SERVICE_NAME=${ECS_CLUSTER_SERVICE_NAME}</pre>Führen Sie den folgenden Befehl aus.<pre>aws iam create-role --role-name $ROLE_NAME --assume-role-policy-document file://ssm-trust-policy.json</pre> | Cloud-Architekt | 
| Fügen Sie die SSMManaged InstanceCore Amazon-Richtlinie zur IAM-Rolle hinzu. | Führen Sie den folgenden Befehl aus.<pre>aws iam attach-role-policy --role-name $ROLE_NAME --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore</pre> | Cloud-Architekt | 
| Fügen Sie die EC2 ContainerServicefor EC2 Amazon-Rollenrichtlinie zur IAM-Rolle hinzu. | Führen Sie den folgenden Befehl aus.<pre>aws iam attach-role-policy --role-name $ROLE_NAME --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role</pre> | Cloud-Architekt | 
| Überprüfen Sie die IAM-Rolle. | Führen Sie den folgenden Befehl aus, um die IAM-Rolle zu überprüfen.<pre>aws iam list-attached-role-policies --role-name $ROLE_NAME</pre> | Cloud-Architekt | 
| Aktivieren Sie den Systems Manager. | Führen Sie den folgenden Befehl aus.<pre>aws ssm create-activation --iam-role $ROLE_NAME | tee ssm-activation.json</pre> | Cloud-Architekt | 

### WorkSpaces Zum ECS-Cluster hinzufügen
<a name="add-workspaces-to-the-ecs-cluster"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
|  Connect dich mit deinem WorkSpaces. | Folgen Sie den Anweisungen in der [AWS-Dokumentation](https://docs.aws.amazon.com/workspaces/latest/userguide/workspaces-user-getting-started.html), um eine Verbindung zu Ihren Workspaces herzustellen und diese einzurichten. | App-Developer | 
| Laden Sie das ECS-Anywhere-Installationsskript herunter. | Führen Sie an der Eingabeaufforderung den folgenden Befehl aus.<pre>curl -o "ecs-anywhere-install.sh" "https://amazon-ecs-agent-packages-preview.s3.us-east-1.amazonaws.com/ecs-anywhere-install.sh" && sudo chmod +x ecs-anywhere-install.sh</pre> | App-Developer | 
| Überprüfen Sie die Integrität des Shell-Skripts. | (Optional) Führen Sie den folgenden Befehl aus.<pre>curl -o "ecs-anywhere-install.sh.sha256" "https://amazon-ecs-agent-packages-preview.s3.us-east-1.amazonaws.com/ecs-anywhere-install.sh.sha256" && sha256sum -c ecs-anywhere-install.sh.sha256<br /><br /><br /></pre> | App-Developer | 
| Fügen Sie ein EPEL-Repository auf Amazon Linux hinzu. | Um ein EPEL-Repository (Extra Packages for Enterprise Linux) hinzuzufügen, führen Sie den Befehl aus. `sudo amazon-linux-extras install epel -y` | App-Developer | 
| Installieren Sie Amazon ECS Anywhere. | Verwenden Sie den folgenden Befehl, um das Installationsskript auszuführen.<pre>sudo ./ecs-anywhere-install.sh --cluster $CLUSTER_NAME --activation-id $ACTIVATION_ID --activation-code $ACTIVATION_CODE --region $AWS_REGION<br /><br /><br /></pre> |  | 
| Überprüfen Sie die Instanzinformationen aus dem ECS-Cluster. | Führen Sie den folgenden Befehl auf Ihrem lokalen Computer aus, um die Informationen zu Systems Manager- und ECS-Clusterinstanzen zu überprüfen und zu überprüfen, ob sie dem Cluster hinzugefügt WorkSpaces wurden.<pre>aws ssm describe-instance-information" && "aws ecs list-container-instances --cluster $CLUSTER_NAME</pre> | App-Developer | 

### Fügen Sie eine ECS-Aufgabe hinzu für WorkSpaces
<a name="add-an-ecs-task-for-the-workspaces"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine IAM-Rolle für die Aufgabenausführung. | Laden Sie `task-execution-assume-role.json` und `external-task-definition.json` aus dem Bereich *Anlagen* herunter. Führen Sie auf Ihrem lokalen Computer den folgenden Befehl aus.<pre>aws iam --region $AWS_DEFAULT_REGION create-role --role-name $ECS_TASK_EXECUTION_ROLE --assume-role-policy-document file://task-execution-assume-role.json</pre> | Cloud-Architekt | 
| Fügen Sie die Richtlinie der Ausführungsrolle hinzu. | Führen Sie den folgenden Befehl aus.<pre>aws iam --region $AWS_DEFAULT_REGION attach-role-policy --role-name $ECS_TASK_EXECUTION_ROLE --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy</pre> | Cloud-Architekt | 
| Erstellen Sie eine Aufgabenrolle. | Führen Sie den folgenden Befehl aus.<pre>aws iam --region $AWS_DEFAULT_REGION create-role --role-name $ECS_TASK_EXECUTION_ROLE --assume-role-policy-document file://task-execution-assume-role.json<br /><br /><br /></pre> | Cloud-Architekt | 
| Registrieren Sie die Aufgabendefinition im Cluster. | Führen Sie auf Ihrem lokalen Computer den folgenden Befehl aus.<pre>aws ecs register-task-definition --cli-input-json file://external-task-definition.json</pre> | Cloud-Architekt | 
| Führen Sie die Aufgabe aus. | Führen Sie auf Ihrem lokalen Computer den folgenden Befehl aus.<pre>aws ecs run-task --cluster $CLUSTER_NAME --launch-type EXTERNAL --task-definition nginx</pre> | Cloud-Architekt | 
| Überprüfen Sie den Status, in dem die Aufgabe ausgeführt wird. | Führen Sie den folgenden Befehl aus, um die Aufgaben-ID abzurufen.<pre>export TEST_TASKID=$(aws ecs list-tasks --cluster $CLUSTER_NAME | jq -r '.taskArns[0]')</pre>Führen Sie mit der Task-ID den folgenden Befehl aus.<pre>aws ecs describe-tasks --cluster $CLUSTER_NAME --tasks ${TEST_TASKID}</pre> | Cloud-Architekt | 
| Überprüfen Sie die Aufgabe auf dem WorkSpace. | Um zu überprüfen, ob NGINX auf dem läuft WorkSpace, führen Sie den Befehl aus. ` curl http://localhost:8080` | App-Developer | 

## Zugehörige Ressourcen
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-resources"></a>
+ [ECS-Cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html)
+ [Einrichtung einer Hybridumgebung](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-managedinstances.html)
+ [Amazon WorkSpaces](https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces.html)
+ [Simple AD](https://docs.aws.amazon.com/workspaces/latest/adminguide/launch-workspace-simple-ad.html)

## Anlagen
<a name="attachments-da8b2249-3423-485c-9fef-6f902025e969"></a>

[Um auf zusätzliche Inhalte zuzugreifen, die mit diesem Dokument verknüpft sind, entpacken Sie die folgende Datei: attachment.zip](samples/p-attach/da8b2249-3423-485c-9fef-6f902025e969/attachments/attachment.zip)

# Führen Sie einen ASP.NET Core-Web-API-Docker-Container auf einer Amazon EC2 Linux-Instance aus
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance"></a>

*Vijai Anand Ramalingam und Sreelaxmi Pai, Amazon Web Services*

## Zusammenfassung
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-summary"></a>

Dieses Muster ist für Benutzer gedacht, die damit beginnen, ihre Anwendungen in der Amazon Web Services (AWS) Cloud zu containerisieren. Wenn Sie beginnen, Apps in der Cloud zu containerisieren, sind in der Regel keine Container-Orchestrierungsplattformen eingerichtet. Mit diesem Muster können Sie schnell eine Infrastruktur auf AWS einrichten, um Ihre containerisierten Anwendungen zu testen, ohne dass eine aufwändige Container-Orchestrierungsinfrastruktur erforderlich ist.

Der erste Schritt auf dem Weg zur Modernisierung besteht darin, die Anwendung zu transformieren. Wenn es sich um eine ältere .NET Framework-Anwendung handelt, müssen Sie zuerst die Laufzeit auf ASP.NET Core ändern. Führen Sie dann die folgenden Schritte aus:
+ Erstellen Sie das Docker-Container-Image
+ Führen Sie den Docker-Container mit dem erstellten Image aus
+ Überprüfen Sie die Anwendung, bevor Sie sie auf einer beliebigen Container-Orchestrierungsplattform wie Amazon Elastic Container Service (Amazon ECS) oder Amazon Elastic Kubernetes Service (Amazon EKS) bereitstellen. 

Dieses Muster behandelt die Aspekte der Erstellung, Ausführung und Validierung der modernen Anwendungsentwicklung auf einer Amazon Elastic Compute Cloud (Amazon EC2) Linux-Instance.

## Voraussetzungen und Einschränkungen
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-prereqs"></a>

**Voraussetzungen**
+ Ein aktives [Amazon Web Services (AWS) -Konto](https://aws.amazon.com/account/)
+ Eine [AWS Identity and Access Management (IAM) -Rolle](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) mit ausreichendem Zugriff, um AWS-Ressourcen für dieses Muster zu erstellen 
+ [Visual Studio Community 2022](https://visualstudio.microsoft.com/downloads/) oder höher wurde heruntergeladen und installiert
+ Ein auf ASP.NET Core modernisiertes .NET Framework-Projekt
+ Ein Repositorium GitHub 

**Produktversionen**
+ Visual Studio Community 2022 oder höher

## Architektur
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-architecture"></a>

**Zielarchitektur**

Dieses Muster verwendet eine [ CloudFormation AWS-Vorlage](https://console.aws.amazon.com/cloudformation/home?region=us-east-2#/stacks/new?stackName=SSM-SSH-Demo&templateURL=https://aws-quickstart.s3.amazonaws.com/quickstart-examples/samples/session-manager-ssh/session-manager-example.yaml), um die im folgenden Diagramm gezeigte Architektur mit hoher Verfügbarkeit zu erstellen. Eine Amazon EC2 Linux-Instance wird in einem privaten Subnetz gestartet. AWS Systems Manager Session Manager wird verwendet, um auf die private Amazon EC2 Linux-Instance zuzugreifen und die API zu testen, die im Docker-Container läuft.

![\[Ein Benutzer, der auf die Amazon EC2 Linux-Instance zugreift und die im Docker-Container ausgeführte API testet.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/512e61b2-10ba-43be-bbd8-2bdc597c3de3/images/9c5206f6-32b1-47be-9037-360c0bff713c.png)


1. Zugriff auf die Linux-Instance über Session Manager

## Tools
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-tools"></a>

**AWS-Services**
+ [AWS-Befehlszeilenschnittstelle](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) — AWS Command Line Interface (AWS CLI) ist ein Open-Source-Tool für die Interaktion mit AWS-Services über Befehle in Ihrer Befehlszeilen-Shell. Mit minimaler Konfiguration können Sie AWS-CLI-Befehle ausführen, die Funktionen implementieren, die denen der browserbasierten AWS-Managementkonsole entsprechen.
+ [AWS-Managementkonsole](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/learn-whats-new.html) — Die AWS-Managementkonsole ist eine Webanwendung, die eine breite Sammlung von Servicekonsolen für die Verwaltung von AWS-Ressourcen umfasst und sich auf diese bezieht. Wenn Sie sich zum ersten Mal anmelden, sehen Sie die Startseite der Konsole. Die Startseite bietet Zugriff auf jede Servicekonsole und bietet einen zentralen Ort, an dem Sie auf die Informationen zugreifen können, die Sie zur Ausführung Ihrer AWS-bezogenen Aufgaben benötigen.
+ [AWS Systems Manager Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html) — Session Manager ist eine vollständig verwaltete Funktion von AWS Systems Manager. Mit Session Manager können Sie Ihre Amazon Elastic Compute Cloud (Amazon EC2) -Instances verwalten. Session Manager bietet eine sichere und überprüfbare Knotenverwaltung, ohne dass eingehende Ports geöffnet, Bastion-Hosts verwaltet oder SSH-Schlüssel verwaltet werden müssen.

**Andere Tools**
+ [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/) — Visual Studio 2022 ist eine integrierte Entwicklungsumgebung (IDE).
+ [Docker](https://www.docker.com/) — Docker ist eine Reihe von Platform-as-a-Service (PaaS) -Produkten, die Virtualisierung auf Betriebssystemebene nutzen, um Software in Containern bereitzustellen.

**Code**

```
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
 WORKDIR /app
EXPOSE 80
EXPOSE 443
 
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["DemoNetCoreWebAPI/DemoNetCoreWebAPI.csproj", "DemoNetCoreWebAPI/"]
RUN dotnet restore "DemoNetCoreWebAPI/DemoNetCoreWebAPI.csproj"
COPY . .
WORKDIR "/src/DemoNetCoreWebAPI"
RUN dotnet build "DemoNetCoreWebAPI.csproj" -c Release -o /app/build
 
FROM build AS publish
RUN dotnet publish "DemoNetCoreWebAPI.csproj" -c Release -o /app/publish
 
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DemoNetCoreWebAPI.dll"]
```

## Epen
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-epics"></a>

### Entwickeln Sie die ASP.NET Core-Web-API
<a name="develop-the-asp-net-core-web-api"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie mit Visual Studio ein Beispiel für eine ASP.NET Core-Web-API. | Gehen Sie wie folgt vor, um ein Beispiel für eine ASP.NET Core-Web-API zu erstellen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | App-Developer | 
| Erstellen Sie eine Docker-Datei. | Gehen Sie wie folgt vor, um ein Dockerfile zu erstellen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html)Führen Sie den folgenden Befehl aus, um die Änderungen in Ihr GitHub Repository zu übertragen.<pre>git add --all<br />git commit -m "Dockerfile added"<br />git push</pre> | App-Developer | 

### Richten Sie die Amazon EC2 Linux-Instance ein
<a name="set-up-the-amazon-ec2-linux-instance"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Richten Sie die Infrastruktur ein. | Starten Sie die [ CloudFormation AWS-Vorlage](https://console.aws.amazon.com/cloudformation/home?region=us-east-2#/stacks/new?stackName=SSM-SSH-Demo&templateURL=https://aws-quickstart.s3.amazonaws.com/quickstart-examples/samples/session-manager-ssh/session-manager-example.yaml), um die Infrastruktur zu erstellen, die Folgendes umfasst: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html)Weitere Informationen zum Zugriff auf eine private EC2 Amazon-Instance mit Session Manager, ohne dass ein Bastion-Host erforderlich ist, finden Sie im Blogbeitrag [Toward a bastion-less world](https://aws.amazon.com/blogs/infrastructure-and-automation/toward-a-bastion-less-world/). | App-Entwickler, AWS-Administrator, AWS DevOps | 
| Melden Sie sich bei der Amazon EC2 Linux-Instance an. | Gehen Sie wie folgt vor, um eine Verbindung zur Amazon EC2 Linux-Instance im privaten Subnetz herzustellen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | App-Developer | 
| Installieren und starten Sie Docker. | Gehen Sie wie folgt vor, um Docker in der Amazon EC2 Linux-Instance zu installieren und zu starten:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | App-Entwickler, AWS-Administrator, AWS DevOps | 
| Installiere Git und klone das Repository. | Gehen Sie wie folgt vor, um Git auf der Amazon EC2 Linux-Instance zu installieren und das Repository von GitHub zu klonen.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | App-Entwickler, AWS-Administrator, AWS DevOps | 
| Erstellen Sie den Docker-Container und führen Sie ihn aus. | Gehen Sie wie folgt vor, um das Docker-Image zu erstellen und den Container in der Amazon EC2 Linux-Instance auszuführen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | App-Entwickler, AWS-Administrator, AWS DevOps | 

### Testen Sie die Web-API
<a name="test-the-web-api"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Testen Sie die Web-API mit dem Befehl curl. | Führen Sie den folgenden Befehl aus, um die Web-API zu testen.<pre>curl -X GET "http://localhost/WeatherForecast" -H  "accept: text/plain"</pre>Überprüfen Sie die API-Antwort.Sie können die curl-Befehle für jeden Endpunkt von Swagger abrufen, wenn Sie ihn lokal ausführen. | App-Developer | 

### Bereinigen von Ressourcen
<a name="clean-up-resources"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Löschen Sie alle Ressourcen. | Löschen Sie den Stapel, um alle Ressourcen zu entfernen. Dadurch wird sichergestellt, dass Ihnen keine Dienste in Rechnung gestellt werden, die Sie nicht nutzen. | AWS-Administrator, AWS DevOps | 

## Zugehörige Ressourcen
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-resources"></a>
+ [Stellen Sie mithilfe von PuTTY von Windows aus eine Connect zu Ihrer Linux-Instance her](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html)
+ [Erstellen Sie eine Web-API mit ASP.NET Core](https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-5.0&tabs=visual-studio)
+ [Auf dem Weg zu einer Welt ohne Bastionen](https://aws.amazon.com/blogs/infrastructure-and-automation/toward-a-bastion-less-world/)

# Führen Sie statusbehaftete Workloads mit persistentem Datenspeicher aus, indem Sie Amazon EFS auf Amazon EKS mit AWS Fargate verwenden
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate"></a>

*Ricardo Morais, Rodrigo Bersa und Lucio Pereira, Amazon Web Services*

## Zusammenfassung
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-summary"></a>

Dieses Muster bietet Anleitungen zur Aktivierung von Amazon Elastic File System (Amazon EFS) als Speichergerät für Container, die auf Amazon Elastic Kubernetes Service (Amazon EKS) ausgeführt werden, indem Sie AWS Fargate zur Bereitstellung Ihrer Rechenressourcen verwenden.

Das in diesem Muster beschriebene Setup folgt bewährten Sicherheitsmethoden und bietet standardmäßig Sicherheit im Ruhezustand und Sicherheit bei der Übertragung. Um Ihr Amazon EFS-Dateisystem zu verschlüsseln, verwendet es einen AWS Key Management Service (AWS KMS) -Schlüssel, aber Sie können auch einen Schlüsselalias angeben, der den Prozess der Erstellung eines KMS-Schlüssels auslöst.

Sie können den Schritten in diesem Muster folgen, um einen Namespace und ein Fargate-Profil für eine proof-of-concept (PoC-) Anwendung zu erstellen, den Amazon EFS Container Storage Interface (CSI) -Treiber zu installieren, der für die Integration des Kubernetes-Clusters in Amazon EFS verwendet wird, die Speicherklasse zu konfigurieren und die PoC-Anwendung bereitzustellen. Diese Schritte führen zu einem Amazon EFS-Dateisystem, das von mehreren Kubernetes-Workloads gemeinsam genutzt wird und über Fargate ausgeführt wird. Das Muster wird von Skripten begleitet, die diese Schritte automatisieren.

Sie können dieses Muster verwenden, wenn Sie Datenpersistenz in Ihren containerisierten Anwendungen wünschen und Datenverluste bei Skalierungsvorgängen vermeiden möchten. Beispiel:
+ **DevOps Tools** — Ein gängiges Szenario ist die Entwicklung eines Tools für kontinuierliche Integration und kontinuierliche Bereitstellung (Continuous Delivery). CI/CD) strategy. In this case, you can use Amazon EFS as a shared file system to store configurations among different instances of the CI/CD tool or to store a cache (for example, an Apache Maven repository) for pipeline stages among different instances of the CI/CD
+ **Webserver** — Ein gängiges Szenario ist die Verwendung von Apache als HTTP-Webserver. Sie können Amazon EFS als gemeinsam genutztes Dateisystem verwenden, um statische Dateien zu speichern, die von verschiedenen Instanzen des Webservers gemeinsam genutzt werden. In diesem Beispielszenario werden Änderungen direkt auf das Dateisystem angewendet, anstatt statische Dateien in ein Docker-Image zu integrieren.

## Voraussetzungen und Einschränkungen
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-prereqs"></a>

**Voraussetzungen**
+ Ein aktives AWS-Konto
+ Ein vorhandener Amazon EKS-Cluster mit Kubernetes Version 1.17 oder höher (getestet bis Version 1.27)
+ Ein vorhandenes Amazon EFS-Dateisystem zum Binden von Kubernetes StorageClass und zum dynamischen Bereitstellen von Dateisystemen
+ Berechtigungen für die Clusterverwaltung
+ Kontext, der so konfiguriert ist, dass er auf den gewünschten Amazon EKS-Cluster verweist

**Einschränkungen**
+ Bei der Verwendung von Amazon EKS mit Fargate sind einige Einschränkungen zu beachten. Beispielsweise wird die Verwendung einiger Kubernetes-Konstrukte, wie z. B. DaemonSets privilegierte Container, nicht unterstützt. Weitere Informationen zu den Einschränkungen von Fargate finden Sie in den [Überlegungen zu AWS Fargate](https://docs.aws.amazon.com/eks/latest/userguide/fargate.html#fargate-considerations) in der Amazon EKS-Dokumentation.
+ Der mit diesem Muster bereitgestellte Code unterstützt Workstations, auf denen Linux oder macOS ausgeführt wird.

**Produktversionen**
+ AWS-Befehlszeilenschnittstelle (AWS CLI) Version 2 oder höher
+ Amazon EFS CSI-Treiber Version 1.0 oder höher (getestet bis Version 2.4.8)
+ eksctl Version 0.24.0 oder höher (getestet bis Version 0.158.0)
+ jq Version 1.6 oder höher
+ kubectl Version 1.17 oder höher (getestet bis Version 1.27)
+ Kubernetes Version 1.17 oder höher (getestet bis Version 1.27)

## Architektur
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-architecture"></a>

![\[Architekturdiagramm der Ausführung von statusbehafteten Workloads mit persistentem Datenspeicher mithilfe von Amazon EFS\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/2487e285-269b-415b-a270-877f973e3aaf/images/ec8de63c-3307-4010-9e03-2bd7b9881fff.png)


Die Zielarchitektur besteht aus der folgenden Infrastruktur:
+ Eine Virtual Private Cloud (VPC)
+ Zwei Verfügbarkeitszonen
+ Ein öffentliches Subnetz mit einem NAT-Gateway, das Internetzugang bietet
+ Ein privates Subnetz mit einem Amazon EKS-Cluster und Amazon EFS-Mount-Zielen (auch bekannt als *Mount-Points*)
+ Amazon EFS auf VPC-Ebene

Im Folgenden finden Sie die Umgebungsinfrastruktur für den Amazon EKS-Cluster:
+ AWS Fargate-Profile, die die Kubernetes-Konstrukte auf Namespace-Ebene berücksichtigen
+ Ein Kubernetes-Namespace mit:
  + Zwei Anwendungs-Pods, die über Availability Zones verteilt sind
  + Ein persistenter Volume Claim (PVC), der an ein persistentes Volume (PV) auf Clusterebene gebunden ist
+ Ein clusterweiter PV, der an das PVC im Namespace gebunden ist und auf die Amazon EFS-Mount-Ziele im privaten Subnetz außerhalb des Clusters verweist

## Tools
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-tools"></a>

**AWS-Services**
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) ist ein Open-Source-Tool, mit dem Sie über die Befehlszeile mit AWS-Services interagieren können.
+ [Amazon Elastic File System (Amazon EFS)](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) unterstützt Sie bei der Erstellung und Konfiguration gemeinsam genutzter Dateisysteme in der AWS-Cloud. In diesem Muster bietet es ein einfaches, skalierbares, vollständig verwaltetes und gemeinsam genutztes Dateisystem für die Verwendung mit Amazon EKS.
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) hilft Ihnen, Kubernetes auf AWS auszuführen, ohne Ihre eigenen Cluster installieren oder betreiben zu müssen.
+ [AWS Fargate](https://docs.aws.amazon.com/eks/latest/userguide/fargate.html) ist eine serverlose Rechen-Engine für Amazon EKS. Sie erstellt und verwaltet Rechenressourcen für Ihre Kubernetes-Anwendungen.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) unterstützt Sie bei der Erstellung und Kontrolle kryptografischer Schlüssel, um Ihre Daten zu schützen.

**Andere Tools**
+ [Docker](https://www.docker.com/) ist eine Reihe von Platform-as-a-Service (PaaS) -Produkten, die Virtualisierung auf Betriebssystemebene nutzen, um Software in Containern bereitzustellen.
+ [eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) ist ein Befehlszeilenprogramm zum Erstellen und Verwalten von Kubernetes-Clustern auf Amazon EKS.
+ [kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) ist eine Befehlszeilenschnittstelle, mit der Sie Befehle für Kubernetes-Cluster ausführen können.
+ [jq ist ein Befehlszeilentool](https://stedolan.github.io/jq/download/) zum Parsen von JSON.

**Code**

Der Code für dieses Muster wird in der GitHub [Persistenzkonfiguration mit Amazon EFS auf Amazon EKS mithilfe des AWS Fargate-Repos](https://github.com/aws-samples/eks-efs-share-within-fargate) bereitgestellt. Die Skripts sind nach Epic in den Ordnern `epic01` bis angeordnet`epic06`, entsprechend der Reihenfolge im Abschnitt [Epics](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-epics) in diesem Muster.

## Best Practices
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-best-practices"></a>

Die Zielarchitektur umfasst die folgenden Services und Komponenten und entspricht den Best Practices von [AWS Well-Architected Framework](https://aws.amazon.com/architecture/well-architected/):
+ Amazon EFS, das ein einfaches, skalierbares, vollständig verwaltetes elastisches NFS-Dateisystem bietet. Dies wird als gemeinsam genutztes Dateisystem für alle Replikationen der PoC-Anwendung verwendet, die in Pods ausgeführt werden, die in den privaten Subnetzen des ausgewählten Amazon EKS-Clusters verteilt sind.
+ Ein Amazon EFS-Mount-Ziel für jedes private Subnetz. Dies bietet Redundanz pro Availability Zone innerhalb der Virtual Private Cloud (VPC) des Clusters.
+ Amazon EKS, das die Kubernetes-Workloads ausführt. Sie müssen einen Amazon EKS-Cluster bereitstellen, bevor Sie dieses Muster verwenden können, wie im Abschnitt [Voraussetzungen](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-prereqs) beschrieben.
+ AWS KMS bietet Verschlüsselung im Ruhezustand für den Inhalt, der im Amazon EFS-Dateisystem gespeichert ist.
+ Fargate, das die Rechenressourcen für die Container verwaltet, sodass Sie sich auf die Geschäftsanforderungen konzentrieren können, anstatt die Infrastruktur zu belasten. Das Fargate-Profil wird für alle privaten Subnetze erstellt. Es bietet Redundanz pro Availability Zone innerhalb der Virtual Private Cloud (VPC) des Clusters.
+ Kubernetes-Pods, mit denen überprüft wird, ob Inhalte von verschiedenen Instanzen einer Anwendung gemeinsam genutzt, genutzt und geschrieben werden können.

## Epen
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-epics"></a>

### Bereitstellen eines Amazon EKS-Clusters (optional)
<a name="provision-an-amazon-eks-cluster-optional"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie einen Amazon-EKS-Cluster. | Wenn Sie bereits einen Cluster bereitgestellt haben, fahren Sie mit dem nächsten Epic fort. Erstellen Sie einen Amazon EKS-Cluster in Ihrem bestehenden AWS-Konto. Verwenden Sie im [GitHub Verzeichnis](https://github.com/aws-samples/eks-efs-share-within-fargate/tree/master/bootstrap) eines der Muster, um einen Amazon EKS-Cluster mithilfe von Terraform oder eksctl bereitzustellen. Weitere Informationen finden Sie unter [Erstellen eines Amazon EKS-Clusters](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html) in der Amazon EKS-Dokumentation. Das Terraform-Muster enthält auch Beispiele, die zeigen, wie Sie: Fargate-Profile mit Ihrem Amazon EKS-Cluster verknüpfen, ein Amazon EFS-Dateisystem erstellen und den Amazon EFS-CSI-Treiber in Ihrem Amazon EKS-Cluster bereitstellen können. | AWS-Administrator, Terraform- oder eksctl-Administrator, Kubernetes-Administrator | 
| Exportieren Sie Umgebungsvariablen. | Führen Sie das Skript env.sh aus. Es enthält die Informationen, die für die nächsten Schritte erforderlich sind.<pre>source ./scripts/env.sh<br />Inform the AWS Account ID:<br /><13-digit-account-id><br />Inform your AWS Region:<br /><aws-Region-code><br />Inform your Amazon EKS Cluster Name:<br /><amazon-eks-cluster-name><br />Inform the Amazon EFS Creation Token:<br /><self-genereated-uuid></pre>Falls noch nicht angegeben, können Sie alle oben angeforderten Informationen mit den folgenden CLI-Befehlen abrufen.<pre># ACCOUNT ID<br />aws sts get-caller-identity --query "Account" --output text</pre><pre># REGION CODE<br />aws configure get region</pre><pre># CLUSTER EKS NAME<br />aws eks list-clusters --query "clusters" --output text</pre><pre># GENERATE EFS TOKEN<br />uuidgen</pre> | AWS-Systemadministrator | 

### Erstellen Sie einen Kubernetes-Namespace und ein verknüpftes Fargate-Profil
<a name="create-a-kubernetes-namespace-and-a-linked-fargate-profile"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie einen Kubernetes-Namespace und ein Fargate-Profil für Anwendungsworkloads. | Erstellen Sie einen Namespace für den Empfang der Anwendungs-Workloads, die mit Amazon EFS interagieren. Führen Sie das `create-k8s-ns-and-linked-fargate-profile.sh`-Skript aus. Sie können wählen, ob Sie einen benutzerdefinierten Namespace-Namen oder den standardmäßig bereitgestellten Namespace verwenden möchten. `poc-efs-eks-fargate`**Mit einem benutzerdefinierten Anwendungs-Namespace-Namen:**<pre>export $APP_NAMESPACE=<CUSTOM_NAME><br />./scripts/epic01/create-k8s-ns-and-linked-fargate-profile.sh \<br />-c "$CLUSTER_NAME" -n "$APP_NAMESPACE"</pre>**Ohne einen benutzerdefinierten Anwendungs-Namespace-Namen:**<pre>./scripts/epic01/create-k8s-ns-and-linked-fargate-profile.sh \<br />    -c "$CLUSTER_NAME"</pre>wo `$CLUSTER_NAME` ist der Name Ihres Amazon EKS-Clusters. Der `-n <NAMESPACE>` Parameter ist optional. Wenn Sie nicht darüber informiert werden, wird ein standardmäßig generierter Namespace-Name bereitgestellt. | Kubernetes-Benutzer mit erteilten Berechtigungen | 

### Erstellen eines Amazon EFS-Dateisystems
<a name="create-an-amazon-efs-file-system"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Generieren Sie ein eindeutiges Token. | Amazon EFS benötigt ein Erstellungstoken, um einen idempotenten Vorgang sicherzustellen (der Aufruf des Vorgangs mit demselben Erstellungstoken hat keine Auswirkung). Um diese Anforderung zu erfüllen, müssen Sie mithilfe einer verfügbaren Technik ein eindeutiges Token generieren. Sie können beispielsweise einen Universally Unique Identifier (UUID) generieren, um ihn als Erstellungstoken zu verwenden. | AWS-Systemadministrator | 
| Erstellen Sie ein Amazon EFS-Dateisystem. | Erstellen Sie das Dateisystem für den Empfang der Datendateien, die von den Anwendungsworkloads gelesen und geschrieben werden. Sie können ein verschlüsseltes oder ein unverschlüsseltes Dateisystem erstellen. (Es hat sich bewährt, dass der Code für dieses Muster ein verschlüsseltes System erstellt, sodass die Verschlüsselung im Ruhezustand standardmäßig aktiviert ist.) Sie können einen eindeutigen, symmetrischen AWS-KMS-Schlüssel verwenden, um Ihr Dateisystem zu verschlüsseln. Wenn kein benutzerdefinierter Schlüssel angegeben ist, wird ein von AWS verwalteter Schlüssel verwendet.Verwenden Sie das Skript create-efs.sh, um ein verschlüsseltes oder unverschlüsseltes Amazon EFS-Dateisystem zu erstellen, nachdem Sie ein eindeutiges Token für Amazon EFS generiert haben.**Mit Verschlüsselung im Ruhezustand, ohne KMS-Schlüssel:**<pre>./scripts/epic02/create-efs.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN"</pre>wo `$CLUSTER_NAME` ist der Name Ihres Amazon EKS-Clusters und `$EFS_CREATION_TOKEN` ist ein eindeutiges Erstellungstoken für das Dateisystem.**Mit Verschlüsselung im Ruhezustand, mit einem KMS-Schlüssel:**<pre>./scripts/epic02/create-efs.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN" \<br />    -k "$KMS_KEY_ALIAS"</pre>wobei `$CLUSTER_NAME` der Name Ihres Amazon EKS-Clusters, `$EFS_CREATION_TOKEN` ein eindeutiges Erstellungstoken für das Dateisystem und der Alias für den KMS-Schlüssel `$KMS_KEY_ALIAS` ist.**Ohne Verschlüsselung:**<pre>./scripts/epic02/create-efs.sh -d \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN"</pre>wobei `$CLUSTER_NAME` der Name Ihres Amazon EKS-Clusters `$EFS_CREATION_TOKEN` steht, ein eindeutiges Erstellungstoken für das Dateisystem ist und die Verschlüsselung im Ruhezustand `–d` deaktiviert. | AWS-Systemadministrator | 
| Erstellen einer Sicherheitsgruppe. | Erstellen Sie eine Sicherheitsgruppe, um dem Amazon EKS-Cluster den Zugriff auf das Amazon EFS-Dateisystem zu ermöglichen. | AWS-Systemadministrator | 
| Aktualisieren Sie die Regel für eingehende Nachrichten für die Sicherheitsgruppe. | Aktualisieren Sie die Regeln für eingehenden Datenverkehr der Sicherheitsgruppe, um eingehenden Datenverkehr für die folgenden Einstellungen zuzulassen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate.html) | AWS-Systemadministrator | 
| Fügen Sie für jedes private Subnetz ein Mount-Ziel hinzu. | Erstellen Sie für jedes private Subnetz des Kubernetes-Clusters ein Mount-Ziel für das Dateisystem und die Sicherheitsgruppe. | AWS-Systemadministrator | 

### Installieren Sie Amazon EFS-Komponenten im Kubernetes-Cluster
<a name="install-amazon-efs-components-into-the-kubernetes-cluster"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Stellen Sie den Amazon EFS CSI-Treiber bereit. | Stellen Sie den Amazon EFS CSI-Treiber im Cluster bereit. Der Treiber stellt Speicher entsprechend den von Anwendungen generierten persistenten Volume-Ansprüchen bereit. Führen Sie das `create-k8s-efs-csi-sc.sh` Skript aus, um den Amazon EFS CSI-Treiber und die Speicherklasse im Cluster bereitzustellen.<pre>./scripts/epic03/create-k8s-efs-csi-sc.sh</pre>Dieses Skript verwendet das `kubectl` Hilfsprogramm. Stellen Sie also sicher, dass der Kontext konfiguriert wurde, und verweisen Sie auf den gewünschten Amazon EKS-Cluster. | Kubernetes-Benutzer mit erteilten Berechtigungen | 
| Stellen Sie die Speicherklasse bereit. | Stellen Sie die Speicherklasse im Cluster für den Amazon EFS-Provisioner bereit (efs.csi.aws.com). | Kubernetes-Benutzer mit erteilten Berechtigungen | 

### Installieren Sie die PoC-Anwendung im Kubernetes-Cluster
<a name="install-the-poc-application-into-the-kubernetes-cluster"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Stellen Sie das persistente Volume bereit. | Stellen Sie das persistente Volume bereit und verknüpfen Sie es mit der erstellten Speicherklasse und der ID des Amazon EFS-Dateisystems. Die Anwendung verwendet das persistente Volume zum Lesen und Schreiben von Inhalten. Sie können eine beliebige Größe für das persistente Volumen im Speicherfeld angeben. Kubernetes erfordert dieses Feld, aber da Amazon EFS ein elastisches Dateisystem ist, erzwingt es keine Dateisystemkapazität. Sie können das persistente Volume mit oder ohne Verschlüsselung bereitstellen. (Der Amazon EFS CSI-Treiber aktiviert standardmäßig die Verschlüsselung als bewährte Methode.) Führen Sie das `deploy-poc-app.sh` Skript aus, um das persistente Volume, den Anspruch auf persistente Volumes und die beiden Workloads bereitzustellen.**Bei Verschlüsselung während der Übertragung:**<pre>./scripts/epic04/deploy-poc-app.sh \<br />    -t "$EFS_CREATION_TOKEN"</pre>wo `$EFS_CREATION_TOKEN` ist das eindeutige Erstellungstoken für das Dateisystem.**Ohne Verschlüsselung bei der Übertragung:**<pre>./scripts/epic04/deploy-poc-app.sh -d \<br />    -t "$EFS_CREATION_TOKEN"</pre>wo `$EFS_CREATION_TOKEN` ist das eindeutige Erstellungstoken für das Dateisystem und `–d` deaktiviert die Verschlüsselung bei der Übertragung. | Kubernetes-Benutzer mit erteilten Berechtigungen | 
| Stellen Sie den von der Anwendung angeforderten Anspruch auf persistentes Volumen bereit. | Stellen Sie den von der Anwendung angeforderten Anspruch auf beständiges Volumen bereit und verknüpfen Sie ihn mit der Speicherklasse. Verwenden Sie denselben Zugriffsmodus wie das persistente Volume, das Sie zuvor erstellt haben. Sie können im Speicherfeld eine beliebige Größe für den Anspruch auf persistentes Volumen angeben. Kubernetes erfordert dieses Feld, aber da Amazon EFS ein elastisches Dateisystem ist, erzwingt es keine Dateisystemkapazität. | Kubernetes-Benutzer mit erteilten Berechtigungen | 
| Stellen Sie Workload 1 bereit. | Stellen Sie den Pod bereit, der Workload 1 der Anwendung darstellt. Dieser Workload schreibt Inhalt in die Datei`/data/out1.txt`. | Kubernetes-Benutzer mit erteilten Berechtigungen | 
| Stellen Sie Workload 2 bereit. | Stellen Sie den Pod bereit, der Workload 2 der Anwendung darstellt. Dieser Workload schreibt Inhalt in die Datei`/data/out2.txt`. | Kubernetes-Benutzer mit erteilten Berechtigungen | 

### Überprüfen Sie die Persistenz, Haltbarkeit und gemeinsame Nutzung des Dateisystems
<a name="validate-file-system-persistence-durability-and-shareability"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Überprüfen Sie den Status von`PersistentVolume`. | Geben Sie den folgenden Befehl ein, um den Status von zu überprüfen`PersistentVolume`.<pre>kubectl get pv</pre>Eine Beispielausgabe finden Sie im Abschnitt [Zusätzliche Informationen](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-additional). | Kubernetes-Benutzer mit erteilten Berechtigungen | 
| Überprüfen Sie den Status von. `PersistentVolumeClaim` | Geben Sie den folgenden Befehl ein, um den Status von zu überprüfen`PersistentVolumeClaim`.<pre>kubectl -n poc-efs-eks-fargate get pvc</pre>Eine Beispielausgabe finden Sie im Abschnitt [Zusätzliche Informationen](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-additional). | Kubernetes-Benutzer mit erteilten Berechtigungen | 
| Stellen Sie sicher, dass Workload 1 in das Dateisystem schreiben kann. | Geben Sie den folgenden Befehl ein, um zu überprüfen, ob Workload 1 schreibt`/data/out1.txt`.<pre>kubectl exec -ti poc-app1 -n poc-efs-eks-fargate -- tail -f /data/out1.txt</pre>Die Ergebnisse ähneln den folgenden:<pre>...<br />Thu Sep  3 15:25:07 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:25:12 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:25:17 UTC 2023 - PoC APP 1<br />...</pre> | Kubernetes-Benutzer mit erteilten Berechtigungen | 
| Stellen Sie sicher, dass Workload 2 in das Dateisystem schreiben kann. | Geben Sie den folgenden Befehl ein, um zu überprüfen, ob Workload 2 schreibt`/data/out2.txt`.<pre>kubectl -n $APP_NAMESPACE exec -ti poc-app2 -- tail -f /data/out2.txt</pre>Die Ergebnisse ähneln den folgenden:<pre>...<br />Thu Sep  3 15:26:48 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:53 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:58 UTC 2023 - PoC APP 2<br />...</pre> | Kubernetes-Benutzer mit erteilten Berechtigungen | 
| Stellen Sie sicher, dass Workload 1 die von Workload 2 geschriebene Datei lesen kann. | Geben Sie den folgenden Befehl ein, um zu überprüfen, ob Workload 1 die von Workload 2 geschriebene `/data/out2.txt` Datei lesen kann.<pre>kubectl exec -ti poc-app1 -n poc-efs-eks-fargate -- tail -n 3 /data/out2.txt</pre>Die Ergebnisse ähneln den folgenden:<pre>...<br />Thu Sep  3 15:26:48 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:53 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:58 UTC 2023 - PoC APP 2<br />...</pre> | Kubernetes-Benutzer mit erteilten Berechtigungen | 
| Stellen Sie sicher, dass Workload 2 die von Workload 1 geschriebene Datei lesen kann. | Geben Sie den folgenden Befehl ein, um zu überprüfen, ob Workload 2 die von Workload 1 geschriebene `/data/out1.txt` Datei lesen kann.<pre>kubectl -n $APP_NAMESPACE exec -ti poc-app2 -- tail -n 3 /data/out1.txt</pre>Die Ergebnisse ähneln den folgenden:<pre>...<br />Thu Sep  3 15:29:22 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:29:27 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:29:32 UTC 2023 - PoC APP 1<br />...</pre> | Kubernetes-Benutzer mit erteilten Berechtigungen | 
| Stellen Sie sicher, dass Dateien nach dem Entfernen von Anwendungskomponenten beibehalten werden. | Als Nächstes verwenden Sie ein Skript, um die Anwendungskomponenten (persistentes Volume, Persistentes Volume Claim und Pods) zu entfernen und zu überprüfen, ob die Dateien `/data/out1.txt` im Dateisystem aufbewahrt `/data/out2.txt` werden. Führen Sie das Skript `validate-efs-content.sh` mit dem folgenden Befehl aus.<pre>./scripts/epic05/validate-efs-content.sh \<br />    -t "$EFS_CREATION_TOKEN"</pre>wo `$EFS_CREATION_TOKEN` ist das eindeutige Erstellungstoken für das Dateisystem.Die Ergebnisse ähneln den folgenden:<pre>pod/poc-app-validation created<br />Waiting for pod get Running state...<br />Waiting for pod get Running state...<br />Waiting for pod get Running state...<br />Results from execution of 'find /data' on validation process pod:<br />/data<br />/data/out2.txt<br />/data/out1.txt</pre> | Kubernetes-Benutzer mit erteilten Berechtigungen, Systemadministrator | 

### Überwachen Sie den Betrieb
<a name="monitor-operations"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Überwachen Sie Anwendungsprotokolle. | Senden Sie die Anwendungsprotokolle im Rahmen eines Vorgangs am zweiten Tag CloudWatch zur Überwachung an Amazon. | AWS-Systemadministrator, Kubernetes-Benutzer mit erteilten Berechtigungen | 
| Überwachen Sie Amazon EKS- und Kubernetes-Container mit Container Insights. | Überwachen Sie im Rahmen eines Vorgangs am zweiten Tag die Amazon EKS- und Kubernetes-Systeme mithilfe von Amazon CloudWatch Container Insights. Dieses Tool sammelt, aggregiert und fasst Metriken aus containerisierten Anwendungen auf verschiedenen Ebenen und Dimensionen zusammen. [Weitere Informationen finden Sie im Abschnitt Verwandte Ressourcen.](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-resources) | AWS-Systemadministrator, Kubernetes-Benutzer mit erteilten Berechtigungen | 
| Überwachen Sie Amazon EFS mit CloudWatch. | Überwachen Sie im Rahmen eines Vorgangs am zweiten Tag die Dateisysteme mithilfe von Amazon CloudWatch, das Rohdaten von Amazon EFS sammelt und zu lesbaren Metriken nahezu in Echtzeit verarbeitet. Weitere Informationen finden Sie im Abschnitt [Verwandte Ressourcen](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-resources). | AWS-Systemadministrator | 

### Bereinigen von Ressourcen
<a name="clean-up-resources"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Bereinigen Sie alle erstellten Ressourcen für das Muster. | Nachdem Sie dieses Muster abgeschlossen haben, bereinigen Sie alle Ressourcen, um zu vermeiden, dass AWS-Gebühren anfallen. Führen Sie das `clean-up-resources.sh` Skript aus, um alle Ressourcen zu entfernen, nachdem Sie die PoC-Anwendung nicht mehr verwendet haben. Füllen Sie eine der folgenden Optionen aus.**Mit Verschlüsselung im Ruhezustand, mit einem KMS-Schlüssel:**<pre>./scripts/epic06/clean-up-resources.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN" \<br />    -k "$KMS_KEY_ALIAS"</pre>wobei `$CLUSTER_NAME` der Name Ihres Amazon EKS-Clusters, `$EFS_CREATION_TOKEN` das Erstellungstoken für das Dateisystem und der Alias für den KMS-Schlüssel `$KMS_KEY_ALIAS` ist.**Ohne Verschlüsselung im Ruhezustand:**<pre>./scripts/epic06/clean-up-resources.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN"</pre>wobei `$CLUSTER_NAME` der Name Ihres Amazon EKS-Clusters und das Erstellungstoken für das Dateisystem `$EFS_CREATION_TOKEN` ist. | Kubernetes-Benutzer mit erteilten Berechtigungen, Systemadministrator | 

## Zugehörige Ressourcen
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-resources"></a>

**Referenzen**
+ [AWS Fargate für Amazon EKS unterstützt jetzt Amazon EFS](https://aws.amazon.com/blogs/aws/new-aws-fargate-for-amazon-eks-now-supports-amazon-efs/) (Ankündigung)
+ [So erfassen Sie Anwendungsprotokolle bei der Verwendung von Amazon EKS auf AWS Fargate](https://aws.amazon.com/blogs/containers/how-to-capture-application-logs-when-using-amazon-eks-on-aws-fargate/) (Blogbeitrag)
+ [Verwenden von Container Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html) ( CloudWatch Amazon-Dokumentation)
+ [Container Insights auf Amazon EKS und Kubernetes einrichten](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/deploy-container-insights-EKS.html) ( CloudWatch Amazon-Dokumentation)
+ [Kennzahlen zu Amazon EKS und Kubernetes Container Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-metrics-EKS.html) ( CloudWatch Amazon-Dokumentation)
+ [Überwachung von Amazon EFS mit Amazon CloudWatch](https://docs.aws.amazon.com/efs/latest/ug/monitoring-cloudwatch.html) (Amazon EFS-Dokumentation)

**GitHub Tutorials und Beispiele**
+ [Statische Bereitstellung](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/static_provisioning/README.md)
+ [Verschlüsselung während der Übertragung](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/encryption_in_transit/README.md)
+ [Zugriff auf das Dateisystem von mehreren Pods aus](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/multiple_pods/README.md)
+ [Nutzung von Amazon EFS in StatefulSets](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/statefulset/README.md)
+ [Unterpfade werden eingebunden](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/volume_path/README.md)
+ [Verwenden von Amazon EFS-Zugriffspunkten](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/access_points/README.md)
+ [Amazon EKS Blueprints für Terraform](https://aws-ia.github.io/terraform-aws-eks-blueprints/)

**Erforderliche Tools**
+ [Installation der AWS-CLI Version 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)
+ [Installation von eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html)
+ [Kubectl wird installiert](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)
+ [jq installieren](https://stedolan.github.io/jq/download/)

## Zusätzliche Informationen
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-additional"></a>

Im Folgenden finden Sie ein Beispiel für die Ausgabe des `kubectl get pv` Befehls.

```
NAME         CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                             STORAGECLASS   REASON   AGE
poc-app-pv   1Mi        RWX            Retain           Bound    poc-efs-eks-fargate/poc-app-pvc   efs-sc                  3m56s
```

Im Folgenden finden Sie ein Beispiel für die Ausgabe des `kubectl -n poc-efs-eks-fargate get pvc` Befehls.

```
NAME          STATUS   VOLUME       CAPACITY   ACCESS MODES   STORAGECLASS   AGE
poc-app-pvc   Bound    poc-app-pv   1Mi        RWX            efs-sc         4m34s
```

# Richten Sie ereignisgesteuertes Auto Scaling in Amazon EKS mithilfe von Amazon EKS Pod Identity und KEDA ein
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda"></a>

*Dipen Desai, Abhay Diwan, Kamal Joshi und Mahendra Revanasiddappa, Amazon Web Services*

## Zusammenfassung
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-summary"></a>

Orchestrierungsplattformen wie [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) haben das Lebenszyklusmanagement containerbasierter Anwendungen optimiert. Dies hilft Unternehmen, sich auf die Entwicklung, Sicherung, den Betrieb und die Wartung containerbasierter Anwendungen zu konzentrieren. Da ereignisgesteuerte Bereitstellungen immer häufiger vorkommen, skalieren Unternehmen Kubernetes-Bereitstellungen immer häufiger auf der Grundlage verschiedener Ereignisquellen. Diese Methode kann in Kombination mit Auto Scaling zu erheblichen Kosteneinsparungen führen, da Rechenressourcen auf Abruf und eine effiziente Skalierung bereitgestellt werden, die auf die Anwendungslogik zugeschnitten ist.

[KEDA](https://keda.sh/) ist ein auf Kubernetes basierender ereignisgesteuerter Autoscaler. KEDA hilft Ihnen dabei, jeden Container in Kubernetes auf der Grundlage der Anzahl der Ereignisse, die verarbeitet werden müssen, zu skalieren. Es ist leicht und lässt sich in jeden Kubernetes-Cluster integrieren. Es funktioniert auch mit Standard-Kubernetes-Komponenten wie [Horizontal Pod Autoscaling](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) (HPA). KEDA bietet auch eine Funktion [TriggerAuthentication](https://keda.sh/docs/2.14/concepts/authentication/#re-use-credentials-and-delegate-auth-with-triggerauthentication), mit der Sie die Authentifizierung delegieren können. Es ermöglicht Ihnen, Authentifizierungsparameter zu beschreiben, die von den Containern ScaledObject und den Bereitstellungscontainern getrennt sind.

AWS bietet AWS Identity and Access Management (IAM) -Rollen, die verschiedene Kubernetes-Bereitstellungsoptionen unterstützen, darunter Amazon EKS, Amazon EKS Anywhere Red Hat OpenShift Service in AWS (ROSA) und selbstverwaltete Kubernetes-Cluster auf Amazon Elastic Compute Cloud (Amazon). EC2 Diese Rollen verwenden IAM-Konstrukte wie OpenID Connect (OIDC) -Identitätsanbieter und IAM-Vertrauensrichtlinien, um in verschiedenen Umgebungen zu arbeiten, ohne sich direkt auf Amazon EKS-Services oder verlassen zu müssen. APIs Weitere Informationen finden Sie unter [IAM-Rollen für Dienstkonten](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) in der Amazon EKS-Dokumentation.

[Amazon EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html) vereinfacht den Prozess, bei dem Kubernetes-Servicekonten IAM-Rollen übernehmen können, ohne dass OIDC-Anbieter erforderlich sind. Es bietet die Möglichkeit, Anmeldeinformationen für Ihre Anwendungen zu verwalten. Anstatt Ihre AWS Anmeldeinformationen zu erstellen und an die Container zu verteilen oder die Rolle der EC2 Amazon-Instance zu verwenden, verknüpfen Sie eine IAM-Rolle mit einem Kubernetes-Dienstkonto und konfigurieren Ihre Pods so, dass sie das Dienstkonto verwenden. Dies hilft Ihnen, eine IAM-Rolle in mehreren Clustern zu verwenden, und vereinfacht die Richtlinienverwaltung, indem die Wiederverwendung von Berechtigungsrichtlinien für alle IAM-Rollen ermöglicht wird.

Durch die Implementierung von KEDA mit Amazon EKS Pod Identity können Unternehmen eine effiziente ereignisgesteuerte auto Skalierung und eine vereinfachte Verwaltung von Anmeldeinformationen erreichen. Anwendungen werden je nach Bedarf skaliert, wodurch die Ressourcennutzung optimiert und die Kosten gesenkt werden.

Dieses Muster hilft Ihnen bei der Integration von Amazon EKS Pod Identity in KEDA. Es zeigt, wie Sie das `keda-operator` Dienstkonto verwenden und die Authentifizierung delegieren können. `TriggerAuthentication` Außerdem wird beschrieben, wie eine Vertrauensbeziehung zwischen einer IAM-Rolle für den KEDA-Operator und einer IAM-Rolle für die Anwendung eingerichtet wird. Diese Vertrauensbeziehung ermöglicht es KEDA, Nachrichten in den Ereigniswarteschlangen zu überwachen und die Skalierung für die Kubernetes-Zielobjekte anzupassen.

## Voraussetzungen und Einschränkungen
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-prereqs"></a>

**Voraussetzungen**
+ AWS Command Line Interface [(AWS CLI) Version 2.13.17 oder höher, installiert](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ [Python-Version 3.11.5 oder höher, installiert](https://www.python.org/downloads/)
+ AWS SDK für Python (Boto3) [Version 1.34.135 oder höher, installiert](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)
+ [Helm Version 3.12.3 oder höher, installiert](https://helm.sh/docs/intro/install/)
+ [kubectl Version 1.25.1 oder höher, installiert](https://kubernetes.io/docs/tasks/tools/)
+ [Docker Engine Version 26.1.1 oder höher, installiert](https://docs.docker.com/engine/install/)
+ [Ein Amazon EKS-Cluster Version 1.24 oder höher, erstellt](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)
+ Voraussetzungen für die Erstellung des Amazon EKS Pod Identity-Agenten, [erfüllt](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html#pod-id-agent-add-on-create)

**Einschränkungen**
+ Es ist erforderlich, dass Sie eine Vertrauensbeziehung zwischen der `keda-operator` Rolle und der `keda-identity` Rolle einrichten. Anweisungen finden Sie im Abschnitt [Epen](#event-driven-auto-scaling-with-eks-pod-identity-and-keda-epics) dieses Musters.

## Architektur
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-architecture"></a>

In diesem Muster erstellen Sie die folgenden AWS Ressourcen:
+ **Amazon Elastic Container Registry (Amazon ECR) -Repository** — In diesem Muster wird dieses Repo benannt. `keda-pod-identity-registry` Dieses private Repo wird zum Speichern von Docker-Images der Beispielanwendung verwendet.
+ **Amazon Simple Queue Service (Amazon SQS) -Warteschlange** — In diesem Muster wird diese Warteschlange benannt`event-messages-queue`. Die Warteschlange fungiert als Nachrichtenpuffer, der eingehende Nachrichten sammelt und speichert. KEDA überwacht die Warteschlangenmetriken, z. B. die Anzahl der Nachrichten oder die Länge der Warteschlange, und skaliert die Anwendung automatisch auf der Grundlage dieser Messwerte.
+ **IAM-Rolle für die Anwendung** — In diesem Muster wird diese Rolle benannt. `keda-identity` Die `keda-operator` Rolle übernimmt diese Rolle. Diese Rolle ermöglicht den Zugriff auf die Amazon SQS SQS-Warteschlange.
+ **IAM-Rolle für den KEDA-Operator** — In diesem Muster wird diese Rolle benannt. `keda-operator` Der KEDA-Operator verwendet diese Rolle, um die erforderlichen AWS API-Aufrufe durchzuführen. Diese Rolle ist berechtigt, die `keda-identity` Rolle zu übernehmen. Aufgrund der Vertrauensstellung zwischen den Rollen `keda-operator` und den `keda-identity` Rollen verfügt die `keda-operator` Rolle über Amazon SQS SQS-Berechtigungen.

Über die benutzerdefinierten Ressourcen `TriggerAuthentication` und `ScaledObject` Kubernetes verwendet der Operator die `keda-identity` Rolle, um eine Verbindung mit einer Amazon SQS SQS-Warteschlange herzustellen. Basierend auf der Größe der Warteschlange skaliert KEDA die Anwendungsbereitstellung automatisch. Es fügt 1 Pod für jeweils 5 ungelesene Nachrichten in der Warteschlange hinzu. Wenn sich in der Standardkonfiguration keine ungelesenen Nachrichten in der Amazon SQS SQS-Warteschlange befinden, wird die Anwendung auf 0 Pods herunterskaliert. Der KEDA-Operator überwacht die Warteschlange in einem von Ihnen festgelegten Intervall.

 

Die folgende Abbildung zeigt, wie Sie Amazon EKS Pod Identity verwenden, um der `keda-operator` Rolle sicheren Zugriff auf die Amazon SQS SQS-Warteschlange zu gewähren.

![\[Verwendung von KEDA und Amazon EKS Pod Identity zur automatischen Skalierung einer Kubernetes-basierten Anwendung.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/56f7506d-e8d3-43e5-bec6-42267fedd0ae/images/05bdbd09-9eb8-4c0b-8c0d-efe38aecb683.png)


Das Diagramm zeigt den folgenden Workflow:

1. Sie installieren den Amazon EKS Pod Identity-Agenten im Amazon EKS-Cluster.

1. Sie stellen den KEDA-Operator im KEDA-Namespace im Amazon EKS-Cluster bereit.

1. Sie erstellen die Rollen `keda-operator` und `keda-identity` IAM im Ziel. AWS-Konto

1. Sie stellen eine Vertrauensbeziehung zwischen den IAM-Rollen her.

1. Sie stellen die Anwendung im `security` Namespace bereit.

1. Der KEDA-Operator fragt Nachrichten in einer Amazon SQS SQS-Warteschlange ab.

1. KEDA initiiert HPA, wodurch die Anwendung automatisch auf der Grundlage der Warteschlangengröße skaliert wird.

## Tools
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-tools"></a>

**AWS-Services**
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) ist ein verwalteter Container-Image-Registry-Service, der sicher, skalierbar und zuverlässig ist.
+ 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.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) hilft Ihnen dabei, den Zugriff auf Ihre AWS Ressourcen sicher zu verwalten, indem kontrolliert wird, wer authentifiziert und autorisiert ist, diese zu verwenden.
+ [Amazon Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) bietet eine sichere, dauerhafte und verfügbare gehostete Warteschlange, mit der Sie verteilte Softwaresysteme und -komponenten integrieren und entkoppeln können.

**Andere Tools**
+ [KEDA](https://keda.sh/) ist ein auf Kubernetes basierender ereignisgesteuerter Autoscaler.

**Code-Repository**

Der Code für dieses Muster ist im GitHub [Event-Driven Auto Scaling using EKS Pod Identity and KEDA](https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda/tree/main) Repository verfügbar.

## Best Practices
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-best-practices"></a>

Wir empfehlen Ihnen, die ACM bewährte Methode für zu befolgen.
+ [Bewährte Methoden für Amazon EKS](https://docs.aws.amazon.com/eks/latest/best-practices/introduction.html)
+ [Bewährte Methoden für die Sicherheit in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)
+ [Bewährte Methoden für Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-best-practices.html)

## Epen
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-epics"></a>

### Ressourcen erstellen AWS
<a name="create-aws-resources"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie die IAM-Rolle für den KEDA-Operator. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | AWS-Administrator | 
| Erstellen Sie die IAM-Rolle für die Beispielanwendung. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | AWS-Administrator | 
| Erstellen einer Amazon SQS-Warteschlange | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | Allgemeines AWS | 
| Erstellen Sie ein Amazon-ECR-Repository. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | Allgemeines AWS | 

### Den Amazon EKS-Cluster einrichten
<a name="set-up-the-eks-cluster"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Stellen Sie den Amazon EKS Pod Identity-Agenten bereit. | Richten Sie für den Amazon EKS-Zielcluster den Amazon EKS Pod Identity-Agenten ein. Folgen Sie den Anweisungen unter [Amazon EKS Pod Identity Agent einrichten](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html#pod-id-agent-add-on-create) in der Amazon EKS-Dokumentation. | AWS DevOps | 
| Stellen Sie KEDA bereit. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps Ingenieur | 
| Weisen Sie dem Kubernetes-Dienstkonto die IAM-Rolle zu. | Folgen Sie den Anweisungen unter [Zuweisen einer IAM-Rolle zu einem Kubernetes-Servicekonto](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-association.html) in der Amazon EKS-Dokumentation. Verwenden Sie die folgenden Werte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | AWS DevOps | 
| Erstellen Sie einen -Namespace. | Geben Sie den folgenden Befehl ein, um einen `security` Namespace im Amazon EKS-Zielcluster zu erstellen:<pre>kubectl create ns security</pre> | DevOps Ingenieur | 

### Bereitstellen der Beispielanwendung
<a name="deploy-the-sample-application"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Klonen Sie die Anwendungsdateien. | Geben Sie den folgenden Befehl ein, um die [ereignisgesteuerte auto Skalierung mithilfe von EKS Pod Identity und dem KEDA-Repository](https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda/tree/main) von zu klonen: GitHub<pre>git clone https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda.git</pre> | DevOps Ingenieur | 
| Erstellen Sie das Docker-Image. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps Ingenieur | 
| Senden Sie das Docker-Image an Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html)Sie finden Push-Befehle, indem Sie zur Amazon ECR-Repository-Seite navigieren und dann **Push-Befehle anzeigen** wählen. | DevOps Ingenieur | 
| Stellen Sie die Beispielanwendung bereit. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps Ingenieur | 
| Weisen Sie dem Anwendungsdienstkonto die IAM-Rolle zu. | Gehen Sie wie folgt vor, um die `keda-identity` IAM-Rolle dem Dienstkonto für die Beispielanwendung zuzuordnen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps Ingenieur | 
| Bereitstellen `ScaledObject` und`TriggerAuthentication`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps Ingenieur | 

### Testen Sie die auto Skalierung
<a name="test-auto-scaling"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Senden Sie Nachrichten an die Amazon SQS SQS-Warteschlange. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps Ingenieur | 
| Überwachen Sie die Anwendungs-Pods. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps Ingenieur | 

## Fehlerbehebung
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| Der KEDA-Operator kann die Anwendung nicht skalieren. | Geben Sie den folgenden Befehl ein, um die Protokolle der `keda-operator` IAM-Rolle zu überprüfen:<pre>kubectl logs -n keda -l app=keda-operator -c keda-operator</pre> Wenn es einen `HTTP 403` Antwortcode gibt, verfügen die Anwendung und der KEDA-Scaler nicht über ausreichende Berechtigungen, um auf die Amazon SQS SQS-Warteschlange zuzugreifen. Führen Sie folgende Schritte aus:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html)Wenn ein `Assume-Role` Fehler auftritt, kann eine [Amazon EKS-Knoten-IAM-Rolle](https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html) die IAM-Rolle, für die definiert ist, nicht übernehmen. `TriggerAuthentication` Führen Sie folgende Schritte aus:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | 

## Zugehörige Ressourcen
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-resources"></a>
+ [Den Amazon EKS Pod Identity Agent einrichten](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html) (Amazon EKS-Dokumentation)
+ [Bereitstellung von KEDA](https://keda.sh/docs/2.14/deploy/) (KEDA-Dokumentation)
+ [ScaledObject Spezifikation](https://keda.sh/docs/2.16/reference/scaledobject-spec/) (KEDA-Dokumentation)
+ [Authentifizierung mit TriggerAuthentication](https://keda.sh/docs/2.14/concepts/authentication/) (KEDA-Dokumentation)

# Optimieren Sie PostgreSQL-Bereitstellungen auf Amazon EKS mithilfe von PGO
<a name="streamline-postgresql-deployments-amazon-eks-pgo"></a>

*Shalaka Dengale, Amazon Web Services*

## Zusammenfassung
<a name="streamline-postgresql-deployments-amazon-eks-pgo-summary"></a>

Dieses Muster integriert den Postgres-Operator von Crunchy Data (PGO) mit Amazon Elastic Kubernetes Service (Amazon EKS), um PostgreSQL-Bereitstellungen in cloudnativen Umgebungen zu optimieren. PGO bietet Automatisierung und Skalierbarkeit für die Verwaltung von PostgreSQL-Datenbanken in Kubernetes. Wenn Sie PGO mit Amazon EKS kombinieren, bildet es eine robuste Plattform für die effiziente Bereitstellung, Verwaltung und Skalierung von PostgreSQL-Datenbanken.

Diese Integration bietet die folgenden Hauptvorteile:
+ Automatisierte Bereitstellung: Vereinfacht die Bereitstellung und Verwaltung von PostgreSQL-Clustern.
+ Benutzerdefinierte Ressourcendefinitionen (CRDs):**** Verwendet Kubernetes-Primitive für das PostgreSQL-Management.
+ Hohe Verfügbarkeit: Unterstützt automatisches Failover und synchrone Replikation.
+ Automatisierte Backups und Wiederherstellungen:**** Optimiert Sicherungs- und Wiederherstellungsprozesse.
+ Horizontale Skalierung:**** Ermöglicht die dynamische Skalierung von PostgreSQL-Clustern.
+ Versionsupgrades: Ermöglicht fortlaufende Upgrades mit minimalen Ausfallzeiten.
+ Sicherheit: Erzwingt Verschlüsselungs-, Zugriffskontrollen und Authentifizierungsmechanismen.

## Voraussetzungen und Einschränkungen
<a name="streamline-postgresql-deployments-amazon-eks-pgo-prereqs"></a>

**Voraussetzungen**
+ Ein aktiver AWS-Konto.
+ [AWS-Befehlszeilenschnittstelle (AWS CLI) Version 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html), installiert und konfiguriert unter Linux, macOS oder Windows.
+ [AWS CLI Config](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html), um AWS Ressourcen über die Befehlszeile zu verbinden.
+ [eksctl](https://github.com/eksctl-io/eksctl#installation), installiert und konfiguriert unter Linux, MacOS oder Windows.
+ `kubectl`, installiert und konfiguriert für den Zugriff auf Ressourcen in Ihrem Amazon EKS-Cluster. Weitere Informationen finden Sie unter [Kubectl und eksctl einrichten in der Amazon EKS-Dokumentation](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html). 
+ Ihr Computerterminal ist für den Zugriff auf den Amazon EKS-Cluster konfiguriert. Weitere Informationen finden [Sie in der Amazon EKS-Dokumentation unter Konfiguration Ihres Computers für die Kommunikation mit Ihrem Cluster](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html#eks-configure-kubectl).

**Produktversionen**
+ [Kubernetes-Versionen 1.21—1.24 oder höher (siehe PGO-Dokumentation).](https://access.crunchydata.com/documentation/postgres-operator/5.2.5/)
+ PostgreSQL Version 10 oder höher. Dieses Muster verwendet PostgreSQL Version 16.

**Einschränkungen**
+ Einige AWS-Services sind nicht in allen verfügbar. AWS-Regionen Informationen zur Verfügbarkeit in den einzelnen Regionen finden Sie [AWS-Services unter Nach Regionen](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Informationen zu bestimmten Endpunkten finden Sie auf der Seite [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.

## Architektur
<a name="streamline-postgresql-deployments-amazon-eks-pgo-architecture"></a>

**Zieltechnologie-Stack**
+ Amazon EKS
+ Amazon Virtual Private Cloud (Amazon VPC)
+ Amazon Elastic Compute Cloud (Amazon EC2)

**Zielarchitektur**

![\[Architektur für die Verwendung von PGO mit drei Availability Zones und zwei Replikaten sowie PgBouncer PGO-Operator.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/4c164012-7527-4ebe-b6a7-c129600328d6/images/26a5572b-405b-4634-b96a-91254c3ea2c1.png)


Dieses Muster erstellt eine Architektur, die einen Amazon EKS-Cluster mit drei Knoten enthält. Jeder Knoten läuft auf einer Reihe von EC2-Instances im Backend. Dieses PostgreSQL-Setup folgt einer primären Replikatarchitektur, die besonders für leseintensive Anwendungsfälle effektiv ist. Die Architektur umfasst die folgenden Komponenten:
+ Der **primäre Datenbankcontainer (pg-primary)** hostet die PostgreSQL-Hauptinstanz, an die alle Schreibvorgänge gerichtet sind.
+ **Sekundäre Replikatcontainer (pg-replica)** hosten die PostgreSQL-Instanzen, die die Daten aus der Primärdatenbank replizieren und Lesevorgänge abwickeln.
+ **PgBouncer**ist ein leichter Verbindungspooler für PostgreSQL-Datenbanken, der in PGO enthalten ist. Es befindet sich zwischen dem Client und dem PostgreSQL-Server und fungiert als Vermittler für Datenbankverbindungen.
+ **PGO** automatisiert die Bereitstellung und Verwaltung von PostgreSQL-Clustern in dieser Kubernetes-Umgebung.
+ **Patroni** ist ein Open-Source-Tool, das Hochverfügbarkeitskonfigurationen für PostgreSQL verwaltet und automatisiert. Es ist in PGO enthalten. Wenn Sie Patroni mit PGO in Kubernetes verwenden, spielt dies eine entscheidende Rolle bei der Sicherstellung der Widerstandsfähigkeit und Fehlertoleranz eines PostgreSQL-Clusters. [Weitere Informationen finden Sie in der Patroni-Dokumentation.](https://patroni.readthedocs.io/en/latest/)

Der Workflow umfasst die folgenden Schritte:
+ **Stellen Sie den PGO-Operator** bereit. Sie stellen den PGO-Operator auf Ihrem Kubernetes-Cluster bereit, der auf Amazon EKS läuft. Dies kann mithilfe von Kubernetes-Manifesten oder Helm-Diagrammen erfolgen. Dieses Muster verwendet Kubernetes-Manifeste.
+ **Definieren Sie PostgreSQL-Instanzen**. Wenn der Operator ausgeführt wird, erstellen Sie benutzerdefinierte Ressourcen (CRs), um den gewünschten Status von PostgreSQL-Instanzen anzugeben. Dazu gehören Konfigurationen wie Speicher-, Replikations- und Hochverfügbarkeitseinstellungen.
+ **Betreiberverwaltung**. Sie interagieren mit dem Operator über Kubernetes-API-Objekte, z. B. CRs um PostgreSQL-Instanzen zu erstellen, zu aktualisieren oder zu löschen.
+ **Überwachung und Wartung.** Sie können den Zustand und die Leistung der PostgreSQL-Instances überwachen, die auf Amazon EKS ausgeführt werden. Betreiber stellen häufig Metriken und Protokollierung zu Überwachungszwecken bereit. Sie können bei Bedarf routinemäßige Wartungsaufgaben wie Upgrades und Patches durchführen. Weitere Informationen finden Sie unter [Überwachen der Cluster-Leistung und Anzeigen von Protokollen](https://docs.aws.amazon.com/eks/latest/userguide/eks-observe.html) in der Amazon EKS-Dokumentation.
+ **Skalierung und Backup**: Sie können die vom Betreiber bereitgestellten Funktionen verwenden, um PostgreSQL-Instanzen zu skalieren und Backups zu verwalten.

Dieses Muster deckt keine Überwachungs-, Wartungs- und Sicherungsvorgänge ab.

**Automatisierung und Skalierung**
+ Sie können es verwenden CloudFormation , um die Erstellung der Infrastruktur zu automatisieren. Weitere Informationen finden Sie unter [Amazon EKS-Ressourcen erstellen mit CloudFormation](https://docs.aws.amazon.com/eks/latest/userguide/creating-resources-with-cloudformation.html) in der Amazon EKS-Dokumentation.
+ Sie können Build Numbers GitVersion oder Jenkins verwenden, um die Bereitstellung von Datenbank-Instances zu automatisieren.

## Tools
<a name="streamline-postgresql-deployments-amazon-eks-pgo-tools"></a>

**AWS-Services**
+ 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.  
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) ist ein Open-Source-Tool, mit dem Sie über Befehle in Ihrer Befehlszeilen-Shell interagieren AWS-Services können.

**Andere Tools**
+ [eksctl](https://eksctl.io/) ist ein einfaches Befehlszeilentool zum Erstellen von Clustern auf Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) ist ein Befehlszeilenprogramm zum Ausführen von Befehlen für Kubernetes-Cluster.
+ [PGO](https://github.com/CrunchyData/postgres-operator) automatisiert und skaliert die Verwaltung von PostgreSQL-Datenbanken in Kubernetes.

## Best Practices
<a name="streamline-postgresql-deployments-amazon-eks-pgo-best-practices"></a>

Folgen Sie diesen Best Practices, um eine reibungslose und effiziente Bereitstellung zu gewährleisten:
+ **Schützen Sie Ihren EKS-Cluster**. Implementieren Sie bewährte Sicherheitsmethoden für Ihren EKS-Cluster, z. B. die Verwendung von AWS Identity and Access Management (IAM-) Rollen für Dienstkonten (IRSA), Netzwerkrichtlinien und VPC-Sicherheitsgruppen. Beschränken Sie den Zugriff auf den EKS-Cluster-API-Server und verschlüsseln Sie die Kommunikation zwischen den Knoten und dem API-Server mithilfe von TLS.
+ **Stellen Sie die Versionskompatibilität** zwischen PGO und Kubernetes sicher, die auf Amazon EKS ausgeführt werden. Einige PGO-Funktionen erfordern möglicherweise bestimmte Kubernetes-Versionen oder führen zu Kompatibilitätseinschränkungen. Weitere Informationen finden Sie in der PGO-Dokumentation unter [Komponenten und Kompatibilität](https://access.crunchydata.com/documentation/postgres-operator/5.2.5/references/components/).
+ **Planen Sie die Ressourcenzuweisung** für Ihre PGO-Bereitstellung, einschließlich CPU, Arbeitsspeicher und Speicher. Berücksichtigen Sie die Ressourcenanforderungen sowohl von PGO als auch der von ihr verwalteten PostgreSQL-Instanzen. Überwachen Sie die Ressourcennutzung und skalieren Sie die Ressourcen nach Bedarf.
+ **Design für hohe Verfügbarkeit**. Gestalten Sie Ihre PGO-Bereitstellung für hohe Verfügbarkeit, um Ausfallzeiten zu minimieren und die Zuverlässigkeit zu gewährleisten. Stellen Sie aus Gründen der Fehlertoleranz mehrere PGO-Repliken in mehreren Availability Zones bereit.
+ **Implementieren Sie Sicherungs- und Wiederherstellungsverfahren** für Ihre von PGO verwalteten PostgreSQL-Datenbanken. Verwenden Sie Funktionen von PGO oder Backup-Lösungen von Drittanbietern, die mit Kubernetes und Amazon EKS kompatibel sind.
+ **Richten Sie die Überwachung und Protokollierung** für Ihre PGO-Bereitstellung ein, um Leistung, Zustand und Ereignisse zu verfolgen. Verwenden Sie Tools wie Prometheus für die Überwachung von Metriken und Grafana für die Visualisierung. Konfigurieren Sie die Protokollierung, um PGO-Protokolle zur Fehlerbehebung und Prüfung zu erfassen.
+ **Konfigurieren Sie das Netzwerk** ordnungsgemäß, um die Kommunikation zwischen PGO, PostgreSQL-Instanzen und anderen Diensten in Ihrem Kubernetes-Cluster zu ermöglichen. Verwenden Sie Amazon VPC-Netzwerkfunktionen und Kubernetes-Netzwerk-Plugins wie Calico oder [Amazon VPC CNI](https://github.com/aws/amazon-vpc-cni-k8s) für die Durchsetzung von Netzwerkrichtlinien und die Isolierung des Datenverkehrs.
+ **Wählen Sie geeignete Speicheroptionen** für Ihre PostgreSQL-Datenbanken aus und berücksichtigen Sie dabei Faktoren wie Leistung, Haltbarkeit und Skalierbarkeit. Verwenden Sie Amazon Elastic Block Store (Amazon EBS) -Volumes oder AWS verwaltete Speicherdienste für persistenten Speicher. Weitere Informationen finden Sie unter [Speichern von Kubernetes-Volumes mit Amazon EBS in der Amazon EKS-Dokumentation](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html).
+ **Verwenden Sie Infrastructure-as-Code-Tools (IaC)** CloudFormation , um beispielsweise die Bereitstellung und Konfiguration von PGO auf Amazon EKS zu automatisieren. Definieren Sie Infrastrukturkomponenten — einschließlich des EKS-Clusters, der Netzwerk- und PGO-Ressourcen — als Code, um Konsistenz, Wiederholbarkeit und Versionskontrolle zu gewährleisten.

## Epen
<a name="streamline-postgresql-deployments-amazon-eks-pgo-epics"></a>

### Erstellen einer IAM-Rolle
<a name="create-an-iam-role"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine IAM-Rolle. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | AWS-Administrator | 

### Amazon-EKS-Cluster erstellen
<a name="create-an-eks-cluster"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie einen Amazon-EKS-Cluster. | Wenn Sie bereits einen Cluster bereitgestellt haben, überspringen Sie diesen Schritt. Andernfalls stellen Sie einen Amazon EKS-Cluster in Ihrem aktuellen mithilfe AWS-Konto `eksctl` von Terraform oder bereit. CloudFormation Dieses Muster wird `eksctl` für die Cluster-Bereitstellung verwendet.Dieses Muster verwendet Amazon EC2 als Knotengruppe für Amazon EKS. Wenn Sie es verwenden möchten AWS Fargate, lesen Sie die `managedNodeGroups` Konfiguration in der [eksctl-Dokumentation](https://eksctl.io/usage/schema/#managedNodeGroups).[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | AWS-Administrator, Terraform- oder eksctl-Administrator, Kubernetes-Administrator | 
| Überprüfen Sie den Status des Clusters. | Führen Sie den folgenden Befehl aus, um den aktuellen Status der Knoten im Cluster zu überprüfen:<pre>kubectl get nodes</pre>Wenn Sie auf Fehler stoßen, lesen Sie den [Abschnitt zur Fehlerbehebung](https://docs.aws.amazon.com/eks/latest/userguide/troubleshooting.html) in der Amazon EKS-Dokumentation. | AWS-Administrator, Terraform- oder eksctl-Administrator, Kubernetes-Administrator | 

### Erstellen Sie einen OIDC-Identitätsanbieter
<a name="create-an-oidc-identity-provider"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Aktivieren Sie den IAM OIDC-Anbieter. | Als Voraussetzung für den Amazon EBS Container Storage Interface (CSI) -Treiber benötigen Sie einen vorhandenen IAM OpenID Connect (OIDC) -Anbieter für Ihren Cluster.Aktivieren Sie den IAM OIDC-Anbieter mit dem folgenden Befehl:<pre>eksctl utils associate-iam-oidc-provider --region={region} --cluster={YourClusterNameHere} --approve</pre>Weitere Informationen zu diesem Schritt finden Sie in der [Amazon EKS-Dokumentation](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html). | AWS-Administrator | 
| Erstellen Sie eine IAM-Rolle für den Amazon EBS CSI-Treiber. | Verwenden Sie den folgenden `eksctl` Befehl, um die IAM-Rolle für den CSI-Treiber zu erstellen:<pre>eksctl create iamserviceaccount \<br />  --region {RegionName} \<br />  --name ebs-csi-controller-sa \<br />  --namespace kube-system \<br />  --cluster {YourClusterNameHere} \<br />  --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \<br />  --approve \<br />  --role-only \<br />  --role-name AmazonEKS_EBS_CSI_DriverRole</pre>Wenn Sie verschlüsselte Amazon EBS-Laufwerke verwenden, müssen Sie die Richtlinie weiter konfigurieren. Anweisungen finden Sie in der [Amazon EBS SCI-Treiberdokumentation](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/install.md#installation-1). | AWS-Administrator | 
| Fügen Sie den Amazon EBS CSI-Treiber hinzu. | Verwenden Sie den folgenden `eksctl` Befehl, um den Amazon EBS CSI-Treiber hinzuzufügen:<pre>eksctl create addon \<br />  --name aws-ebs-csi-driver \<br />  --cluster <YourClusterName> service-account-role-arn arn:aws:iam::$(aws sts get-caller-identity \<br />  --query Account \<br />  --output text):role/AmazonEKS_EBS_CSI_DriverRole \<br />  --force</pre> | AWS-Administrator | 

### Installieren Sie PGO
<a name="install-pgo"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Klonen Sie das PGO-Repository. | Klonen Sie das GitHub Repository für PGO:<pre>git clone https://github.com/CrunchyData/postgres-operator-examples.git </pre> | AWS DevOps | 
| Geben Sie die Rollendetails für die Erstellung des Dienstkontos an. | Um dem Amazon EKS-Cluster Zugriff auf die erforderlichen AWS Ressourcen zu gewähren, geben Sie den Amazon-Ressourcennamen (ARN) der OIDC-Rolle an, die Sie zuvor erstellt haben, in der `service_account.yaml` Datei, die sich unter befindet. [GitHub](https://github.com/CrunchyData/postgres-operator/blob/main/config/rbac/cluster/service_account.yaml)<pre>cd postgres-operator-examples</pre><pre>---<br />metadata:<br />  annotations:<br />    eks.amazonaws.com/role-arn: arn:aws:iam::<accountId>:role/<role_name> # Update the OIDC role ARN created earlier</pre> | AWS-Administrator, Kubernetes-Administrator | 
| Erstellen Sie den Namespace und die PGO-Voraussetzungen. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Kubernetes-Administrator | 
| Überprüfen Sie die Erstellung von Pods. | Stellen Sie sicher, dass der Namespace und die Standardkonfiguration erstellt wurden:<pre>kubectl get pods -n postgres-operator</pre> | AWS-Administrator, Kubernetes-Administrator | 
| Verifizieren. PVCs | Verwenden Sie den folgenden Befehl, um Ansprüche auf persistente Volumes (PVCs) zu überprüfen:<pre>kubectl describe pvc -n postgres-operator</pre> | AWS-Administrator, Kubernetes-Administrator | 

### Erstellen Sie einen Operator und stellen Sie ihn bereit
<a name="create-and-deploy-an-operator"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie einen Operator. | Überarbeiten Sie den Inhalt der Datei unter`/kustomize/postgres/postgres.yaml`, sodass er den folgenden Kriterien entspricht:<pre>spec:<br />  instances:<br />    - name: pg-1<br />      replicas: 3<br />  patroni:<br />    dynamicConfiguration:<br />      postgresql:<br />      pg_hba:<br />        - "host all all 0.0.0.0/0 trust" # this line enabled logical replication with programmatic access<br />        - "host all postgres 127.0.0.1/32 md5"<br />      synchronous_mode: true<br />  users:<br />  - name: replicator<br />    databases:<br />      - testdb<br />    options: "REPLICATION"</pre>Diese Updates bewirken Folgendes:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | AWS-Administrator, DBA, Kubernetes-Administrator | 
| Stellen Sie den Operator bereit. | Stellen Sie den PGO-Operator bereit, um die Verwaltung und den Betrieb von PostgreSQL-Datenbanken in Kubernetes-Umgebungen zu optimieren:<pre>kubectl apply -k kustomize/postgres</pre> | AWS-Administrator, DBA, Kubernetes-Administrator | 
| Überprüfen Sie die Bereitstellung. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html)Notieren Sie sich in der Befehlsausgabe das primäre Replikat (`primary_pod_name`) und das Lesereplikat (`read_pod_name`). Sie werden diese in den nächsten Schritten verwenden. | AWS-Administrator, DBA, Kubernetes-Administrator | 

### Überprüfen Sie die Streaming-Replikation
<a name="verify-streaming-replication"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Schreiben Sie Daten in das primäre Replikat. | Verwenden Sie die folgenden Befehle, um eine Verbindung zum primären PostgreSQL-Replikat herzustellen und Daten in die Datenbank zu schreiben:<pre>kubectl exec -it <primary_pod_name> bash -n postgres-operator</pre><pre>psql</pre><pre>CREATE TABLE customers (firstname text, customer_id serial, date_created timestamp);<br />\dt</pre> | AWS-Administrator, Kubernetes-Administrator | 
| Vergewissern Sie sich, dass die Read Replica dieselben Daten enthält. | Connect zur PostgreSQL-Read Replica her und überprüfen Sie, ob die Streaming-Replikation ordnungsgemäß funktioniert:<pre>kubectl exec -it {read_pod_name} bash -n postgres-operator</pre><pre>psql</pre><pre>\dt</pre>Die Read Replica sollte die Tabelle enthalten, die Sie im vorherigen Schritt im primären Replikat erstellt haben. | AWS-Administrator, Kubernetes-Administrator | 

## Fehlerbehebung
<a name="streamline-postgresql-deployments-amazon-eks-pgo-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| Der Pod startet nicht. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| Replikate liegen deutlich hinter der Primärdatenbank zurück. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| Sie haben keinen Einblick in die Leistung und den Zustand des PostgreSQL-Clusters. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| Die Replikation funktioniert nicht. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 

## Zugehörige Ressourcen
<a name="streamline-postgresql-deployments-amazon-eks-pgo-resources"></a>
+ [Amazon Elastic Kubernetes Service](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/amazon-elastic-kubernetes-service.html) (*Überblick über Bereitstellungsoptionen auf AWS-Whitepaper*)
+  [CloudFormation](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/aws-cloudformation.html)(*Whitepaper über die Bereitstellungsoptionen auf AWS*)
+ [Erste Schritte mit Amazon EKS — eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) (*Amazon EKS-Benutzerhandbuch*)
+ [Kubectl und eksctl einrichten (*Amazon* EKS-Benutzerhandbuch](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html))
+ [Eine Rolle für den OpenID Connect-Verbund erstellen](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html) (*IAM-Benutzerhandbuch*)
+ [Konfiguration der Einstellungen für das AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) (*AWS CLI Benutzerhandbuch*)
+ [Dokumentation zu Crunchy Postgres für Kubernetes](https://access.crunchydata.com/documentation/postgres-operator/latest)
+ [Crunch & Learn: Crunchy Postgres für Kubernetes 5.0 (Video](https://www.youtube-nocookie.com/embed/IIf9WZO3K50))

# Vereinfachen Sie die Anwendungsauthentifizierung mit gegenseitigem TLS in Amazon ECS mithilfe von Application Load Balancer
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs"></a>

*Olawale Olaleye und Shamanth Devagari, Amazon Web Services*

## Zusammenfassung
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-summary"></a>

Dieses Muster hilft Ihnen dabei, Ihre Anwendungsauthentifizierung zu vereinfachen und Sicherheitsbelastungen mit gegenseitigem TLS in Amazon Elastic Container Service (Amazon ECS) mithilfe von [Application Load Balancer (](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/mutual-authentication.html)ALB) zu entlasten. Mit ALB können Sie X.509-Client-Zertifikate von authentifizieren. AWS Private Certificate Authority Diese leistungsstarke Kombination trägt zu einer sicheren Kommunikation zwischen Ihren Diensten bei und reduziert so den Bedarf an komplexen Authentifizierungsmechanismen innerhalb Ihrer Anwendungen. Darüber hinaus verwendet das Muster Amazon Elastic Container Registry (Amazon ECR) zum Speichern von Container-Images.

Das Beispiel in diesem Muster verwendet Docker-Bilder aus einer öffentlichen Galerie, um die Beispiel-Workloads zunächst zu erstellen. Anschließend werden neue Docker-Images für die Speicherung in Amazon ECR erstellt. Ziehen Sie als Quelle ein Git-basiertes System wie GitHub, oder Bitbucket in Betracht GitLab, oder verwenden Sie Amazon Simple Storage Service Amazon S3 (Amazon S3). Für die Erstellung der Docker-Images sollten Sie die Verwendung AWS CodeBuild für die nachfolgenden Images in Betracht ziehen.

## Voraussetzungen und Einschränkungen
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-prereqs"></a>

**Voraussetzungen**
+ Ein Aktiv AWS-Konto mit Zugriff auf die Bereitstellung von AWS CloudFormation Stacks. Stellen Sie sicher, dass Sie über AWS Identity and Access Management (IAM-) [Benutzer- oder Rollenberechtigungen für die Bereitstellung verfügen](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/control-access-with-iam.html). CloudFormation
+ AWS Command Line Interface (AWS CLI) [installiert](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). [Konfigurieren Sie](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) Ihre AWS Anmeldeinformationen auf Ihrem lokalen Computer oder in Ihrer Umgebung, indem Sie entweder die AWS CLI oder verwenden, indem Sie die Umgebungsvariablen in der `~/.aws/credentials` Datei festlegen.
+ OpenSSL [installiert](https://www.openssl.org/).
+ [Docker installiert.](https://www.docker.com/get-started/)
+ [Vertrautheit mit den AWS-Services unter Tools beschriebenen Funktionen.](#simplify-application-authentication-with-mutual-tls-in-amazon-ecs-tools)
+ Kenntnisse von Docker und NGINX.

**Einschränkungen**
+ Mutual TLS für Application Load Balancer unterstützt nur X.509v3-Clientzertifikate. X.509v1-Clientzertifikate werden nicht unterstützt.
+ Die CloudFormation Vorlage, die im Code-Repository dieses Musters bereitgestellt wird, beinhaltet nicht die Bereitstellung eines CodeBuild Projekts als Teil des Stacks.
+ Einige AWS-Services sind nicht in allen AWS-Regionen verfügbar. 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**
+ Docker-Version 27.3.1 oder höher
+ AWS CLI Version 2.14.5 oder höher

## Architektur
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-architecture"></a>

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

![\[Workflow zur Authentifizierung mit Mutual TLS mithilfe von Application Load Balancer.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/a343fa4e-097f-416b-9c83-01a28eb57dc3/images/e1371297-b987-4487-9b13-8120933c921f.png)


 Das Diagramm zeigt den folgenden Workflow:

1. Erstellen Sie ein Git-Repository und übertragen Sie den Anwendungscode in das Repository.

1. Erstellen Sie eine private Zertifizierungsstelle (CA) in AWS Private CA.

1. Erstellen Sie ein CodeBuild Projekt. Das CodeBuildproject wird durch Commit-Änderungen ausgelöst und erstellt das Docker-Image und veröffentlicht das erstellte Image in Amazon ECR.

1. Kopieren Sie die Zertifikatskette und den Zertifikatshauptteil von der CA und laden Sie das Zertifikatspaket auf Amazon S3 hoch.

1. Erstellen Sie einen Trust Store mit dem CA-Bundle, das Sie auf Amazon S3 hochgeladen haben. Ordnen Sie den Trust Store den gegenseitigen TLS-Listenern auf dem Application Load Balancer (ALB) zu.

1. Verwenden Sie die private CA, um Client-Zertifikate für die Container-Workloads auszustellen. Erstellen Sie auch ein privates TLS-Zertifikat mit AWS Private CA.

1. Importieren Sie das private TLS-Zertifikat in AWS Certificate Manager (ACM) und verwenden Sie es mit dem ALB.

1. Der Container-Workload in `ServiceTwo` verwendet das ausgestellte Client-Zertifikat, um sich bei der ALB zu authentifizieren, wenn er mit dem Container-Workload in kommuniziert. `ServiceOne`

1. Der Container-Workload in `ServiceOne` verwendet das ausgestellte Client-Zertifikat zur Authentifizierung bei der ALB, wenn er mit dem Container-Workload in kommuniziert. `ServiceTwo`

**Automatisierung und Skalierung**

Dieses Muster kann vollständig automatisiert werden CloudFormation, indem AWS Cloud Development Kit (AWS CDK) , oder API-Operationen aus einem SDK zur Bereitstellung der AWS Ressourcen verwendet werden.

Sie können AWS CodePipeline damit eine CI/CD-Pipeline (Continuous Integration and Continuous Deployment) implementieren, CodeBuild um den Prozess der Container-Image-Erstellung zu automatisieren und neue Versionen für die Amazon ECS-Cluster-Services bereitzustellen.

## Tools
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-tools"></a>

**AWS-Services **
+ [AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) unterstützt Sie bei der Erstellung, Speicherung und Erneuerung öffentlicher und privater SSL/TLS X.509-Zertifikate und -Schlüssel, die Ihre AWS Websites und Anwendungen schützen.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)hilft Ihnen dabei, AWS Ressourcen einzurichten, sie schnell und konsistent bereitzustellen und sie während ihres gesamten AWS-Konten Lebenszyklus über und zu verwalten. AWS-Regionen
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)ist ein vollständig verwalteter Build-Service, der Ihnen hilft, Quellcode zu kompilieren, Komponententests durchzuführen und Artefakte zu erstellen, die sofort einsatzbereit sind.
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) ist ein verwalteter Container-Image-Registry-Service, der sicher, skalierbar und zuverlässig ist.
+ [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) ist ein hoch skalierbarer, schneller Container-Management-Service zum Ausführen, Stoppen und Verwalten von Containern in einem Cluster. Sie können Ihre Aufgaben und Dienste auf einer serverlosen Infrastruktur ausführen, die von AWS Fargate verwaltet wird. Für mehr Kontrolle über Ihre Infrastruktur können Sie Ihre Aufgaben und Dienste alternativ auf einem Cluster von Amazon Elastic Compute Cloud (Amazon EC2) -Instances ausführen, die Sie verwalten.
+ [Amazon ECS Exec](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html) ermöglicht Ihnen die direkte Interaktion mit Containern, ohne zuerst mit dem Host-Container-Betriebssystem interagieren, eingehende Ports öffnen oder SSH-Schlüssel verwalten zu müssen. Sie können ECS Exec verwenden, um Befehle in einem Container auszuführen oder eine Shell für einen Container zu erhalten, der auf einer EC2 Amazon-Instance oder auf AWS Fargate einem läuft.
+ [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) verteilt eingehenden Anwendungs- oder Netzwerkverkehr auf mehrere Ziele. Sie können beispielsweise den Traffic auf EC2 Amazon-Instances, Container und IP-Adressen in einer oder mehreren Availability Zones verteilen. ELB überwacht den Zustand seiner registrierten Ziele und leitet den Datenverkehr nur an die fehlerfreien Ziele weiter. ELB skaliert Ihren Load Balancer, wenn sich Ihr eingehender Datenverkehr im Laufe der Zeit ändert. Es kann automatisch auf die meisten Workloads skaliert werden.
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html)hilft Ihnen beim Betrieb von Containern, ohne Server oder EC2 Amazon-Instances verwalten zu müssen. Fargate ist sowohl mit Amazon ECS als auch mit Amazon Elastic Kubernetes Service (Amazon EKS) kompatibel. Sie können Ihre Amazon ECS-Aufgaben und -Services mit dem Starttyp Fargate oder einem Fargate-Kapazitätsanbieter ausführen. Verpacken Sie dazu Ihre Anwendung in Containern, geben Sie die CPU- und Speicheranforderungen an, definieren Sie Netzwerk- und IAM-Richtlinien und starten Sie die Anwendung. Jede Fargate-Aufgabe hat ihre eigene Isolationsgrenze und teilt den zugrunde liegenden Kernel, die CPU-Ressourcen, Speicherressourcen oder die elastic network interface nicht mit einer anderen Aufgabe.
+ [AWS Private Certificate Authority](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html)ermöglicht die Erstellung von privaten Zertifizierungsstellenhierarchien (CA), einschließlich Stamm- und untergeordneter Zertifizierungsstellen CAs, ohne dass die Investitions- und Wartungskosten für den Betrieb einer lokalen Zertifizierungsstelle anfallen.

**Andere Tools******
+ [Docker](https://www.docker.com/) ist eine Reihe von Platform-as-a-Service (PaaS) -Produkten, die Virtualisierung auf Betriebssystemebene nutzen, um Software in Containern bereitzustellen.
+ [GitHub](https://docs.github.com/en/repositories/creating-and-managing-repositories/quickstart-for-repositories), [GitLab](https://docs.gitlab.com/ee/user/get_started/get_started_projects.html), und [Bitbucket](https://support.atlassian.com/bitbucket-cloud/docs/tutorial-learn-bitbucket-with-git/) sind einige der am häufigsten verwendeten Git-basierten Quellcodeverwaltungssysteme, um Quellcodeänderungen zu verfolgen.
+ [NGINX Open Source](https://nginx.org/en/docs/?_ga=2.187509224.1322712425.1699399865-405102969.1699399865) ist ein Open-Source-Loadbalancer, ein Inhalts-Cache und ein Webserver. Dieses Muster verwendet es als Webserver.
+ [OpenSSL](https://www.openssl.org/) ist eine Open-Source-Bibliothek, die Dienste bereitstellt, die von den OpenSSL-Implementierungen von TLS und CMS verwendet werden. 

**Code-Repository**

Der Code für dieses Muster ist im Repository GitHub [MTLS-with-Application-Load-Balancer-In-Amazon-ECS](https://github.com/aws-samples/mTLS-with-Application-Load-Balancer-in-Amazon-ECS) verfügbar.

## Best Practices
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-best-practices"></a>
+ Verwenden Sie Amazon ECS Exec, um Befehle auszuführen oder eine Shell für einen Container abzurufen, der auf Fargate läuft. Sie können ECS Exec auch verwenden, um Diagnoseinformationen für das Debuggen zu sammeln.
+ Verwenden Sie Sicherheitsgruppen und Netzwerkzugriffskontrolllisten (ACLs), um den eingehenden und ausgehenden Verkehr zwischen den Diensten zu kontrollieren. Fargate-Aufgaben erhalten eine IP-Adresse aus dem konfigurierten Subnetz in Ihrer Virtual Private Cloud (VPC).

## Epen
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-epics"></a>

### Erstellen Sie das Repository
<a name="create-the-repository"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Laden Sie den Quellcode herunter. | Um den Quellcode dieses Patterns herunterzuladen, forken oder klonen Sie das GitHub [MTLS-with-Application-Load-Balancer-In-Amazon-ECS-Repository](https://github.com/aws-samples/mTLS-with-Application-Load-Balancer-in-Amazon-ECS). | DevOps Ingenieur | 
| Erstellen Sie ein Git-Repository. | Gehen Sie wie folgt vor, um ein Git-Repository zu erstellen, das das Dockerfile und die `buildspec.yaml` Dateien enthält:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)`git clone https://github.com/aws-samples/mTLS-with-Application-Load-Balancer-in-Amazon-ECS.git` | DevOps Ingenieur | 

### CA erstellen und Zertifikate generieren
<a name="create-ca-and-generate-certificates"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine private CA in AWS Private CA. | Um eine private Zertifizierungsstelle (CA) zu erstellen, führen Sie die folgenden Befehle in Ihrem Terminal aus. Ersetzen Sie die Werte in den Beispielvariablen durch Ihre eigenen Werte. <pre>export AWS_DEFAULT_REGION="us-west-2"<br />export SERVICES_DOMAIN="www.example.com"<br /><br />export ROOT_CA_ARN=`aws acm-pca create-certificate-authority \<br />    --certificate-authority-type ROOT \<br />    --certificate-authority-configuration \<br />    "KeyAlgorithm=RSA_2048,<br />    SigningAlgorithm=SHA256WITHRSA,<br />    Subject={<br />        Country=US,<br />        State=WA,<br />        Locality=Seattle,<br />        Organization=Build on AWS,<br />        OrganizationalUnit=mTLS Amazon ECS and ALB Example,<br />        CommonName=${SERVICES_DOMAIN}}" \<br />        --query CertificateAuthorityArn --output text`</pre>Weitere Informationen finden Sie [AWS Private CA in der AWS Dokumentation unter Eine private Zertifizierungsstelle erstellen](https://docs.aws.amazon.com/privateca/latest/userguide/create-CA.html). | DevOps Ingenieur, AWS DevOps | 
| Erstellen und installieren Sie Ihr privates CA-Zertifikat. | Um ein Zertifikat für Ihre private Root-CA zu erstellen und zu installieren, führen Sie die folgenden Befehle in Ihrem Terminal aus:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html) | AWS DevOps, DevOps Ingenieur | 
| Fordern Sie ein verwaltetes Zertifikat an. | Verwenden Sie den folgenden Befehl AWS Certificate Manager , um ein privates Zertifikat zur Verwendung mit Ihrem privaten ALB anzufordern:<pre>export TLS_CERTIFICATE_ARN=`aws acm request-certificate \<br />    --domain-name "*.${DOMAIN_DOMAIN}" \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --query CertificateArn --output text`</pre> | DevOps Ingenieur, AWS DevOps | 
| Verwenden Sie die private CA, um ein Client-Zertifikat auszustellen. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)`openssl req -out client_csr1.pem -new -newkey rsa:2048 -nodes -keyout client_private-key1.pem``openssl req -out client_csr2.pem -new -newkey rsa:2048 -nodes -keyout client_private-key2.pem`Dieser Befehl gibt die CSR und den privaten Schlüssel für die beiden Dienste zurück. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)<pre>SERVICE_ONE_CERT_ARN=`aws acm-pca issue-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --csr fileb://client_csr1.pem \<br />    --signing-algorithm "SHA256WITHRSA" \<br />    --validity Value=5,Type="YEARS" --query CertificateArn --output text` <br /><br />echo "SERVICE_ONE_CERT_ARN: ${SERVICE_ONE_CERT_ARN}"<br /><br />aws acm-pca get-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --certificate-arn ${SERVICE_ONE_CERT_ARN} \<br />     | jq -r '.Certificate' > client_cert1.cert<br /><br />SERVICE_TWO_CERT_ARN=`aws acm-pca issue-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --csr fileb://client_csr2.pem \<br />    --signing-algorithm "SHA256WITHRSA" \<br />    --validity Value=5,Type="YEARS" --query CertificateArn --output text` <br /><br />echo "SERVICE_TWO_CERT_ARN: ${SERVICE_TWO_CERT_ARN}"<br /><br />aws acm-pca get-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --certificate-arn ${SERVICE_TWO_CERT_ARN} \<br />     | jq -r '.Certificate' > client_cert2.cert</pre>Weitere Informationen finden Sie in der AWS Dokumentation unter [Ausstellen von privaten Endentitätszertifikaten](https://docs.aws.amazon.com/privateca/latest/userguide/PcaIssueCert.html). | DevOps Ingenieur, AWS DevOps | 

### Bereitstellung von AWS-Services
<a name="provision-aws-services"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Bereitstellung AWS-Services mit der CloudFormation Vorlage. | Verwenden Sie die Vorlage, um die Virtual Private Cloud (VPC), den Amazon ECS-Cluster, die Amazon ECS-Services, den Application Load Balancer und das Amazon Elastic Container Registry (Amazon ECR) bereitzustellen. CloudFormation  | DevOps Ingenieur | 
| Variablen abrufen. | Stellen Sie sicher, dass Sie über einen Amazon ECS-Cluster verfügen, auf dem zwei Dienste ausgeführt werden. Verwenden Sie die folgenden Befehle, um die Ressourcendetails abzurufen und als Variablen zu speichern:<pre><br />export LoadBalancerDNS=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`LoadBalancerDNS`].OutputValue')<br /><br />export ECRRepositoryUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryUri`].OutputValue')<br /><br />export ECRRepositoryServiceOneUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryServiceOneUri`].OutputValue')<br /><br />export ECRRepositoryServiceTwoUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryServiceTwoUri`].OutputValue')<br /><br />export ClusterName=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ClusterName`].OutputValue')<br /><br />export BucketName=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`BucketName`].OutputValue')<br /><br />export Service1ListenerArn=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`Service1ListenerArn`].OutputValue')<br /><br />export Service2ListenerArn=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`Service2ListenerArn`].OutputValue')</pre> | DevOps Ingenieur | 
| Erstellen Sie ein CodeBuild Projekt. | Gehen Sie wie folgt vor, um ein CodeBuild Projekt zur Erstellung der Docker-Images für Ihre Amazon ECS-Services zu verwenden:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)Weitere Informationen finden Sie [AWS CodeBuild in der AWS Dokumentation unter Erstellen eines Build-Projekts](https://docs.aws.amazon.com/codebuild/latest/userguide/create-project.html). | AWS DevOps, DevOps Ingenieur | 
| Erstellen Sie die Docker-Images. | Sie können es verwenden CodeBuild , um den Image-Erstellungsprozess durchzuführen. CodeBuild benötigt Berechtigungen, um mit Amazon ECR zu interagieren und mit Amazon S3 zu arbeiten.Im Rahmen des Prozesses wird das Docker-Image erstellt und in die Amazon ECR-Registrierung übertragen. Einzelheiten zur Vorlage und zum Code finden Sie unter [Zusätzliche](#simplify-application-authentication-with-mutual-tls-in-amazon-ecs-additional) Informationen.(Optional) Verwenden Sie den folgenden Befehl, um lokal zu Testzwecken zu erstellen:<pre># login to ECR<br />aws ecr get-login-password | docker login --username AWS --password-stdin $ECRRepositoryUri<br /><br /># build image for service one<br />cd /service1<br />aws s3 cp s3://$BucketName/serviceone/ service1/ --recursive<br />docker build -t $ECRRepositoryServiceOneUri .<br />docker push $ECRRepositoryServiceOneUri<br /><br /># build image for service two<br />cd ../service2<br />aws s3 cp s3://$BucketName/servicetwo/ service2/ --recursive<br />docker build -t $ECRRepositoryServiceTwoUri .<br />docker push $ECRRepositoryServiceTwoUri</pre> | DevOps Ingenieur | 

### Mutual TLS aktivieren
<a name="enable-mutual-tls"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Laden Sie das CA-Zertifikat auf Amazon S3 hoch. | Verwenden Sie den folgenden Beispielbefehl, um das CA-Zertifikat in den Amazon S3 S3-Bucket hochzuladen:`aws s3 cp ca-cert.pem s3://$BucketName/acm-trust-store/ ` | AWS DevOps, DevOps Ingenieur | 
| Erstellen Sie den Trust Store. | Verwenden Sie den folgenden Beispielbefehl, um den Trust Store zu erstellen:<pre>TrustStoreArn=`aws elbv2 create-trust-store --name acm-pca-trust-certs \<br />    --ca-certificates-bundle-s3-bucket $BucketName \<br />    --ca-certificates-bundle-s3-key acm-trust-store/ca-cert.pem --query 'TrustStores[].TrustStoreArn' --output text`</pre> | AWS DevOps, DevOps Ingenieur | 
| Laden Sie Kundenzertifikate hoch. | Verwenden Sie den folgenden Beispielbefehl, um Client-Zertifikate für Docker-Images auf Amazon S3 hochzuladen:<pre># for service one<br />aws s3 cp client_cert1.cert s3://$BucketName/serviceone/<br />aws s3 cp client_private-key1.pem s3://$BucketName/serviceone/<br /><br /># for service two<br />aws s3 cp client_cert2.cert s3://$BucketName/servicetwo/<br />aws s3 cp client_private-key2.pem s3://$BucketName/servicetwo/</pre> | AWS DevOps, DevOps Ingenieur | 
| Ändern Sie den Listener. | Um Mutual TLS auf dem ALB zu aktivieren, ändern Sie die HTTPS-Listener mit den folgenden Befehlen:<pre>aws elbv2 modify-listener \<br />    --listener-arn $Service1ListenerArn \<br />    --certificates CertificateArn=$TLS_CERTIFICATE_ARN_TWO \<br />    --ssl-policy ELBSecurityPolicy-2016-08 \<br />    --protocol HTTPS \<br />    --port 8080 \<br />    --mutual-authentication Mode=verify,TrustStoreArn=$TrustStoreArn,IgnoreClientCertificateExpiry=false<br /><br />aws elbv2 modify-listener \<br />    --listener-arn $Service2ListenerArn \<br />    --certificates CertificateArn=$TLS_CERTIFICATE_ARN_TWO \<br />    --ssl-policy ELBSecurityPolicy-2016-08 \<br />    --protocol HTTPS \<br />    --port 8090 \<br />    --mutual-authentication Mode=verify,TrustStoreArn=$TrustStoreArn,IgnoreClientCertificateExpiry=false<br /></pre>Weitere Informationen finden Sie in der AWS Dokumentation unter [Konfiguration von gegenseitigem TLS auf einem Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/configuring-mtls-with-elb.html). | AWS DevOps, DevOps Ingenieur | 

### Aktualisieren Sie die Dienste
<a name="update-the-services"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Aktualisieren Sie die Amazon ECS-Aufgabendefinition. | Um die Amazon ECS-Aufgabendefinition zu aktualisieren, ändern Sie den `image` Parameter in der neuen Version.Um die Werte für die jeweiligen Services abzurufen, aktualisieren Sie die Aufgabendefinitionen mit dem neuen Docker-Images-URI, den Sie in den vorherigen Schritten erstellt haben: oder `echo $ECRRepositoryServiceOneUri` `echo $ECRRepositoryServiceTwoUri`<pre><br />    "containerDefinitions": [<br />        {<br />            "name": "nginx",<br />            "image": "public.ecr.aws/nginx/nginx:latest",   # <----- change to new Uri<br />            "cpu": 0,</pre>Weitere Informationen finden Sie in der AWS Dokumentation unter [Aktualisieren einer Amazon ECS-Aufgabendefinition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/update-task-definition-console-v2.html) mithilfe der Konsole.  | AWS DevOps, DevOps Ingenieur | 
| Aktualisieren Sie den Amazon ECS-Service. | Aktualisieren Sie den Service mit der neuesten Aufgabendefinition. Diese Aufgabendefinition ist der Entwurf für die neu erstellten Docker-Images und enthält das Client-Zertifikat, das für die gegenseitige TLS-Authentifizierung erforderlich ist.  Gehen Sie wie folgt vor, um den Dienst zu aktualisieren:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)Wiederholen Sie die Schritte für den anderen Dienst. | AWS-Administrator, AWS DevOps, DevOps Ingenieur | 

### Greifen Sie auf die Anwendung zu
<a name="access-the-application"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Kopieren Sie die Anwendungs-URL. | Verwenden Sie die Amazon ECS-Konsole, um die Aufgabe anzusehen. Wenn der Aufgabenstatus auf Wird **ausgeführt** aktualisiert wurde, wählen Sie die Aufgabe aus. Kopieren Sie im Abschnitt **Aufgabe** die Aufgaben-ID. | AWS-Administrator, AWS DevOps | 
| Testen Sie Ihre Anwendung. | Um Ihre Anwendung zu testen, verwenden Sie ECS Exec, um auf die Aufgaben zuzugreifen.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html) | AWS-Administrator, AWS DevOps | 

## Zugehörige Ressourcen
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-resources"></a>

**Amazon ECS-Dokumentation**
+ [Erstellen einer Amazon ECS-Aufgabendefinition mithilfe der Konsole](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html)
+ [Erstellen eines Container-Images zur Verwendung auf Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html)
+ [Amazon-ECS-Cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html)
+ [Amazon ECS für AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html#create-container-image-next-steps)
+ [Bewährte Methoden für Amazon-ECS-Netzwerke](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/networking-best-practices.html)
+ [Parameter der Amazon ECS-Servicedefinition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service_definition_parameters.html)

**Andere AWS Ressourcen**
+ [Wie verwende ich AWS private CA, um mTLS auf dem Application Load Balancer zu konfigurieren?](https://repost.aws/knowledge-center/elb-alb-configure-private-ca-mtls) ()AWS re:Post

## Zusätzliche Informationen
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-additional"></a>

**Das Dockerfile bearbeiten******

Der folgende Code zeigt die Befehle, die Sie im Dockerfile für Service 1 bearbeiten:

```
FROM public.ecr.aws/nginx/nginx:latest
WORKDIR /usr/share/nginx/html
RUN echo "Returning response from Service 1: Ok" > /usr/share/nginx/html/index.html
ADD client_cert1.cert client_private-key1.pem /usr/local/share/ca-certificates/
RUN chmod -R 400 /usr/local/share/ca-certificates/
```

Der folgende Code zeigt die Befehle, die Sie im Dockerfile für Dienst 2 bearbeiten:

```
FROM public.ecr.aws/nginx/nginx:latest
WORKDIR /usr/share/nginx/html
RUN echo "Returning response from Service 2: Ok" > /usr/share/nginx/html/index.html
ADD client_cert2.cert client_private-key2.pem /usr/local/share/ca-certificates/
RUN chmod -R 400 /usr/local/share/ca-certificates/
```

Wenn Sie die Docker-Images mit erstellen, verwendet die `buildspec` Datei die CodeBuild Build-Nummer CodeBuild, um Image-Versionen eindeutig als Tag-Wert zu identifizieren. Sie können die `buildspec` Datei an Ihre Anforderungen anpassen, wie im folgenden `buildspec ` benutzerdefinierten Code gezeigt: 

```
version: 0.2

phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $ECR_REPOSITORY_URI
      - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
      - IMAGE_TAG=${COMMIT_HASH:=latest}
  build:
    commands:
        # change the S3 path depending on the service
      - aws s3 cp s3://$YOUR_S3_BUCKET_NAME/serviceone/ $CodeBuild_SRC_DIR/ --recursive 
      - echo Build started on `date`
      - echo Building the Docker image...
      - docker build -t $ECR_REPOSITORY_URI:latest .
      - docker tag $ECR_REPOSITORY_URI:latest $ECR_REPOSITORY_URI:$IMAGE_TAG
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker images...
      - docker push $ECR_REPOSITORY_URI:latest
      - docker push $ECR_REPOSITORY_URI:$IMAGE_TAG
      - echo Writing image definitions file...
      # for ECS deployment reference
      - printf '[{"name":"%s","imageUri":"%s"}]' $CONTAINER_NAME $ECR_REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json   

artifacts:
  files:
    - imagedefinitions.json
```

# Mehr Muster
<a name="containersandmicroservices-more-patterns-pattern-list"></a>

**Topics**
+ [Automatisieren Sie das Löschen von AWS CloudFormation Stacks und zugehörigen Ressourcen](automate-deletion-cloudformation-stacks-associated-resources.md)
+ [Automatisieren Sie das dynamische Pipeline-Management für die Bereitstellung von Hotfix-Lösungen in Gitflow-Umgebungen mithilfe von und AWS Service Catalog AWS CodePipeline](automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.md)
+ [Automatisches Erstellen von CI/CD Pipelines und Amazon ECS-Clustern für Microservices mithilfe von AWS CDK](automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.md)
+ [Erstellen und übertragen Sie Docker-Images mithilfe von GitHub Actions und Terraform auf Amazon ECR](build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform.md)
+ [Containerisieren Sie Mainframe-Workloads, die von Blu Age modernisiert wurden](containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.md)
+ [Erstellen Sie einen benutzerdefinierten Protokollparser für Amazon ECS mithilfe eines Firelens-Protokollrouters](create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.md)
+ [Stellen Sie mithilfe von Terraform Agentensysteme auf Amazon Bedrock mit dem CrewAI-Framework bereit](deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.md)
+ [Stellen Sie mithilfe von Terraform eine Umgebung für containerisierte Blu Age-Anwendungen bereit](deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform.md)
+ [Stellen Sie mithilfe einer Inferenz-Pipeline in Amazon Vorverarbeitungslogik in einem ML-Modell an einem einzigen Endpunkt bereit SageMaker](deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker.md)
+ [Stellen Sie Workloads aus DevOps Azure-Pipelines auf private Amazon EKS-Cluster bereit](deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.md)
+ [Implementieren Sie KI-gestützte Kubernetes-Diagnose und -Fehlerbehebung mit der Integration von K8SGPT und Amazon Bedrock](implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration.md)
+ [Verwalten Sie blue/green Bereitstellungen von Microservices für mehrere Konten und Regionen mithilfe von AWS-Code-Services und AWS KMS-Schlüsseln für mehrere Regionen](manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.md)
+ [Verwalten Sie lokale Containeranwendungen, indem Sie Amazon ECS Anywhere mit dem AWS CDK einrichten](manage-on-premises-container-applications-by-setting-up-amazon-ecs-anywhere-with-the-aws-cdk.md)
+ [Migrieren Sie von Oracle WebLogic zu Apache Tomcat (ToMEE) auf Amazon ECS](migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs.md)
+ [Modernisieren Sie ASP.NET Web Forms-Anwendungen auf AWS](modernize-asp-net-web-forms-applications-on-aws.md)
+ [Überwachen Sie Amazon ECR-Repositorys mit AWS und AWS CloudFormation Config auf Platzhalterberechtigungen](monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config.md)
+ [Überwachen Sie die Anwendungsaktivität mithilfe von CloudWatch Logs Insights](monitor-application-activity-by-using-cloudwatch-logs-insights.md)
+ [Richten Sie mithilfe von AWS CDK eine CI/CD Pipeline für Hybrid-Workloads auf Amazon ECS Anywhere ein und GitLab](set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab.md)
+ [Richten Sie die end-to-end Verschlüsselung für Anwendungen auf Amazon EKS mithilfe von cert-manager und Let's Encrypt ein](set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.md)
+ [Vereinfachen Sie die Bereitstellung von Amazon EKS-Anwendungen für mehrere Mandanten mithilfe von Flux](simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.md)
+ [Optimieren Sie mithilfe von SageMaker KI und Hydra Workflows für maschinelles Lernen — von der lokalen Entwicklung bis hin zu skalierbaren Experimenten](streamline-machine-learning-workflows-by-using-amazon-sagemaker.md)
+ [Strukturieren Sie ein Python-Projekt in hexagonaler Architektur mit AWS Lambda](structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.md)
+ [Testen Sie die AWS Infrastruktur mithilfe LocalStack von Terraform-Tests](test-aws-infra-localstack-terraform.md)
+ [Koordinieren Sie die Ressourcenabhängigkeit und die Aufgabenausführung mithilfe des AWS Fargate WaitCondition Hook-Konstrukts](use-the-aws-fargate-waitcondition-hook-construct.md)
+ [Verwenden Sie Amazon Bedrock-Agenten, um die Erstellung von Zugriffskontrollen in Amazon EKS durch textbasierte Eingabeaufforderungen zu automatisieren](using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.md)