Migrer des environnements vers Airflow 2

Cloud Composer 1 | Cloud Composer 2

Cette page explique comment transférer des DAG, des données et une configuration depuis vos environnements Airflow 1.10* existants vers des environnements Airflow 2 et versions ultérieures.

Autres guides de migration

From À Méthode Guide
Cloud Composer 1, Airflow 2 Cloud Composer 2, Airflow 2 Côte à côte, en utilisant des instantanés Guide de migration (instantanés)
Cloud Composer 1, Airflow 1 Cloud Composer 2, Airflow 2 Côte à côte, en utilisant des instantanés Guide de migration (instantanés)
Cloud Composer 1, Airflow 2 Cloud Composer 2, Airflow 2 Côte à côte, transfert manuel Guide de migration manuelle
Cloud Composer 1, Airflow 1 Cloud Composer 2, Airflow 2 Côte à côte, transfert manuel Guide de migration manuelle
Airflow 1 Airflow 2 Côte à côte, transfert manuel Ce guide (migration manuelle)

Mises à jour en parallèle

Cloud Composer fournit le script de transfert de base de données Cloud Composer pour migrer la base de données de métadonnées, les DAG, les données et les plug-ins des environnements Cloud Composer avec Airflow 1.10.14 et Airflow 1.10.15 vers des environnements Cloud Composer existants avec Airflow 2.0.1 et versions ultérieures.

Il s'agit d'un autre chemin d'accès que celui décrit dans ce guide. Certaines parties de ce guide s'appliquent toujours lors de l'utilisation du script fourni. Par exemple, vous souhaiterez peut-êtreVérifier la compatibilité de vos DAG avec Airflow 2 avant de les migrer, ou pour vous assurer queLes exécutions DAG simultanées ne se produisent pas et il n'y a pas d'exécutions DAG supplémentaires ou manquantes.

Avant de commencer

Avant de commencer à utiliser les environnements Cloud Composer avec Airflow 2, prenez en compte les modifications apportées par Airflow 2 aux environnements Cloud Composer.

Haute disponibilité du programmeur

Vous pouvez utiliser plusieurs programmeurs Airflow dans votre environnement. Vous pouvez définir le nombre de programmeurs lorsque vous créez un environnement ou en mettant à jour un environnement existant.

Celery+Kubernetes Executor

Celery+Kubernetes Executor d'Airflow 2 n'est pas compatible avec la version actuelle de Cloud Composer.

Modifications importantes

Airflow 2 introduit de nombreuses modifications majeures, dont certaines introduisent une rupture :

Différences entre les environnements Airflow 2 et Airflow 1.10*

Principales différences entre les environnements Cloud Composer avec Airflow 1.10* et les environnements avec Airflow 2 :

  • Les environnements Airflow 2 utilisent Python 3.8. Il s'agit d'une version plus récente que celle utilisée dans les environnements Airflow 1.10.*. Python 2, Python 3.6 et Python 3.7 ne sont pas compatibles.
  • Airflow 2 utilise un format CLI différent. Cloud Composer accepte le nouveau format dans les environnements Airflow 2 via la commande gcloud composer environments run.
  • Les packages PyPI préinstallés sont différents dans les environnements Airflow 2. Pour obtenir la liste des packages PyPI préinstallés, consultez la liste des versions Cloud Composer.
  • La sérialisation des DAG est toujours activée dans Airflow 2. Par conséquent, le chargement asynchrone des DAG n'est plus nécessaire et il n'est pas compatible avec Airflow 2. Par conséquent, la configuration des paramètres [core]store_serialized_dags et [core]store_dag_code n'est pas compatible avec Airflow 2, et les tentatives de définition de ces paramètres sont signalées comme des erreurs.
  • Les plug-ins du serveur Web Airflow ne sont pas compatibles. Cela n'affecte pas les plug-ins du programmeur ou du nœud de calcul, y compris les opérateurs et les capteurs Airflow.
  • Dans les environnements Airflow 2, le rôle utilisateur Airflow par défaut est Op. Pour les environnements Airflow 1.10.*, le rôle par défaut est Admin.

Étape 1 : Vérifier la compatibilité avec Airflow 2

Pour vérifier les conflits potentiels avec Airflow 2, utilisez les scripts de vérification de mise à jour fournis par Airflow dans votre environnement Airflow 1.10.* existant.

gcloud

  1. Si votre environnement utilise Airflow 1.10.14 ou des versions antérieures, mettez à jour votre environnement vers une version Cloud Composer utilisant Airflow 1.10.15 ou une version ultérieure. Cloud Composer est compatible avec les commandes de vérification de mise à jour à partir d'Airflow 1.10.15.

  2. Exécutez les vérifications de mise à niveau via la commande gcloud composer environments run. Certaines vérifications de mise à niveau pertinentes pour la version Airflow 1.10.15 autonome ne sont pas pertinentes pour Cloud Composer. La commande suivante exclut ces vérifications.

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

    Remplacez :

    • AIRFLOW_1_ENV par le nom de votre environnement Airflow 1.10.*
    • AIRFLOW_1_LOCATION par la région dans laquelle se trouve l'environnement.
  3. Vérifiez le résultat de la commande. Les scripts de vérification des mises à jour signalent des problèmes potentiels de compatibilité dans les environnements existants.

  4. Apportez d'autres modifications aux DAG, comme décrit dans la section sur la mise à jour des DAG du guide de mise à niveau vers Airflow 2.0 et versions ultérieures.

Étape 2 : Créez un environnement Airflow 2, remplacez les remplacements de configuration et les variables d'environnement

Créez un environnement Airflow 2 et transférez les remplacements de configuration et les variables d'environnement :

  1. Suivez la procédure permettant de créer un environnement. Avant de créer un environnement, spécifiez également les remplacements de configuration et les variables d'environnement, comme expliqué plus en détail.

  2. Lorsque vous sélectionnez une image, choisissez une image avec Airflow 2.

  3. Transférez manuellement les paramètres de configuration de votre environnement Airflow 1.10.* vers le nouvel environnement Airflow 2.

    Console

    1. Lorsque vous créez un environnement, développez la section Mise en réseau, remplacements de configuration Airflow et fonctionnalités supplémentaires.

    2. Sous Remplacements de configuration Airflow, cliquez sur Ajouter un remplacement de configuration Airflow.

    3. Copiez tous les remplacements de configuration depuis votre environnement Airflow 1.10.*.

      Certaines options de configuration utilisent un nom et une section différents dans Airflow 2. Pour en savoir plus, consultez la section Modifications de configuration.

    4. Sous Variables d'environnement, cliquez sur Ajouter une variable d'environnement.

    5. Copiez toutes les variables d'environnement à partir de votre environnement Airflow 1.10.*.

    6. Cliquez sur Créer pour créer un environnement.

Étape 3 : Installez les packages PyPI dans l'environnement Airflow 2

Une fois l'environnement Airflow 2 créé, installez-y les packages PyPI :

Console

  1. Dans la console Google Cloud, accédez à la page Environnements.

    Accéder à la page Environnements

  2. Sélectionnez votre environnement Airflow 2.

  3. Accédez à l'onglet Packages PyPI, puis cliquez sur Modifier.

  4. Copiez les exigences de package PyPI à partir de votre environnement Airflow 1.10.*. Cliquez sur Enregistrer et attendez la mise à jour de l'environnement.

    Étant donné que les environnements Airflow 2 utilisent un ensemble différent de packages préinstallés et une version différente de Python, vous pouvez rencontrer des conflits de packages PyPI difficiles à résoudre. Pour diagnostiquer les problèmes de dépendance des packages, vous pouvez rechercher les erreurs de package PyPI en installant des packages dans un pod de nœuds de calcul Airflow.

Étape 4 : Transférez les variables et les pools vers Airflow 2

Airflow 1.10.* est compatible avec l'exportation de variables et de pools vers des fichiers JSON. Vous pouvez ensuite importer ces fichiers dans votre environnement Airflow 2.

Vous ne devez transférer des pools que si vous disposez de pools personnalisés autres que default_pool. Sinon, ignorez les commandes qui exportent et importent des pools.

gcloud

  1. Exportez les variables depuis votre environnement Airflow 1.10* :

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

    Remplacez :

    • AIRFLOW_1_ENV par le nom de votre environnement Airflow 1.10.*
    • AIRFLOW_1_LOCATION par la région dans laquelle se trouve l'environnement.
  2. Exportez des pools à partir de votre environnement Airflow 1.10* :

    gcloud composer environments run AIRFLOW_1_ENV \
        --location AIRFLOW_1_LOCATION \
         pool -- -e /home/airflow/gcs/data/pools.json
    
  3. Obtenez l'URI de votre bucket d'environnement Airflow 2.

    1. Exécutez la commande suivante :

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

      Remplacez :

      • AIRFLOW_2_ENV par le nom de votre environnement Airflow 2.
      • AIRFLOW_2_LOCATION par la région dans laquelle se trouve l'environnement.
    2. Dans le résultat, supprimez le dossier /dags. Le résultat est l'URI de votre bucket d'environnement Airflow 2.

      Par exemple, remplacez gs://us-central1-example-916807e1-bucket/dags par gs://us-central1-example-916807e1-bucket.

  4. Transférez des fichiers JSON avec des variables et des pools vers votre environnement Airflow 2 :

    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
    

    Remplacez AIRFLOW_2_BUCKET par l'URI de votre bucket d'environnement Airflow 2 obtenu à l'étape précédente.

  5. Importez des variables et des pools dans 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. Vérifiez que les variables et les pools sont importés :

    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. Supprimez les fichiers JSON des 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
    

Étape 5 : Transférez d'autres données à partir de votre bucket d'environnement Airflow 1.10*

gcloud

  1. Transférez les plug-ins vers votre environnement Airflow 2. Pour ce faire, exportez les plug-ins de votre bucket d'environnement Airflow 1.10.* vers le dossier /plugins de votre bucket d'environnement Airflow 2 :

    gcloud composer environments storage plugins export \
        --destination=AIRFLOW_2_BUCKET/plugins \
        --environment=AIRFLOW_1_ENV \
        --location=AIRFLOW_1_LOCATION
    
  2. Vérifiez que le dossier /plugins a bien été importé :

    gcloud composer environments storage plugins list \
        --environment=AIRFLOW_2_ENV \
        --location=AIRFLOW_2_LOCATION
    
  3. Exportez le dossier /data de votre environnement Airflow 1.10.* vers l'environnement Airflow 2 :

        gcloud composer environments storage data export \
            --destination=AIRFLOW_2_BUCKET/data \
            --environment=AIRFLOW_1_ENV \
            --location=AIRFLOW_1_LOCATION
    
  4. Vérifiez que le dossier /data a bien été importé :

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

Étape 6 : Transférer les connexions et les utilisateurs

Airflow 1.10.* n'est pas compatible avec l'exportation d'utilisateurs et de connexions. Pour transférer des utilisateurs et des connexions, créez manuellement de nouveaux comptes utilisateur et des connexions dans votre environnement Airflow 2.

gcloud

  1. Pour obtenir la liste des connexions de votre environnement Airflow 1.10*, exécutez la commande suivante :

    gcloud composer environments run AIRFLOW_1_ENV \
        --location AIRFLOW_1_LOCATION \
         connections -- --list
    
  2. Pour créer une connexion dans votre environnement Airflow 2, exécutez la commande CLI Airflow connections via gcloud. Exemple :

    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. Pour afficher la liste des utilisateurs dans l'environnement Airflow 1.10*, procédez comme suit :

    1. Ouvrez l'interface Web Airflow pour votre environnement Airflow 1.10.*.

    2. Accédez à Admin > Utilisateurs.

  4. Pour créer un compte utilisateur dans votre environnement Airflow 2, exécutez la commande CLI Airflow users create via gcloud. Exemple :

    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
    

Étape 7 : Assurez-vous que vos DAG sont prêts pour Airflow 2

Avant de transférer des DAG vers votre environnement Airflow 2, assurez-vous que les conditions suivantes sont remplies :

  1. Les scripts de vérification de mise à jour de vos DAG s'exécutent correctement et il n'y a plus de problèmes de compatibilité.

  2. Vos DAG utilisent des instructions d'importation correctes.

    Par exemple, la nouvelle instruction d'importation pour BigQueryCreateDataTransferOperator peut se présenter comme suit :

    from airflow.providers.google.cloud.operators.bigquery_dts \
        import BigQueryCreateDataTransferOperator
    
  3. Vos DAG sont mis à jour pour Airflow 2. Cette modification est compatible avec Airflow 1.10.14 et versions ultérieures.

Étape 8 : Transférez les DAG vers l'environnement Airflow 2

Les problèmes potentiels suivants peuvent se produire lorsque vous transférez des DAG entre les environnements :

  • Si un DAG est activé (non suspendu) dans les deux environnements, chaque environnement exécute sa propre copie du DAG, comme prévu. Cela peut entraîner des exécutions DAG simultanées pour les mêmes données et le même temps d'exécution.

  • En raison du rattrapement du DAG, Airflow planifie des exécutions DAG supplémentaires, à compter de la date de début spécifiée dans vos DAG. En effet, la nouvelle instance Airflow ne prend pas en compte l'historique des exécutions de DAG à partir de l'environnement 1.10.*. Cela peut entraîner un grand nombre d'exécutions DAG planifiées à compter de la date de début spécifiée.

Empêcher les exécutions DAG simultanées

Dans votre environnement Airflow 2, remplacez l'option de configuration Airflow dags_are_paused_at_creation. Une fois la modification effectuée, tous les nouveaux DAG sont mis en pause par défaut.

Section Clé Valeur
core dags_are_paused_at_creation True

Empêcher les exécutions supplémentaires ou manquantes des DAG

Spécifiez une nouvelle date de début statique dans les DAG que vous transférez vers votre environnement Airflow 2.

Pour éviter les écarts et les chevauchements de dates d'exécution, la première exécution du DAG doit se produire dans l'environnement Airflow 2 à la prochaine occurrence de l'intervalle de planification. Pour ce faire, définissez la nouvelle date de début dans votre DAG sur une date antérieure à la dernière exécution dans l'environnement Airflow 1.10.*.

Par exemple, si votre DAG s'exécute à 15h00, 17h00 et 21h00 chaque jour dans l'environnement Airflow 1.10*, que le dernier DAG a été exécuté à 15h00 et que vous prévoyez de transférer le DAG à 15h15, la date de début de l'environnement Airflow 2 peut être aujourd'hui à 14h45. Une fois le DAG activé dans l'environnement Airflow 2, Airflow planifie une exécution du DAG à 17h00.

Autre exemple : si votre DAG s'exécute chaque jour à 00h00 dans l'environnement Airflow 1.10*, que le dernier DAG a été exécuté le 26 avril 2021 à 00h00 et que vous envisagez de transférer le DAG à 13h00 le 26 avril 2021, la date de début de l'environnement Airflow 2 peut être 23h45 le 25 avril 2021. Une fois le DAG activé dans l'environnement Airflow 2, Airflow planifie une exécution du DAG pour 00h00 le 27 avril 2021.

Transférez vos DAG un par un vers l'environnement Airflow 2

Pour chaque DAG, suivez la procédure suivante pour le transférer :

  1. Assurez-vous que la nouvelle date de début dans le DAG est définie comme décrit dans la section précédente.

  2. Importez le DAG mis à jour dans l'environnement Airflow 2. Ce DAG est mis en pause dans l'environnement Airflow 2 en raison du remplacement de la configuration, donc aucune exécution du DAG n'est encore planifiée.

  3. Dans l'interface Web Airflow, accédez aux DAG et recherchez les erreurs de syntaxe des DAG signalés.

  4. Au moment où vous prévoyez de transférer le DAG :

    1. Suspendez le DAG dans votre environnement Airflow 1.10.*.

    2. Réactivez le DAG dans votre environnement Airflow 2.

    3. Vérifiez que la nouvelle exécution du DAG est planifiée au bon moment.

    4. Attendez que l'exécution du DAG se produise dans l'environnement Airflow 2 et vérifiez si l'exécution réussit.

  5. Selon que l'exécution du DAG réussit ou non, procédez comme suit :

    • Si l'exécution du DAG réussit, vous pouvez continuer et utiliser le DAG à partir de votre environnement Airflow 2. Enfin, envisagez de supprimer la version Airflow 1.10.* du DAG.

    • Si l'exécution du DAG échoue, essayez de résoudre les problèmes liés au DAG jusqu'à ce qu'il aboutisse dans Airflow 2.

      Si nécessaire, vous pouvez toujours revenir à la version Airflow 1.10.* du DAG :

      1. Suspendez le DAG dans votre environnement Airflow 2.

      2. Relancez le DAG dans votre environnement Airflow 1.10.*. Cela planifie une nouvelle exécution du DAG pour la même date et la même heure que l'exécution du DAG qui a échoué.

      3. Lorsque vous êtes prêt à continuer avec la version Airflow 2 du DAG, ajustez la date de début, importez la nouvelle version du DAG dans votre environnement Airflow 2, puis répétez la procédure.

Étape 9 : Surveiller votre environnement Airflow 2

Une fois que vous avez transféré tous les DAG et la configuration vers l'environnement Airflow 2, surveillez-les pour détecter les problèmes potentiels, les exécutions de DAG ayant échoué et l'état général de l'environnement. Si l'environnement Airflow 2 ne présente aucun problème pendant une période suffisante, vous pouvez supprimer l'environnement Airflow 1.10.*.

Étapes suivantes