Lambdaトリガーのコンソール表示の制限事項
このページについて
Lambdaのトリガーのコンソール表示について確認した際、Lambdaコンソールの制限事項があったためメモしておきます。
先に結論
Lambdaのコンソール画面でのトリガー情報は、 リソースベースのポリシー情報 を元にトリガーを表示しています。
Lambdaのリソースベースのポリシーで ワイルドカードを使用してロググループを記述している場合、対象を一意に把握することができないためトリガーが正しく表示されません。
と言っても、どこの設定かよくわからないかもしれませんので、設定の流れも書いておきます。
CloudWatch Logs → Lambdaの設定
CloudWatch Logsのサブスクリプションフィルターを使って、Lambdaを呼び出す設定を入れます。
- 対象のロググループのサブスクリプションフィルターからLambdaサブスクリプションフィルターを作成します。
- 対象のLambdaを選択して、トリガーしたいログのパターンを設定します。
ちなみに、Lambdaトリガー側から設定を入れていくことも可能です。(どちらかの設定だけでOK)
CloudWatch Logsコンソールでの表示
Lambdaコンソールでの表示
Lambdaのリソースベースのポリシー
"AWS:SourceArn": "arn:aws:logs:ap-northeast-1:XXXXXXXXXX:log-group:is55-test-log:*"
で対象のロググループに絞られています。
{
"Version": "2012-10-17",
"Id": "default",
"Statement": [
{
"Sid": "InvokePermissionsForCWL11cf57e282abebcbc5c3a7c21794fa8b",
"Effect": "Allow",
"Principal": {
"Service": "logs.amazonaws.com"
},
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:ap-northeast-1:XXXXXXXXXX:function:is55-function",
"Condition": {
"StringEquals": {
"AWS:SourceAccount": "XXXXXXXXXX"
},
"ArnLike": {
"AWS:SourceArn": "arn:aws:logs:ap-northeast-1:XXXXXXXXXX:log-group:is55-test-log:*"
}
}
}
]
}
Lambdaトリガーの表示がされない場合
CloudWatch Logsサブスクリプションフィルターの設定自体は正しく設定できていても、コンソールの表示がLambdaとCloudWatch Logsで違いがあるケースがありました。
CloudWatch Logsコンソールでの表示
先ほどと変わらず。
Lambdaコンソールでの表示
しかし、Lambdaのトリガー設定には表示されていません。
Lambdaのリソースベースのポリシー
この時のポリシーは以下のように、 ロググループを特定せずワイルドカード指定 となっていました。
"AWS:SourceArn": "arn:aws:logs:ap-northeast-1:XXXXXXXXXX:log-group:*"
{
"Version": "2012-10-17",
"Id": "default",
"Statement": [
{
"Sid": "InvokePermissionsForCWL11cf57e282abebcbc5c3a7c21794fa8b",
"Effect": "Allow",
"Principal": {
"Service": "logs.amazonaws.com"
},
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:ap-northeast-1:XXXXXXXXXX:function:is55-function",
"Condition": {
"StringEquals": {
"AWS:SourceAccount": "XXXXXXXXXX"
},
"ArnLike": {
"AWS:SourceArn": "arn:aws:logs:ap-northeast-1:XXXXXXXXXX:log-group:*"
}
}
}
]
}
結論(再掲)
Lambdaのコンソール画面でのトリガー情報は、 リソースベースのポリシー情報 を元にトリガーを表示しています。
Lambdaのリソースベースのポリシーで ワイルドカードを使用してロググループを記述している場合、対象を一意に把握することができないためトリガーが正しく表示されません。
対策
単純に、ワイルドカードを使わずにロググループ名全体を記述することで、Lambdaコンソールでトリガーを正しく表示させることが可能となります。
しかし、Lambda関数が多くのロググループによって呼び出される場合、ポリシーに各ロググループのためのステートメントを記述されると、ポリシーのサイズが増加し、ポリシーサイズの上限に抵触する可能性があります。
その懸念がある場合、ポリシーではそのままワイルドカード使い複数のロググループをまとめて許可し、実際にトリガーとなっているロググループの情報はCloudWatch Logsコンソール側で確認することになります。
Discussion