Используйте terraform для настройки лямбда-функции, вызванной запланированным источником события

Я хотел бы запускать функцию лямбда AWS каждые пять минут. В консоли управления AWS это легко настроить в соответствии с вкладкой "Источники событий" лямбда-функции, но как настроить ее с помощью Terraform?

Я попытался использовать ресурс aws_lambda_event_source_mapping, но оказывается, что API, который он использует поддерживает только события от Kinesis и DynamoDB. Когда я пытаюсь использовать его с запланированным источником событий, время создания.

Ответ 1

Вы можете использовать ресурс aws_cloudwatch_event_target для привязки источника запланированного события (правила события) к вашей лямбда-функции. Вы должны предоставить ему разрешение для вызова вашей лямбда-функции; вы можете использовать ресурс aws_lambda_permission для этого.

Пример:

resource "aws_lambda_function" "check_foo" {
    filename = "check_foo.zip"
    function_name = "checkFoo"
    role = "arn:aws:iam::424242:role/something"
    handler = "index.handler"
}

resource "aws_cloudwatch_event_rule" "every_five_minutes" {
    name = "every-five-minutes"
    description = "Fires every five minutes"
    schedule_expression = "rate(5 minutes)"
}

resource "aws_cloudwatch_event_target" "check_foo_every_five_minutes" {
    rule = "${aws_cloudwatch_event_rule.every_five_minutes.name}"
    target_id = "check_foo"
    arn = "${aws_lambda_function.check_foo.arn}"
}

resource "aws_lambda_permission" "allow_cloudwatch_to_call_check_foo" {
    statement_id = "AllowExecutionFromCloudWatch"
    action = "lambda:InvokeFunction"
    function_name = "${aws_lambda_function.check_foo.function_name}"
    principal = "events.amazonaws.com"
    source_arn = "${aws_cloudwatch_event_rule.every_five_minutes.arn}"
}

Ответ 2

В консоли я вижу следующее:

введите описание изображения здесь

Несмотря на то, что он говорит, что состояние правила "ENABLED", мне все равно нужно включить сам триггер. Не уверен, почему Terraform не делает этого сам.