首页 文章

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

提问于
浏览
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,这意味着只会创建新的资源 .

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

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

相关问题