🗂
Lambda実行失敗時の送信先にS3を指定する
Lambda実行に失敗した場合、ペイロードデータをS3に保存することができます。
設定をしようとしたら少しハマったのでメモを残しておきます。
情報は2025/02/14時点のものです。
送信先にはS3バケットのパスは指定できない
S3バケットのARNを指定は出来ますが、バケットのパスまでは指定できません。
つまり my-lambda-failure-logs
というバケットがあった場合、 my-lambda-failure-logs/service-a
のような指定ができないということです。
パスまで指定して保存しようとすると、
The function execution role does not have permissions to call ListBucket on S3
というエラーがでます。
ドキュメントの権限情報が間違っている
注:2025/02/14時点
ドキュメントを見ると、以下の権限が書かれています。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "S3BucketResourceAccountWrite",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::*/*",
"Condition": {
"StringEquals": {
"s3:ResourceAccount": "111122223333"
}
}
}
]
}
しかし正確には以下の権限が必要です。(ListBucketの権限が間違っている)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "S3BucketResourceAccountWrite",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::*",
"Condition": {
"StringEquals": {
"s3:ResourceAccount": "111122223333"
}
}
},
{
"Sid": "S3BucketResourceAccountWrite",
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": "arn:aws:s3:::*/*",
"Condition": {
"StringEquals": {
"s3:ResourceAccount": "111122223333"
}
}
}
]
}
送信先をS3にした場合、「必要なアクセス許可を追加」を有効化しても実行ロールへ必要な権限が付与されない
注:2025/02/14時点
「必要なアクセス許可を追加」を有効化した場合、送信先タイプとして "SNSトピック"、"SQSキュー"、"Lambda関数" などを指定した場合には、実行ロールへ必要な権限が付与されるが、
送信先タイプに "S3バケット" を指定した場合には、現時点では対応していない。(サポートに確認済み)
Discussion