Lambda 関数が CloudWatch Events ルールでトリガーされなかったのはなぜですか?

最終更新日: 2020 年 5 月 11 日

AWS コマンドラインインターフェイス (AWS CLI)、API、または AWS CloudFormation で作成した Amazon CloudWatch Events ルールを適用しました。しかし、ターゲットの AWS Lambda 関数が呼び出されません。同じ CloudWatch Events ルールを AWS マネジメントコンソールで作成または更新すると、正常に動作します。この問題を解決するには、どうすればよいですか?

簡単な説明

AWS マネジメントコンソールで Lambda 関数をターゲットとして CloudWatch Events ルールを作成すると、適切なアクセス許可が関数のリソースベースのポリシーに自動で追加されます。同じルールを AWS CLI、API、または AWS CloudFormation で作成する場合は、Lambda 関数を呼び出すために、events.amazonaws.com に対するアクセス許可をリソースベースのポリシーに追加する必要があります。

解決方法

CloudWatch Events ルールの 「Invocations」メトリクスと「FailedInvocations」メトリクスを確認する

AWS/Events 名前空間で、CloudWatch Events ルールの 「Invocations」メトリクスと「FailedInvocations」メトリクスを確認します。ある 1 つのデータポイントが両方のメトリクスに存在する場合、CloudWatch Events ルールがターゲットを呼び出そうとしたものの、その呼び出しが失敗したということです。「FailedInvocations」メトリクスには再試行された呼び出しは含まれないため、アクセス許可の問題またはターゲット上の設定ミスを修正する必要があります。

Lambda 関数のリソースベースのポリシーに CloudWatch Events のために適切なアクセス許可が追加されたかどうかを確認する

AWS Lambda コンソールを開いて、ターゲットとする関数を選択します。[アクセス許可] を選択して、適切なアクセス許可が設定されていることを確認します。

または、GetPolicy コマンドを使用して関数のリソースベースのポリシーを確認します。コマンドの出力を参照して、ポリシー内に信頼されたエンティティとして events.amazonaws.com が含まれているかどうかを確認します。events.amazonaws.com が見つからない場合、AddPermission コマンドを使用して該当するアクセス許可を追加します。events.amazonaws.com にプリンシパルを設定します。その例を次に示します。

aws lambda add-permission --function-name MyFunction --statement-id MyId --action 'lambda:InvokeFunction' --principal events.amazonaws.com --source-arn arn:aws:events:us-east-1:123456789012:rule/MyRule

注意: 関数と Amazon リソースネーム (ARN) の値を、対応する関数と ARN の値に置き換えてください。


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合