やりたいこと
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同時実行数、タイムアウト期間の設定
同時実行数: Lambdaの設定>同時実行で同時実行の予約=1に設定
タイムアウト期間: Lambdaの設定>基本設定でタイムアウト=5分に設定
3. 動作確認
ファイルを10個用意し、S3バケットに同時にアップロードする。
Copiedバケットにすべてのファイルがコピーされていることを確認
概ねリトライ間隔に比例して、コピーされている
Cloudwatch Metrixよりスロットリングが発生することを確認
投入時に高頻度でスロットリングが発生、リトライ時に処理されることで徐々にスロットリングの値が低下
参考
(クラメソさんの記事はやってる最中に見つけて、ほぼやりたいことやってくれてました…ありがとうございます!)
↧