Umgebungen zu Airflow 2 migrieren

Cloud Composer 1 Cloud Composer 2

Auf dieser Seite wird erläutert, wie Sie DAGs, Daten und Konfigurationen aus Ihren vorhandenen Airflow 1.10.*-Umgebungen in Umgebungen mit Airflow 2 und höheren Versionen übertragen.

Weitere Migrationsleitfäden

Von Heute Methode Leitfaden
Cloud Composer 1, Airflow 2 Cloud Composer 2, Airflow 2 Seite an Seite, mit Snapshots Migrationsanleitung (Snapshots)
Cloud Composer 1, Airflow 1 Cloud Composer 2, Airflow 2 Seite an Seite, mit Snapshots Migrationsanleitung (Snapshots)
Cloud Composer 1, Airflow 2 Cloud Composer 2, Airflow 2 Parallele, manuelle Übertragung Anleitung für die manuelle Migration
Cloud Composer 1, Airflow 1 Cloud Composer 2, Airflow 2 Parallele, manuelle Übertragung Anleitung für die manuelle Migration
Airflow 1 Airflow 2 Parallele, manuelle Übertragung Diese Anleitung (manuelle Migration)

Gegenseitige Upgrades

Cloud Composer stellt das Skript der Cloud Composer-Datenbankübertragung zum Migrieren der Metadatendatenbank, DAGs, Daten und Plug-ins aus Cloud Composer-Umgebungen mit Airflow 1.10.14 und Airflow 1.10.15 bereit auf vorhandene Cloud Composer-Umgebungen mit Airflow 2.0.1 und höheren Airflow-Versionen.

Dies ist ein alternativer Pfad zu dem in dieser Anleitung beschriebenen Pfad. Einige Teile dieser Anleitung gelten weiterhin, wenn Sie das bereitgestellte Skript verwenden. Beispielsweise können Sie vor der Migration Ihre DAGs auf Kompatibilität mit Airflow 2 prüfen oder dafür sorgen, dass gleichzeitige DAG-Ausführungen nicht erfolgen und es keine zusätzlichen oder fehlenden DAG-Ausführungen gibt.

Hinweise

Bevor Sie Cloud Composer-Umgebungen mit Airflow 2 verwenden, sollten Sie Änderungen berücksichtigen, die von Airflow 2 in Cloud Composer-Umgebungen übernommen werden.

Planer-HA

Sie können in Ihrer Umgebung mehrere Airflow-Planer verwenden. Sie können die Anzahl der Planer festlegen, wenn Sie eine Umgebung erstellen oder eine vorhandene Umgebung aktualisieren.

Celery+Kubernetes-Executor

Airflow 2 Celery+ Kubernetes Executor wird in der aktuellen Version von Cloud Composer nicht unterstützt.

Wichtige Änderungen

Airflow 2 führt viele wichtige Änderungen ein, von denen einige nicht funktionieren.

Unterschiede zwischen Umgebungen mit Airflow 2 und Airflow 1.10.*

Hauptunterschiede zwischen Cloud Composer-Umgebungen mit Airflow 1.10.* und Umgebungen mit Airflow 2:

  • Umgebungen mit Airflow 2 verwenden Python 3.8. Dies ist eine neuere Version als die, die in Airflow 1.10.*-Umgebungen verwendet wird. Python 2, Python 3.6, Python 3.7 werden nicht unterstützt.
  • Airflow 2 verwendet ein anderes Befehlszeilenformat. Cloud Composer unterstützt das neue Format in Umgebungen mit Airflow 2 über den Befehl gcloud composer environments run.
  • Vorinstallierte PyPI-Pakete sind in Airflow 2-Umgebungen anders. Eine Liste der vorinstallierten PyPI-Pakete finden Sie unter Liste der Cloud Composer-Versionen.
  • Die DAG-Serialisierung ist in Airflow 2 immer aktiviert. Daher wird das asynchrone Laden von DAGs nicht mehr benötigt und in Airflow 2 nicht unterstützt. Daher wird die Konfiguration der Parameter [core]store_serialized_dags und [core]store_dag_code für Airflow 2 nicht unterstützt und Versuche, sie festzulegen, werden als Fehler gemeldet.
  • Airflow-Webserver-Plug-ins werden nicht unterstützt. Dies hat keine Auswirkungen auf Planer- oder Worker-Plug-ins, einschließlich Airflow-Operatoren und Sensoren.
  • In Airflow 2-Umgebungen ist Op die Standard-Airflow-Nutzerrolle. Bei Umgebungen mit Airflow 1.10.* ist die Standardrolle Admin.

Schritt 1: Kompatibilität mit Airflow 2 prüfen

Verwenden Sie Upgrade-Skripte, die von Airflow in Ihrer vorhandenen Airflow 1.10-Umgebung bereitgestellt werden, um mögliche Konflikte mit Airflow 2 zu prüfen.

gcloud

  1. Wenn Ihre Umgebung Airflow 1.10.14 und frühere Versionen verwendet, führen Sie ein Upgrade Ihrer Umgebung auf eine Cloud Composer-Version durch, die Airflow 1.10.15 und höher verwendet. Cloud Composer unterstützt Befehle zur Upgradeprüfung ab Airflow 1.10.15.

  2. Führen Sie Upgradeprüfungen mit dem Befehl gcloud composer environments run aus. Einige Upgradeprüfungen, die für den eigenständigen Airflow 1.10.15 relevant sind, sind für Cloud Composer nicht relevant. Der folgende Befehl schließt diese Prüfungen aus.

    gcloud composer environments run \
        AIRFLOW_1_ENV  \
        --location=AIRFLOW_1_LOCATION \
        upgrade_check \
        -- --ignore VersionCheckRule --ignore LoggingConfigurationRule \
        --ignore PodTemplateFileRule --ignore SendGridEmailerMovedRule
    

    Ersetzen Sie:

    • AIRFLOW_1_ENV durch den Namen Ihrer Airflow 1.10-Umgebung.
    • AIRFLOW_1_LOCATION durch die Region, in der sich die Umgebung befindet.
  3. Prüfen Sie die Ausgabe des Befehls. Skripts zur Updateprüfung melden potenzielle Kompatibilitätsprobleme in vorhandenen Umgebungen.

  4. Implementieren Sie weitere Änderungen an DAGs, wie im Leitfaden zum Upgrade auf Airflow 2.0 oder höher im Abschnitt Upgrade von DAGs beschrieben beschrieben.

Schritt 2: Airflow 2-Umgebung erstellen, Konfigurationskonfigurationen überschreiben und Umgebungsvariablen

Erstellen Sie eine Airflow 2-Umgebung und Überschreibungen der Übertragungskonfiguration und Umgebungsvariablen:

  1. Führen Sie die Schritte zum Erstellen einer Umgebung aus. Bevor Sie eine Umgebung erstellen, geben Sie auch Konfigurationsüberschreibungen und Umgebungsvariablen an, wie später erläutert.

  2. Wählen Sie unter Image mit Airflow 2 ein Image aus.

  3. Übertragen Sie Konfigurationsparameter manuell von Ihrer Airflow 1.10.*-Umgebung in die neue Airflow 2-Umgebung.

    Console

    1. Maximieren Sie beim Erstellen einer Umgebung den Bereich Netzwerk, Airflow-Konfigurationsüberschreibungen und zusätzliche Features.

    2. Klicken Sie unter Airflow-Konfigurationsüberschreibungen auf Airflow-Konfigurationsüberschreibung hinzufügen.

    3. Kopieren Sie alle Konfigurationsüberschreibungen aus Ihrer Airflow 1.10.*-Umgebung.

      Einige Konfigurationsoptionen verwenden in Airflow 2 einen anderen Namen und Abschnitt. Weitere Informationen finden Sie unter Konfigurationsänderungen.

    4. Klicken Sie unter Umgebungsvariablen auf Variable hinzufügen.

    5. Kopieren Sie alle Umgebungsvariablen aus Ihrer Airflow 1.10.*-Umgebung.

    6. Klicken Sie auf Erstellen, um eine Umgebung zu erstellen.

Schritt 3: PyPI-Pakete in der Airflow 2-Umgebung installieren

Installieren Sie in der erstellten Airflow 2-Umgebung PyPI-Pakete:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Umgebungen auf.

    Zur Seite Umgebungen“

  2. Wählen Sie die Airflow 2-Umgebung aus.

  3. Wechseln Sie zum Tab PyPI-Pakete und klicken Sie auf Bearbeiten.

  4. Kopieren Sie die PyPI-Paketanforderungen aus Ihrer Airflow 1.10.*-Umgebung. Klicken Sie auf Speichern und warten Sie, bis die Umgebung aktualisiert wurde.

    Da Airflow 2-Umgebungen eine andere Reihe von vorinstallierten Paketen und eine andere Python-Version verwenden, können PyPI-Paketkonflikte auftreten, die schwer zu beheben sind. Eine Möglichkeit zur Diagnose von Problemen mit der Paketabhängigkeit besteht darin, eine Prüfung auf PyPI-Paketfehler durchzuführen. Installieren Sie dazu Pakete in einem Airflow-Worker-Pod.

Schritt 4: Variablen und Pools an Airflow 2 übertragen

Airflow 1.10.* unterstützt den Export von Variablen und Pools in JSON-Dateien. Sie können diese Dateien dann in Ihre Airflow 2-Umgebung importieren.

Sie müssen Pools nur übertragen, wenn Sie andere benutzerdefinierte Pools als default_pool haben. Andernfalls können Sie Befehle überspringen, mit denen Pools exportiert und importiert werden.

gcloud

  1. Exportieren Sie Variablen aus Ihrer Airflow 1.10.*-Umgebung:

    gcloud composer environments run AIRFLOW_1_ENV \
        --location AIRFLOW_1_LOCATION \
         variables -- -e /home/airflow/gcs/data/variables.json
    

    Ersetzen Sie:

    • AIRFLOW_1_ENV durch den Namen Ihrer Airflow 1.10-Umgebung.
    • AIRFLOW_1_LOCATION durch die Region, in der sich die Umgebung befindet.
  2. Exportieren Sie Pools aus der Airflow 1.10.*-Umgebung:

    gcloud composer environments run AIRFLOW_1_ENV \
        --location AIRFLOW_1_LOCATION \
         pool -- -e /home/airflow/gcs/data/pools.json
    
  3. Rufen Sie den URI des Airflow 2-Umgebungs-Buckets ab.

    1. Führen Sie dazu diesen Befehl aus:

      gcloud composer environments describe AIRFLOW_2_ENV \
          --location AIRFLOW_2_LOCATION \
           --format="value(config.dagGcsPrefix)"
      

      Ersetzen Sie:

      • AIRFLOW_2_ENV durch den Namen Ihrer Airflow 2-Umgebung.
      • AIRFLOW_2_LOCATION durch die Region, in der sich die Umgebung befindet.
    2. Entfernen Sie in der Ausgabe den Ordner /dags. Das Ergebnis ist der URI Ihres Airflow 2-Umgebungs-Buckets.

      Ändern Sie beispielsweise gs://us-central1-example-916807e1-bucket/dags in gs://us-central1-example-916807e1-bucket.

  4. Übertragen Sie JSON-Dateien mit Variablen und Pools in Ihre Airflow 2-Umgebung:

    gcloud composer environments storage data export \
        --destination=AIRFLOW_2_BUCKET/data \
        --environment=AIRFLOW_1_ENV \
        --location=AIRFLOW_1_LOCATION \
        --source=variables.json
    
    gcloud composer environments storage data export \
        --destination=AIRFLOW_2_BUCKET/data \
        --environment=AIRFLOW_1_ENV \
        --location=AIRFLOW_1_LOCATION \
        --source=pools.json
    

    Ersetzen Sie AIRFLOW_2_BUCKET durch den URI Ihres Airflow 2-Umgebungs-Buckets, den Sie im vorherigen Schritt erhalten haben.

  5. Importieren Sie Variablen und Pools in Airflow 2:

    gcloud composer environments run \
        AIRFLOW_2_ENV \
        --location AIRFLOW_2_LOCATION \
        variables import \
        -- /home/airflow/gcs/data/variables.json
    
    gcloud composer environments run \
        AIRFLOW_2_ENV \
        --location AIRFLOW_2_LOCATION \
        pools import \
        -- /home/airflow/gcs/data/pools.json
    
  6. Prüfen Sie, ob Variablen und Pools importiert werden:

    gcloud composer environments run \
        AIRFLOW_2_ENV \
        --location AIRFLOW_2_LOCATION \
        variables list
    
    gcloud composer environments run \
        AIRFLOW_2_ENV \
        --location AIRFLOW_2_LOCATION \
        pools list
    
  7. Entfernen Sie JSON-Dateien aus den Buckets:

    gcloud composer environments storage data delete \
        variables.json \
        --environment=AIRFLOW_2_ENV \
        --location=AIRFLOW_2_LOCATION
    
    gcloud composer environments storage data delete \
        pools.json \
        --environment=AIRFLOW_2_ENV \
        --location=AIRFLOW_2_LOCATION
    
    gcloud composer environments storage data delete \
        variables.json \
        --environment=AIRFLOW_1_ENV \
        --location=AIRFLOW_1_LOCATION
    
    gcloud composer environments storage data delete \
        pools.json \
        --environment=AIRFLOW_1_ENV \
        --location=AIRFLOW_1_LOCATION
    

Schritt 5: Andere Daten aus Ihrem Airflow 1.10.*-Umgebungs-Bucket übertragen

gcloud

  1. Übertragen Sie Plug-ins in Ihre Airflow 2-Umgebung. Exportieren Sie dazu Plug-ins aus Ihrem Airflow 1.10.*-Umgebungs-Bucket in den Ordner /plugins Ihres Airflow 2-Umgebungs-Buckets:

    gcloud composer environments storage plugins export \
        --destination=AIRFLOW_2_BUCKET/plugins \
        --environment=AIRFLOW_1_ENV \
        --location=AIRFLOW_1_LOCATION
    
  2. Prüfen Sie, ob der Ordner /plugins erfolgreich importiert wurde:

    gcloud composer environments storage plugins list \
        --environment=AIRFLOW_2_ENV \
        --location=AIRFLOW_2_LOCATION
    
  3. Exportieren Sie den Ordner /data aus Ihrer Airflow 1.10.*-Umgebung in die Airflow 2-Umgebung:

        gcloud composer environments storage data export \
            --destination=AIRFLOW_2_BUCKET/data \
            --environment=AIRFLOW_1_ENV \
            --location=AIRFLOW_1_LOCATION
    
  4. Prüfen Sie, ob der Ordner /data erfolgreich importiert wurde:

    gcloud composer environments storage data list \
        --environment=AIRFLOW_2_ENV \
        --location=AIRFLOW_2_LOCATION
    

Schritt 6: Verbindungen und Nutzer übertragen

Airflow 1.10.* unterstützt den Export von Nutzern und Verbindungen nicht. Erstellen Sie zum Übertragen von Nutzern und Verbindungen manuell neue Nutzerkonten und -verbindungen in Ihrer Airflow 2-Umgebung.

gcloud

  1. Führen Sie den folgenden Befehl aus, um eine Liste der Verbindungen in Ihrer Airflow 1.10.*-Umgebung abzurufen:

    gcloud composer environments run AIRFLOW_1_ENV \
        --location AIRFLOW_1_LOCATION \
         connections -- --list
    
  2. Führen Sie den Befehl connections der Airflow-Befehlszeile über gcloud aus, um eine neue Verbindung in der Airflow 2-Umgebung zu erstellen. Beispiel:

    gcloud composer environments run \
        AIRFLOW_2_ENV \
        --location AIRFLOW_2_LOCATION \
        connections add \
        -- --conn-host postgres.example.com \
        --conn-port 5432 \
        --conn-type postgres \
        --conn-login example_user \
        --conn-password example_password \
        --conn-description "Example connection" \
        example_connection
    
  3. So rufen Sie eine Liste der Nutzer in Ihrer Airflow 1.10-Umgebung auf:

    1. Öffnen Sie die Airflow-Weboberfläche für Ihre Airflow 1.10.*-Umgebung.

    2. Klicken Sie auf Admin > Nutzer.

  4. Führen Sie den Befehl users create der Airflow-Befehlszeile über gcloud aus, um ein neues Nutzerkonto in Ihrer Airflow 2-Umgebung zu erstellen. Beispiel:

    gcloud composer environments run \
        AIRFLOW_2_ENV \
        --location AIRFLOW_2_LOCATION \
        users create \
        -- --username example_username \
        --firstname Example-Name \
        --lastname Example-Surname \
        --email example-user@example.com \
        --use-random-password \
        --role Admin
    

Schritt 7: Prüfen Sie, ob Ihre DAGs für Airflow 2 bereit sind.

Achten Sie vor der Übertragung von DAGs an Ihre Airflow 2-Umgebung auf Folgendes:

  1. Upgradeprüfungs-Skripts für Ihre DAGs werden erfolgreich ausgeführt und es gibt keine weiteren Kompatibilitätsprobleme.

  2. Ihre DAGs verwenden die richtigen Importanweisungen.

    Die neue Importanweisung für BigQueryCreateDataTransferOperator kann beispielsweise so aussehen:

    from airflow.providers.google.cloud.operators.bigquery_dts \
        import BigQueryCreateDataTransferOperator
    
  3. Ihre DAGs werden für Airflow 2 aktualisiert. Diese Änderung ist mit Airflow 1.10.14 und höheren Versionen kompatibel.

Schritt 8: DAGs in die Airflow 2-Umgebung übertragen

Die folgenden potenziellen Probleme können auftreten, wenn Sie DAGs zwischen Umgebungen übertragen:

  • Wenn ein DAG in beiden Umgebungen aktiviert (nicht pausiert) ist, führt jede Umgebung wie geplant eine eigene Kopie des DAG aus. Dies kann zu gleichzeitigen DAG-Ausführungen für dieselben Daten und zu den gleichen Ausführungszeiten führen.

  • Aufgrund des DAG-Catchups plant Airflow zusätzliche DAG-Ausführungen, beginnend ab dem in Ihren DAGs angegebenen Startdatum. Dies liegt daran, dass die neue Airflow-Instanz den Verlauf von DAG-Ausführungen aus der Umgebung 1.10.* nicht berücksichtigt. Dies kann zu einer großen Anzahl von geplanten DAG-Ausführungen ab dem angegebenen Startdatum führen.

Gleichzeitige DAG-Ausführungen verhindern

In Ihrer Airflow 2-Umgebung überschreiben Sie die Airflow-Konfigurationsoption dags_are_paused_at_creation. Nachdem Sie diese Änderung vorgenommen haben, werden alle neuen DAGs standardmäßig pausiert.

Bereich Schlüssel Wert
core dags_are_paused_at_creation True

Zusätzliche oder fehlende DAG-Ausführungen verhindern

Geben Sie ein neues statisches Startdatum in DAGs an, das Sie in Ihre Airflow 2-Umgebung übertragen.

Zur Vermeidung von Lücken und Überschneidungen in Ausführungsdaten sollte die erste DAG-Ausführung in der Airflow 2-Umgebung beim nächsten Auftreten des Zeitplanintervalls erfolgen. Legen Sie dazu das neue Startdatum in Ihrem DAG vor dem Datum der letzten Ausführung in der Airflow 1.10.*-Umgebung fest.

Wenn Ihr DAG beispielsweise täglich um 15:00 Uhr, 17:00 Uhr und 21:00 Uhr in der Airflow-1.10-Umgebung ausgeführt wird, die letzte DAG-Ausführung um 15:00 Uhr ausgeführt wurde und Sie möchten den DAG um 15:15 Uhr übertragen, dann kann das Startdatum für die Airflow 2-Umgebung heute um 14:45 Uhr sein. Nachdem Sie den DAG in der Airflow 2-Umgebung aktiviert haben, plant Airflow eine DAG-Ausführung für 17:00 Uhr.

Ein weiteres Beispiel: Wenn Ihr DAG täglich in der Airflow 1.10-Umgebung um 00:00 Uhr ausgeführt wird, die letzte DAG-Ausführung am 26. April 2021 um 00:00 Uhr ausgeführt wurde und Sie möchten den DAG um 13:00 Uhr am 26. April 2021 übertragen, kann das Startdatum für die Airflow 2-Umgebung 23:45 Uhr am 25. April 2021 sein. Nachdem Sie den DAG in der Airflow 2-Umgebung aktiviert haben, plant Airflow einen DAG-Ausführung für 00:00 Uhr am 27. April 2021.

DAGs einzeln in die Airflow 2-Umgebung übertragen

Führen Sie für jeden DAG die folgenden Schritte aus, um ihn zu übertragen:

  1. Achten Sie darauf, dass das neue Startdatum im DAG wie im vorherigen Abschnitt beschrieben festgelegt ist.

  2. Laden Sie den aktualisierten DAG in die Airflow 2-Umgebung hoch. Dieser DAG wird aufgrund der Konfigurationsüberschreibung in der Airflow 2-Umgebung pausiert, sodass keine DAG-Ausführungen geplant sind.

  3. Wechseln Sie in der Airflow-Weboberfläche zu DAGs und suchen Sie nach gemeldeten DAG-Syntaxfehlern.

  4. Zu dem Zeitpunkt, an dem Sie den DAG übertragen möchten:

    1. Halten Sie den DAG in Ihrer Airflow 1.10.*-Umgebung an.

    2. Deaktivieren Sie den DAG in Ihrer Airflow 2-Umgebung.

    3. Prüfen Sie, ob die neue DAG-Ausführung zum richtigen Zeitpunkt geplant ist.

    4. Warten Sie, bis die DAG-Ausführung in der Airflow 2-Umgebung erfolgt ist, und prüfen Sie, ob die Ausführung erfolgreich ist.

  5. Je nachdem, ob die DAG-Ausführung erfolgreich ist:

    • Wenn die DAG-Ausführung erfolgreich ist, können Sie fortfahren und den DAG aus Ihrer Airflow 2-Umgebung verwenden. Erwägen Sie schließlich, die Airflow-Version 1.10.* des DAG zu löschen.

    • Wenn die DAG-Ausführung fehlgeschlagen ist, versuchen Sie, die Fehlerbehebung beim DAG durchzuführen, bis sie erfolgreich in Airflow 2 ausgeführt wird.

      Bei Bedarf können Sie jederzeit auf die Airflow 1.10.*-Version des DAG zurückgreifen:

      1. Halten Sie den DAG in Ihrer Airflow 2-Umgebung an.

      2. Heben Sie das Pausieren des DAG in Ihrer Airflow 1.10.*-Umgebung auf. Dadurch wird eine neue DAG-Ausführung für das gleiche Datum und die gleiche Uhrzeit wie die fehlgeschlagene DAG-Ausführung geplant.

      3. Wenn Sie mit der Airflow 2-Version des DAG fortfahren möchten, passen Sie das Startdatum an, laden Sie die neue Version des DAG in Ihre Airflow 2-Umgebung hoch und wiederholen Sie den Vorgang.

Schritt 9: Airflow 2-Umgebung überwachen

Nachdem Sie alle DAGs und Konfigurationen in die Airflow 2-Umgebung übertragen haben, überwachen Sie diese auf potenzielle Probleme, fehlgeschlagene DAG-Ausführungen und den allgemeinen Umgebungsstatus. Wenn die Airflow 2-Umgebung für einen ausreichend langen Zeitraum fehlerfrei ausgeführt wird, können Sie die Airflow 1.10*-Umgebung entfernen.

Nächste Schritte