使用Terraform和aws_AMI_ids数据源将AMI共享给子帐户



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

对如何解决这个问题有什么想法吗?

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

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

最新更新