Serverless Framework を使用して Lambda コールド スタートを防ぐ方法は?


AWS Lambda コールド スタートとは何ですか?



ラムダ関数を呼び出すたびに、最近呼び出していない場合、すぐには開始されません.コードの実行を開始するまでに時間がかかります.これは、AWS がラムダ関数内のコードを実行するコンテナをシャットダウンするために発生します.しばらくの間呼び出されないため、ラムダ関数内のコードを実行する前に新しいコンテナーを起動するのにかかる時間は、コールド スタートと呼ばれます.または、ラムダ関数内で実際のコード実行が開始されるまでの遅延であると言えます.

コールドスタートにどう対処するか?



AWS サーバーレス フレームワークを使用している場合、serverless-plugin-warmup というプラグインがあります.これは、選択したラムダ関数をポーリングするサード パーティの NPM (ノード パッケージ モジュール) です.このようにして、ラムダ関数はウォームな状態を保ち、AWS はコンテナからドロップオフしません.コードを実行する場所.

プラグインの設定



ラムダ関数用にこのウォームアップ プラグインをセットアップするために必要な各ステップを見ていきましょう.

インストール




npm install --save-dev serverless-plugin-warmup


最初に、このプラグインをプロジェクトのルート ディレクトリにインストールします.このパッケージを開発依存関係として追加します.

serverless.yml ファイルにプラグインをインポートする




plugins:
  - serverless-plugin-warmup


ウォームアップ プラグイン構成の追加




custom:
  warmup:
    default:
      enabled: true
      folderName: '.warmup'
      memorySize: 256
      name: warmer-default
      events:
        - schedule: rate(2 minutes)
      package:
        individually: true
        patterns:
          - '!../**'
          - '!../../**'
          - ./**
      timeout: 20
      concurrency: 1

custom - serverless.yml ファイルの custom セクションですべてのウォーマーを定義する必要があります.ここでは、デフォルトのウォーマー構成を設定しています.folderName - これは、AWS にデプロイするための Warmer 一時ファイルが保存されるフォルダーの名前です.memorySize - Warmer 関数に与えたいメモリサイズ.name - 暖かいラムダ関数の名前.events - これは、ラムダ関数をいつ呼び出すか、どの間隔で呼び出すかを決定する設定であり、より暖かいラムダを通してそれらをウォームにするため、ここでは 2 分ごとにスケジュールしています.package - これは単にパッケージを除外して含めるためのものです.timeout - ウォーム ラムダが他の Lambda 関数を呼び出してウォームにするたびに、これは関数を終了する前に待機する秒数です.concurrency - ウォームアップのためにラムダ関数に対して行われた並列呼び出しの数.

ラムダ関数のウォームアップを有効にする



これで、ラムダ関数のウォームアップ設定を有効にする準備ができました.これを行う方法は次のとおりです.

warmup:
      default:
        enabled: true


このセクションを、ウォーマーを使用してウォームしたい任意のラムダ関数に追加するだけです.

ラムダ関数を更新してウォームアップ コールを処理する



次に、ウォームアップ プラグインを使用してウォームアップしているラムダ関数を更新する必要があります.

exports.identifyImg = async (event, callback) => {
  if (event.source === 'serverless-plugin-warmup') {
    console.log('WarmUP - Lambda is warm!')
    return 'Lambda is warm!';
  }
//rest of the code


ここでは、このラムダがウォームアップ ラムダによって呼び出されたかどうかを確認しているだけです.その場合は、そこから戻ってラムダの実行を終了しています.

取り除く



これは、ラムダ コールド スタートに対処または防止する方法の 1 つですが、コードを最適化する、ラムダ関数内で http/https 呼び出しを回避する、暫定的な同時実行を使用するなど、他にも多くの方法があります. .
このウォームアップ プラグイン Serverless WarmUp Plugin の公式ドキュメントは次のとおりです.

詳細をご覧ください:

Learn about AWS Artifact

AWS Textract and Step Functions

AWS Cognito Pricing, Features

Understand Math functions in Javascript