Amazon web services 使用Terraform创建多个EBS卷的快照

Amazon web services 使用Terraform创建多个EBS卷的快照,amazon-web-services,amazon-ec2,terraform,aws-ebs,Amazon Web Services,Amazon Ec2,Terraform,Aws Ebs,我正在尝试使用Terraform根据特定AWS区域中的标记创建特定EBS卷的快照。 我尝试过根据标签过滤EBS卷。当filter属性中仅指定了一个标记值时,我可以获得EBS卷id的清晰输出,但对于多个值,我得到以下错误: data.aws_ebs_volume.ebs_volume:data.aws_ebs_volume.ebs_volume: 查询返回了多个结果。请尝试更具体的搜索 条件,或将最近的属性设置为true 下面是我的地形模板: data "aws_ebs_volume" "ebs_

我正在尝试使用Terraform根据特定AWS区域中的标记创建特定EBS卷的快照。 我尝试过根据标签过滤EBS卷。当filter属性中仅指定了一个标记值时,我可以获得EBS卷id的清晰输出,但对于多个值,我得到以下错误:

data.aws_ebs_volume.ebs_volume:data.aws_ebs_volume.ebs_volume: 查询返回了多个结果。请尝试更具体的搜索 条件,或将
最近的
属性设置为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卷的快照?

您可以使用来循环列表,创建多个资源或数据源

在您的情况下,您可以这样做:

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]}"
}

是否忘记在“筛选值”属性中添加引号??[“${var.ebs_卷[count.index]}”]。否则,这就像一种魅力。谢谢