Импортировать значение из модуля Terraform

У меня есть этот скелет для двух модулей Terraform, которые я строю: api-gateway а также lambda, Это структура файла:

.
├── modules
│   ├── api-gateway
│   │   ├── main.tf
│   │   ├── outputs.tf
│   │   └── variables.tf
│   └── lambda
│       ├── main.tf
│       ├── outputs.tf
│       ├── policies
│       │   └── lambda-role.json
│       └── variables.tf
├── main.tf
├── provider.tf
├── sandbox-environment.tfvars
└── variables.tf

Содержание (выдержка) modules/api-gateway/main.tf является:

resource "aws_api_gateway_integration" "lambda_root" {
  ...
  uri = "${aws_lambda_function.fn_name.invoke_arn}"
}

resource "aws_api_gateway_integration" "lambda" {
  ...
  uri = "${aws_lambda_function.fn_name.invoke_arn}"
}

module "lambda" {
  source = "../lambda"
}

Содержание (выдержка) modules/lambda/main.tf является:

resource "aws_lambda_function" "fn_name" {
  filename = "${data.archive_file.fn_name.output_path}"
  ...
  runtime = "java8"
}

Проблема в том, что я не могу прочитать значение ${aws_lambda_function.fn_name.invoke_arn} в modules/api-gateway/main.tf:

$ terraform init
Initializing modules...
- module.pipeline

Error: resource 'aws_api_gateway_integration.lambda_root' config: unknown resource 'aws_lambda_function.fn_name' referenced in variable aws_lambda_function.fn_name.invoke_arn



Error: resource 'aws_api_gateway_integration.lambda' config: unknown resource 'aws_lambda_function.fn_name' referenced in variable aws_lambda_function.fn_name.invoke_arn

Есть ли способ "экспортировать" это значение изнутри modules/api-gateway/main.tf?

1 ответ

Вам необходимо добавить выходную переменную в modules/lambda/outputs.tf,

output "lambda_invoke_arn" {
   value = "${aws_lambda_function.fn_name.invoke_arn}"
}

Тогда в modules/api-gateway/main.tfВы можете ссылаться на вывод лямбда-модуля.

resource "aws_api_gateway_integration" "lambda" {
  ...
  uri = "${module.lambda.lambda_invoke_arn}"
}
Другие вопросы по тегам