LoginSignup
1
1

More than 1 year has passed since last update.

【AWS】Lambdaのスロットリング時の挙動確認

Posted at

やりたいこと

  • S3のファイルPUTをトリガーとしたLambdaでスロットリングエラーが発生した時の挙動の確認 (スロットリングエラーが発生したときのトリガーイベントが消失するのか…)

Summary

  • Lambdaのスロットリングが発生してもS3 イベントは消失せず、一定間隔でリトライされる。(リトライ間隔は徐々に伸び、最大5分)
  • リトライされる期間はイベントの最大有効時間の設定で調整(公式開発者ガイドに記載)

前提

検証手順

  1. Lambdaソースコードの修正
  2. Lambda同時実行数、タイムアウト期間の設定
  3. 動作確認

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に設定
    スクリーンショット 2021-08-01 000243.png

  • タイムアウト期間: Lambdaの設定>基本設定でタイムアウト=5分に設定

スクリーンショット 2021-07-31 225936.png

3. 動作確認

  • ファイルを10個用意し、S3バケットに同時にアップロードする。
    スクリーンショット 2021-08-01 054027.png

  • Copiedバケットにすべてのファイルがコピーされていることを確認

    • 概ねリトライ間隔に比例して、コピーされている スクリーンショット 2021-08-01 100304.png
  • Cloudwatch Metrixよりスロットリングが発生することを確認

    • 投入時に高頻度でスロットリングが発生、リトライ時に処理されることで徐々にスロットリングの値が低下 スクリーンショット 2021-08-01 100458.png

参考

(クラメソさんの記事はやってる最中に見つけて、ほぼやりたいことやってくれてました…ありがとうございます!)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1