Файловая функция в terraform не обнаруживает файлы в пути - PullRequest
0 голосов
/ 21 апреля 2020

Это мой код для лямбда-роли, и я хочу, чтобы моя функция считывала файл из пути к файлу iam / lambda-accept-policy. json:

resource "aws_iam_role" "lambda_role" {
  name = "lambda_role"

  assume_role_policy = file("./iam/lambda-assume-policy.json")
}

Когда я запускаю план terraform , это ошибка, которую он выдает:

   Call to function "file" failed: no file exists at
   iam/lambda-assume-policy.json.

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

По умолчанию функция file разрешает указанный путь относительно текущего рабочего каталога, в котором вы запускали Terraform. Обычно это каталог, содержащий модуль root.

В общем случае, когда файл включен как часть модуля, мы часто хотим использовать путь относительно собственного каталога этого модуля, а не root. Мы можем сделать это путем интерполяции path.module, например, так:

  assume_role_policy = file("${path.module}/iam/lambda-assume-policy.json")

Для того, чтобы конфигурации Terraform обычно были агностическими c для платформы, на которой запускается Terraform, конфигурации Terraform обычно используют прямые косые черты. потому что они используются в Unix системах и поддерживаются в Windows системах (даже если backsla sh является разделителем по умолчанию). Поэтому path.module создает путь, содержащий косые черты, даже на Windows. с ожиданием, что оставшаяся часть пути, которую вы напишите после него, также будет использовать прямую косую черту.

0 голосов
/ 21 апреля 2020

Если вы используете Terraform Cloud, вам следует изменить режим выполнения с remote на local в вашем рабочем пространстве.

Как насчет использования синтаксиса interpolation ${file("${path.module}/iam/lambda-assume-policy.json")}

...