Terraform 如何在';终点';属于';aws#U sns#U主题#U订阅';?

Terraform 如何在';终点';属于';aws#U sns#U主题#U订阅';?,terraform,Terraform,我想为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 =

我想为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\u sns\u主题\u订阅[通过\u sns调用\u lambda\u]: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}"

那么,允许我在这里使用变量的语法是什么呢?

这可以在解决一些问题后完成

  • 不能在资源名称中使用插值,因此请更改

    resource“aws\u lambda\u function”“${var.lambda\u function\u name}”{
    
    到硬编码的通用值

    资源“aws\u lambda\u函数”“默认”{
    
  • 无法在插值中使用插值,因此请更改

    endpoint=“${aws\u lambda\u函数。${var.lambda\u rotate\u db\u函数\u name}.arn}”
    
    使用上面的
    default
    的通用名称

    endpoint=“${aws\u lambda\u function.default.arn}”
    
工作地形

变量“lambda\u函数\u名称”{
default=“我的项目lambda func”
}
资源“aws_lambda_函数”“默认”{
filename=“${data.archive\u file.package zip.output\u path}”
function\u name=“这是一个测试”
handler=“lambda\u函数。简单\u处理程序”
source_code_hash=“${data.archive_file.package zip.output_base64sha256}”
runtime=“python3.7”
tags=“${var.tags}”
超时=300
}
资源“aws\u sns\u主题订阅”“呼叫\u lambda\u由\u sns”{
topic_arn=“${module.myproject_event_sns.arn}”
协议=“lambda”
endpoint=“${aws\u lambda\u function.default.arn}”
}