

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Como criar uma conexão SSH usando o `SSHOperator`
<a name="samples-ssh"></a>

O exemplo a seguir descreve como é possível usar `SSHOperator` em um gráfico acíclico direcionado (DAG) para se conectar a uma instância remota do Amazon EC2 a partir do seu ambiente do Amazon Managed Workflows for Apache Airflow. É possível usar uma abordagem semelhante para se conectar a qualquer instância remota com acesso SSH.

No exemplo a seguir, você faz upload de uma chave secreta SSH (`.pem`) para o diretório `dags` do seu ambiente no Amazon S3. Em seguida, você instala as dependências necessárias usando `requirements.txt` e cria uma nova conexão do Apache Airflow na interface do usuário. Por fim, você grava um DAG que cria uma conexão SSH com a instância remota.

**Topics**
+ [Versão](#samples-ssh-version)
+ [Pré-requisitos](#samples-ssh-prereqs)
+ [Permissões](#samples-ssh-permissions)
+ [Requisitos](#samples-ssh-dependencies)
+ [Copie sua chave secreta para o Amazon S3](#samples-ssh-secret)
+ [Crie uma nova conexão com o Apache Airflow](#samples-ssh-connection)
+ [Exemplo de código](#samples-ssh-code)

## Versão
<a name="samples-ssh-version"></a>

É possível usar o exemplo de código nesta página com o **Apache Airflow v2** no [Python 3.10](https://peps.python.org/pep-0619/) e o **Apache Airflow v3** no [Python 3.11](https://peps.python.org/pep-0664/).

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

Para usar o código de amostra nesta página, você precisará do seguinte:
+ Um [ambiente Amazon MWAA](get-started.md).
+ Uma chave secreta SSH. A amostra de código pressupõe que você tenha uma instância do Amazon EC2 e uma `.pem` na mesma região do seu ambiente Amazon MWAA. Se você não tiver uma chave, consulte [Criar ou importar um par de chaves](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#prepare-key-pair) no *Guia do usuário do Amazon EC2*.

## Permissões
<a name="samples-ssh-permissions"></a>

Nenhuma permissão adicional é necessária para usar o exemplo de código nesta página.

## Requisitos
<a name="samples-ssh-dependencies"></a>

Adicione o parâmetro a seguir a `requirements.txt` para instalar o pacote `apache-airflow-providers-ssh` no servidor Web. Depois que o ambiente for atualizado e o Amazon MWAA instalar com sucesso a dependência, você verá um novo tipo de conexão **SSH** na interface do usuário.

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

**nota**  
`-c` define o URL das restrições em `requirements.txt`. Isso garante que o Amazon MAA instale a versão correta do pacote para seu ambiente.

## Copie sua chave secreta para o Amazon S3
<a name="samples-ssh-secret"></a>

Use o seguinte comando AWS Command Line Interface para copiar sua chave `.pem` para o diretório `dags` do seu ambiente no Amazon S3.

```
aws s3 cp your-secret-key.pem s3://amzn-s3-demo-bucket/dags/
```

O Amazon MWAA copia o conteúdo em `dags`, incluindo a chave `.pem`, para o diretório local `/usr/local/airflow/dags/`. Ao fazer isso, o Apache Airflow pode acessar a chave.

## Crie uma nova conexão com o Apache Airflow
<a name="samples-ssh-connection"></a>

**Para criar uma nova conexão SSH usando a IU do Apache Airflow**

1. Abra a [página Ambientes](https://console.aws.amazon.com/mwaa/home#/environments) no console do Amazon MWAA.

1. Na lista de ambientes, escolha **Abrir a IU do Airflow** em seu ambiente.

1. Na página IU do Apache Airflow, selecione **Admin** na barra de navegação superior para expandir a lista suspensa e selecione **Conexões**.

1. Na página **Listar conexões**, escolha o botão **\$1** ou **Adicionar um novo registro** para adicionar uma nova conexão.

1. Na página **Adicionar conexão**, forneça as seguintes informações:

   1. Em **Id da conexão**, insira **ssh\$1new**.

   1. Em **Tipo de conexão**, selecione **SSH** na lista suspensa.
**nota**  
Se o tipo de conexão **SSH** não estiver disponível na lista, o Amazon MWAA não instalou o pacote de `apache-airflow-providers-ssh` necessário. Atualize seu arquivo `requirements.txt` para incluir esse pacote e tente novamente.

   1. Para **Host**, insira o endereço IP para a instância do Amazon EC2 à qual você deseja se conectar. Por exemplo, **12.345.67.89**.

   1. Em **Nome de usuário**, insira **ec2-user** se você está se conectando a uma instância do Amazon EC2. Seu nome de usuário pode ser diferente, dependendo do tipo de instância remota à qual você deseja que o Apache Airflow se conecte.

   1. Para **Extra**, insira o seguinte par de chave-valor no formato JSON:

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

      Esse par de chave-valor instrui o Apache Airflow a procurar a chave secreta no diretório `/dags` local.

## Exemplo de código
<a name="samples-ssh-code"></a>

O DAG a seguir usa `SSHOperator` para se conectar à sua instância de destino do Amazon EC2 e, em seguida, executa o comando `hostname` do Linux para imprimir o nome da instância. É possível modificar o DAG para executar qualquer comando ou script na instância remota.

1. Abra um terminal e navegue até o diretório em que seu código DAG está armazenado. Por exemplo:

   ```
   cd dags
   ```

1. Copie o conteúdo da amostra de código a seguir e salve localmente como `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.  Execute o seguinte comando AWS CLI para copiar o DAG para o bucket do seu ambiente e, em seguida, acionar o DAG usando a IU do Apache Airflow. 

   ```
   aws s3 cp your-dag.py s3://your-environment-bucket/dags/
   ```

1. Se tiver êxito, você verá um resultado semelhante ao seguinte nos logs de tarefas para `ssh_task` no DAG `ssh_operator_example`:

   ```
   [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
   ```