2016-03-09 23 views
15

5分ごとにAWSラムダ関数を実行したいと思います。 AWS管理コンソールでは、これはラムダ関数の[イベントソース]タブで簡単にセットアップできますが、Terraformでどのように設定するのですか?terraformを使用して、スケジュールされたイベントソースによってトリガーされたラムダ関数を設定します

an aws_lambda_event_source_mapping resourceを使用しようとしましたが、the API it usesはKinesisとDynamoDBのイベントのみをサポートしています。スケジュールされたイベントソースでそれを使用しようとすると、作成がタイムアウトします。

答えて

28

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}" 
} 
+0

これに関するトラブルシューティングのヒントコンソールでクラウドウォッチのイベントルールが正しいように見え、ラムダコンソールではそれがトリガーとしてリストされています。タイマーが起動しているようですが、呼び出しが成功せず、クラウドウォッチログで呼び出されたラムダの証拠は表示されません。クラウドイベントのタイマー自体のログはありますか? –

1

、私は以下を参照してくださいすることができます

enter image description here

それがルール状態が「有効」されたと言うにもかかわらず、私はまだ有効にする必要がありますそれ自身を引き起こす。なぜTerraformがこれをやっていないのか分かりません。

関連する問題