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 (SSHOperator
in 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.
Rubriques
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 :
-
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
-c
dé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
-
Ouvrez la page Environnements
sur la console Amazon MWAA. -
Dans la liste des environnements, choisissez Open Airflow UI pour votre environnement.
-
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.
-
Sur la page Lister les connexions, choisissez + ou le bouton Ajouter un nouvel enregistrement pour ajouter une nouvelle connexion.
-
Sur la page Ajouter une connexion, ajoutez les informations suivantes :
-
Dans le champ Identifiant de connexion, entrez
ssh_new
. -
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 votrerequirements.txt
fichier pour inclure ce package, puis réessayez. -
Pour Host, entrez l'adresse IP de l' EC2 instance Amazon à laquelle vous souhaitez vous connecter. Par exemple,
12.345.67.89
. -
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. -
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.
-
Ouvrez un terminal et naviguez jusqu'au répertoire dans lequel votre code DAG est stocké. Par exemple :
cd dags
-
Copiez le contenu de l'exemple de code suivant et enregistrez-le localement sous
ssh.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()
-
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/ -
En cas de réussite, vous verrez un résultat similaire à ce qui suit dans les journaux des
ssh_task
tâches dussh_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