#amazon-web-services #terraform #terraform-modules #terraform-aws-modules
#amazon-web-services #terraform #terraform-modules #terraform-aws-modules
Вопрос:
У меня есть модули Terraform для предоставления ресурсов AWS. После terraform plan
я вижу следующую ошибку:
Ошибка: отсутствует требуемый аргумент на main.tf строка 113, в модуле «ecs-task-execution-role»: 113: модуль «ecs-task-execution-role» {Требуется аргумент «iam_role_name», но определение не найдено.
Вот мой ресурс, определенный в ../terraform/modules/iam/ecs_iam.tf
:
resource "aws_iam_role" "iam--task-execution-role" {
name = var.iam_role_name
assume_role_policy = data.aws_iam_policy_document.ecs-task-assume-role.json
}
data "aws_iam_policy_document" "ecs-task-assume-role" {
statement {
actions = ["sts:AssumeRole"]
principals {
type = "Service"
identifiers = ["ecs-tasks.amazonaws.com"]
}
}
}
data "aws_iam_policy" "ecs-task-execution-role" {
arn = "arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
}
# Attach the above policy to the execution role.
resource "aws_iam_role_policy_attachment" "ecs-task-execution-role" {
role = aws_iam_role.iam-task-execution-role.name
policy_arn = data.aws_iam_policy.ecs-task-execution-role.arn
}
Переменные определяются в ../terraform/modules/iam/variables.tf
:
variable "iam_role_name" {
type = string
}
Модуль находится в ../terraform/production/main.tf
:
module "iam-jo-task-execution-role" {
source = "../modules/iam"
iam_role_name = "iam-jo-task-execution-role"
}
# Attach the above policy to the execution role.
module "ecs-task-execution-role" {
source = "../modules/iam"
}
Любая помощь приветствуется.
Комментарии:
1. В каких файлах находится модуль
../modules/iam
?2. Путь был указан неверно выше. Да, это
../modules/iam
.
Ответ №1:
В вашем примере:
module "iam-jo-task-execution-role" {
source = "../modules/iam"
iam_role_name = "iam-jo-task-execution-role"
}
# Attach the above policy to the execution role.
module "ecs-task-execution-role" {
source = "../modules/iam"
}
Вы не передаете значение iam_role_name
переменной в ecs-task-execution-role
модуль. iam-jo-task-execution-role
Модуль прямо над ним показывает, как передать переменную в модуль.
Ответ №2:
Оказывается, я неправильно понял ресурсы и модули в Terraform.
В ../terraform/production/main.tf
файле, который объявляет использование ресурсов, найденных в исходном ../modules/iam
коде, мне нужен был следующий синтаксис:
module "iam-jo-task-execution-role" {
source = "../modules/iam"
iam_role_name = "iam-jo-task-execution-role"
}
Нет необходимости определять модуль для каждого ресурса, объявленного в ../terraform/modules/iam/ecs_iam.tf
. Это просто группировка (упаковка) нескольких ресурсов.