閲覧ありがとうございます。
表題の件でご質問があります。
Terraformを用いてLambdaを登録するコードを作成しているのですが、
以下エラーが発生します。
※複数登録したいため、countを用いております。
$ terraform plan ╷ │ Error: "function_name" doesn't comply with restrictions ("^(arn:[\\w-]+:lambda:)?([a-z]{2}-(?:[a-z]+-){1,2}\\d{1}:)?(\\d{12}:)?(function:)?([a-zA-Z0-9-_]+)(:(\\$LATEST|[a-zA-Z0-9-_]+))?$"): "var.targets[count.index].service_name" │ │ with aws_lambda_permission.default[0], │ on main.tf line 197, in resource "aws_lambda_permission" "default": │ 197: function_name = "${aws_lambda_function.default[count.index].function_name}" │ ╵
初歩的な質問で恐縮ですが、こちらのエラーの原因がわからず、手こずっております。
お忙しいところお手数おかけしますが、ご教示いただけますと幸いです。
Terraformのコードは以下となります。
136 # --------------------- 137 # Lambda 138 # --------------------- 139 140 data "archive_file" "default" { 141 type = "zip" 142 source_dir = "src" 143 output_path = var.output_path 144 } 145 146 resource "aws_lambda_function" "default" { 147 count = length(var.targets) 148 # filename = var.targets[count.index].output_path 149 filename = "var.targets[count.index].output_path" 150 # function_name = var.targets[count.index].service_name 151 function_name = "var.targets[count.index].service_name" 152 153 provider = aws.virginia 154 role = aws_iam_role.default.arn 155 handler = "lambda_function.lambda_handler" 156 source_code_hash = data.archive_file.default.output_base64sha256 157 runtime = "python3.9" 158 environment { 159 variables = { 160 SLACK_API_KEY = var.SLACK_API_KEY 161 } 162 } 163 } 164 165 166 167 # --------------------- 168 # IAM Role for Lambda Function 169 # --------------------- 170 171 resource "aws_iam_role" "default" { 172 name = var.service_name 173 provider = aws.virginia 174 description = "IAM Role for ${var.service_name}" 175 assume_role_policy = file("${var.service_name}-role.json") 176 } 177 178 resource "aws_iam_policy" "default" { 179 name = var.service_name 180 provider = aws.virginia 181 description = "IAM Policy for ${var.service_name}" 182 policy = file("${var.service_name}-policy.json") 183 } 184 185 resource "aws_iam_role_policy_attachment" "default" { 186 role = aws_iam_role.default.name 187 provider = aws.virginia 188 policy_arn = aws_iam_policy.default.arn 189 } 190 191 resource "aws_lambda_permission" "default" { 192 count = length(aws_lambda_function.default) 193 statement_id = "AllowExecutionFromSNS" 194 action = "lambda:InvokeFunction" 195 provider = aws.virginia 196 # function_name = aws_lambda_function.default.function_name 197 function_name = "${aws_lambda_function.default[count.index].function_name}" 198 principal = "sns.amazonaws.com" 199 source_arn = aws_sns_topic.topic.arn 200 }