使用 Terraform 创建多个 EBS 卷的快照
Create snapshots of multiple EBS volumes using Terraform
我正在尝试使用 Terraform 基于特定 AWS 区域中的标签创建特定 EBS 卷的快照。
我试过根据标签过滤 EBS 卷。当在过滤器属性中仅指定一个标签值时,我可以获得 EBS 卷 ID 的清晰输出,但对于多个值,我收到以下错误:
data.aws_ebs_volume.ebs_volume: data.aws_ebs_volume.ebs_volume: Your
query returned more than one result. Please try a more specific search
criteria, or set most_recent
attribute to 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 parameter 循环列表,创建多个资源或数据源。
在你的情况下你可以这样做:
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]}"
}
我正在尝试使用 Terraform 基于特定 AWS 区域中的标签创建特定 EBS 卷的快照。 我试过根据标签过滤 EBS 卷。当在过滤器属性中仅指定一个标签值时,我可以获得 EBS 卷 ID 的清晰输出,但对于多个值,我收到以下错误:
data.aws_ebs_volume.ebs_volume: data.aws_ebs_volume.ebs_volume: Your query returned more than one result. Please try a more specific search criteria, or set
most_recent
attribute to 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 parameter 循环列表,创建多个资源或数据源。
在你的情况下你可以这样做:
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]}"
}