Managed Airflow (3e génération) | Managed Airflow (2e génération) | Managed Airflow (1re génération héritée)
Cette page explique comment enregistrer et charger l'état de votre environnement à l'aide d'instantanés d'environnement.
Vous pouvez configurer votre environnement pour qu'il enregistre automatiquement des instantanés. Pour en savoir plus, consultez Configurer des instantanés programmés.
À propos des instantanés d'environnement
Les instantanés d'environnement stockent l'état de votre environnement. Vous pouvez enregistrer et charger des instantanés d'environnement à la demande.
Vous pouvez utiliser des instantanés pour :
restaurer votre environnement dans un état antérieur ; créer des sauvegardes de votre environnement à l'aide d'instantanés, puis charger l'un des instantanés pour restaurer votre environnement. Par exemple, vous pouvez effectuer un rollback d'une opération de mise à jour qui installe des packages PyPI ou remplace des options de configuration Airflow, même après la mise à jour de votre environnement.
effectuer des mises à niveau en parallèle et copier des environnements ; créer un instantané d'un environnement existant, créer un environnement qui utilise la même version ou une version ultérieure de Managed Airflow, puis appliquer l'instantané à ce nouvel environnement. Cette procédure est semblable à une migration. Veillez à mettre en pause les DAG avant de créer l'instantané pour éviter les exécutions de DAG en double.
migrer vos environnements vers Managed Airflow (3e génération).
Comment les instantanés sont-ils stockés ?
Un instantané d'environnement est un ensemble de fichiers qui décrivent l'état de votre environnement et stockent la sauvegarde des données de l'environnement.
Vous pouvez créer plusieurs instantanés de votre environnement. Les instantanés d'environnement ne sont pas incrémentiels. Vous pouvez utiliser n'importe quel instantané indépendamment des autres.
Managed Airflow ne supprime pas les instantanés lorsque vous supprimez votre environnement.
Par défaut, Managed Airflow stocke les instantanés dans le dossier snapshots/ du bucket de votre environnement. Vous pouvez également spécifier un emplacement personnalisé lorsque vous créez un instantané.
Bien que l'interface utilisateur Cloud Storage affiche les données sous forme de dossiers pour plus de commodité, les buckets fonctionnent dans une structure de fichiers plats. Cela ne change pas la façon dont vous travaillez avec l'enregistrement et le chargement d'instantanés dans la Google Cloud console, mais gardez cela à l' esprit lorsque vous effectuez des opérations directement sur les fichiers de votre bucket. Pour en savoir plus, consultez Espace de noms d'objet.
Considérations liées à la sécurité pour les instantanés
Pour atténuer ce risque de sécurité, vous pouvez stocker les informations sensibles utilisées par les DAG Airflow, telles que les clés ou les mots de passe, dans Secret Manager. Pour en savoir plus, consultez Configurer Secret Manager pour votre environnement.
Veillez à vérifier les autorisations de sécurité pour le bucket de votre environnement. Si vous stockez des instantanés d'environnement dans un bucket personnalisé, assurez-vous que les autorisations d'accès sont correctement configurées dans votre projet. Lorsque vous attribuez des autorisations, assurez-vous que le compte de service de l'environnement dispose des autorisations suffisantes pour enregistrer et charger des instantanés à partir du bucket.
Quelles données sont enregistrées dans les instantanés ?
Managed Airflow enregistre les données suivantes dans les instantanés :
- Remplacements de configuration Airflow
- Variables d'environnement
- Liste des packages PyPI personnalisés, en tant que conditions requises
- Sauvegarde de la base de données Airflow, y compris les états des tâches exécutées et l'historique des exécutions de DAG
- Sauvegarde des dossiers
/dags,/dataet/pluginsdu bucket de l'environnement - Clé fernet de l'environnement fernet key.
- Autres informations sur la configuration de l'environnement, telles que les paramètres de scaling et de performances de l'environnement Managed Airflow n'utilise pas ces informations lorsqu'il charge des instantanés.
Quelles données sont chargées à partir des instantanés ?
Managed Airflow charge les données suivantes à partir des instantanés :
- Remplacements de configuration Airflow
- Variables d'environnement
Packages PyPI personnalisés (sauf si vous choisissez d'ignorer leur installation)
Contenu de la base de données Airflow, y compris les états des tâches exécutées et l'historique des exécutions de DAG
Le contenu des dossiers
/dags,/dataet/pluginsde l'instantané est chargé dans le bucket de l'environnement.La clé fernet de l'instantané est utilisée pour rechiffrer les données de l'instantané avec la propre clé fernet de l'environnement. La clé fernet de l'environnement reste inchangée.
Bien que Managed Airflow stocke certaines informations sur la configuration de l'environnement dans les instantanés, elles ne sont pas utilisées lors du chargement des instantanés. Les paramètres suivants de votre environnement ne changent pas lorsque vous chargez un instantané :
- Configuration de l'environnement, telle que les paramètres de scaling et de performances de l'environnement
- Configuration réseau de l'environnement
- Contenu du bucket de l'environnement en dehors des dossiers
/dags,/dataet/plugins - Étiquettes d'environnement
Tous les paramètres que vous avez appliqués dans l'infrastructure Managed Airflow sans utiliser l'API Composer peuvent être perdus lorsque vous chargez un instantané.
À propos des opérations partiellement terminées
Lorsque vous chargez un instantané, l'opération peut réussir, échouer ou être partiellement terminée :
- Les opérations réussies chargent toutes les données de l'instantané.
- Les opérations ayant échoué n'introduisent aucune modification.
- Les opérations partiellement terminées chargent un sous-ensemble de données à partir de l'instantané. Ces opérations sont signalées comme ayant échoué, mais le message d'erreur indique les données qui ont été chargées. Par exemple, si les packages PyPI sont installés, mais que les remplacements d'options de configuration Airflow n'ont pas abouti, le message d'erreur l'indique.
Pour une opération partiellement terminée, vous pouvez essayer de charger à nouveau le même instantané. Managed Airflow ignore les étapes qui ont réussi lors de la tentative précédente. Par exemple, si une opération a échoué en raison d'un délai d'inactivité, mais que la base de données a été chargée, la tentative suivante ne chargera pas à nouveau la base de données.
Avant de commencer
Les instantanés sont compatibles avec Managed Airflow (2e génération) version 2.0.9 et ultérieures. Managed Airflow (1re génération héritée) permet d'enregistrer des instantanés d'environnement dans les versions 1.18.5 et ultérieures.
Les instantanés ne créent pas d'environnement. Si vous souhaitez charger un instantané d'un environnement vers un autre, vous devez d'abord créer un environnement, puis y charger l'instantané.
Vous ne pouvez pas charger d'instantanés dans des environnements qui sont en état d'erreur. Il n'est pas possible de corriger ces environnements en chargeant un instantané. Vous pouvez toujours charger un instantané existant dans un nouvel environnement.
Vous ne pouvez charger des instantanés que dans la même version ou une version ultérieure de Managed Airflow ou Airflow. Par exemple, vous ne pouvez pas charger un instantané de Managed Airflow 2.8.4 dans un environnement avec Managed Airflow 2.8.3. Autre exemple, vous ne pouvez pas charger un instantané d'Airflow 2.7.3 dans Airflow 2.6.3.
Les instantanés ne modifient pas la version de Managed Airflow. Si vous mettez à niveau votre environnement vers une version ultérieure de Managed Airflow, puis chargez un instantané d'une version antérieure, votre environnement conserve sa version actuelle de Managed Airflow. Par exemple, le chargement d'un instantané de Managed Airflow 2.8.3 vers Managed Airflow 2.8.4 ne rétablit pas l'environnement à Managed Airflow 2.8.3.
La taille maximale de la base de données Airflow compatible avec les instantanés est de 20 Go. Si la base de données de votre environnement dépasse 20 Go, réduisez la taille de la base de données Airflow avant d'enregistrer un instantané.
Le nombre total d'objets dans les dossiers
/dags,/pluginset/datadu bucket de l'environnement doit être inférieur à 100 000 pour créer des instantanés.Si vous utilisez le mécanisme XCom pour transférer des fichiers, assurez-vous de l' utiliser conformément aux consignes d'Airflow. Le transfert de fichiers volumineux ou d'un grand nombre de fichiers à l'aide de XCom a un impact sur les performances de la base de données Airflow et peut entraîner des échecs lors du chargement d'instantanés ou de la mise à niveau de votre environnement. Envisagez d'utiliser des alternatives telles que Cloud Storage pour transférer de grands volumes de données.
La longueur maximale du nom d'un objet dans le bucket de l'environnement ne doit pas dépasser 1 024 symboles. Sinon, les instantanés ne peuvent pas être créés.
Si vous enregistrez des instantanés dans un emplacement en dehors du bucket de votre environnement, le compte de service de votre environnement doit disposer des autorisations de lecture et d'écriture pour l'emplacement spécifié. Par exemple, le rôle Administrateur des objets de l'espace de stockage dispose de ces autorisations. Vous pouvez l'appliquer à un projet ou à un bucket spécifique.
La création et le stockage d'instantanés entraînent des coûts supplémentaires liés à Cloud Storage. Pour en savoir plus, reportez-vous à la page Tarifs.
Enregistrer un instantané d'environnement
Managed Airflow enregistre les instantanés d'environnement dans un
sous-dossier, par rapport au dossier que vous spécifiez.
Le nom du dossier contient l'ID du projet, l'emplacement de l'environnement, le nom de l'environnement et l'horodatage de l'enregistrement de l'instantané. Exemple : /snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00.
Console
Pour créer un instantané de votre environnement :
Dans la Google Cloud console, accédez à la page Environnements.
Dans la liste des environnements, cliquez sur le nom de votre environnement. La page Détails de l'environnement s'ouvre.
Cliquez sur Enregistrer l'instantané.
Dans la boîte de dialogue Enregistrer l'instantané, sélectionnez l'emplacement où stocker l'instantané :
Pour stocker l'instantané dans le dossier
/snapshotsdu bucket de l'environnement, sélectionnez Utiliser le dossier d'instantanés dans le bucket de l'environnement (par défaut).Pour stocker l'instantané dans le dossier personnalisé, sélectionnez Utiliser un dossier personnalisé dans un autre bucket, puis spécifiez un emplacement.
Cliquez sur Enregistrer.
gcloud
La commande gcloud composer environments snapshots save enregistre un instantané de votre environnement.
- L'argument
snapshot-locationspécifie un dossier dans lequel l'instantané est enregistré. Par défaut, les instantanés sont enregistrés dans le dossier/snapshotsdu bucket de votre environnement. Exemple :gs://us-central1-example-916807e1-bucket/snapshots. Vous pouvez également spécifier n'importe quel autre dossier.
Pour enregistrer un instantané de votre environnement, exécutez la commande suivante :
gcloud composer environments snapshots save \
ENVIRONMENT_NAME \
--location LOCATION \
--snapshot-location "SNAPSHOTS_FOLDER"
Remplacez :
ENVIRONMENT_NAMEpar le nom de l'environnement.LOCATIONpar la région dans laquelle se trouve l'environnement.- (Facultatif)
SNAPSHOTS_FOLDERpar l'URI d'un dossier de bucket dans lequel stocker l'instantané. Si vous omettez cet argument, Managed Airflow enregistre l'instantané dans le dossier/snapshotsdu bucket de votre environnement.
L'exemple suivant utilise l'emplacement par défaut :
gcloud composer environments snapshots save \
example-environment \
--location us-central1
L'exemple suivant enregistre dans un dossier personnalisé :
gcloud composer environments snapshots save \
example-environment \
--location us-central1 \
--snapshot-location "gs://example-bucket/environment_snapshots"
API
Envoyez une requête
environments.saveSnapshotAPI.Dans le corps de la requête, dans le champ
snapshotLocation, spécifiez le dossier dans lequel vous souhaitez enregistrer l'instantané.
{
"snapshotLocation": "SNAPSHOTS_FOLDER"
}
Remplacez :
SNAPSHOTS_FOLDERpar l'URI d'un dossier de bucket dans lequel enregistrer l'instantané.
Exemple :
// POST https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment:saveSnapshot
{
"snapshotLocation": "gs://us-central1-example-916807e1-bucket/snapshots"
}
Terraform
Il n'est pas possible d'enregistrer et de charger des instantanés d'environnement à partir de Terraform.
L'enregistrement et le chargement d'instantanés sont des actions effectuées sur un environnement, et les instantanés résultants ne font pas partie de la définition d'un environnement. Étant donné que Terraform ne gère que la configuration de l'environnement Managed Airflow, vous ne pouvez pas enregistrer ni charger d'instantanés d'environnement à partir de celui-ci.
Charger un instantané d'environnement
Prenons la situation suivante. Par exemple, la fonctionnalité de rattrapage est activée et Airflow exécute un DAG selon une programmation entre le moment où l'instantané a été créé et le moment où il a été chargé. Dans ce cas, une fois que vous avez chargé l'instantané, Airflow ne dispose d'aucune information sur l'exécution du DAG qui s'est produite. Il exécute donc à nouveau le DAG pour la même heure et les mêmes données.
Autre exemple, prenons un DAG qui s'exécute selon une programmation quotidienne. Vous prenez un instantané, puis Airflow exécute ce DAG, et vous chargez ensuite l'instantané le même jour. Dans ce cas, Airflow exécute à nouveau le DAG, même si la fonctionnalité de rattrapage est désactivée.
Console
Pour charger un instantané dans votre environnement :
Dans la Google Cloud console, accédez à la page Environnements.
Dans la liste des environnements, cliquez sur le nom de votre environnement. La page Détails de l'environnement s'ouvre.
Cliquez sur Charger l'instantané.
Dans la boîte de dialogue Charger l'instantané, cliquez sur Parcourir.
Sélectionnez un dossier qui stocke l'instantané. Le nom du dossier indique l'ID de votre projet, l'emplacement de l'environnement et l'horodatage de l'enregistrement de l'instantané. Exemple :
/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00.(Facultatif) Pour ignorer l'installation de packages PyPI personnalisés à partir de l'instantané, sélectionnez Ignorer l'installation des packages PyPI. Si vous chargez un instantané d'un environnement sur lequel des packages PyPI personnaliséssont installés, Managed Airflow n'installe pas ces packages personnalisés.
Cliquez sur Charger et attendez que Managed Airflow charge l'instantané.
gcloud
La commande gcloud composer environments snapshots load charge un instantané dans votre environnement.
L'argument
--snapshot-pathspécifie un dossier dans lequel se trouve l'instantané.Le nom du dossier indique l'ID de votre projet, l'emplacement de l'environnement et l'horodatage de l'enregistrement de l'instantané. Exemple :
gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00.(Facultatif) L'argument
--skip-pypi-packages-installationignore l'installation de packages PyPI personnalisés à partir de l'instantané. Si vous chargez un instantané d'un environnement sur lequel des packages PyPI personnaliséssont installés, Managed Airflow n'installe pas ces packages personnalisés.
gcloud composer environments snapshots load \
DESTINATION_ENVIRONMENT_NAME \
--location LOCATION \
--snapshot-path "SNAPSHOT_PATH"
Remplacez :
DESTINATION_ENVIRONMENT_NAMEpar le nom de l'environnement dans lequel vous souhaitez charger l'instantané.LOCATIONpar la région dans laquelle se trouve l'environnement.SNAPSHOT_PATHpar l'URI d'un bucket, suivi du chemin d'accès à l'instantané.
Exemple :
gcloud composer environments snapshots load \
example-environment \
--location us-central1 \
--snapshot-path "gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00"
API
Envoyez une
environments.loadSnapshotrequête API.Dans le corps de la requête, dans le champ
snapshotPath, spécifiez l'URI d'un bucket, suivi du chemin d'accès à l'instantané. Le nom du dossier indique l'ID de votre projet, l'emplacement de l'environnement et l'horodatage de l'enregistrement de l'instantané. Exemple :gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00.(Facultatif) Dans le corps de la requête, dans le champ
skipPypiPackagesInstallation, spécifiez si Managed Airflow doit ignorer l'installation de packages PyPI personnalisés à partir de l'instantané. Si vous chargez un instantané d'un environnement sur lequel des packages PyPI personnaliséssont installés, Managed Airflow n'installe pas ces packages personnalisés.Ce champ est facultatif. Si vous omettez ce champ, Managed Airflow installe les packages PyPI à partir de l'instantané.
{
"snapshotPath": "SNAPSHOT_PATH"
}
Remplacez :
SNAPSHOT_PATHpar l'URI d'un dossier de bucket dans lequel stocker l'instantané.
Exemple :
// POST https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment:loadSnapshot
{
"snapshotPath": "gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00",
"skipPypiPackagesInstallation": "False"
}
Terraform
Il n'est pas possible d'enregistrer et de charger des instantanés d'environnement à l'aide de Terraform.
L'enregistrement et le chargement d'instantanés sont des actions effectuées sur un environnement, et les instantanés résultants ne font pas partie de la définition d'un environnement. Étant donné que Terraform ne gère que la configuration de l'environnement Managed Airflow, vous ne pouvez pas enregistrer ni charger d'instantanés d'environnement à partir de celui-ci.