Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Herstellen einer SSH Verbindung mit dem SSHOperator
Das folgende Beispiel beschreibt, wie Sie den SSHOperator
in a directed acyclic graph (DAG) verwenden können, um von Ihrer Amazon Managed Workflows for Apache Airflow-Umgebung aus eine Verbindung zu einer entfernten EC2 Amazon-Instance herzustellen. Sie können einen ähnlichen Ansatz verwenden, um eine Verbindung zu einer beliebigen Remote-Instance mit Zugriff herzustellen. SSH
Im folgenden Beispiel laden Sie einen SSH geheimen Schlüssel (.pem
) in das dags
Verzeichnis Ihrer Umgebung auf Amazon S3 hoch. Anschließend installieren Sie die erforderlichen Abhängigkeiten mithilfe der Benutzeroberfläche requirements.txt
und erstellen eine neue Apache Airflow-Verbindung. Schließlich schreiben Sie eineDAG, die eine SSH Verbindung zur Remote-Instanz herstellt.
Themen
Version
-
Sie können das Codebeispiel auf dieser Seite mit Apache Airflow v2 in Python 3.10
verwenden.
Voraussetzungen
Um den Beispielcode auf dieser Seite zu verwenden, benötigen Sie Folgendes:
-
Eine MWAAAmazon-Umgebung.
-
Ein SSH geheimer Schlüssel. Das Codebeispiel geht davon aus, dass Sie über eine EC2 Amazon-Instance verfügen und sich
.pem
in derselben Region wie Ihre MWAA Amazon-Umgebung befinden. Wenn Sie keinen Schlüssel haben, finden Sie weitere Informationen unter Ein key pair erstellen oder importieren im EC2Amazon-Benutzerhandbuch.
Berechtigungen
-
Für die Verwendung des Codebeispiels auf dieser Seite sind keine zusätzlichen Berechtigungen erforderlich.
Voraussetzungen
Fügen Sie den folgenden Parameter hinzurequirements.txt
, um das apache-airflow-providers-ssh
Paket auf dem Webserver zu installieren. Sobald Ihre Umgebung aktualisiert wurde und Amazon die Abhängigkeit MWAA erfolgreich installiert hat, wird in der Benutzeroberfläche ein neuer SSHVerbindungstyp angezeigt.
-c https://raw.githubusercontent.com/apache/airflow/constraints-
Airflow-version
/constraints-Python-version
.txt apache-airflow-providers-ssh
Anmerkung
-c
definiert die Einschränkungen URL inrequirements.txt
. Dadurch wird sichergestellt, dass Amazon die richtige Paketversion für Ihre Umgebung MWAA installiert.
Kopieren Sie Ihren geheimen Schlüssel zu Amazon S3
Verwenden Sie den folgenden AWS Command Line Interface Befehl, um Ihren .pem
Schlüssel in das dags
Verzeichnis Ihrer Umgebung in Amazon S3 zu kopieren.
$
aws s3 cp
your-secret-key
.pem s3://your-bucket
/dags/
Amazon MWAA kopiert den Inhaltdags
, einschließlich des .pem
Schlüssels, in das lokale /usr/local/airflow/dags/
Verzeichnis. Dadurch kann Apache Airflow auf den Schlüssel zugreifen.
Erstellen Sie eine neue Apache Airflow-Verbindung
Um eine neue SSH Verbindung mit der Apache Airflow-Benutzeroberfläche zu erstellen
-
Öffnen Sie die Seite Umgebungen
auf der MWAA Amazon-Konsole. -
Wählen Sie aus der Liste der Umgebungen Open Airflow UI für Ihre Umgebung aus.
-
Wählen Sie auf der Apache Airflow-UI-Seite in der oberen Navigationsleiste Admin aus, um die Dropdownliste zu erweitern, und wählen Sie dann Verbindungen aus.
-
Wählen Sie auf der Seite Verbindungen auflisten die Option + oder die Schaltfläche Neuen Datensatz hinzufügen, um eine neue Verbindung hinzuzufügen.
-
Fügen Sie auf der Seite „Verbindung hinzufügen“ die folgenden Informationen hinzu:
-
Geben Sie als Verbindungs-ID ein
ssh_new
. -
Wählen Sie für Verbindungstyp eine Option SSHaus der Dropdownliste aus.
Anmerkung
Wenn der SSHVerbindungstyp nicht in der Liste verfügbar ist, MWAA hat Amazon das erforderliche
apache-airflow-providers-ssh
Paket nicht installiert. Aktualisieren Sie Ihrerequirements.txt
Datei, sodass sie dieses Paket enthält, und versuchen Sie es erneut. -
Geben Sie für Host die IP-Adresse der EC2 Amazon-Instance ein, zu der Sie eine Verbindung herstellen möchten. Beispiel,
12.345.67.89
. -
Geben Sie unter Nutzername ein,
ec2-user
ob Sie eine Verbindung zu einer EC2 Amazon-Instance herstellen. Ihr Benutzername kann je nach Art der Remote-Instance, zu der Apache Airflow eine Verbindung herstellen soll, unterschiedlich sein. -
Geben Sie für Extra das folgende Schlüssel-Wert-Paar im Format ein: JSON
{ "key_file": "/usr/local/airflow/dags/
your-secret-key
.pem" }Dieses Schlüssel-Wert-Paar weist Apache Airflow an, im lokalen Verzeichnis nach dem geheimen Schlüssel zu suchen.
/dags
-
Codebeispiel
Im Folgenden DAG wird die verwendetSSHOperator
, um eine Verbindung zu Ihrer EC2 Amazon-Zielinstanz herzustellen, und anschließend wird der hostname
Linux-Befehl ausgeführt, um den Namen der Instance auszudrucken. Sie können den so ändernDAG, dass er jeden Befehl oder jedes Skript auf der Remote-Instance ausführt.
-
Öffnen Sie ein Terminal und navigieren Sie zu dem Verzeichnis, in dem Ihr DAG Code gespeichert ist. Beispielsweise:
cd dags
-
Kopieren Sie den Inhalt des folgenden Codebeispiels und speichern Sie ihn lokal unter
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()
-
Führen Sie den folgenden AWS CLI Befehl aus, um das in den Bucket Ihrer Umgebung DAG zu kopieren, und lösen Sie es dann DAG mithilfe der Apache Airflow-Benutzeroberfläche aus.
$
aws s3 cp
your-dag
.py s3://your-environment-bucket
/dags/ -
Wenn der Vorgang erfolgreich ist, werden Sie in den Task-Logs eine Ausgabe ähnlich der folgenden sehen:
ssh_task
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