CloudWatchEventsからLambdaを呼び出す汎用トリガー

2019.09.11

はじめに

瀬田@大阪オフィスです。最近、IAMの泥濘で溺れています。

概要

CloudWatchEventsから呼び出されるLambdaは、CloudWatchEventsのRuleを指定して呼び出し権限を付与する必要があります。ひとつのルールから呼び出すだけであれば問題ないのですが、Lambdaを呼び出すRuleが毎回変わる場合、トリガが大量に増殖することになります。これを防ぐために汎用的な権限を付与する方法をご紹介します。

困った状態

マネージメントコンソールからトリガを追加してみるとRuleを固定でしか登録できないことがわかります。 このLambdaは呼び出されるRuleが毎回変わるので困ってしまいました。

解決

マネコンがダメならCLIということで、以下でトリガ登録してみます。source-arnでワイルドカード使えばいけるだろうという皮算用。

aws lambda add-permission \
       --function-name test \
       --statement-id test-events \
       --action 'lambda:InvokeFunction' \
       --principal events.amazonaws.com \
       --source-arn arn:aws:events:ap-northeast-1:[アカウント]:rule/*

マネコンで確認してみると「ルール * が見つかりませんでした。」というエラーになっています。 ちなみに、下段はRuleを固定で登録した場合です。

動作する確認すると、特に問題なく動作します。単純にマネコン側での表示の問題のようです。

最後に

挙動に怪しいところがないので問題なさそうです。 ただし、エラー表示されていることは事実であるため、利用は自己責任でおねがいます。