Lambda 拡張機能の使用 - AWS Lambda

Lambda 拡張機能の使用

Lambda 拡張機能を使用して Lambda 関数を補強できます。例えば、Lambda 拡張機能を使用して、任意のモニタリングツール、オブザーバビリティツール、セキュリティツール、およびガバナンスツールに関数を統合できます。AWS Lambda パートナーが提供する幅広いツールセットから選択することも、独自の Lambda 拡張機能を作成することもできます。

Lambda は、外部拡張機能と内部拡張機能をサポートしています。外部拡張機能は、実行環境で独立したプロセスとして実行され、関数の呼び出しが完全に処理された後も引き続き実行されます。拡張機能は別々のプロセスとして実行されるため、関数とは異なる言語で記述できます。

内部拡張機能は、ランタイムプロセスの一部として実行されます。関数は、ラッパースクリプトまたは JAVA_TOOL_OPTIONS などのインプロセスメカニズムを使用して、内部拡張機能にアクセスします。詳細については、「ランタイム環境の変更」を参照してください。

Lambda コンソール、(AWS Command Line Interface) AWS CLI、または Infrastructure as Code (IAC) サービス、およびツール (AWS CloudFormation、AWS サーバーレスアプリケーションモデル (AWS SAM)、Terraform など) を使用して、関数に拡張機能を追加できます。

次の Lambda ランタイム は、外部拡張機能をサポートしています。

  • .NET Core 3.1 (C#/PowerShell) (dotnetcore3.1)

  • カスタムランタイム (provided)

  • Amazon Linux 2 (provided.al2)のカスタムランタイム

  • Java 11 (Corretto) (java11)

  • Java 8 (Corretto) (java8.al2)

  • Node.js 14.x (nodejs14.x)

  • Node.js 12.x (nodejs12.x)

  • Node.js 10.x (nodejs10.x)

  • Python 3.8 (python3.8)

  • Python 3.7 (python3.7)

  • Ruby 2.7 (ruby2.7)

  • Ruby 2.5 (ruby2.5)

料金は、拡張機能の実行時間 (1 ms 単位) に対して課金されます。拡張機能の料金の詳細については、AWS Lambda 料金表を参照してください。パートナー拡張機能の料金については、パートナーのウェブサイトを参照してください。独自の拡張機能をインストールする場合、料金は発生しません。

実行環境

Lambda は、実行環境で関数を呼び出します。これにより、安全で分離されたランタイム環境が提供されます。実行環境は、関数の実行に必要なリソースを管理し、関数のランタイムおよび拡張機能のライフサイクルサポートを提供します。

実行環境のライフサイクルには、次のフェーズが含まれています。

  • Init: このフェーズでは、Lambda は、設定されたリソースでの実行環境の作成またはフリーズ解除、関数とすべてのレイヤー用のコードのダウンロード、拡張機能の初期化、ランタイムの初期化を行い、関数の初期化コード (メインハンドラー外のコード) を実行します。Init フェーズは、最初の呼び出し中に発生するか、プロビジョニングされた同時実行を有効にしている場合は、関数呼び出しの前に発生します。

    Init フェーズは、Extension initRuntime initFunction init の 3 つのサブフェーズに分割されます。これらのサブフェーズにより、関数コードが実行される前に、すべての拡張機能とランタイムでセットアップタスクが完了されます。

  • Invoke: このフェーズでは、Lambda は関数ハンドラーを呼び出します。関数の実行が完了すると、Lambda は別の関数呼び出しを処理する準備をします。

  • Shutdown: このフェーズは、Lambda 関数が一定期間呼び出しを受け取らなかった場合に、トリガーされます。Shutdown フェーズでは、Lambda はランタイムを終了し、拡張機能に警告してクリーンに停止させ、その後に環境を削除します。Lambda は、各拡張機能に Shutdown イベントを送信し、環境が間もなくシャットダウンされることを拡張機能に通知します。

この Init フェーズ中に、Lambda は実行環境の /opt ディレクトリに拡張機能を含むレイヤーを抽出します。Lambda は /opt/extensions/ ディレクトリ内の拡張機能を探し、各ファイルを拡張機能を起動するための実行可能なブートストラップとして解釈します。次に、すべての拡張機能を並行して起動します。

パフォーマンスとリソースへの影響

関数の拡張機能のサイズは、デプロイパッケージのサイズ制限に対してカウントされます。アーカイブの Zip ファイルについては、関数とすべての拡張機能を解凍した後の合計サイズは、解凍後のデプロイパッケージのサイズ制限 250 MB を超えることはできません。

拡張機能は、CPU、メモリ、ストレージなどの関数リソースを共有するため、関数のパフォーマンスに影響を与える可能性があります。例えば、拡張機能で計算負荷の高いオペレーションを実行する場合、関数の実行時間が長くなることがあります。

各拡張機能は、Lambda が関数を呼び出す前に初期化を完了する必要があります。したがって、初期化にかなり時間がかかる拡張機能は、関数呼び出しのレイテンシーを増やす可能性があります。

関数の実行後に拡張機能によって発生する追加時間を測定するには、PostRuntimeExecutionDuration 関数メトリクスを使用できます。使用されるメモリの増加を測定するには、MaxMemoryUsed メトリクスを使用できます。特定の拡張機能の影響を理解するために、異なるバージョンの関数を並行して実行できます。

アクセス許可

拡張機能は、関数と同じリソースにアクセスできます。拡張機能は関数と同じ環境内で実行されるため、アクセス許可は関数と拡張機能の間で共有されます。

アーカイブの Zip ファイルについては、AWS CloudFormation テンプレートを作成して、複数の関数に AWS Identity and Access Management (IAM) アクセス許可 — を含む、同じ拡張機能の設定 — をアタッチする作業を簡略化できます。

拡張子の設定 (.zip ファイルアーカイブ)

関数にLambda レイヤーとして関数に拡張機能を追加するレイヤーを使用すると、組織全体または Lambda デベロッパーのコミュニティ全体で拡張機能を共有できます。1 つ以上の拡張機能をレイヤーに追加できます。1 つの関数に最大 10 個の拡張機能を登録できます。

レイヤーの場合と同じメソッドを使用して、関数に拡張機能を追加します。詳細については、「レイヤーを使用するようにするための関数の設定」を参照してください。

関数に拡張機能を追加する (コンソール)

  1. Lambda コンソールの [Functions (関数)] ページを開きます。

  2. 関数を選択します。

  3. 選択されていない場合は、[Code (コード)] タブを選択します。

  4. [レイヤー] で、[Edit (編集)] を選択します。

  5. [Choose a layer] の [Specify an ARN] を選択します。

  6. [Specify an ARN] に、拡張機能レイヤーの Amazon リソースネーム (ARN) を入力します。

  7. [Add] (追加) をクリックします。

コンテナイメージでの拡張機能の使用

コンテナイメージに拡張機能を追加できます 。ENTRYPOINT コンテナイメージ設定では、関数のメインプロセスを指定します。Dockerfile で ENTRYPOINT 設定を行うか、関数設定のオーバーライドとして設定します。

ひとつのコンテナ内で複数のプロセスを実行できます。Lambda は、メインプロセスと追加のプロセスのライフサイクルを管理します。Lambda は Extensions API を使用して、拡張機能のライフサイクルを管理します。

外部拡張機能の追加の例

外部拡張機能は、Lambda 関数とは別のプロセスで実行されます。Lambda は、/opt/extensions/ ディレクトリにある拡張機能のプロセスを開始します。Lambda は、Extensions API を使用して拡張機能のライフサイクルを管理します。関数が完了するまで実行された後、Lambda はそれぞれの外部拡張機能に Shutdown イベントを送信します。

例 Python ベースイメージに外部拡張機能を追加する

FROM public.ecr.aws/lambda/python:3.8 # Copy and install the app COPY /app /app WORKDIR /app RUN pip install -r requirements.txt # Add an extension from the local directory into /opt ADD my-extension.zip /opt CMD python ./index.py

次のステップ

拡張機能の詳細を参照するには、次のリソースをお勧めします。

  • 基本的な使用例については、AWS コンピューティングブログの「Building Extensions for AWS Lambda」を参照してください。

  • AWS Lambda パートナーが提供する拡張機能の詳細については、AWS コンピューティングブログの「Introducing AWS Lambda Extensions」を参照してください。

  • 利用可能な拡張機能とラッパースクリプトの例については、AWS サンプル GitHub リポジトリの「AWS Lambda Extensions」を参照してください。