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.
Amazon MWAA mit Amazon EKS verwenden
Das folgende Beispiel zeigt, wie Amazon Managed Workflows für Apache Airflow mit Amazon EKS verwendet wird.
Themen
Version
Sie können das Codebeispiel auf dieser Seite mit Apache Airflow v2 in Python 3.10
Voraussetzungen
Um das Beispiel in diesem Thema verwenden zu können, benötigen Sie Folgendes:
-
eksctl. Weitere Informationen finden Sie unter Installieren von eksctl.
-
kubectl. Weitere Informationen finden Sie unter Kubectl installieren und einrichten.
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 Ein Schlüsselpaar erstellen oder importieren.
Anmerkung
Wenn Sie einen eksctl Befehl verwenden, können Sie einen hinzufügen, --profile um ein anderes als das Standardprofil anzugeben.
Erstellen Sie einen öffentlichen Schlüssel für Amazon EC2
Verwenden Sie den folgenden Befehl, um einen öffentlichen Schlüssel aus Ihrem privaten Schlüsselpaar zu erstellen.
ssh-keygen -y -f myprivatekey.pem > mypublickey.pub
Weitere Informationen finden Sie unter Abrufen des öffentlichen Schlüssels für Ihr Schlüsselpaar.
Den Cluster erstellen
Verwenden Sie den folgenden Befehl, um den Cluster zu erstellen. Wenn Sie einen benutzerdefinierten Namen für den Cluster wünschen oder ihn in einer anderen Region erstellen möchten, ersetzen Sie den Namen und die Regionswerte. 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 den so, dass er dem von Ihnen ssh-public-key verwendeten Schlüssel entspricht. Sie können einen vorhandenen Schlüssel von 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 \ --regionus-west-2\ --version 1.30 \ --nodegroup-name linux-nodes \ --nodes 3 \ --nodes-min 1 \ --nodes-max 4 \ --with-oidc \ --ssh-access \ --ssh-public-keyMyPublicKey\ --managed \ --vpc-public-subnets "subnet-11111111111111111, subnet-2222222222222222222" \ --vpc-private-subnets "subnet-33333333333333333, subnet-44444444444444444"
Es dauert einige Zeit, bis die Clustererstellung abgeschlossen ist. Nach Abschluss des Vorgangs können Sie mithilfe des folgenden Befehls überprüfen, ob der Cluster erfolgreich erstellt wurde und ob der IAM-OIDC-Anbieter konfiguriert ist:
eksctl utils associate-iam-oidc-provider \ --regionus-west-2\ --cluster mwaa-eks \ --approve
EKS-Cluster-Authentifizierungsmodus
Amazon EKS unterstützt drei Cluster-Authentifizierungsmodi: APIAPI_AND_CONFIG_MAP, undCONFIG_MAP. Der Modus bestimmt, wie Sie der Amazon MWAA-Ausführungsrolle Zugriff auf den Cluster gewähren:
-
API(Standard für Cluster, die mit aktuellen Tools erstellt wurden) — Gewähren Sie Zugriff, indem Sie einen Amazon EKS-Zugriffseintrag erstellen. Verwenden Sie die Schritte in Option A — API-Modus: Erstellen Sie einen EKS-Zugriffseintrag. -
CONFIG_MAPoderAPI_AND_CONFIG_MAP— Zugriff gewähren über dieaws-authConfigMap. Verwenden Sie die Schritte in Option B — ConfigMap Modus: Erstellen Sie eine Identitätszuordnung.
So überprüfen Sie den aktuellen Modus Ihres Clusters:
aws eks describe-cluster --name mwaa-eks --regionus-west-2\ --query "cluster.accessConfig.authenticationMode"
Wenn Sie den Cluster mit dem hier gezeigten eksctl Befehl erstellen, überprüfen Sie anschließend den Modus. Wenn der Modus aktiviert istAPI, folgen Sie den Schritten zur Zugriffseingabe anstelle der ConfigMap Schritte.
Erstellen Sie einen MWA-Namespace
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 MWAA-Namespace
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 - -nmwaakind: 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 - kind: Group name: mwaa-service roleRef: kind: Role name: mwaa-role apiGroup: rbac.authorization.k8s.io EOF
Bestätigen Sie, 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 habenmwaa:
kubectl get pods -nmwaa--as mwaa-service
Es wird eine Meldung zurückgegeben, die besagt:
No resources found in mwaa namespace.
Erstellen Sie eine IAM-Rolle für den Amazon EKS-Cluster und fügen Sie sie an
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 Konsolen- oder API-Aufrufe.
Authentifizierung und Berechtigungen
Diese Rolle authentifiziert sich nur beim Cluster. Im ConfigMap Modus stammen die tatsächlichen Clusterberechtigungen aus der Kubernetes Rolle und. RoleBinding Im API-Modus stammen die Berechtigungen aus dem Zugriffsbereich des Zugriffseintrags. Stellen Sie sicher, dass Sie sowohl für die als auch für die RoleBinding von Ihnen gewählte Zugriffsmethode denselben Kubernetes Gruppennamen verwenden.
Erstellen Sie mithilfe der Schritte unter eine neue Rolle für die Amazon MWAA-Umgebung. Amazon MWAA-Ausführungsrolle Anstatt jedoch die in diesem Thema beschriebenen Richtlinien zu erstellen und anzuhängen, fügen Sie die folgende Richtlinie hinzu:
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 mit Rollen-ARNs mit Unterpfaden, die sich nicht bei Amazon EKS authentifizieren können. Die Problemumgehung 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
-
Wenn die Amazon MWAA-Serviceliste in IAM nicht verfügbar ist, müssen Sie eine alternative Servicerichtlinie wählen, z. B. Amazon EC2, und dann die Vertrauensrichtlinie der Rolle so aktualisieren, dass sie den folgenden Anforderungen entspricht:
Weitere Informationen finden Sie unter So verwenden Sie Vertrauensrichtlinien mit IAM-Rollen.
Erstellen Sie die Datei requirements.txt
Um den Beispielcode in diesem Abschnitt zu verwenden, stellen Sie sicher, dass Sie eine der folgenden Datenbankoptionen zu Ihrem hinzugefügt habenrequirements.txt. Weitere Informationen finden Sie unterPython-Abhängigkeiten installieren.
kubernetes apache-airflow-providers-cncf-kubernetes
Gewähren Sie der Amazon MWAA-Ausführungsrolle Zugriff auf den Cluster
Die Art und Weise, wie Sie der Amazon MWAA-Ausführungsrolle Zugriff auf den Cluster gewähren, hängt vom Authentifizierungsmodus des Clusters ab (siehe Hinweis unter). Den Cluster erstellen Folgen Sie dem Pfad, der zu Ihrem Cluster passt.
Option A — API-Modus: Erstellen Sie einen EKS-Zugriffseintrag
Wenn Ihr Cluster den API_AND_CONFIG_MAP Authentifizierungsmodus API oder verwendet, erstellen Sie einen Zugriffseintrag für die Amazon MWAA-Ausführungsrolle. Ersetzen Sie den AWS-Region Clusternamen und den Rollen-ARN durch Ihre Werte.
aws eks create-access-entry \ --regionus-west-2\ --cluster-namemwaa-eks\ --principal-arn arn:aws:iam::123456789012:role/mwaa-execution-role\ --kubernetes-groups mwaa-service \ --username mwaa-service
Die mwaa-service Gruppe muss mit der Gruppe übereinstimmen, auf die in der subjects Gruppe verwiesen wird RoleBinding , die Sie erstellt habenErstellen Sie eine Rolle für den MWAA-Namespace. Dadurch wird die Ausführungsrolle an die mwaa-role Berechtigungen im mwaa Namespace gebunden.
Gehen Sie wie folgt vor, um zu bestätigen, dass Sie den Zugriffseintrag erstellt haben:
aws eks list-access-entries --regionus-west-2--cluster-namemwaa-eks
Option B — ConfigMap Modus: Erstellen Sie eine Identitätszuordnung
Wenn Ihr Cluster den API_AND_CONFIG_MAP Authentifizierungsmodus CONFIG_MAP oder verwendet, erstellen Sie eine Identitätszuordnung. Dadurch wird ein Eintrag in den des Clusters geschrieben aws-auth ConfigMap. Dieser Schritt hat keine Auswirkung auf Cluster, die den API Authentifizierungsmodus verwenden.
eksctl create iamidentitymapping \ --regionus-west-2\ --cluster mwaa-eks \ --arn arn:aws:iam::123456789012:role/mwaa-execution-role\ --username mwaa-service \ --group mwaa-service
Der --group mwaa-service Wert muss mit dem Betreff der Gruppe übereinstimmen, in dem RoleBinding Sie ihn erstellt habenErstellen Sie eine Rolle für den MWAA-Namespace. Dadurch wird die Ausführungsrolle an die mwaa-role Berechtigungen im mwaa Namespace gebunden, was dem Zugriffseintrag in Option A entspricht.
Erstellen Sie die Kubeconfig
Verwenden Sie den folgenden Befehl, um Folgendes zu erstellen: kubeconfig
aws eks update-kubeconfig \ --regionus-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_config.yaml hinzugefügt wurde, damit er ordnungsgemäß mit Amazon MWAA funktioniert. Löschen Sie dazu Folgendes aus der Datei und speichern Sie sie dann:
env: - name: AWS_PROFILE value: profile_name
Erstellen Sie eine DAG
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' )
Fügen Sie die DAG und kube_config.yaml zum Amazon S3-Bucket hinzu
Fügen Sie die von Ihnen erstellte DAG und die kube_config.yaml Datei in den Amazon S3-Bucket für die Amazon MWAA-Umgebung ein. Sie können Dateien entweder über die Amazon S3-Konsole oder die in Ihren Bucket legen. AWS Command Line Interface
Aktivieren Sie das Beispiel und lösen Sie es aus
Aktivieren Sie das Beispiel in Apache Airflow und lösen Sie es dann aus.
Nachdem es ausgeführt und erfolgreich abgeschlossen wurde, verwenden Sie den folgenden Befehl, um den Pod zu überprüfen:
kubectl get pods -n mwaa
Sie erhalten eine Ausgabe ähnlich der folgenden:
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 mwaamwaa-pod-test-aa11bb22cc3344445555666677778888