やりたいこと
- S3のファイルPUTをトリガーとしたLambdaでスロットリングエラーが発生した時の挙動の確認
(スロットリングエラーが発生したときのトリガーイベントが消失するのか…)
Summary
- Lambdaのスロットリングが発生してもS3 イベントは消失せず、一定間隔でリトライされる。(リトライ間隔は徐々に伸び、最大5分)
- リトライされる期間はイベントの最大有効時間の設定で調整(公式開発者ガイドに記載)
前提
検証手順
- Lambdaソースコードの修正
- Lambda同時実行数、タイムアウト期間の設定
- 動作確認
1. Lambdaソースコードの修正
- Lambda内に70秒の待機を追加し、スロットリングが発生しやすくする。
index.js
'use strict';
const aws = require('aws-sdk');
const s3 = new aws.S3();
exports.handler = async (event) => {
//S3から送られたトリガー内容を確認_
console.log(event);
const bucket = event['Records'][0]['s3']['bucket']['name'];
const key = event['Records'][0]['s3']['object']['key'];
console.log(bucket);
console.log(key);
//S3.copyObjectを実施(params内Bucket,CopySource, Keyは必須)
const params = {
Bucket: "copied-bucket-210731",
CopySource: bucket+'/'+key,
Key: key
};
//70秒待機
const sleep = () => new Promise(resolve => {
setTimeout(() => {
resolve();
}, 70000);
});
await sleep();
const result = await s3.copyObject(params).promise();
console.log(result);
};
2. Lambda同時実行数、タイムアウト期間の設定
3. 動作確認
-
Copiedバケットにすべてのファイルがコピーされていることを確認
-
Cloudwatch Metrixよりスロットリングが発生することを確認
参考
(クラメソさんの記事はやってる最中に見つけて、ほぼやりたいことやってくれてました…ありがとうございます!)