Terrafrom v11.13 Inline Resource Loops - PullRequest
       4

Terrafrom v11.13 Inline Resource Loops

0 голосов
/ 20 сентября 2019

Я хочу прикрепить политику IAM к подмножеству ролей IAM, а не ко всем.Это задокументировано ниже и интересно, возможно ли использовать встроенный ресурс для цикла?Работающий поставщик AWS в Terraform v11.13.

Полный список

variable "full_list" {
  description = "List of the roles to be created"
  default = ["put_log_a","put_log_b","put_log_c","put_log_d","put_log_e"]
}

Подсписок

variable "sub_list" {
  description = "Sub list of the roles"
  default = ["put_log_c","put_log_e"]
}

Сначала создайте список ролей IAM.

resource "aws_iam_role" "iam_roles" {
  count                 = "${length(var.full_list)}"
  name                  = "${var.role_list[count.index]}_${var.environment}"
  assume_role_policy    = "${data.template_file.iam_role_trust_policy.rendered}"
  force_detach_policies = "true"
  tags                  = "${var.full_list_tags}"
}

Затем создайте политику IAM.

resource "aws_iam_policy" "s3_permissions_policy" {
  name        = "S3_Policy_${var.environment}"
  description = "S3 policy ${var.environment}"
  policy      = "${file("${path.module}/files/policies/${var.environment}/s3_policy.json")}"
}

Затем присоедините политику к подмножеству списка ролей IAM.

Пример -

resource "aws_iam_role_policy_attachment" "s3_policy_attachment" {
   count      = "${length(var.sub_list)}"
   role       = "${aws_iam_role.iam_roles.*.name[count.index]}"
   policy_arn = "${aws_iam_policy.s3_permissions_policy.arn}"
}

генерирует неправильный результат, sub_list имеет 2 элемента, расположенных в 2 и 4 в full_list.Вместо того, чтобы выбирать их правильные позиции индекса в full_list, он занимает первые две позиции индекса в full_list.Другими словами, он прикрепляет политику к ролям «put_log_a» и «put_log_b», а не «put_log_c» и «put_log_e».

Возможно ли сделать что-то вроде -

resource "aws_iam_role_policy_attachment" "s3_policy_attachment" {
  for i "${sub_list}"
    if i in "${full_list}"
      then
        sub_list_item_index_in_full_list = "${full_list[i]}"
        role       = "${aws_iam_role.iam_roles.*.name[sub_list_item_index_in_full_list]}"
        policy_arn = "${aws_iam_policy.s3_permissions_policy.arn}"
}

1 Ответ

0 голосов
/ 20 сентября 2019

Хорошо - так что после некоторой игры это решение работает.

resource "aws_iam_role_policy_attachment" "s3_policy_attachment" {
   count      = "${length(var.sub_list)}"
   role       = "${aws_iam_role.iam_roles.*.name[index(var.full_list, element(var.sub_list, count.index))]}"
   policy_arn = "${aws_iam_policy.s3_permissions_policy.arn}"
}
...