Création d'une SSH connexion à 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 SSH connexion à l'aide du SSHOperator

L'exemple suivant décrit comment vous pouvez utiliser le SSHOperator in a directed acyclic graph (DAG) 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 disposant SSH d'un accès.

Dans l'exemple suivant, vous chargez une clé SSH secrète (.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 SSH connexion à 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 MWAAenvironnement Amazon.

  • Une clé SSH secrète. L'exemple de code suppose que vous disposez d'une EC2 instance Amazon et d'une instance située .pem dans la même région que votre MWAA environnement Amazon. 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 SSHconnexion 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 les contraintes URL 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 SSH connexion à l'aide de l'interface utilisateur d'Apache Airflow
  1. Ouvrez la page Environnements sur la MWAA console Amazon.

  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 SSHdans la liste déroulante.

      Note

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

    3. Pour Host, entrez l'adresse IP de l'EC2instance 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 JSON format :

      { "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

Ce qui suit DAG 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 DAG code 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 le copier dans le compartiment DAG de votre environnement, puis déclenchez-le à l'DAGaide de l'interface utilisateur d'Apache Airflow.

    $ aws s3 cp your-dag.py s3://your-environment-bucket/dags/
  4. En cas de succès, 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