Создание политики AWS IAM с использованием функции var {count.index} в file () в Terraform - PullRequest
0 голосов
/ 23 марта 2019
  1. Я создаю список политик IAM, который хранится в формате .json.
  2. У меня есть только 1 блок ресурсов, с помощью count = length(count) Я хочу создать несколько политик IAM.
  3. Политики хранятся в формате .json.Я имею в виду их в Terraform, используя file().

Если я создаю блок из нескольких ресурсов, программа работает.

main.tf:

resource "aws_iam_role_policy" "cloudcheckr" {
  count     = "${length(var.file_name)}"
  role      = "${aws_iam_role.cloudcheckr.id}"   // An IAM role is created in another resource block
  name      = "${var.file_name[count.index]}"
  policy    = "${file("${var.file_name[count.index]}.json")}"

variables.tf:

variable "file_name" {
  type = "list"
  default = [
    "xxxxxx",
    "xxxxxx",
    "xxxxxx",
    "xxxxxx",
  ]
}

Ожидаемые результаты:

Создано несколько политик IAM.

Фактические результаты:

aws_iam_role_policy.cloudcheckr: 3 error(s) occurred:  

* aws_iam_role_policy.cloudcheckr[3]: file: open iam_policy_cloudcheckr_security.json: no such file or directory in:

${file("${var.file_name[count.index]}.json")}
* aws_iam_role_policy.cloudcheckr[0]: file: open iam_policy_cloudcheckr_cloudwatchflowlogs.json: no such file or directory in:

${file("${var.file_name[count.index]}.json")}
* aws_iam_role_policy.cloudcheckr[2]: file: open iam_policy_cloudcheckr_inventory.json: no such file or directory in:

${file("${var.file_name[count.index]}.json")}

1 Ответ

0 голосов
/ 25 марта 2019

Нет проблем с первого взгляда.Но есть еще несколько способов решить проблему пути к файлу.

$ {path.module} полезно при использовании file() внутри модуля, обычно вы хотите указать путь относительно базы модуля, например: file("${path.module}/file").

Таким образом, ваш код можно изменить на

resource "aws_iam_role_policy" "cloudcheckr" {
  count     = "${length(var.file_name)}"
  role      = "${aws_iam_role.cloudcheckr.id}"   // An IAM role is created in another resource block
  name      = "${var.file_name[count.index]}"
  policy    = "${file("${path.module}/${var.file_name[count.index]}.json")}"
}

Если это не сработает, попробуйте набрать format()

  policy    = "${file(format("%s/%s.json", "${path.module}, ${var.file_name[count.index]}"))}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...