Импортировать значение из модуля 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}"
}