【问题标题】:Create snapshots of multiple EBS volumes using Terraform使用 Terraform 创建多个 EBS 卷的快照
【发布时间】:2019-04-06 09:57:51
【问题描述】:

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

data.aws_ebs_volume.ebs_volume:data.aws_ebs_volume.ebs_volume:您的 查询返回多个结果。请尝试更具体的搜索 条件,或将 most_recent 属性设置为 true。

下面是我的 terraform 模板:

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 卷的快照?

【问题讨论】:

    标签: amazon-web-services amazon-ec2 terraform aws-ebs


    【解决方案1】:

    您可以使用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]}"
    }
    

    【讨论】:

    • 您是否忘记在过滤器值属性中加引号?? ["${var.ebs_volumes[count.index]}"]。否则,这就像一个魅力。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 2019-04-07
    • 2020-07-27
    • 2019-07-11
    • 2016-07-09
    • 2019-08-16
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多