

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.

# Verwenden von Amazon MWAA mit Amazon EKS
<a name="mwaa-eks-example"></a>

Das folgende Beispiel zeigt, wie Amazon Managed Workflows für Apache Airflow mit Amazon EKS verwendet werden.

**Topics**
+ [Version](#mwaa-eks-example-version)
+ [Voraussetzungen](#eksctl-prereqs)
+ [Erstellen Sie einen öffentlichen Schlüssel für Amazon EC2](#eksctl-create-key)
+ [Den Cluster erstellen](#create-cluster-eksctl)
+ [Erstellen Sie einen Namespace `mwaa`](#eksctl-namespace)
+ [Erstellen Sie eine Rolle für den Namespace `mwaa`](#eksctl-role)
+ [Eine IAM-Rolle für den Amazon EKS-Cluster erstellen und anhängen](#eksctl-iam-role)
+ [Erstellen Sie die Datei requirements.txt](#eksctl-requirements)
+ [Erstellen Sie eine Identitätszuweisung für Amazon EKS](#eksctl-identity-map)
+ [Erstellen der `kubeconfig`](#eksctl-kube-config)
+ [Erstellen Sie eine DAG](#eksctl-create-dag)
+ [DAG und `kube_config.yaml` zum Amazon S3 S3-Bucket hinzufügen](#eksctl-dag-bucket)
+ [Aktivieren und lösen Sie das Beispiel aus](#eksctl-trigger-pod)

## Version
<a name="mwaa-eks-example-version"></a>

[Sie können das Codebeispiel auf dieser Seite mit **Apache Airflow v2** in [Python 3.10](https://peps.python.org/pep-0619/) und **Apache Airflow v3** in Python 3.11 verwenden.](https://peps.python.org/pep-0664/)

## Voraussetzungen
<a name="eksctl-prereqs"></a>

Um das Beispiel in diesem Thema zu verwenden, benötigen Sie Folgendes:
+ Eine [Amazon MWAA-Umgebung](get-started.md).
+ eksctl. Weitere Informationen finden Sie unter [Installieren](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html#install-eksctl) von eksctl.
+ kubectl. Weitere Informationen finden Sie unter [Kubectl installieren und einrichten](https://kubernetes.io/docs/tasks/tools/install-kubectl/). In einigen Fällen wird dies mit eksctl installiert.
+ Ein EC2-Schlüsselpaar in der Region, in der Sie Ihre Amazon MWAA-Umgebung erstellen. Weitere Informationen finden Sie unter [key pair erstellen oder importieren](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#prepare-key-pair).

**Anmerkung**  
Wenn Sie einen `eksctl` Befehl verwenden, können Sie a einschließen, `--profile` um ein anderes Profil als das Standardprofil anzugeben.

## Erstellen Sie einen öffentlichen Schlüssel für Amazon EC2
<a name="eksctl-create-key"></a>

Verwenden Sie den folgenden Befehl, um einen öffentlichen Schlüssel aus Ihrem privaten key pair zu erstellen.

```
ssh-keygen -y -f myprivatekey.pem > mypublickey.pub
```

Weitere Informationen finden Sie unter [Abrufen des öffentlichen Schlüssels für Ihr key pair](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#retrieving-the-public-key).

## Den Cluster erstellen
<a name="create-cluster-eksctl"></a>

Verwenden Sie den folgenden Befehl, um den Cluster zu erstellen. Wenn Sie einen benutzerdefinierten Namen für den Cluster verwenden oder ihn in einer anderen Region erstellen möchten, ersetzen Sie die Werte für Name und Region. Sie müssen den Cluster in derselben Region erstellen, in der Sie die Amazon MWAA-Umgebung erstellen. Ersetzen Sie die Werte für die Subnetze so, dass sie den Subnetzen in Ihrem Amazon VPC-Netzwerk entsprechen, die Sie für Amazon MWAA verwenden. Ersetzen Sie den Wert für so, dass er dem von Ihnen `ssh-public-key` verwendeten Schlüssel entspricht. Sie können einen vorhandenen Schlüssel aus Amazon EC2 verwenden, der sich in derselben Region befindet, oder einen neuen Schlüssel in derselben Region erstellen, in der Sie Ihre Amazon MWAA-Umgebung erstellen.

```
eksctl create cluster \
--name mwaa-eks \
--region us-west-2 \
--version 1.18 \
--nodegroup-name linux-nodes \
--nodes 3 \
--nodes-min 1 \
--nodes-max 4 \
--with-oidc \
--ssh-access \
--ssh-public-key MyPublicKey \
--managed \
--vpc-public-subnets "subnet-11111111111111111, subnet-2222222222222222222" \
--vpc-private-subnets "subnet-33333333333333333, subnet-44444444444444444"
```

Es dauert einige Zeit, bis die Erstellung des Clusters abgeschlossen ist. Sobald der Vorgang abgeschlossen ist, können Sie mithilfe des folgenden Befehls überprüfen, ob der Cluster erfolgreich erstellt wurde und ob der IAM OIDC-Anbieter konfiguriert wurde:

```
eksctl utils associate-iam-oidc-provider \
--region us-west-2 \
--cluster mwaa-eks \
--approve
```

## Erstellen Sie einen Namespace `mwaa`
<a name="eksctl-namespace"></a>

Nachdem Sie bestätigt haben, dass der Cluster erfolgreich erstellt wurde, verwenden Sie den folgenden Befehl, um einen Namespace für die Pods zu erstellen.

```
kubectl create namespace mwaa
```

## Erstellen Sie eine Rolle für den Namespace `mwaa`
<a name="eksctl-role"></a>

Nachdem Sie den Namespace erstellt haben, erstellen Sie eine Rolle und eine Rollenbindung für einen Amazon MWAA-Benutzer auf EKS, der Pods in einem MWAA-Namespace ausführen kann. Wenn Sie einen anderen Namen für den Namespace verwendet haben, ersetzen Sie mwaa in durch den Namen, den Sie verwendet haben. `-n mwaa`

```
cat << EOF | kubectl apply -f - -n mwaa
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: mwaa-role
rules:
  - apiGroups:
  - ""
  - "apps"
  - "batch"
  - "extensions"
resources:      
  - "jobs"
  - "pods"
  - "pods/attach"
			- "pods/exec"
  - "pods/log"
  - "pods/portforward"
  - "secrets"
  - "services"
verbs:
  - "create"
  - "delete"
  - "describe"
  - "get"
  - "list"
  - "patch"
  - "update"
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: mwaa-role-binding
  subjects:
    - kind: User
  name: mwaa-service
  roleRef:
    kind: Role
  name: mwaa-role
  apiGroup: rbac.authorization.k8s.io
EOF
```

Vergewissern Sie sich, dass die neue Rolle auf den Amazon EKS-Cluster zugreifen kann, indem Sie den folgenden Befehl ausführen. Achten Sie darauf, den richtigen Namen zu verwenden, falls Sie Folgendes nicht verwendet haben*mwaa*:

```
kubectl get pods -n mwaa --as mwaa-service
```

Sie erhalten eine Nachricht zurück, die besagt:

```
No resources found in mwaa namespace.
```

## Eine IAM-Rolle für den Amazon EKS-Cluster erstellen und anhängen
<a name="eksctl-iam-role"></a>

Sie müssen eine IAM-Rolle erstellen und sie dann an den Amazon EKS (k8s) -Cluster binden, damit sie für die Authentifizierung über IAM verwendet werden kann. Die Rolle wird nur für die Anmeldung am Cluster verwendet und hat keine Berechtigungen für die Konsole oder API-Aufrufe.

Erstellen Sie mithilfe der Schritte unter eine neue Rolle für die Amazon MWAA-Umgebung. [Amazon MWAA-Ausführungsrolle](mwaa-create-role.md) Anstatt jedoch die in diesem Thema beschriebenen Richtlinien zu erstellen und anzuhängen, fügen Sie die folgende Richtlinie bei:

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "airflow:PublishMetrics",
            "Resource": "arn:aws:airflow:us-east-1:111122223333:environment/${MWAA_ENV_NAME}"
        },
        {
            "Effect": "Deny",
            "Action": "s3:ListAllMyBuckets",
            "Resource": [
                "arn:aws:s3:::{MWAA_S3_BUCKET}",
                "arn:aws:s3:::{MWAA_S3_BUCKET}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject*",
                "s3:GetBucket*",
                "s3:List*"
            ],
            "Resource": [
                "arn:aws:s3:::{MWAA_S3_BUCKET}",
                "arn:aws:s3:::{MWAA_S3_BUCKET}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:CreateLogGroup",
                "logs:PutLogEvents",
                "logs:GetLogEvents",
                "logs:GetLogRecord",
                "logs:GetLogGroupFields",
                "logs:GetQueryResults",
                "logs:DescribeLogGroups"
            ],
            "Resource": [
            "arn:aws:logs:us-east-1:111122223333:log-group:airflow-${MWAA_ENV_NAME}-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "cloudwatch:PutMetricData",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "sqs:ChangeMessageVisibility",
                "sqs:DeleteMessage",
                "sqs:GetQueueAttributes",
                "sqs:GetQueueUrl",
                "sqs:ReceiveMessage",
                "sqs:SendMessage"
            ],
            "Resource": "arn:aws:sqs:us-east-1:*:airflow-celery-*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:GenerateDataKey*",
                "kms:Encrypt"
            ],
            "NotResource": "arn:aws:kms:*:111122223333:key/*",
            "Condition": {
                "StringLike": {
                    "kms:ViaService": [
                    "sqs.us-east-1.amazonaws.com"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "eks:DescribeCluster"
            ],
            "Resource": "arn:aws:eks:us-east-1:111122223333:cluster/${EKS_CLUSTER_NAME}"
        }
    ]
}
```

------

Nachdem Sie die Rolle erstellt haben, bearbeiten Sie Ihre Amazon MWAA-Umgebung, um die von Ihnen erstellte Rolle als Ausführungsrolle für die Umgebung zu verwenden. Um die Rolle zu ändern, bearbeiten Sie die zu verwendende Umgebung. Sie wählen die Ausführungsrolle unter **Berechtigungen** aus.

**Bekannte Probleme:**
+ Es gibt ein bekanntes Problem ARNs mit Rollen, bei denen Unterpfade sich nicht bei Amazon EKS authentifizieren können. Die Lösung hierfür besteht darin, die Servicerolle manuell zu erstellen, anstatt die von Amazon MWAA selbst erstellte Rolle zu verwenden. Weitere Informationen finden Sie unter [Rollen mit Pfaden funktionieren nicht, wenn der Pfad in ihrem ARN in der aws-auth-Configmap enthalten ist](https://github.com/kubernetes-sigs/aws-iam-authenticator/issues/268).
+ Wenn die Amazon MWAA-Serviceliste in IAM nicht verfügbar ist, müssen Sie eine alternative Servicerichtlinie wie Amazon EC2 auswählen und dann die Vertrauensrichtlinie der Rolle so aktualisieren, dass sie den folgenden Anforderungen entspricht:

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

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Principal": {
          "Service": [
            "airflow-env.amazonaws.com",
            "airflow.amazonaws.com"
          ]
        },
        "Action": "sts:AssumeRole"
      }
    ]
  }
  ```

------

  Weitere Informationen finden Sie unter [So verwenden Sie Vertrauensrichtlinien mit](https://aws.amazon.com/blogs/security/how-to-use-trust-policies-with-iam-roles/) IAM-Rollen.

## Erstellen Sie die Datei requirements.txt
<a name="eksctl-requirements"></a>

Um den Beispielcode in diesem Abschnitt verwenden zu können, stellen Sie sicher, dass Sie Ihrem eine der folgenden Datenbankoptionen hinzugefügt haben`requirements.txt`. Weitere Informationen finden Sie unter[Python-Abhängigkeiten installieren](working-dags-dependencies.md).

```
kubernetes
apache-airflow[cncf.kubernetes]==3.0.0
```

## Erstellen Sie eine Identitätszuweisung für Amazon EKS
<a name="eksctl-identity-map"></a>

Verwenden Sie den ARN für die Rolle, die Sie im folgenden Befehl erstellt haben, um eine Identitätszuweisung für Amazon EKS zu erstellen. Ändern Sie die Region in *us-east-1* die Region, in der Sie die Umgebung erstellt haben. Ersetzen Sie den ARN für die Rolle und schließlich *mwaa-execution-role* durch die Ausführungsrolle Ihrer Umgebung.

```
eksctl create iamidentitymapping \
--region us-east-1 \
--cluster mwaa-eks \
--arn arn:aws:iam::123456789012:role/mwaa-execution-role \
--username mwaa-service
```

## Erstellen der `kubeconfig`
<a name="eksctl-kube-config"></a>

Verwenden Sie den folgenden Befehl, um Folgendes zu erstellen`kubeconfig`:

```
aws eks update-kubeconfig \
--region us-west-2 \
--kubeconfig ./kube_config.yaml \
--name mwaa-eks \
--alias aws
```

Wenn Sie bei der Ausführung ein bestimmtes Profil verwendet haben, müssen `update-kubeconfig` Sie den `env:` Abschnitt entfernen, der der Datei kube\$1config.yaml hinzugefügt wurde, damit er ordnungsgemäß mit Amazon MWAA funktioniert. Löschen Sie dazu Folgendes aus der Datei und speichern Sie sie anschließend:

```
env:
 - name: AWS_PROFILE
 value: profile_name
```

## Erstellen Sie eine DAG
<a name="eksctl-create-dag"></a>

Verwenden Sie das folgende Codebeispiel, um eine Python-Datei zu erstellen, z. B. `mwaa_pod_example.py` für die DAG.

```
"""
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
"""
from airflow import DAG
from datetime import datetime
from airflow.providers.cncf.kubernetes.operators.kubernetes_pod import KubernetesPodOperator

default_args = {
   'owner': 'aws',
   'depends_on_past': False,
   'start_date': datetime(2019, 2, 20),
   'provide_context': True
}

dag = DAG(
   'kubernetes_pod_example', default_args=default_args, schedule_interval=None)

#use a kube_config stored in s3 dags folder for now
kube_config_path = '/usr/local/airflow/dags/kube_config.yaml'

podRun = KubernetesPodOperator(
                       namespace="mwaa",
                       image="ubuntu:18.04",
                       cmds=["bash"],
                       arguments=["-c", "ls"],
                       labels={"foo": "bar"},
                       name="mwaa-pod-test",
                       task_id="pod-task",
                       get_logs=True,
                       dag=dag,
                       is_delete_operator_pod=False,
                       config_file=kube_config_path,
                       in_cluster=False,
                       cluster_context='aws'
                       )
```

## DAG und `kube_config.yaml` zum Amazon S3 S3-Bucket hinzufügen
<a name="eksctl-dag-bucket"></a>

Fügen Sie die von Ihnen erstellte DAG und die `kube_config.yaml` Datei in den Amazon S3 S3-Bucket für die Amazon MWAA-Umgebung ein. Sie können Dateien entweder mit der Amazon S3 S3-Konsole oder mit dem in Ihren Bucket einfügen AWS Command Line Interface.

## Aktivieren und lösen Sie das Beispiel aus
<a name="eksctl-trigger-pod"></a>

Aktivieren Sie das Beispiel in Apache Airflow und lösen Sie es dann aus.

Nachdem es erfolgreich ausgeführt und abgeschlossen wurde, verwenden Sie den folgenden Befehl, um den Pod zu verifizieren:

```
kubectl get pods -n mwaa
```

Sie erhalten eine Ausgabe, die der folgenden ähnelt:

```
NAME READY STATUS RESTARTS AGE
mwaa-pod-test-aa11bb22cc3344445555666677778888 0/1 Completed 0 2m23s
```

Anschließend können Sie die Ausgabe des Pods mit dem folgenden Befehl überprüfen. Ersetzen Sie den Namenswert durch den Wert, der vom vorherigen Befehl zurückgegeben wurde:

```
kubectl logs -n mwaa mwaa-pod-test-aa11bb22cc3344445555666677778888
```