使用Terraform和aws_ami_ids数据源将AMI与子帐户共享

时间:2018-07-12 15:08:36

标签: terraform terraform-provider-aws

我希望使用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,这意味着将仅创建新的资源。

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

1 个答案:

答案 0 :(得分: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}"
}