落とし穴に立て札を立てるが如く

ハマりどころの解決が少しでも早くなることを願って書いていきます

TerraformでつくったAWS LambdaにEventBridgeのトリガーが有効にならない時は

こちらの記事はcloud.config tech blogにもマルチポストします。

シンプルな答え

aws_lambda_permission リソースを作成する必要があります。

resource "aws_lambda_permission" "this" {
  action        = "lambda:InvokeFunction"
  function_name = <作成したLambdaのリソース名>
  principal     = "events.amazonaws.com"
  source_arn    = <作成したaws_cloudwatch_event_ruleリソースのARN>
}

原因

TerraformでLambdaにEventBridgeからのトリガーを作成する際には、EventBridgeからLambdaにアクセスさせる権限を別途付与する必要があります。
この権限の付与はAWSコンソール上からトリガーを作成する際には自動で行われるのですが、AWS CLISDK、CloudFormation等の仕組みを使用してトリガーを作成する場合は手動で実行するする必要があるようです。
Terraformでもこれと同様で手動で権限を付与しなければEventBridgeからLambdaにアクセスできなくてトリガーが動作しないということなのですね。
EventBridgeのトリガー作成画面にも以下のような注意書きがあります。

注: EventBridge コンソールを使用する場合、EventBridge は選択したターゲットについて適切な許可を自動的に設定します。AWS CLI、SDK、または CloudFormation を使用している場合は、適切な許可を設定する必要があります。  

TerraformのLambdaのドキュメントにもNoteがあります。

To give an external source (like an EventBridge Rule, SNS, or S3) permission to access the Lambda function, use the aws_lambda_permission resource

症状

aws_lambda_permissionなしでもLambdaとEventBridge、そしてそのトリガー自体はエラーも起こさずに作成できてしまいます。
ただし、この状態ではEventBridgeで設定したトリガーは有効になっていません。
例えばcronを用いた定期実行を設定していても、そのタイミングでLambdaの実行がトリガーされることはありません。

コンソールからLambdaを確認すると、EventBridgeのトリガーが設定されていないことが確認できます。

一方でEventBridgeの方ではトリガーが作成されているのが確認でき、対象としてLambdaが設定されているように見えてしまうのですが、実際にはトリガーが設定されておらず動作もしません。
紛らわしいですよね~

解決策

ということで、TerraformでLambdaにEventBridgeからのトリガーを作成する際には、EventBridgeからLambdaにアクセスさせる権限を別途付与するためにaws_lambda_permissionリソースを作成します。
プレースホルダーのLambdaリソース名とEventBridgeのARNはそれぞれのリソースのものを設定してください。
Terraformの再apply後、コンソールのLambdaの概要画面でトリガーが設定されていれば成功です!

resource "aws_lambda_permission" "this" {
  action        = "lambda:InvokeFunction"
  function_name = <作成したLambdaのリソース名>
  principal     = "events.amazonaws.com"
  source_arn    = <作成したaws_cloudwatch_event_ruleリソースのARN>
}

おわりに

コンソールで行ったことをTerraformに書き落とせばそのまま動くと考えていたら罠がありました。
コンソールの設定画面やTerraformのLambdaのドキュメントには注意書きがありますが、引っかかるまでこの仕様のこととは気づきませんでした。
おそらく同じことをしようとすれば100人のうち120人くらいが引っかかるかと思います、そんな方の助けになれば幸いです~

参考