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
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.
Tópicos
Version (Versão)
-
É possível usar o exemplo de código nesta página com o Apache Airflow v2 no Python 3.10
.
Pré-requisitos
Para usar o código de amostra nesta página, você precisará do seguinte:
-
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 no Guia do usuário do Amazon EC2.
Permissões
-
Nenhuma permissão adicional é necessária para usar o exemplo de código nesta página.
Requisitos
Adicione o parâmetro a seguir para 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
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://your-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
Para criar uma nova conexão SSH usando a IU do Apache Airflow
-
Abra a página Ambientes
no console do Amazon MWAA. -
Na lista de ambientes, escolha Abrir a IU do Airflow em seu ambiente.
-
Na página IU do Apache Airflow, selecione Admin na barra de navegação superior para expandir a lista suspensa e selecione Conexões.
-
Na página Listar conexões, escolha o botão + ou Adicionar um novo registro para adicionar uma nova conexão.
-
Na página Adicionar conexão, forneça as seguintes informações:
-
Em Id da conexão, insira
ssh_new
. -
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 arquivorequirements.txt
para incluir esse pacote e tente novamente. -
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
. -
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. -
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 local
/dags
.
-
Exemplo de código
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.
-
Abra um terminal e navegue até o diretório em que seu código DAG está armazenado. Por exemplo:
cd dags
-
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()
-
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/ -
Se tiver êxito, você verá uma saída semelhante à seguinte nos logs de tarefas para
ssh_task
no DAGssh_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