

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.

# Tutorial: Bereitstellung auf Amazon EKS mit CodePipeline
<a name="tutorials-eks-deploy"></a>

Dieses Tutorial hilft Ihnen beim Erstellen einer Bereitstellungsaktion CodePipeline , bei der Ihr Code in einem Cluster bereitgestellt wird, den Sie in Amazon EKS konfiguriert haben.

Die EKS-Aktion unterstützt sowohl öffentliche als auch private EKS-Cluster. Private Cluster sind der von EKS empfohlene Typ; beide Typen werden jedoch unterstützt.

**Anmerkung**  
Im Rahmen der Erstellung einer Pipeline in der Konsole wird ein S3-Artefakt-Bucket von CodePipeline für Artefakte verwendet. (Dies unterscheidet sich von dem Bucket, der für eine S3-Quellaktion verwendet wird.) Wenn sich der S3-Artefakt-Bucket in einem anderen Konto als dem Konto für Ihre Pipeline befindet, stellen Sie sicher, dass der S3-Artefakt-Bucket dem Konto gehört AWS-Konten , das sicher und zuverlässig ist.

**Anmerkung**  
Diese Aktion verwendet CodePipeline Managed CodeBuild Compute, um Befehle in einer Build-Umgebung auszuführen. Für die Ausführung der Befehlsaktion fallen separate Gebühren in an AWS CodeBuild.

**Anmerkung**  
Die Aktion „`EKS`Bereitstellen“ ist nur für Pipelines vom Typ V2 verfügbar.

## Voraussetzungen
<a name="tutorials-eks-deploy-prereqs"></a>

Es müssen bestimmte Ressourcen zur Verfügung stehen, damit Sie mithilfe dieses Tutorials eine CD-Pipeline erstellen können. Zum Einstieg benötigen Sie Folgendes:

**Anmerkung**  
Alle diese Ressourcen sollten in derselben AWS Region erstellt werden.
+ Ein Quellcodeverwaltungs-Repository (dieses Tutorial verwendet GitHub), dem Sie eine `deployment.yaml` Beispieldatei hinzufügen werden.
+ Sie müssen eine vorhandene CodePipeline Servicerolle verwenden, die Sie mit den [Schritt 3: Aktualisieren Sie die CodePipeline Servicerollenrichtlinie in IAM](#tutorials-eks-deploy-role) unten aufgeführten Berechtigungen für diese Aktion aktualisieren werden. Die erforderlichen Berechtigungen hängen vom Clustertyp ab, den Sie erstellen. Weitere Informationen finden Sie unter [Berechtigungen für Richtlinien zur Servicerolle](action-reference-EKS.md#action-reference-EKS-service-role).
+ Ein funktionierendes Image und ein Repository-Tag, die Sie an ECR oder Ihr Image-Repository übertragen haben.

Nachdem Sie diese Voraussetzungen erfüllt haben, können Sie mit dem Tutorial fortfahren und Ihre CD-Pipeline erstellen.

## Schritt 1: (Optional) Erstellen Sie einen Cluster in Amazon EKS
<a name="tutorials-eks-deploy-cluster"></a>

Sie können wählen, ob Sie einen EKS-Cluster mit einem öffentlichen oder privaten Endpunkt erstellen möchten. 

In den folgenden Schritten erstellen Sie einen öffentlichen oder privaten Cluster in EKS. Dieser Schritt ist optional, wenn Sie Ihren Cluster bereits erstellt haben.

### Erstellen Sie einen öffentlichen Cluster in Amazon EKS
<a name="tutorials-eks-deploy-cluster-public"></a>

In diesem Schritt erstellen Sie einen Cluster in EKS.

**Erstellen Sie einen öffentlichen Cluster**

1. Öffnen Sie die EKS-Konsole und wählen Sie dann ** Create cluster aus**.

1. **Benennen ** Sie Ihren Cluster im Feld Name. Wählen Sie **Next**.

1. Wählen Sie **Erstellen** aus.

### Erstellen Sie einen privaten Cluster in Amazon EKS
<a name="tutorials-eks-deploy-cluster-private"></a>

Falls Sie sich dafür entscheiden, einen Cluster mit einem privaten Endpunkt zu erstellen, stellen Sie sicher, dass Sie nur die privaten Subnetze anhängen und dass sie über eine Internetverbindung verfügen.

Folgen Sie den nächsten fünf Unterschritten, um einen Cluster mit einem privaten Endpunkt zu erstellen.

**Erstellen Sie eine VPC in der Konsole**

1. Öffnen Sie die VPC-Konsole und wählen Sie dann ** Create VPC aus. **

1. Wählen Sie unter **VPC-Einstellungen** die Option **VPC und mehr** aus.

1. Wählen Sie, ob Sie ein öffentliches und 4 private Subnetze erstellen möchten. Wählen Sie **VPC erstellen** aus.

1. Wählen Sie auf der Seite „Subnetze“ die Option Privat aus**. ** 

**Ermitteln Sie die privaten Subnetze in Ihrer VPC**

1. Navigieren Sie zu Ihrer VPC und wählen Sie die VPC-ID aus, um die VPC-Detailseite zu öffnen.

1. Wählen Sie auf der VPC-Detailseite die Registerkarte Resource Map aus. ** **

1. Sehen Sie sich das Diagramm an und notieren Sie sich Ihre privaten Subnetze. Die Subnetze werden mit Beschriftungen angezeigt, die auf den öffentlichen oder privaten Status hinweisen, und jedes Subnetz ist einer Routing-Tabelle zugeordnet.  
![Ein Konsolendiagramm, das Subnetze und die Ressourcenübersicht für eine VPC zeigt.](https://docs.aws.amazon.com/de_de/codepipeline/latest/userguide/images/eks-deploy-subnets.png)

   Beachten Sie, dass ein privater Cluster alle privaten Subnetze enthält.

1. Erstellen Sie ein öffentliches Subnetz, um das NAT-Gateway zu hosten. Sie können nur jeweils ein Internet-Gateway nur für eine VPC anfügen.

**Erstellen Sie ein NAT-Gateway im öffentlichen Subnetz**

1. Erstellen Sie im öffentlichen Subnetz ein NAT-Gateway. Navigieren Sie zur VPC-Konsole und wählen Sie dann ** Internet-Gateways aus. ** Wählen Sie **Create internet gateway (Internet-Gateway erstellen)** aus.

1. Geben Sie im Feld Name einen Namen für Ihr Internet-Gateway ein. Wählen Sie **Create internet gateway (Internet-Gateway erstellen)** aus.

Aktualisieren Sie die Routing-Tabelle für das private Subnetz, um den Datenverkehr an das NAT-Gateway weiterzuleiten.

**Fügen Sie das NAT-Gateway zu Ihren Routing-Tabellen für Ihre privaten Subnetze hinzu**

1. Navigieren Sie zur VPC-Konsole und wählen Sie dann Subnets aus**. **

1. Wählen Sie für jedes private Subnetz dieses aus und wählen Sie dann auf der Detailseite die Routing-Tabelle für dieses Subnetz aus. Wählen Sie ** Routing-Tabelle bearbeiten aus. ** 

1. Aktualisieren Sie die Routing-Tabelle für das private Subnetz, um den Internetverkehr zum NAT-Gateway weiterzuleiten. Wählen Sie **Route hinzufügen** aus. Wählen Sie das ** NAT-Gateway ** aus den Optionen aus, die Sie hinzufügen möchten. Wählen Sie das Internet-Gateway, das Sie erstellt haben.

1. Erstellen Sie für das öffentliche Subnetz eine benutzerdefinierte Routing-Tabelle. Stellen Sie sicher, dass die Network Access Control List (ACL) für Ihr öffentliches Subnetz eingehenden Datenverkehr aus dem privaten Subnetz zulässt.

1. Wählen Sie **Änderungen speichern ** aus.

In diesem Schritt erstellen Sie einen Cluster in EKS.

**Erstellen Sie einen privaten Cluster**

1. Öffnen Sie die EKS-Konsole und wählen Sie dann ** Create cluster aus**.

1. **Benennen ** Sie Ihren Cluster im Feld Name. Wählen Sie **Weiter** aus.

1. Geben Sie Ihre VPC und andere Konfigurationsinformationen an. Wählen Sie **Erstellen** aus.

Ihr EKS-Cluster kann ein öffentlicher oder ein privater Cluster sein. Dieser Schritt gilt für Cluster, die NUR einen privaten Endpunkt haben. Stellen Sie sicher, dass Ihr Cluster privat ist.

## Schritt 2: Konfigurieren Sie Ihren privaten Cluster in Amazon EKS
<a name="tutorials-eks-deploy-cluster-private-configure"></a>

Dieser Schritt gilt nur, wenn Sie einen privaten Cluster erstellt haben. Dieser Schritt gilt für Cluster, die NUR einen privaten Endpunkt haben. 

**Konfigurieren Sie Ihren Cluster**

1. Hängen Sie private Subnetze nur im EKS-Cluster auf der ** Registerkarte ** Netzwerk an. Hängen Sie die privaten Subnetze an, die im Abschnitt ** Ermitteln Sie die privaten Subnetze in Ihrer ** VPC unter erfasst sind. [Schritt 1: (Optional) Erstellen Sie einen Cluster in Amazon EKS](#tutorials-eks-deploy-cluster)

1. Stellen Sie sicher, dass die privaten Subnetze Zugriff auf das Internet haben, da Artefakte aus dem S3-Artefakt-Bucket für Ihre Pipeline CodePipeline gespeichert und abgerufen werden.

## Schritt 3: Aktualisieren Sie die CodePipeline Servicerollenrichtlinie in IAM
<a name="tutorials-eks-deploy-role"></a>

In diesem Schritt aktualisieren Sie eine vorhandene CodePipeline Servicerolle, z. B. mit den Berechtigungen`cp-service-role`, die für die Verbindung mit Ihrem Cluster erforderlich sind. CodePipeline Wenn Sie noch keine Rolle haben, erstellen Sie eine neue.

Aktualisieren Sie Ihre CodePipeline Servicerolle mit den folgenden Schritten.

**So aktualisieren Sie Ihre CodePipeline Servicerollenrichtlinie**

1. Öffnen Sie unter [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) die IAM-Konsole.

1. Wählen Sie im Dashboard der Konsole die Option **Rollen** aus.

1. Schlagen Sie nach Ihrer CodePipeline Servicerolle, z. `cp-service-role` B.

1. Fügen Sie eine neue Inline-Richtlinie hinzu.

1. Geben Sie im ** Richtlinieneditor ** Folgendes ein.
   + Fügen Sie für einen öffentlichen Cluster die folgenden Berechtigungen hinzu.

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
     
         "Statement": [
             {
                 "Sid": "EksClusterPolicy",
                 "Effect": "Allow",
                 "Action": "eks:DescribeCluster",
                 "Resource": "arn:aws:eks:us-east-1:{{111122223333}}:cluster/my-cluster"
             },
             {
                 "Sid": "EksVpcClusterPolicy",
                 "Effect": "Allow",
                 "Action": [
                     "ec2:DescribeDhcpOptions",
                     "ec2:DescribeNetworkInterfaces",
                     "ec2:DescribeRouteTables",
                     "ec2:DescribeSubnets",
                     "ec2:DescribeSecurityGroups",
                     "ec2:DescribeVpcs"
                 ],
                 "Resource": [
                     "*"
                 ]
             }
         ]
     }
     ```

------
   + Fügen Sie für einen privaten Cluster die folgenden Berechtigungen hinzu. Private Cluster benötigen, falls zutreffend, zusätzliche Berechtigungen für Ihre VPC.

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
     
         "Statement": [
             {
                 "Sid": "EksClusterPolicy",
                 "Effect": "Allow",
                 "Action": "eks:DescribeCluster",
                 "Resource": "arn:aws:eks:us-east-1:{{111122223333}}:cluster/my-cluster"
             },
             {
                 "Sid": "EksVpcClusterPolicy",
                 "Effect": "Allow",
                 "Action": [
                     "ec2:DescribeDhcpOptions",
                     "ec2:DescribeNetworkInterfaces",
                     "ec2:DescribeRouteTables",
                     "ec2:DescribeSubnets",
                     "ec2:DescribeSecurityGroups",
                     "ec2:DescribeVpcs"
                 ],
                 "Resource": [
                     "*"
                 ]
             },
             {
                 "Effect": "Allow",
                 "Action": "ec2:CreateNetworkInterface",
                 "Resource": "*",
                 "Condition": {
                     "StringEqualsIfExists": {
                         "ec2:Subnet": [
                             "arn:aws:ec2:us-east-1:{{ACCOUNT-ID}}:subnet/subnet-03ebd65daeEXAMPLE",
                             "arn:aws:ec2:us-east-1:{{ACCOUNT-ID}}:subnet/subnet-0e377f6036EXAMPLE",
                             "arn:aws:ec2:us-east-1:{{ACCOUNT-ID}}:subnet/subnet-0db658ba1cEXAMPLE",
                             "arn:aws:ec2:us-east-1:{{ACCOUNT-ID}}:subnet/subnet-0db658ba1cEXAMPLE"
                         ]
                     }
                 }
             },
             {
                 "Effect": "Allow",
                 "Action": "ec2:CreateNetworkInterfacePermission",
                 "Resource": "*",
                 "Condition": {
                     "ArnEquals": {
                         "ec2:Subnet": [
                             "arn:aws:ec2:us-east-1:{{111122223333}}:subnet/subnet-03ebd65daeEXAMPLE",
                             "arn:aws:ec2:us-east-1:{{111122223333}}:subnet/subnet-0e377f6036EXAMPLE",
                             "arn:aws:ec2:us-east-1:{{111122223333}}:subnet/subnet-0db658ba1cEXAMPLE",
                             "arn:aws:ec2:us-east-1:{{111122223333}}:subnet/subnet-0db658ba1cEXAMPLE"
                         ]
                     }
                 }
             },
             {
                 "Effect": "Allow",
                 "Action": "ec2:DeleteNetworkInterface",
                 "Resource": "*",
                 "Condition": {
                     "StringEqualsIfExists": {
                         "ec2:Subnet": [
                             "arn:aws:ec2:us-east-1:{{ACCOUNT-ID}}:subnet/subnet-03ebd65daeEXAMPLE",
                             "arn:aws:ec2:us-east-1:{{ACCOUNT-ID}}:subnet/subnet-0e377f6036EXAMPLE",
                             "arn:aws:ec2:us-east-1:{{ACCOUNT-ID}}:subnet/subnet-0db658ba1cEXAMPLE",
                             "arn:aws:ec2:us-east-1:{{ACCOUNT-ID}}:subnet/subnet-0db658ba1cEXAMPLE"
                         ]
                     }
                 }
             }
         ]
     }
     ```

------

1. Wählen Sie **Richtlinie aktualisieren**.

## Schritt 4: Erstellen Sie einen Zugriffseintrag für die CodePipeline Servicerolle
<a name="tutorials-eks-deploy-access-entry"></a>

In diesem Schritt erstellen Sie einen Zugriffseintrag in Ihrem Cluster, der die in Schritt 3 aktualisierte CodePipeline Servicerolle zusammen mit einer verwalteten Zugriffsrichtlinie hinzufügt.

1. Öffnen Sie die EKS-Konsole und navigieren Sie zu Ihrem Cluster.

1. Wählen Sie die Registerkarte **Zugriff** aus.

1. Wählen Sie unter ** IAM-Zugriffseinträge ** die Option Zugriffseintrag ** ** erstellen aus.

1. Geben Sie unter ** ** IAM-Principal-ARN die Rolle ein, die Sie gerade für die Aktion aktualisiert haben, z. B. `cp-service-role` Wählen Sie **Weiter** aus.

1. Wählen Sie auf der ** Seite ** Schritt 2: Zugriffsrichtlinie hinzufügen unter ** Richtlinienname ** die verwaltete Richtlinie für den Zugriff aus, z. B. `AmazonEKSClusterAdminPolicy` Wählen Sie **Richtlinie hinzufügen** aus. Wählen Sie **Weiter** aus.
**Anmerkung**  
Dies ist die Richtlinie, die die CodePipeline Aktion verwendet, um mit Kubernetes zu kommunizieren. Es hat sich bewährt, den Umfang der Berechtigungen in Ihrer Richtlinie mit den geringsten Rechten und nicht in der Verwaltungsrichtlinie einzuschränken, indem Sie stattdessen eine benutzerdefinierte Richtlinie anhängen.

1. Wählen Sie auf der Bewertungsseite die Option ** Erstellen aus**.

## Schritt 5: Erstellen Sie ein Quell-Repository und fügen Sie die `` Helm-Chart-Konfigurationsdateien hinzu
<a name="tutorials-eks-deploy-source"></a>

In diesem Schritt erstellen Sie eine für Ihre Aktion geeignete Konfigurationsdatei (Kubernetes-Manifestdateien oder Helm-Diagramm) und speichern die Konfigurationsdatei in Ihrem Quell-Repository. Verwenden Sie die entsprechende Datei für Ihre Konfiguration. Für weitere Informationen siehe [https://kubernetes.io/docs/reference/kubectl/quick-reference/](https://kubernetes.io/docs/reference/kubectl/quick-reference/) oder [https://helm.sh/docs/topics/charts/](https://helm.sh/docs/topics/charts/).
+ Verwenden Sie für Kubernetes eine Manifestdatei.
+ Verwenden Sie für Helm ein Helm-Diagramm.

1. Erstellen oder verwenden Sie ein vorhandenes GitHub Repository.

1. Erstellen Sie in Ihrem Repository eine neue Struktur für Ihre Helm-Diagrammdateien, wie im folgenden Beispiel gezeigt.

   ```
   mychart
   |-- Chart.yaml
   |-- charts
   |-- templates
   |   |-- NOTES.txt
   |   |-- _helpers.tpl
   |   |-- deployment.yaml
   |   |-- ingress.yaml
   |   `-- service.yaml
   `-- values.yaml
   ```

1. Fügen Sie die Datei zur Stammebene Ihres Repositorys hinzu.

## Schritt 6: Deine Pipeline erstellen
<a name="tutorials-eks-deploy-pipeline"></a>

Verwenden Sie den CodePipeline Assistenten, um Ihre Pipeline-Stufen zu erstellen und Ihr Quell-Repository zu verbinden.

**So erstellen Sie Ihre Pipeline**

1. Öffnen Sie die CodePipeline Konsole unter [ https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/).

1. Wählen sie auf der Seite **Welcome (Willkommen)** die Option **Getting started (Erste Schritte)** aus, oder auf der Seite **Pipelines** die Option **Create pipeline (Pipeline erstellen)**.

1. Wählen Sie auf der ** Seite ** Schritt 1: Erstellungsoption auswählen unter ** Erstellungsoptionen ** die ** Option Benutzerdefinierte Pipeline ** erstellen aus. Wählen Sie **Weiter** aus.

1. In ** Schritt 2: Wählen Sie die Pipeline-Einstellungen ** und geben Sie im Feld ** Pipeline-Name ** den Wert ein**MyEKSPipeline**.

1. CodePipeline bietet Pipelines vom Typ V1 und V2, die sich in ihren Eigenschaften und ihrem Preis unterscheiden. Der Typ V2 ist der einzige Typ, den Sie in der Konsole auswählen können. Weitere Informationen finden Sie unter [Pipeline-Typen](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-types-planning.html?icmpid=docs_acp_help_panel). Informationen zur Preisgestaltung für finden Sie CodePipeline unter [ Preisgestaltung](https://aws.amazon.com/codepipeline/pricing/).

1. Wählen Sie unter ** ** Servicerolle die Servicerolle aus, die Sie in Schritt 3 aktualisiert haben.

1. Belassen Sie die Einstellungen unter **Erweiterte Einstellungen** bei den Standardeinstellungen, und wählen Sie dann **Next (Weiter)** aus.

1. Wählen Sie auf der ** Seite ** Schritt 3: Quellphase hinzufügen für ** Quellanbieter die Option ****, eine Verbindung zu Ihrem GitHub Repository herzustellen**.

1. Wähle auf der ** Seite ** Schritt 4: Build Stage hinzufügen die Option ** Überspringen aus**.

1. Wählen Sie auf der ** Seite ** Schritt 5: Bereitstellungsphase hinzufügen die Option ** Amazon EKS aus**.  
![Stellen Sie das Konfigurationsformular bereit, wobei Helm ausgewählt ist. Es enthält Felder für den Versionsnamen, die Position des Diagramms und andere Optionen.](https://docs.aws.amazon.com/de_de/codepipeline/latest/userguide/images/eks-action-example.png)

   1. Wählen ** Sie unter Konfigurationstyp bereitstellen ** die Option ** Helm aus**.

   1. Geben Sie im Feld Position ** des ** Helm-Diagramms den Namen der Version ein, z. `my-release` B. Geben Sie für den Speicherort ** des ** Helm-Diagramms den Pfad für Ihre Helm-Diagrammdateien ein, z. `mychart` B.

   1. Wählen Sie **Weiter** aus.

1. Überprüfen Sie auf der Seite **Step 6: Review** Ihre Pipeline-Konfiguration und wählen Sie **Create pipeline**, um die Pipeline zu erstellen.  
![Ein Konsolendiagramm, das eine erfolgreiche Pipeline-Ausführung zeigt, wobei die Bereitstellungsaktion zu Ihrer Pipeline hinzugefügt wurde.](https://docs.aws.amazon.com/de_de/codepipeline/latest/userguide/images/eks-deploy-pipeline.png)

1. Nachdem die Pipeline erfolgreich ausgeführt wurde, wählen Sie Details ** anzeigen, ** um die Protokolle der Aktion und die Aktionsausgabe anzuzeigen.