我的目标是利用 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 中您可以执行以下步骤:
- 在 Google Cloud Console 中,转到快照页。
- 在页面顶部,单击创建快照计划。
- 输入计划名称。
- 选择快照计划的区域。您的永久磁盘必须位于包含快照计划的区域内的区域中。
- 或者,选择您的快照位置或接受默认选择。
- 选择您的计划频率。
- 输入自动删除快照的天数。
- 选择删除规则来确定如果删除计划的源磁盘,快照会发生什么情况。
- 选择保留根据此计划生成的快照的天数。
- 如果您使用的是 Windows,则可以启用 VSS。
- 或者,指定您想要应用于这些快照的任何相关标签。
- 单击“创建”以创建快照计划。
我已关注下一个文档
您也可以使用该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