Terraform 和 GCP:如何获取当前磁盘的清单?

Terraform 和 GCP:如何获取当前磁盘的清单?

我的目标是利用 terraform 的“google_compute_snapshot”功能(https://www.terraform.io/docs/providers/google/r/compute_snapshot.html) 来为项目中的所有磁盘安排每日快照。

我们假设在项目的整个生命周期中,所有虚拟机都将使用 terraform 创建。我该如何生成可用磁盘列表,以便将此列表传递给“source_disk”参数?

谢谢!

答案1

创建此帖子时,GCP 中还没有计划快照功能,该功能于 2019 年 8 月作为 GA 实施。

现在,通过 UI 或 gcloud 安排快照非常容易。

例如,在 UI 中您可以执行以下步骤:

  1. 在 Google Cloud Console 中,转到快照
  2. 在页面顶部,单击创建快照计划。
  3. 输入计划名称。
  4. 选择快照计划的区域。您的永久磁盘必须位于包含快照计划的区域内的区域中。
  5. 或者,选择您的快照位置或接受默认选择。
  6. 选择您的计划频率。
  7. 输入自动删除快照的天数。
  8. 选择删除规则来确定如果删除计划的源磁盘,快照会发生什么情况。
  9. 选择保留根据此计划生成的快照的天数。
  10. 如果您使用的是 Windows,则可以启用 VSS。
  11. 或者,指定您想要应用于这些快照的任何相关标签。
  12. 单击“创建”以创建快照计划。

我已关注下一个文档

您也可以使用该compute resource-policies create snapshot-schedule gcloud命令。

  gcloud compute resource-policies create snapshot-schedule [SCHEDULE_NAME] \
      --description "[SCHEDULE_DESCRIPTION]" \
      --max-retention-days [MAX_RETENTION_DAYS] \
      --start-time [START_TIME] \
      --hourly-schedule [SNAPSHOT_INTERVAL] \
      --daily-schedule \
      --weekly-schedule [SNAPSHOT_INTERVAL] \
      --weekly-schedule-from-file [FILE_NAME] \
      --on-source-disk-delete [DELETION_OPTION]

在此示例中,快照计划于 UTC 时间 22:00 开始,每周二和周四发生。

gcloud compute resource-policies create snapshot-schedule SCHEDULE_NAME \
    --description "MY WEEKLY SNAPSHOT SCHEDULE" \
    --max-retention-days 10 \
    --start-time 22:00 \
    --weekly-schedule tuesday,thursday \
    --region us-west1 \
    --on-source-disk-delete keep-auto-snapshots \
    --snapshot-labels env=dev,media=images \
    --storage-location US

另一方面,我们有资源:资源政策 您可以使用资源策略来安排某些 Compute Engine 资源的操作。

例如,您可以使用它们来安排持久磁盘快照。

JSON 表示:

{
  "id": string,
  "creationTimestamp": string,
  "selfLink": string,
  "region": string,
  "description": string,
  "name": string,
  "status": enum,
  "kind": string,

  // Union field policy can be only one of the following:
  "snapshotSchedulePolicy": {
    "schedule": {

      // Union field policy can be only one of the following:
      "hourlySchedule": {
        "hoursInCycle": integer,
        "startTime": string,
        "duration": string
      },
      "dailySchedule": {
        "daysInCycle": integer,
        "startTime": string,
        "duration": string
      },
      "weeklySchedule": {
        "dayOfWeeks": [
          {
            "day": enum,
            "startTime": string,
            "duration": string
          }
        ]
      }
      // End of list of possible types for union field policy.
    },
    "retentionPolicy": {
      "maxRetentionDays": integer,
      "onSourceDiskDelete": enum
    },
    "snapshotProperties": {
      "labels": {
        string: string,
        ...
      },
      "storageLocations": [
        string
      ],
      "guestFlush": boolean,
      "chainName": string
    }
  },
  "groupPlacementPolicy": {
    "vmCount": integer,
    "availabilityDomainCount": integer,
    "collocation": enum
  }
  // End of list of possible types for union field policy.
}

此外你还可以看到以下内容邮政有人添加了 GCP Snapshot 调度程序的示例

答案2

要生成项目中可用磁盘的列表,您可以运行以下 gcloud 命令:

gcloud compute disks list --format="csv[no-heading](name,zone)"

此命令将列表作为 csv 格式,仅包括名称和区域,没有标题,如果您希望将其作为 Json 或表格,也可以这样做。请参阅文档

如果您想将信息放在文件中,只需 >> [file name]在 gcloud 命令末尾添加即可。

您可以通过运行查看所有可能的字段

gcloud compute disks list --format=flattened

相关内容