【问题标题】:Copy EBS snapshot from one region to another region将 EBS 快照从一个区域复制到另一个区域
【发布时间】:2018-11-04 18:00:03
【问题描述】:

我想将我的 EBS 快照从一个区域复制到另一个区域。但是在过滤快照 ID 时,它会返回名为 1411205605 的 ID,但我希望它返回类似:snap-..... .

这是我的代码:

data "aws_ebs_snapshot_ids" "ebs_volumes" {

  filter {
    name   = "tag:Name"
    values = ["EBS1_snapshot"]
  }

  filter {
    name   = "volume-size"
    values = ["2"]
  }
}

output "ebs_snapshot_ids"{
    value = ["${data.aws_ebs_snapshot_ids.ebs_volumes.ids}"]
}


resource "aws_ebs_snapshot_copy" "example_copy" {
  source_snapshot_id = "${data.aws_ebs_snapshot_ids.ebs_volumes.id}"
  source_region      = "ap-southeast-1"

  tags {
    Name = "aaa_copy_snap"
  }

}

运行 terraform apply 时的输出是:

aws_ebs_snapshot_copy.example_copy:无效参数值:值 (1411205605) 参数 snapshotId 无效。预期的: '折断-...'。状态码:400,请求ID: bd577049-8b4e-45bc-8415-59e22b4d26d5

我不知道我在哪里犯了错误。我该如何解决这个问题?

【问题讨论】:

  • 错误出现在此语句中 - “${data.aws_ebs_snapshot_ids.ebs_volumes.id}”。您无法像这样检索 id。实际上它返回一个 id 列表。等我弄明白了再更新。

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


【解决方案1】:

这是因为"Data Source: aws_ebs_snapshot_ids"返回一个属性"ids",该属性设置为EBS快照ID列表,按创建时间降序排列.

现在,在您的情况下,可以安全地假设 "ids" 包含单个快照 ID,因为您使用 name 作为过滤器。因此,如下所示更改代码以检索该 ID。

source_snapshot_id = "${data.aws_ebs_snapshot_ids.ebs_volumes.ids.0}"

这里使用的“0”是从 ids 列表中检索第一个元素。在你的情况下,它是唯一的元素。

【讨论】:

  • 成功了!!!谢谢你。现在,如果我想将快照复制到 ap-southeast-1 以外的另一个区域,我该怎么办?如果我在“提供者“aws”部分”中输入不同的区域名称,它会显示错误
  • 尝试在提供程序块中使用别名。
  • 我不想编辑答案,因为我不确定“别名”是否会起作用。并且在注释中复制粘贴代码看起来不太好。从这里了解使用“别名”github.com/hashicorp/terraform/issues/4789
  • 让我知道它是否有效,如果无效,然后再问另一个问题,以便其他人可以回答。
  • 我也有同样的要求。如何使用 Terraform 将 EBS 快照从一个区域复制到另一个区域?
猜你喜欢
  • 1970-01-01
  • 2014-01-05
  • 2016-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多