保存和加载环境快照

Cloud Composer 1 | Cloud Composer 2

本页面介绍了如何使用环境快照保存和加载环境状态。

您可以将环境配置为自动保存快照。如需了解详情,请参阅配置计划快照

环境快照简介

环境快照会存储环境的状态。您可以按需保存和加载环境快照。

您可以使用快照执行以下操作:

如何存储快照

环境快照是一组描述环境状态并存储环境数据的备份的文件。

您可以为环境创建多个快照。环境快照不是增量快照。您可以独立于其他快照使用任何快照。

当您删除环境时,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 API 的情况下在 Cloud Composer 基础架构中应用的任何设置都可能会丢失。

关于部分完成的操作

加载快照时,操作可能成功、失败或部分完成:

  • 成功的操作会从快照加载所有数据。
  • 失败的操作不会引入任何更改。
  • 部分完成的操作会从快照中加载数据子集。此类操作会报告为失败,但错误消息会指明已成功加载哪些数据。例如,如果安装了 PyPI 软件包,但 Airflow 配置选项替换未成功,则错误消息会指明这一点。

对于部分完成的操作,您可以尝试再次加载同一快照。Cloud Composer 会跳过之前尝试成功的步骤。例如,如果某项操作因超时而失败,但数据库已成功加载,则下一次尝试不会再次加载数据库。

准备工作

  • 在 Cloud Composer 1 中,您只能保存快照,但不能加载快照。您可以将 Cloud Composer 1 环境中的快照加载到 Cloud Composer 2 环境中。
  • Cloud Composer 2 版本 2.0.9 及更高版本支持快照。对于 1.18.5 及以上版本,Cloud Composer 1 支持保存环境快照。

  • 快照不会创建环境。如果要将某个环境中的快照加载到其他环境,您首先需要创建一个新环境,然后将快照加载到该环境中。

  • 您无法将快照加载到处于错误状态的环境。您无法通过加载快照来修复此类环境。您仍然可以将现有快照加载到新环境。

  • 您只能将快照加载到相同或更高版本的 Cloud Composer 或 Airflow。例如,您无法将 Cloud Composer 2.0.2 中的快照加载到使用 Cloud Composer 2.0.1 的环境中。又例如,您无法将快照从 Airflow 2.2.3 加载到 Airflow 2.1.4。

  • 快照不会更改 Cloud Composer 版本。如果您将环境升级到更高版本的 Cloud Composer,然后从早期版本加载快照,则您的环境仍会保留其 Cloud Composer 的当前版本。例如,将快照从 Cloud Composer 2.0.1 加载到 Cloud Composer 2.0.2 并不会将环境还原为 Cloud Composer 2.0.1。

  • 支持快照的 Airflow 数据库大小上限为 20 GB。如果环境的数据库超过 20 GB,请先缩减 Airflow 数据库的大小,然后再保存快照。

  • 如果您将快照保存在环境存储桶之外的位置,则环境的服务帐号必须拥有指定位置的读写权限。例如,Storage Object Admin 角色具有此类权限。您可以将其应用于项目或特定存储桶。

  • 创建和存储快照会产生与 Cloud Storage 相关的额外费用。如需了解详情,请参阅价格

保存环境快照

Cloud Composer 会将环境快照保存在一个子文件夹(相对于您指定的文件夹)中。文件夹名称包含项目 ID、环境位置、环境名称以及保存快照时的时间戳。例如:/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00

控制台

如需创建环境的快照,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到环境页面。

    转到“环境”

  2. 在环境列表中,点击您的环境名称。环境详情页面会打开。

  3. 点击保存快照

  4. 保存快照对话框中,选择快照的存储位置:

    • 如需将快照存储在环境存储桶的 /snapshots 文件夹中,请选择使用环境存储桶中的快照文件夹(默认)

    • 如需将快照存储在自定义文件夹中,请选择在另一个存储桶中使用自定义文件夹,然后指定位置。

  5. 点击保存

gcloud

gcloud beta composer environments snapshots save 命令会保存您的环境快照。

  • snapshot-location 参数指定保存快照的文件夹。默认情况下,快照保存在环境存储桶的 /snapshots 文件夹中。例如 gs://us-central1-example-916807e1-bucket/snapshots。您还可以指定任何其他文件夹。

如需保存环境的快照,请运行以下命令:

gcloud beta composer environments snapshots save \
  ENVIRONMENT_NAME \
  --location LOCATION \
  --snapshot-location "SNAPSHOTS_FOLDER"

您需要将其中的:

  • ENVIRONMENT_NAME 替换为环境的名称。
  • LOCATION 替换为环境所在的区域。
  • (可选)将 SNAPSHOTS_FOLDER 替换为用于存储快照的存储桶文件夹的 URI。如果省略此参数,Cloud Composer 会将快照保存在您环境存储桶的 /snapshots 文件夹中。

以下示例使用默认位置:

gcloud beta composer environments snapshots save \
  example-environment \
  --location us-central1

以下示例会保存到自定义文件夹:

gcloud beta composer environments snapshots save \
  example-environment \
  --location us-central1 \
  --snapshot-location "gs://example-bucket/environment_snapshots"

API

  1. 构建 environments.saveSnapshot API 请求。

  2. 在请求正文的 snapshotLocation 字段中,指定要保存快照的文件夹。

{
  "snapshotLocation": "SNAPSHOTS_FOLDER"
}

您需要将其中的:

  • SNAPSHOTS_FOLDER 替换为用于保存快照的存储桶文件夹的 URI。

示例:

// POST https://composer.googleapis.com/v1beta1/projects/example-project/
// locations/us-central1/environments/example-environment:saveSnapshot

{
  "snapshotLocation": "gs://us-central1-example-916807e1-bucket/snapshots"
}

Terraform

无法从 Terraform 保存和加载环境快照。

保存和加载快照是在环境上执行的操作,生成的快照不属于环境定义的一部分。由于 Terraform 仅管理 Cloud Composer 环境的配置,因此您无法从中保存或加载环境快照。

加载环境快照

在 Cloud Composer 1 中,您只能保存快照,但不能加载快照。您可以将 Cloud Composer 1 环境中的快照加载到 Cloud Composer 2 环境中。例如,当您将环境迁移到 Cloud Composer 2 时。

后续步骤