保存并加载环境快照

Cloud Composer 1 |Cloud Composer 2 |Cloud Composer 3

本页面介绍了如何使用以下代码保存和加载环境状态: 环境快照

您可以将环境配置为自动保存快照。有关 相关信息,请参阅配置计划快照

环境快照简介

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

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

  • 将您的环境恢复到早期状态。创建备份 环境,然后加载其中一个快照 环境例如,您可以回滚执行 安装 PyPI 软件包或替换 Airflow 配置选项,即使 更改集群名称。

  • 执行并排升级和复制环境。创建 请使用相同或 然后将快照应用于这个新的 环境此过程类似于 迁移。请务必先暂停 DAG 截取快照,以避免重复的 DAG 运行。

快照的存储方式

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

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

在您删除实例时,Cloud Composer 不会删除快照, 环境

默认情况下,Cloud Composer 将快照存储在 snapshots/ 中 创建文件夹您还可以指定自定义位置 手动创建快照

为了方便起见,Cloud Storage 界面将数据显示为文件夹,但存储分区 以平面文件结构运行这并不会改变 在 Google Cloud 控制台中加载快照,但在执行上述操作时, 直接对存储桶中的文件执行操作。如需更多信息 请参阅对象命名空间

快照的安全注意事项

为了降低这种安全风险,您可以存储敏感信息 例如密钥或密码 Secret Manager如需了解详情,请参阅 为您的环境配置 Secret Manager

请务必检查环境存储桶的安全权限。如果您 将环境快照存储在自定义存储桶中,请确保 访问权限,以确保您在 Google Cloud 控制台中 项目。分配权限时,请确保环境服务 账号有足够的权限从 存储桶。

快照中保存哪些数据

Cloud Composer 会将以下数据保存在快照中:

  • Airflow 配置替换。
  • 环境变量。
  • 自定义 PyPI 软件包列表(作为要求)。
  • Airflow 数据库的备份,包括已执行任务的状态和 DAG 运行历史记录。
  • /dags/data/plugins 文件夹(从 环境的存储桶中。
  • 环境的 fernet 密钥
  • 有关环境配置的其他信息,例如 环境的规模和性能参数。 Cloud Composer 在加载时不使用此信息 快照。

从快照中加载哪些数据

Cloud Composer 会从快照加载以下数据:

  • Airflow 配置替换。
  • 环境变量。
  • 自定义 PyPI 软件包(除非您选择跳过安装它们)。

  • Airflow 数据库的内容,包括已执行任务的状态,以及 DAG 运行历史记录。

  • 快照中 /dags/data/plugins 文件夹的内容 会加载到环境的存储桶中

  • 快照中的铁网络密钥用于重新加密 创建快照此 环境保持不变。

虽然 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 及更高版本的环境快照。

  • 快照不会创建环境。如果您想从以下位置加载快照: 到另一个环境,首先需要创建一个新的 然后将快照加载到其中

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

  • 您只能将快照加载到 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 数据库的大小,然后再保存 快照。

  • 环境存储桶中对象名称的最大长度不得为 超过 1024 个符号。否则,无法创建快照。

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

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

保存环境快照

Cloud Composer 会将环境快照保存在 subfolder(相对于您指定的文件夹)。 文件夹名称包含项目 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 环境的配置, 您将无法从中保存或加载环境快照。

加载环境快照

请考虑以下情况。例如: 启用 catch-up,且 Airflow 执行 DAG 按照从创建快照到创建快照的时间表 。在这种情况下,加载快照后,Airflow 没有任何信息 所以 Airflow 会再次运行该 DAG 相同的时间和数据

再举一个例子,假设某个 DAG 每天运行一次。您接受了 Airflow 执行此 DAG,然后加载快照 。在这种情况下,即使“赶超”状态,Airflow 再次运行该 DAG 已停用。

控制台

如需将快照加载到 Cloud Composer 2 环境中,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往环境页面。

    转到“环境”

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

  3. 点击加载快照

  4. 加载快照对话框中,点击浏览

  5. 选择一个存储快照的文件夹。文件夹名称会列出 项目 ID、环境的位置以及 已保存快照。例如 /snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00

  6. (可选)要跳过从 Google Cloud 控制台安装自定义 PyPI 软件包, 选择跳过 PyPI 软件包安装。如果您加载 已安装应用的环境的快照 自定义 PyPI 软件包中, 则 Cloud Composer 不会安装这些自定义软件包。

  7. 点击加载,然后等待 Cloud Composer 加载快照。

gcloud

gcloud beta 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 beta composer environments snapshots load \
  DESTINATION_ENVIRONMENT_NAME \
  --location LOCATION \
  --snapshot-path "SNAPSHOT_PATH"

您需要将其中的:

  • DESTINATION_ENVIRONMENT_NAME 替换为您所在的环境的名称 加载快照
  • LOCATION 替换为环境所在的区域。
  • SNAPSHOT_PATH 替换为存储桶的 URI,后跟指向 快照。

示例:

gcloud beta 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

  1. 构建 environments.loadSnapshot API 请求。

  2. 在请求正文的 snapshotPath 字段中,指定 存储桶的 URI,后跟快照的路径。名称 该文件夹中列出了项目的 ID、环境的位置以及 保存快照时的时间戳。例如 gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00

  3. (可选)在请求正文的 skipPypiPackagesInstallation 字段中 指定 Cloud Composer 是否必须跳过 从快照安装自定义 PyPI 软件包。如果您加载 已安装应用的环境的快照 自定义 PyPI 软件包中, 则 Cloud Composer 不会安装这些自定义软件包。

    此字段是可选字段。如果您省略此字段,则 Cloud Composer 通过快照安装 PyPI 软件包。

{
  "snapshotPath": "SNAPSHOT_PATH"
}

您需要将其中的:

  • SNAPSHOT_PATH 替换为存储桶文件夹的 URI 存储快照。

示例:

// POST https://composer.googleapis.com/v1beta1/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 环境的配置, 您将无法从中保存或加载环境快照。

后续步骤