Я хочу, чтобы моя лямбда-функция, основанная на образе докера в ECR, запускалась запланированным событием cloudwatch.
The problem is that I can not attach the function_name myFunction from the module "lambda_function_container_image" to the aws_lambda_permission.
Это работает, когда у меня есть обычная лямбда-функция, но не с лямбда-функцией из изображения URI:
resource "aws_lambda_function" "myFunction" {
function_name = "myFunction"
role = aws_iam_role.lambda_execution_role.arn
handler = "exports.handler"
runtime = "python3.8"
}
У меня есть следующий код:
Событие AWS CloudWatch:
resource "aws_cloudwatch_event_rule" "every_five_minutes" {
name = "every-five-minutes"
description = "Fires every five minutes"
schedule_expression = "rate(5 minutes)"
}
Лямбда-функция на основе образа контейнера:
module "lambda_function_container_image" {
source = "terraform-aws-modules/lambda/aws"
function_name = "myFunction"
description = "awesome function"
create_package = false
image_uri = "${data.aws_caller_identity.current.account_id}.dkr.ecr${var.aws_region}.amazonaws.com/container_name"
package_type = "Image"
}
Лямбда-разрешение:
resource "aws_lambda_permission" "allow_cloudwatch_to_call_myFunction" {
statement_id = "AllowExecutionFromCloudWatch"
action = "lambda:InvokeFunction"
function_name = aws_lambda_function.myFunction.function_name
principal = "events.amazonaws.com"
source_arn = aws_cloudwatch_event_rule.every_five_minutes.arn
}
Я получаю следующую ошибку с текущим aws_lambda_permission:
Сообщение об ошибке:
Error: Reference to undeclared resource
-> points to function_name in aws_lambda_permission
Я тоже так думал, но не работает. Ошибка: Ссылка на необъявленный ресурс.
function_name = lambda_function_container_image.myFunction
также пробовалfunction_name = lambda_function_container_image.myFunction.function_name
. И когда я пытаюсьlambda_function_container_image.lambda_function_name
, я получаю *Ссылка на необъявленный ресурс. Я вроде бы пишу, но не работаю как-то.@Schwenk, не могли бы вы попробовать
module.lambda_function_container_image.lambda_function_name
.Работает! В этом разница, как использовать имя функции из модуля или ресурса.
@Schwenk Я обновил свой ответ. Пожалуйста, примите это.