Herstellen einer SSH Verbindung mit dem SSHOperator - Amazon Managed Workflows für Apache Airflow

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.

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

-cdefiniert 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
  1. Öffnen Sie die Seite Umgebungen auf der MWAA Amazon-Konsole.

  2. Wählen Sie aus der Liste der Umgebungen Open Airflow UI für Ihre Umgebung aus.

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

  4. Wählen Sie auf der Seite Verbindungen auflisten die Option + oder die Schaltfläche Neuen Datensatz hinzufügen, um eine neue Verbindung hinzuzufügen.

  5. Fügen Sie auf der Seite „Verbindung hinzufügen“ die folgenden Informationen hinzu:

    1. Geben Sie als Verbindungs-ID einssh_new.

    2. 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 Ihre requirements.txt Datei, sodass sie dieses Paket enthält, und versuchen Sie es erneut.

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

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

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

  1. Öffnen Sie ein Terminal und navigieren Sie zu dem Verzeichnis, in dem Ihr DAG Code gespeichert ist. Beispielsweise:

    cd dags
  2. Kopieren Sie den Inhalt des folgenden Codebeispiels und speichern Sie ihn lokal unterssh.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()
  3. 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/
  4. 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