Comment puis-je accéder à des ressources inter-comptes avec DAG Airflow sur Amazon MWAA et résoudre les problèmes associés ?

Lecture de 6 minute(s)
0

Je souhaite accéder à des ressources inter-comptes avec DAG Airflow sur Amazon Managed Workflows pour Apache Airflow (Amazon MWAA) et résoudre les problèmes associés.

Résolution

La bibliothèque apache-airflow providers-amazon est préinstallée dans Amazon MWAA. Cette bibliothèque propose une grande variété d'opérateurs AWS et permet de gérer les tâches dans l'ensemble des services AWS. Les étapes suivantes font appel aux opérateurs AWS avec AWS Identity and Access Management (IAM) et aux connexions Airflow pour un accès entre les comptes avec Amazon MWAA. Pour plus d'informations, consultez la page Amazon Web Services Connection sur le site Web d'Apache Airflow.

Pour utiliser Apache Airflow afin d'activer l'accès aux ressources entre comptes dans Amazon MWAA, procédez comme suit :

Remarque : Les étapes suivantes invoquent une tâche AWS Glue entre comptes et requièrent deux comptes AWS. Le compte A est le compte source et doit inclure un environnement Amazon MWAA établi. Le compte B est le compte cible.

Créer un rôle IAM dans le compte B pour AWS Glue

À partir du compte B, effectuez les étapes suivantes :

  1. Ouvrez la console IAM.
  2. Sélectionnez Rôles, puis Créer un rôle.
  3. Pour Type d'entité approuvée, sélectionnez Stratégie d’approbation personnalisée. Établissez ensuite une relation d’approbation qui permet au rôle d'exécution Amazon MWAA dans le compte A d'endosser le rôle de compte B :
    Exemple de stratégie d’approbation :
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::example-account-a-id:role/example-mwaa-runtime-role"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    Remarque : Remplacez example-account-a-id par l'ID de votre compte A et example-mwaa-runtime-role par le rôle d'exécution Amazon MWAA.
  4. Pour Autorisations, octroyez glue:StartJobRun.
    Remarque : Pour un accès complet à AWS Glue, attachez la stratégie gérée AWSGlueConsoleFullAccess.
    Exemple de stratégie d'autorisation pour le nouveau rôle GlueCrossAccount :
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "glue:StartJobRun",
            "glue:GetJob"
          ],
          "Resource": "arn:aws:glue:example-region:example-account-a-id:job/example-job"
        }
      ]
    }
    Remarque : Remplacez example-region par votre région AWS, example-account-a-id par l'ID de votre compte A et example-job par le nom de tâche.

Mettre à jour le rôle d'exécution Amazon MWAA dans le compte A

Effectuez les étapes suivantes dans le compte A :

  1. Ouvrez la console IAM.
  2. Localisez le rôle d'exécution Amazon MWAA. Le rôle associé à l'environnement Amazon MWAA se trouve sur la page d’informations sur l'environnement > Autorisations > Rôle d’exécution.
  3. Sélectionnez Modifier la stratégie. Puis, ajoutez sts:AssumeRole pour le rôle dans le compte B.
    Exemple de stratégie :
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "sts:AssumeRole",
          "Resource": "arn:aws:iam::example-account-b-id:role/example-glue-role"
        }
      ]
    }
    Remarque : Remplacez example-account-b-id par l’ID de votre compte B et example-glue-role par le nom de votre rôle AWS Glue.

Créer une connexion Airflow dans Amazon MWAA

Effectuez les étapes suivantes dans le compte A :

  1. Accédez à l'interface utilisateur Airflow de votre environnement Amazon MWAA.
  2. Sélectionnez Administrateur, puis Connexions.
  3. Pour ajouter une nouvelle connexion, sélectionnez Ajouter un nouvel enregistrement. Puis, saisissez les détails de connexion suivants :
    Pour ID de connexion, affectez un identifiant unique à la connexion.
    Pour Type de connexion, choisissez Amazon Web Services dans la liste déroulante.
    Pour ID de clé d'accès AWS et Clé d'accès secrète AWS, laissez ces champs vides. Vous utiliserez les rôles IAM pour l'authentification.
    Pour Extra, saisissez le rôle ARN et la région au format JSON.
    Exemple de champ Extra :
    { "role_arn": "arn:aws:iam::example-account-b:role/example-glue-role", "region_name": "example-region" }
    Remarque : Remplacez example-account-b-id par l’ID de votre compte B, example-glue-role par le nom de votre rôle AWS Glue et example-region par votre région.
  4. Sélectionnez Enregistrer. Répétez les étapes 1 à 4 précédentes pour chaque compte AWS auquel vous souhaitez vous connecter.

Configurer le GlueJobOperator dans votre DAG Airflow

Pour configurer le GlueJobOperator dans votre DAG, utilisez les opérateurs Airflow et spécifiez l'ID de connexion AWS pour la tâche AWS Glue. Pour plus d'informations, consultez la page airflow.providers.amazon.aws.operators.glue sur le site Web d'Apache Airflow.

Exemple de DAG :

from airflow import DAG
from airflow.providers.amazon.aws.operators.glue import GlueJobOperator
from datetime import datetime, timedelta

default_args = {
    'owner': 'airflow',
    'start_date': datetime(2023, 1, 1),
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
}

dag = DAG(
    'glue_cross_account',
    default_args=default_args,
    schedule_interval=None,
    catchup=False,
)

run_glue_job = GlueJobOperator(
    task_id='run_glue_job',
    job_name='example-glue-job',
    aws_conn_id='example-aws-connection-id',
    dag=dag,
)

Remarque : Remplacez example-glue-job par le nom de votre tâche AWS Glue et example-connection-id par l’ID de votre connexion Airflow.

Lorsque le GlueJobOperator de votre DAG Airflow s'exécute, le rôle spécifié dans la configuration de la connexion est endossé. Ce rôle dispose des autorisations requises pour exécuter des tâches AWS Glue dans le compte B. De plus, la tâche Airflow du compte A déclenche la tâche AWS Glue dans le compte B et utilise les ressources et les données du compte B.

Pour plus d'informations, consultez la page AWS Glue sur le site Web d'Apache Airflow.

Résolution des problèmes

Si une tâche échoue ou ne déclenche pas la tâche AWS Glue, effectuez les actions suivantes :

  • Consultez les journaux Apache Airflow. Ces journaux contiennent des informations détaillées sur ce qui s'est passé au cours d'une tâche et aident à identifier les problèmes tels que les erreurs d'autorisation IAM, les problèmes de connexion et les problèmes de configuration.
  • Vérifiez vos autorisations IAM. Assurez-vous que le rôle IAM entre comptes AWS Glue dispose des autorisations requises pour les opérations AWS Glue. Assurez-vous également d'avoir accès aux ressources Amazon Simple Storage Service (Amazon S3) requises.
  • Vérifiez votre connexion Airflow. Assurez-vous que l'ID de connexion AWS est correctement configuré avec l'accès pour endosser le rôle IAM spécifié.
  • Vérifiez l'emplacement de votre script. Assurez-vous que le chemin Amazon S3 vers votre script AWS Glue est accessible et que le script est correctement formaté.
  • Pour les environnements d'un Amazon Virtual Private Cloud (Amazon VPC) privé sans accès Internet, vérifiez vos configurations réseau. Assurez-vous que vos configurations réseau, telles que les passerelles de transit et les connexions d'appairage de VPC Amazon autorisent la communication avec les services AWS.
  • Vérifiez si une stratégie basée sur les ressources est attachée à une ressource pour autoriser l'accès entre comptes.

Remarque : Un problème connu avec le package de fournisseurs Amazon Airflow 2.5.1 (version 7.1.0) oblige les utilisateurs à spécifier des rôles IAM ou des ARN dans la tâche GlueJobOperator. Pour résoudre ce problème, passez à la version 8.2.0 ou ultérieure du package de fournisseur Amazon (la version par défaut pour Amazon MWAA 2.6.3). Pour plus d'informations, consultez la page GlueJobOperator échouant avec un type non valide pour le paramètre RoleName après la mise à jour de la version du fournisseur sur le site Web deGitHub.

Informations connexes

Créer un rôle

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 3 mois