

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`
<a name="samples-ssh"></a>

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.

**Topics**
+ [Version](#samples-ssh-version)
+ [Prérequis](#samples-ssh-prereqs)
+ [Autorisations](#samples-ssh-permissions)
+ [Prérequis](#samples-ssh-dependencies)
+ [Copiez votre clé secrète sur Amazon S3](#samples-ssh-secret)
+ [Création d'une nouvelle connexion Apache Airflow](#samples-ssh-connection)
+ [Exemple de code](#samples-ssh-code)

## Version
<a name="samples-ssh-version"></a>

[Vous pouvez utiliser l'exemple de code présenté sur cette page avec **Apache Airflow v2** en [Python 3.10](https://peps.python.org/pep-0619/) et **Apache Airflow v3** en Python 3.11.](https://peps.python.org/pep-0664/)

## Prérequis
<a name="samples-ssh-prereqs"></a>

Pour utiliser l'exemple de code présenté sur cette page, vous aurez besoin des éléments suivants :
+ Un [environnement Amazon MWAA.](get-started.md)
+ 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é, reportez-vous à la section [Créer ou importer une paire de clés](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#prepare-key-pair) dans le *guide de EC2 l'utilisateur Amazon*.

## Autorisations
<a name="samples-ssh-permissions"></a>

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

## Prérequis
<a name="samples-ssh-dependencies"></a>

Ajoutez le paramètre suivant pour `requirements.txt` 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 obtiendrez 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 dans`requirements.txt`. Cela garantit qu'Amazon MWAA installe la version de package adaptée à votre environnement.

## Copiez votre clé secrète sur Amazon S3
<a name="samples-ssh-secret"></a>

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://amzn-s3-demo-bucket/dags/
```

Amazon MWAA copie le contenu`dags`, 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
<a name="samples-ssh-connection"></a>

**Pour créer une nouvelle connexion SSH à l'aide de l'interface utilisateur d'Apache Airflow**

1. Ouvrez la page [Environnements](https://console.aws.amazon.com/mwaa/home#/environments) sur la console Amazon MWAA.

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

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

1. Sur la page **Lister les connexions**, choisissez **\$1** ou le bouton **Ajouter un nouvel enregistrement** pour ajouter une nouvelle connexion.

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

   1. Pour **ID de connexion**, entrez**ssh\$1new**.

   1. 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.

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

   1. 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.

   1. 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
<a name="samples-ssh-code"></a>

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é. Exemples :

   ```
   cd dags
   ```

1. 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()
   ```

1.  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/
   ```

1. En cas de succès, vous obtiendrez 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
   ```