我想为lambda函数名称使用一个变量。例如:
variable "lambda_function_name" {
default = "my-project-lambda-func"
}
resource "aws_lambda_function" "${var.lambda_function_name}" {
filename = "${data.archive_file.package-zip.output_path}"
function_name = "this_is_a_test"
handler = "lambda_function.simple_handler"
source_code_hash = "${data.archive_file.package-zip.output_base64sha256}"
runtime = "python3.7"
tags = "${var.tags}"
timeout = 300
}
我想使用变量创建SNS订阅:
resource "aws_sns_topic_subscription" "call_lambda_by_sns" {
topic_arn = "${module.myproject_event_sns.arn}"
protocol = "lambda"
endpoint = "${aws_lambda_function.${var.lambda_rotate_db_function_name}.arn}"
}
当我运行Terraform validate时会抛出此错误
读取aws_sns_topic_subscription [call_lambda_by_sns]的配置时出错:解析为1:23的错误:预期为“}”,但发现序列“ $”无效
所以我尝试了一种替代方法:
resource "aws_sns_topic_subscription" "call_lambda_by_sns" {
topic_arn = "${module.myproject_event_sns.arn}"
protocol = "lambda"
endpoint = "aws_lambda_function.${var.lambda_rotate_db_function_name}.arn"
}
现在端点行导致此错误:
Error: Error parsing address 'aws_lambda_function.${var.lambda_rotate_db_function_name}': invalid resource address "aws_lambda_function.${var.lambda_rotate_db_function_name}"
那么允许我在此处使用变量的语法是什么?
答案 0 :(得分:1)
可以在解决一些问题后完成
您不能在资源名称中使用插值,因此请更改
resource "aws_lambda_function" "${var.lambda_function_name}" {
为硬编码的通用值
resource "aws_lambda_function" "default" {
无法在插值中使用插值,因此请更改
endpoint = "${aws_lambda_function.${var.lambda_rotate_db_function_name}.arn}"
从上方使用default
的通用名称
endpoint = "${aws_lambda_function.default.arn}"
工作地形
variable "lambda_function_name" {
default = "my-project-lambda-func"
}
resource "aws_lambda_function" "default" {
filename = "${data.archive_file.package-zip.output_path}"
function_name = "this_is_a_test"
handler = "lambda_function.simple_handler"
source_code_hash = "${data.archive_file.package-zip.output_base64sha256}"
runtime = "python3.7"
tags = "${var.tags}"
timeout = 300
}
resource "aws_sns_topic_subscription" "call_lambda_by_sns" {
topic_arn = "${module.myproject_event_sns.arn}"
protocol = "lambda"
endpoint = "${aws_lambda_function.default.arn}"
}