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