Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Utilizzo di Amazon MWAA con Amazon EKS
L'esempio seguente dimostra come utilizzare Amazon Managed Workflows for Apache Airflow con Amazon EKS.
Versione
Puoi utilizzare l'esempio di codice in questa pagina con Apache Airflow v2 in Python 3.10 e Apache Airflow v3 in Python
Prerequisiti
Per utilizzare l'esempio in questo argomento, è necessario quanto segue:
-
Un ambiente Amazon MWAA.
-
eksctl. Per saperne di più, consulta Installare eksctl.
-
kubectl. Per saperne di più, consulta Installare e configurare kubectl.
In alcuni casi viene installato con eksctl. -
Una coppia di chiavi EC2 nella regione in cui crei il tuo ambiente Amazon MWAA. Per ulteriori informazioni, consulta Creazione o importazione di una coppia di chiavi.
Nota
Quando si utilizza un eksctl comando, è possibile includere un --profile per specificare un profilo diverso da quello predefinito.
Crea una chiave pubblica per Amazon EC2
Usa il seguente comando per creare una chiave pubblica dalla tua coppia di chiavi private.
ssh-keygen -y -f myprivatekey.pem > mypublickey.pub
Per ulteriori informazioni, consulta Recupero della chiave pubblica per la coppia di chiavi.
Creazione del cluster
Usa il comando seguente per creare il cluster. Se desideri un nome personalizzato per il cluster o crearlo in una regione diversa, sostituisci il nome e i valori della regione. Devi creare il cluster nella stessa regione in cui crei l'ambiente Amazon MWAA. Sostituisci i valori delle sottoreti in modo che corrispondano alle sottoreti della tua rete Amazon VPC che usi per Amazon MWAA. Sostituisci il valore in modo che corrisponda alla ssh-public-key chiave che usi. Puoi utilizzare una chiave esistente di Amazon EC2 che si trova nella stessa regione o crearne una nuova nella stessa regione in cui hai creato il tuo ambiente Amazon MWAA.
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"
Il completamento della creazione del cluster richiede del tempo. Una volta completato, puoi verificare che il cluster sia stato creato correttamente e che il provider IAM OIDC sia configurato utilizzando il seguente comando:
eksctl utils associate-iam-oidc-provider \ --regionus-west-2\ --cluster mwaa-eks \ --approve
modalità di autenticazione del cluster EKS
Amazon EKS supporta tre modalità di autenticazione del cluster: APIAPI_AND_CONFIG_MAP, eCONFIG_MAP. La modalità determina in che modo si concede l'accesso al ruolo di esecuzione di Amazon MWAA al cluster:
-
API(impostazione predefinita per i cluster creati con strumenti recenti): concedi l'accesso creando una voce di accesso Amazon EKS. Segui i passaggi riportati in Opzione A—Modalità API: crea una voce di accesso EKS. -
CONFIG_MAPoppureAPI_AND_CONFIG_MAP: concedi l'accesso tramite.aws-authConfigMap Segui i passaggi riportati in Opzione B— ConfigMap modalità: crea una mappatura delle identità.
Per verificare la modalità corrente del cluster:
aws eks describe-cluster --name mwaa-eks --regionus-west-2\ --query "cluster.accessConfig.authenticationMode"
Se crei il cluster con il eksctl comando mostrato qui, controlla la modalità in seguito. Se la modalità è attivaAPI, segui i passaggi di immissione dell'accesso anziché i ConfigMap passaggi.
Crea un namespace mwaa
Dopo aver verificato che il cluster è stato creato correttamente, utilizzate il comando seguente per creare uno spazio dei nomi per i pod.
kubectl create namespace mwaa
Crea un ruolo per il namespace mwaa
Dopo aver creato lo spazio dei nomi, crea un ruolo e un'associazione di ruoli per un utente Amazon MWAA su EKS in grado di eseguire pod in uno spazio dei nomi MWAA. Se hai usato un nome diverso per lo spazio dei nomi, sostituisci mwaa in con il nome che hai usato. -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
Verifica che il nuovo ruolo possa accedere al cluster Amazon EKS eseguendo il seguente comando. Assicurati di utilizzare il nome corretto se non hai usatomwaa:
kubectl get pods -nmwaa--as mwaa-service
Riceverai un messaggio che dice:
No resources found in mwaa namespace.
Crea e collega un ruolo IAM per il cluster Amazon EKS
È necessario creare un ruolo IAM e quindi associarlo al cluster Amazon EKS (k8s) in modo che possa essere utilizzato per l'autenticazione tramite IAM. Il ruolo viene utilizzato solo per accedere al cluster e non dispone di autorizzazioni per la console o le chiamate API.
Autenticazione e autorizzazioni
Questo ruolo si autentica solo nel cluster. In ConfigMap modalità, le autorizzazioni effettive all'interno del cluster provengono dal ruolo e. Kubernetes RoleBinding In modalità API, le autorizzazioni provengono dall'ambito di accesso della voce di accesso. Assicurati di utilizzare lo stesso nome di Kubernetes gruppo RoleBinding sia nel metodo di accesso che scegli.
Crea un nuovo ruolo per l'ambiente Amazon MWAA utilizzando i passaggi indicati. Ruolo di esecuzione di Amazon MWAA Tuttavia, invece di creare e allegare le politiche descritte in quell'argomento, allega la seguente politica:
Dopo aver creato il ruolo, modifica l'ambiente Amazon MWAA per utilizzare il ruolo creato come ruolo di esecuzione per l'ambiente. Per cambiare il ruolo, modifica l'ambiente da utilizzare. Seleziona il ruolo di esecuzione in Autorizzazioni.
Problemi noti:
-
È noto che gli ARN di ruolo con percorsi secondari non sono in grado di autenticarsi con Amazon EKS. La soluzione alternativa è creare il ruolo del servizio manualmente anziché utilizzare quello creato da Amazon MWAA stesso. Per saperne di più, consulta la sezione Ruoli con percorsi non funzionano quando il percorso è incluso nel relativo ARN nella configmap di aws-auth
-
Se l'elenco dei servizi Amazon MWAA non è disponibile in IAM, devi scegliere una policy di servizio alternativa, come Amazon EC2, e quindi aggiornare la policy di fiducia del ruolo in modo che corrisponda a quanto segue:
Per ulteriori informazioni, consulta Come utilizzare le politiche di fiducia con i ruoli IAM.
Crea il file requirements.txt
Per utilizzare il codice di esempio in questa sezione, assicurati di aver aggiunto una delle seguenti opzioni di database al tuorequirements.txt. Per saperne di più, fai riferimento aInstallazione delle dipendenze Python.
kubernetes apache-airflow-providers-cncf-kubernetes
Concedi al ruolo di esecuzione di Amazon MWAA l'accesso al cluster
Il modo in cui concedi l'accesso al ruolo di esecuzione di Amazon MWAA al cluster dipende dalla modalità di autenticazione del cluster (consulta la nota in). Creazione del cluster Segui il percorso che corrisponde al tuo cluster.
Opzione A—Modalità API: crea una voce di accesso EKS
Se il tuo cluster utilizza la modalità di API_AND_CONFIG_MAP autenticazione API or, crea una voce di accesso per il ruolo di esecuzione di Amazon MWAA. Sostituisci Regione AWS l'ARN del nome del cluster e del ruolo con i tuoi valori.
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
Il mwaa-service gruppo deve corrispondere al subjects gruppo a cui fa riferimento il gruppo in RoleBinding cui hai creato. Crea un ruolo per il namespace mwaa Questo associa il ruolo di esecuzione alle mwaa-role autorizzazioni nel namespace. mwaa
Per confermare di aver creato la voce di accesso:
aws eks list-access-entries --regionus-west-2--cluster-namemwaa-eks
Opzione B— ConfigMap modalità: crea una mappatura delle identità
Se il tuo cluster utilizza la modalità di API_AND_CONFIG_MAP autenticazione CONFIG_MAP or, crea una mappatura delle identità. Questo scrive una voce nel cluster. aws-auth ConfigMap Questo passaggio non ha effetto sui cluster che utilizzano la modalità di API autenticazione.
eksctl create iamidentitymapping \ --regionus-west-2\ --cluster mwaa-eks \ --arn arn:aws:iam::123456789012:role/mwaa-execution-role\ --username mwaa-service \ --group mwaa-service
Il --group mwaa-service valore deve corrispondere all'oggetto del gruppo in RoleBinding cui hai creato. Crea un ruolo per il namespace mwaa Ciò lega il ruolo di esecuzione alle mwaa-role autorizzazioni nel mwaa namespace, in linea con la voce di accesso nell'opzione A.
Crea il kubeconfig
Usa il seguente comando per creare: kubeconfig
aws eks update-kubeconfig \ --regionus-west-2\ --kubeconfig ./kube_config.yaml \ --name mwaa-eks \ --alias aws
Se hai utilizzato un profilo specifico durante l'esecuzione, update-kubeconfig devi rimuovere la env: sezione aggiunta al file kube_config.yaml in modo che funzioni correttamente con Amazon MWAA. Per farlo, elimina quanto segue dal file e salvalo:
env: - name: AWS_PROFILE value: profile_name
Crea un DAG
Utilizzate il seguente esempio di codice per creare un file Python, ad esempio mwaa_pod_example.py per il 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' )
Aggiungi il DAG e kube_config.yaml al bucket Amazon S3
Inserisci il DAG che hai creato e il kube_config.yaml file nel bucket Amazon S3 per l'ambiente Amazon MWAA. Puoi inserire i file nel tuo bucket utilizzando la console Amazon S3 o il. AWS Command Line Interface
Abilita e attiva l'esempio
In Apache Airflow, abilita l'esempio e poi attivalo.
Una volta eseguito e completato correttamente, utilizzate il comando seguente per verificare il pod:
kubectl get pods -n mwaa
Si ottiene un risultato simile al seguente:
NAME READY STATUS RESTARTS AGE mwaa-pod-test-aa11bb22cc3344445555666677778888 0/1 Completed 0 2m23s
È quindi possibile verificare l'output del pod con il seguente comando. Sostituisci il valore del nome con il valore restituito dal comando precedente:
kubectl logs -n mwaamwaa-pod-test-aa11bb22cc3344445555666677778888