Это потому, что вы используете сплат (*
) в выводе:
output "lambda_iam_role" {
value = "${aws_iam_role.this.*.arn}"
}
Несмотря на то, что вы используете счетчик 0 или 1, это всегда будет список. Вы можете обойти это, взяв первый элемент этого списка, но также учитывая, когда в списке ничего нет (то есть, когда счетчик равен 0):
output "lambda_iam_role" {
value = "${length(aws_iam_role.this.*.arn) > 0 ? element(concat(aws_iam_role.this.*.arn, list("")), 0) : ""}"
}
Это выглядит довольно сложно, потому что нам также нужно обойти проблему с Terraform, где он будет оценивать оба возвращаемых значения из условного выражения (это будет исправлено в 0.12).
Если длина списка больше 0, взять первый элемент списка, в противном случае принять пустое значение. Поскольку оба возвращаемых значения условного выражения вычисляются, нам нужно объединить фактический список с дополнительным списком с пустым значением, чтобы убедиться, что команда element
не выдает ошибку в случае, когда существует счетчик 0, даже если он возвращает второе значение.