amazon-web-services - 使用 Terraform 创建多个 EBS 卷的快照
问题描述
我正在尝试使用 Terraform 基于特定 AWS 区域中的标签创建某些 EBS 卷的快照。我曾尝试根据标签过滤 EBS 卷。当过滤器属性中仅指定一个标签值时,我可以获得 EBS 卷 ID 的清晰输出,但对于多个值,我收到以下错误:
data.aws_ebs_volume.ebs_volume:data.aws_ebs_volume.ebs_volume:您的查询返回了多个结果。请尝试更具体的搜索条件,或将
most_recent
属性设置为 true。
下面是我的地形模板:
data "aws_ebs_volume" "ebs_volume" {
filter {
name = "tag:Name"
values = ["EBS1","EBS2","EBS3"]
}
}
output "ebs_volume_id" {
value = "${data.aws_ebs_volume.ebs_volume.id}"
}
resource "aws_ebs_snapshot" "ebs_volume" {
volume_id = "${data.aws_ebs_volume.ebs_volume.id}"
}
是否有一种清晰的方法可以使用 terraform 中的任何类型的循环语句创建多个 EBS 卷的快照?
解决方案
您可以使用count
meta 参数循环列表,创建多个资源或数据源。
在您的情况下,您可以执行以下操作:
variable "ebs_volumes" {
default = [
"EBS1",
"EBS2",
"EBS3",
]
}
data "aws_ebs_volume" "ebs_volume" {
count = "${length(var.ebs_volumes)}"
filter {
name = "tag:Name"
values = ["${var.ebs_volumes[count.index]}"]
}
}
output "ebs_volume_ids" {
value = ["${data.aws_ebs_volume.ebs_volume.*.id}"]
}
resource "aws_ebs_snapshot" "ebs_volume" {
count = "${length(var.ebs_volumes)}"
volume_id = "${data.aws_ebs_volume.ebs_volume.*.id[count.index]}"
}
推荐阅读
- python-3.x - Python - 每行文件的正则表达式
- visual-studio-2019 - Visual Studio 2019 docker 是否支持 launchSettings.json environmentVariables
- java - 如何在不导入链表的情况下在java中创建链表
- git - 如何将特定提交合并到受保护的分支中?
- c# - 在 C# 中格式化四位小数
- python - 在文本文件中查找 50 个数字中的 10 个数字的最低覆盖率
- pandas - 是否有从列表中的字典中提取值的功能?
- c# - .Net 5.0 Razor 类库 - 在控制器中读取静态文件
- java - 如何找到与给定 LocalDateTime 和 ZoneId 对应的所有 Instant?
- web-audio-api - MediaRecorder 没有下载元数据