2

我希望使用 Terraform 在 AWS 中的账户之间共享 AMI。我有以下模块;

data "aws_ami_ids" "wh_ami_ids" {
  owners = "${var.owner_id}"
  name_regex = "${var.name_regex}"
}

resource "aws_ami_launch_permission" "ami_shared" {
  count = "${length(data.aws_ami_ids.wh_ami_ids.ids)}"
  image_id = "${data.aws_ami_ids.wh_ami_ids.ids[count.index]}"
  account_id = "${var.account_id}"
}

问题是数据源以创建日期降序aws_ami_ids返回列表。ami_id

因此,如果您添加了一个新的 AMI,它似乎正在修改已经创建aws_ami_launch_permissions的新 AMI,因为新的 AMI 被插入到列表的开头,从而改变了顺序。

如果资源更新时子账户可能无法访问 AMI,这可能会导致可能的竞争条件。

似乎没有一种方法可以指定数据源的排序顺序,以便始终在最后添加新的 AMI,这意味着只会创建新资源。

关于如何解决这个问题的任何想法?

4

1 回答 1

2

您可以使用插值中的计算向后迭代它们:

resource "aws_ami_launch_permission" "ami_shared" {
  count = "${length(data.aws_ami_ids.wh_ami_ids.ids)}"
  image_id = "${data.aws_ami_ids.wh_ami_ids.ids[length(data.aws_ami_ids.wh_ami_ids.ids) - count.index - 1]}"
  account_id = "${var.account_id}"
}
于 2018-07-12T15:55:04.120 回答