Совместное использование AMI для дополнительных учетных записей с использованием Terraform и источника данных aws_ami_ids

Я хочу использовать Terraform для обмена AMI между учетными записями в AWS. У меня есть следующий модуль;

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 ответ

Решение

Вы можете перебирать их в обратном порядке, используя вычисления внутри интерполяции:

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}"
}
Другие вопросы по тегам