Création d'une connexion SSH à l'aide du SSHOperator - Amazon Managed Workflows for Apache Airflow

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Création d'une connexion SSH à l'aide du SSHOperator

L'exemple suivant décrit comment vous pouvez utiliser le DAG (SSHOperatorin a directed acyclic graph) pour vous connecter à une EC2 instance Amazon distante depuis votre environnement Amazon Managed Workflows for Apache Airflow. Vous pouvez utiliser une approche similaire pour vous connecter à n'importe quelle instance distante avec un accès SSH.

Dans l'exemple suivant, vous chargez une clé secrète SSH (.pem) dans le dags répertoire de votre environnement sur Amazon S3. Ensuite, vous installez les dépendances nécessaires en utilisant requirements.txt et en créant une nouvelle connexion Apache Airflow dans l'interface utilisateur. Enfin, vous écrivez un DAG qui crée une connexion SSH avec l'instance distante.

Version

  • Vous pouvez utiliser l'exemple de code présenté sur cette page avec Apache Airflow v2 en Python 3.10.

Prérequis

Pour utiliser l'exemple de code présenté sur cette page, vous aurez besoin des éléments suivants :

  • Un environnement Amazon MWAA.

  • Une clé secrète SSH. L'exemple de code suppose que vous disposez d'une EC2 instance Amazon et d'une instance .pem située dans la même région que votre environnement Amazon MWAA. Si vous n'avez pas de clé, consultez la section Créer ou importer une paire de clés dans le guide de EC2 l'utilisateur Amazon.

Autorisations

  • Aucune autorisation supplémentaire n'est requise pour utiliser l'exemple de code présenté sur cette page.

Prérequis

Ajoutez le paramètre suivant requirements.txt pour installer le apache-airflow-providers-ssh package sur le serveur Web. Une fois que votre environnement est mis à jour et qu'Amazon MWAA a correctement installé la dépendance, vous verrez apparaître un nouveau type de connexion SSH dans l'interface utilisateur.

-c https://raw.githubusercontent.com/apache/airflow/constraints-Airflow-version/constraints-Python-version.txt apache-airflow-providers-ssh
Note

-cdéfinit l'URL des contraintes dansrequirements.txt. Cela garantit qu'Amazon MWAA installe la version de package adaptée à votre environnement.

Copiez votre clé secrète sur Amazon S3

Utilisez la AWS Command Line Interface commande suivante pour copier votre .pem clé dans le dags répertoire de votre environnement dans Amazon S3.

$ aws s3 cp your-secret-key.pem s3://your-bucket/dags/

Amazon MWAA copie le contenudags, y compris la .pem clé, dans le /usr/local/airflow/dags/ répertoire local. Apache Airflow peut ainsi accéder à la clé.

Création d'une nouvelle connexion Apache Airflow

Pour créer une nouvelle connexion SSH à l'aide de l'interface utilisateur d'Apache Airflow
  1. Ouvrez la page Environnements sur la console Amazon MWAA.

  2. Dans la liste des environnements, choisissez Open Airflow UI pour votre environnement.

  3. Sur la page de l'interface utilisateur d'Apache Airflow, choisissez Admin dans la barre de navigation supérieure pour développer la liste déroulante, puis sélectionnez Connections.

  4. Sur la page Lister les connexions, choisissez + ou le bouton Ajouter un nouvel enregistrement pour ajouter une nouvelle connexion.

  5. Sur la page Ajouter une connexion, ajoutez les informations suivantes :

    1. Dans le champ Identifiant de connexion, entrezssh_new.

    2. Pour Type de connexion, choisissez SSH dans la liste déroulante.

      Note

      Si le type de connexion SSH n'est pas disponible dans la liste, Amazon MWAA n'a pas installé le package requis. apache-airflow-providers-ssh Mettez à jour votre requirements.txt fichier pour inclure ce package, puis réessayez.

    3. Pour Host, entrez l'adresse IP de l' EC2 instance Amazon à laquelle vous souhaitez vous connecter. Par exemple, 12.345.67.89.

    4. Dans Nom d'utilisateur, saisissez ec2-user si vous vous connectez à une EC2 instance Amazon. Votre nom d'utilisateur peut être différent en fonction du type d'instance distante à laquelle vous souhaitez qu'Apache Airflow se connecte.

    5. Pour Extra, entrez la paire clé-valeur suivante au format JSON :

      { "key_file": "/usr/local/airflow/dags/your-secret-key.pem" }

      Cette paire clé-valeur indique à Apache Airflow de rechercher la clé secrète dans le répertoire local. /dags

Exemple de code

Le DAG suivant utilise le SSHOperator pour se connecter à votre EC2 instance Amazon cible, puis exécute la commande hostname Linux pour imprimer le nom de l'instance. Vous pouvez modifier le DAG pour exécuter n'importe quelle commande ou script sur l'instance distante.

  1. Ouvrez un terminal et naviguez jusqu'au répertoire dans lequel votre code DAG est stocké. Par exemple :

    cd dags
  2. Copiez le contenu de l'exemple de code suivant et enregistrez-le localement sousssh.py.

    from airflow.decorators import dag from datetime import datetime from airflow.providers.ssh.operators.ssh import SSHOperator @dag( dag_id="ssh_operator_example", schedule_interval=None, start_date=datetime(2022, 1, 1), catchup=False, ) def ssh_dag(): task_1=SSHOperator( task_id="ssh_task", ssh_conn_id='ssh_new', command='hostname', ) my_ssh_dag = ssh_dag()
  3. Exécutez la AWS CLI commande suivante pour copier le DAG dans le bucket de votre environnement, puis déclenchez le DAG à l'aide de l'interface utilisateur d'Apache Airflow.

    $ aws s3 cp your-dag.py s3://your-environment-bucket/dags/
  4. En cas de réussite, vous verrez un résultat similaire à ce qui suit dans les journaux des ssh_task tâches du ssh_operator_example DAG :

    [2022-01-01, 12:00:00 UTC] {{base.py:79}} INFO - Using connection to: id: ssh_new. Host: 12.345.67.89, Port: None,
    Schema: , Login: ec2-user, Password: None, extra: {'key_file': '/usr/local/airflow/dags/your-secret-key.pem'}
    [2022-01-01, 12:00:00 UTC] {{ssh.py:264}} WARNING - Remote Identification Change is not verified. This won't protect against Man-In-The-Middle attacks
    [2022-01-01, 12:00:00 UTC] {{ssh.py:270}} WARNING - No Host Key Verification. This won't protect against Man-In-The-Middle attacks
    [2022-01-01, 12:00:00 UTC] {{transport.py:1819}} INFO - Connected (version 2.0, client OpenSSH_7.4)
    [2022-01-01, 12:00:00 UTC] {{transport.py:1819}} INFO - Authentication (publickey) successful!
    [2022-01-01, 12:00:00 UTC] {{ssh.py:139}} INFO - Running command: hostname
    [2022-01-01, 12:00:00 UTC]{{ssh.py:171}} INFO - ip-123-45-67-89.us-west-2.compute.internal
    [2022-01-01, 12:00:00 UTC] {{taskinstance.py:1280}} INFO - Marking task as SUCCESS. dag_id=ssh_operator_example, task_id=ssh_task, execution_date=20220712T200914, start_date=20220712T200915, end_date=20220712T200916