Managed Airflow(第 3 代) | Managed Airflow(第 2 代) | Managed Airflow(旧版第 1 代)
本页面介绍了如何使用环境快照保存和加载环境的状态。
您可以将环境配置为自动保存快照。如需了解 详情,请参阅配置计划快照。
环境快照简介
环境快照用于存储环境的状态。您可以按需保存和加载环境快照。
您可以使用快照执行以下操作:
将环境恢复到之前的状态。使用快照创建环境的备份,然后加载其中一个快照以恢复环境。例如,您可以回滚安装 PyPI 软件包或替换 Airflow 配置选项的更新操作,即使环境已成功更新也是如此。
执行并列升级和复制环境。创建现有环境的快照,创建一个使用相同或更高版本的 Managed Airflow 的新环境,然后将快照应用于此新环境。此过程类似于 迁移。请务必在创建快照之前暂停 DAG,以避免重复的 DAG 运行。
将环境迁移到 Managed Airflow(第 3 代)。
快照的存储方式
环境快照是一组描述环境状态的文件,用于存储环境数据的备份。
您可以为环境创建多个快照。环境快照是非增量的。您可以独立于其他快照使用任何快照。
删除环境时,Managed Airflow 不会删除快照。
默认情况下,Managed Airflow 会将快照存储在环境存储桶的 snapshots/ 文件夹中。您还可以在创建快照时指定自定义位置。
虽然 Cloud Storage 界面为了方便起见将数据显示为文件夹,但存储分区采用的是平面文件结构。这不会改变您在 Google Cloud 控制台中保存和加载快照的方式,但在直接对存储桶中的文件执行操作时,请注意这一点。如需了解更多 信息,请参阅对象命名空间。
快照的安全注意事项
为了降低这种安全风险,您可以将 Airflow DAG 使用的敏感信息(例如密钥或密码)存储在 Secret Manager 中。如需了解详情,请参阅 为环境配置 Secret Manager。
请务必检查环境存储桶的安全权限。如果您将环境快照存储在自定义存储桶中,请确保在项目中正确配置了该存储桶的访问权限。分配权限时,请确保环境的服务 账号 具有足够的权限来保存和加载存储桶中的 快照。
快照中保存的数据
Managed Airflow 会在快照中保存以下数据:
- Airflow 配置替换。
- 环境变量。
- 自定义 PyPI 软件包列表(作为要求)。
- Airflow 数据库的备份,包括已执行任务的状态和 DAG 运行历史记录。
- 环境存储桶中
/dags、/data和/plugins文件夹的备份。 - 环境的 fernet 密钥。
- 有关环境配置的其他信息,例如环境的规模和性能参数。 Managed Airflow 在加载快照时不会使用此信息。
从快照加载的数据
Managed Airflow 会从快照加载以下数据:
- Airflow 配置替换。
- 环境变量。
自定义 PyPI 软件包(除非您选择跳过安装)。
Airflow 数据库的内容,包括已执行任务的状态和 DAG 运行历史记录。
快照中的
/dags、/data和/plugins文件夹的内容会加载到环境的存储桶中。快照中的 fernet 密钥用于使用环境自己的 fernet 密钥重新加密快照中的数据。环境的 fernet 密钥保持不变。
虽然 Managed Airflow 会在快照中存储一些有关环境配置的信息,但在加载快照时不会使用这些信息。加载快照时,环境的以下参数不会更改:
- 环境配置,例如环境规模和性能参数。
- 环境的网络配置。
- 环境存储桶中
/dags、/data和/plugins文件夹之外的内容。 - 环境标签。
如果您在 Managed Airflow 基础架构中应用了任何设置,但未使用 Managed Airflow API,那么在加载快照时,这些设置可能会丢失。
部分完成的操作简介
加载快照时,操作可能会成功、失败或部分完成:
- 成功的操作会加载快照中的所有数据。
- 失败的操作不会引入任何更改。
- 部分完成的操作会加载快照中的部分数据。此类操作会报告为失败,但错误消息会指明哪些数据已成功加载。例如,如果 PyPI 软件包已安装,但 Airflow 配置选项替换未成功,则错误消息会指明这一点。
对于部分完成的操作,您可以尝试再次加载同一快照。Managed Airflow 会跳过在上一次尝试中成功的步骤。例如,如果操作因超时而失败,但数据库已成功加载,那么下一次尝试不会再次加载数据库。
准备工作
Managed Airflow(第 2 代)2.0.9 及更高版本支持快照。 Managed Airflow(旧版第 1 代)1.18.5 及更高版本支持保存环境快照。
快照不会创建环境。如果您想将快照从一个环境加载到另一个环境,首先需要创建一个新环境,然后将快照加载到该环境。
您无法将快照加载到处于错误状态的环境。无法通过加载快照来修复此类环境。您仍然可以将现有快照加载到新环境。
您只能将快照加载到相同或更高版本的 Managed Airflow 或 Airflow。例如,您无法将快照从 Managed Airflow 2.8.4 加载到使用 Managed Airflow 2.8.3 的环境。再举一例,您无法将快照从 Airflow 2.7.3 加载到 Airflow 2.6.3。
快照不会更改 Managed Airflow 版本。如果您将环境升级到更高版本的 Managed Airflow,然后加载较低版本的快照,那么您的环境仍会保留其当前版本的 Managed Airflow。例如,将快照从 Managed Airflow 2.8.3 加载到 Managed Airflow 2.8.4 不会将环境恢复到 Managed Airflow 2.8.3。
支持快照的 Airflow 数据库的最大大小为 20 GB。如果环境的数据库超过 20 GB,请在保存快照之前减小 Airflow 数据库的大小。
如需创建快照,环境存储桶中
/dags、/plugins和/data文件夹中的对象总数必须少于 100,000 个。如果您使用 XCom 机制来传输文件,请确保 按照 Airflow 的准则使用该机制。 使用 XCom 传输大型文件或大量文件会影响 Airflow 数据库的性能,并可能导致在加载快照或升级环境时失败。建议使用 Cloud Storage 等替代方案来传输大量数据。
环境存储桶中对象名称的最大长度不得超过 1024 个字符。否则,无法创建快照。
如果您将快照保存在环境存储桶之外的位置,则环境的服务账号必须具有对指定位置的读取和写入权限。例如, 存储对象管理员 角色 具有此类权限。您可以将其应用于项目或特定存储桶。
创建和存储快照会产生与 Cloud Storage 相关的额外费用。如需了解详情,请参阅价格。
保存环境快照
Managed Airflow 会将环境快照保存在相对于您指定的文件夹的
子文件夹中。
文件夹名称包含项目 ID、环境的位置、环境的名称以及保存快照时的时间戳。例如:/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00。
控制台
如需创建环境的快照,请执行以下操作:
在 Google Cloud 控制台中,前往环境 页面。
在环境列表中,点击您的环境名称。环境详情 页面会打开。
点击保存快照 。
在保存快照 对话框中,选择快照的存储位置:
如需将快照存储在环境存储桶的
/snapshots文件夹中,请选择使用环境存储桶中的快照文件夹(默认) 。如需将快照存储在自定义文件夹中,请选择 使用其他存储桶中的自定义文件夹,然后指定位置。
点击保存 。
gcloud
gcloud composer environments snapshots save 命令用于保存环境的快照。
snapshot-location实参用于指定保存快照的文件夹。默认情况下,快照保存在环境存储桶的/snapshots文件夹中。例如,gs://us-central1-example-916807e1-bucket/snapshots。您还可以指定任何其他文件夹。
如需保存环境的快照,请运行以下命令:
gcloud composer environments snapshots save \
ENVIRONMENT_NAME \
--location LOCATION \
--snapshot-location "SNAPSHOTS_FOLDER"
将
ENVIRONMENT_NAME替换为环境的名称。LOCATION替换为环境所在的区域。- (可选)
SNAPSHOTS_FOLDER替换为用于存储快照的存储桶文件夹的 URI。如果您省略此实参,Managed Airflow 会将快照保存在环境存储桶的/snapshots文件夹中。
以下示例使用默认位置:
gcloud composer environments snapshots save \
example-environment \
--location us-central1
以下示例保存到自定义文件夹:
gcloud composer environments snapshots save \
example-environment \
--location us-central1 \
--snapshot-location "gs://example-bucket/environment_snapshots"
API
构建
environments.saveSnapshotAPI 请求。在请求正文的
snapshotLocation字段中,指定要保存快照的文件夹。
{
"snapshotLocation": "SNAPSHOTS_FOLDER"
}
将
SNAPSHOTS_FOLDER替换为用于保存快照的存储桶文件夹的 URI。
示例:
// 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
无法通过 Terraform 保存和加载环境快照。
保存和加载快照是对环境执行的操作,生成的快照不是环境定义的一部分。由于 Terraform 仅管理 Managed Airflow 环境的配置,因此您无法通过它保存或加载环境快照。
加载环境快照
请考虑以下情况。例如, 启用追赶后,Airflow 会在创建快照和加载快照之间的时间段内按计划执行 DAG 。在这种情况下,加载快照后,Airflow 没有关于 DAG 运行的信息,因此 Airflow 会针对相同的时间和数据再次运行 DAG。
再举一例,假设有一个 DAG 按每日计划运行。您创建快照,然后 Airflow 执行此 DAG,之后您在当天加载快照。在这种情况下,即使停用了追赶,Airflow 也会再次运行 DAG。
控制台
如需将快照加载到环境,请执行以下操作:
在 Google Cloud 控制台中,前往环境 页面。
在环境列表中,点击您的环境名称。环境详情 页面会打开。
点击加载快照 。
在加载快照 对话框中,点击浏览 。
选择存储快照的文件夹。文件夹名称列出了项目 ID、环境的位置以及保存快照时的时间戳。例如:
/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00。(可选)如需跳过安装快照中的自定义 PyPI 软件包,请选择跳过 PyPI 软件包安装 。如果您加载的环境快照中安装了 自定义 PyPI 软件包,那么 Managed Airflow 不会安装这些自定义软件包。
点击加载 ,然后等待 Managed Airflow 加载快照。
gcloud
gcloud composer environments snapshots load 命令用于将快照加载到环境。
--snapshot-path实参用于指定快照所在的文件夹。文件夹名称列出了项目 ID、环境的位置以及保存快照时的时间戳。例如:
gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00。(可选)
--skip-pypi-packages-installation实参用于跳过安装快照中的自定义 PyPI 软件包。如果您加载的环境快照中安装了 自定义 PyPI 软件包,那么 Managed Airflow 不会安装这些自定义软件包。
gcloud composer environments snapshots load \
DESTINATION_ENVIRONMENT_NAME \
--location LOCATION \
--snapshot-path "SNAPSHOT_PATH"
将
DESTINATION_ENVIRONMENT_NAME替换为要加载快照的环境的名称。LOCATION替换为环境所在的区域。SNAPSHOT_PATH替换为存储桶的 URI,后跟快照的路径。
示例:
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
构建
environments.loadSnapshotAPI 请求。在请求正文的
snapshotPath字段中,指定存储桶的 URI,后跟快照的路径。文件夹名称列出了项目 ID、环境的位置以及保存快照时的时间戳。例如:gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00。(可选)在请求正文的
skipPypiPackagesInstallation字段中,指定 Managed Airflow 是否必须跳过安装快照中的自定义 PyPI 软件包。如果您加载的环境快照中安装了 自定义 PyPI 软件包,那么 Managed Airflow 不会安装这些自定义软件包。此字段是可选字段。如果您省略此字段,Managed Airflow 会安装快照中的 PyPI 软件包。
{
"snapshotPath": "SNAPSHOT_PATH"
}
将
SNAPSHOT_PATH替换为用于存储快照的存储桶文件夹的 URI。
示例:
// 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
无法使用 Terraform 保存和加载环境快照。
保存和加载快照是对环境执行的操作,生成的快照不是环境定义的一部分。由于 Terraform 仅管理 Managed Airflow 环境的配置,因此您无法通过它保存或加载环境快照。