LambdaのトリガーとしてCloudWatch Logs のロググループを設定していて、トリガー設定画面で以下のようなエラーが表示される場合の対処方法
原因としては、トリガーに設定しているロググループを先に削除してしまった場合にLambda側のポリシーの設定が残っている場合に出るっぽい。
AWSのコンソールからは消せないっぽいので aws cli から以下のようにして削除を行う。
1.Lambdaのポリシーを見てみる(見にくいので整形済み)
$ aws lambda get-policy --function-name sample-lambda { "Policy": { "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "InvokePermissionsForCWL38e235c79664057f4db2ba40630a04ad", "Effect": "Allow", "Principal": { "Service": "logs.ap-northeast-1.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:ap-northeast-1:xxxxxxxx:function:sample-lambda", "Condition": { "StringEquals": { "AWS:SourceAccount": "xxxxxxxx" }, "ArnLike": { "AWS:SourceArn": "arn:aws:logs:ap-northeast-1:xxxxxxxx:log-group:/aws/lambda/hoge-lambda:*" } } } ] } }
2.削除してしまったロググループのポリシーを削除 1で取得したポリシーの中で削除済みのものが特定できたら以下のコマンドで削除する --statement-id には Sid を指定する。
$ aws lambda remove-permission --function-name sample-lambda --statement-id "InvokePermissionsForCWL38e235c79664057f4db2ba40630a04ad"
3.削除後、再度確認してみる 今回の sample-lambda は他にポリシー設定がないのでエラーが出ているが、ポリシーを複数つけている場合はエラーは出ない。
$ aws lambda get-policy --function-name sample-lambda An error occurred (ResourceNotFoundException) when calling the GetPolicy operation: The resource you requested does not exist.
上記手順後もう一度トリガー設定画面を見てみる、すでに開いている場合は画面を更新する。
無事エラーが消えた。