AWS Lambda の機能 - AWS Lambda

AWS Lambda の機能

AWS Lambda には、関数の管理と呼び出しを行うためのマネジメントコンソールと API が用意されています。また、必要に応じて言語間やフレームワーク間の切り替えを簡単にできるように、標準の機能セットをサポートするランタイムが提供されています。関数に加えて、バージョンやエイリアス、レイヤー、カスタムランタイムを作成することもできます。

プログラミングモデル

オーサリングの詳細はランタイムによって異なりますが、すべてのランタイムには、コードとランタイムコードとのインターフェイスを定義する共通のプログラミングモデルがあります。関数の設定でハンドラーを定義することにより、実行するメソッドをランタイムに伝えると、ランタイムはそのメソッドを実行します。ランタイムは、呼び出しイベント、および関数名やリクエスト ID などのコンテキストを含むオブジェクトをハンドラーに渡します。

ハンドラーが最初のイベントの処理を終了すると、ランタイムは別のイベントを送信します。関数のクラスはメモリ内にとどまるため、初期化コードにおいてハンドラーメソッドの外部で宣言されたクライアントおよび変数は再利用できます。後続のイベントの処理時間を短縮するには、初期化中に AWS SDK クライアントなどの再利用可能なリソースを作成します。初期化されると、関数の各インスタンスは数千件のリクエストを処理できます。

初期化は、関数のインスタンスによって処理される最初の呼び出しの期間の一部として請求されます。X-Ray トレースが有効な場合、ランタイムは初期化と実行のために別個のサブセグメントを記録します。


        初期化サブセグメントと呼び出しサブセグメントを含む X-Ray トレース。

また、関数は、/tmp ディレクトリ内のローカルストレージにもアクセスできます。リクエストを処理している関数のインスタンスは、リサイクルされるまで数時間アクティブのままになります。

ランタイムは、関数からのログ出力をキャプチャし、それを Amazon CloudWatch Logs に送信します。ランタイムは、関数の出力をログに記録するだけでなく、実行の開始時と終了時にエントリも記録します。これには、リクエスト ID、請求期間、初期化期間、およびその他の詳細を含むレポートログが含まれます。関数がエラーをスローした場合、ランタイムはそのエラーを呼び出し元に返します。

注記

ログ記録は、CloudWatch Logs の制限で規定されています。ログデータは、スロットリングが原因で失われることがあります。また、場合によっては、関数のインスタンス停止時に失われることがあります。

プログラミング言語別のプログラミングモデルの実践的な入門ガイドについては、以下の章を参照してください。

Lambda は、関数をスケーリングし、需要が増えると追加のインスタンスを実行して、需要が減るとインスタンスを停止します。特に明記されていない限り、受信リクエストは、順不同または同時に処理されます。アプリケーションの状態は他のサービスに保存します。関数のインスタンスが長く存続するとは想定しないでください。ローカルストレージとクラスレベルのオブジェクトを使用することでパフォーマンスは向上しますが、デプロイパッケージのサイズと実行環境に転送するデータの量は最小限に抑えてください。

デプロイパッケージ

関数のコードは、スクリプトまたはコンパイルされたプログラムとそれらの依存関係で構成されます。Lambda コンソールまたはツールキットで関数を作成すると、クライアントはデプロイパッケージと呼ばれるコードの ZIP アーカイブを作成します。次に、クライアントはパッケージを Lambda サービスに送信します。Lambda API、コマンドラインツール、または SDK を使用して関数を管理する場合は、デプロイパッケージを作成します。また、コンパイルされた言語のデプロイメントパッケージを手動で作成し、関数に依存関係を追加する必要があります。

言語固有の手順については、以下のトピックを参照してください。

レイヤー

Lambda レイヤーは、ライブラリ、カスタムランタイム、その他の関数の依存関係の配信メカニズムです。レイヤーを使用すると、変更されることのないコードやリソースとは別に、開発中の関数コードを管理できます。作成したレイヤー、AWS が提供するレイヤー、または他の AWS のお客様のレイヤーを使用するように関数を設定できます。

詳細については、「AWS Lambda レイヤー」を参照してください。

スケーリング

Lambda は、コードを実行するインフラストラクチャを管理し、受信リクエストに応じて自動的にスケーリングします。関数の呼び出しが速くて関数の単一のインスタンスではイベントを処理できない場合、Lambda は追加のインスタンスを実行することでスケールアップします。トラフィックが低下すると、非アクティブなインスタンスはフリーズまたは停止されます。支払いは、関数でイベントを初期化または処理している時間に対してのみ発生します。


        関数は、開いているリクエストの数に基づいて自動的にスケールします。

詳細については、「AWS Lambda 関数スケーリング」を参照してください。

同時実行制御

同時実行数の設定を使用して、本番稼働用アプリケーションの可用性と応答性を高めます。関数が過度の同時実行数を使用するのを防ぎ、アカウントの使用可能な同時実行数の一部を関数に予約するには、予約された同時実行数を使用します。同時実行数のリザーブは、使用可能な同時実行のプールをサブセットに分割します。同時実行数のリザーブがある関数は、専用プールからの同時実行のみを使用します。


        2 つの関数に割り当てられた予約済み同時実行数。

レイテンシーの変動なしに関数をスケーリングできるようにするには、プロビジョニングされた同時実行数を使用します。初期化に時間がかかる関数や、すべての呼び出しで非常に低いレイテンシーを必要とする関数の場合、プロビジョニング済み同時実行を使用すると、関数の複数のインスタンスを事前に初期化して常に実行しておくことができます。Lambda は Application Auto Scaling と統合されているため、使用率に基づくプロビジョニング済み同時実行数の自動スケーリングがサポートされます。


        Application Auto Scaling でのプロビジョニング済み同時実行数の自動スケーリング。

詳細については、「Lambda 関数の同時実行数の管理」を参照してください。

非同期呼び出し

関数を呼び出す際は、同期的に呼び出すか非同期的に呼び出すかを選択できます。同期呼び出しでは、イベントを処理する関数を待ってレスポンスを返します。非同期呼び出しでは、Lambda は処理のためにイベントをキューに入れ、すぐにレスポンスを返します。


        Lambda は、非同期呼び出しイベントを関数に送信する前にキューに入れます。

非同期呼び出しの場合、関数がエラーを返すか、またはスロットリングされると Lambda は再試行を処理します。この動作をカスタマイズするため、関数、バージョン、またはエイリアスのエラー処理設定を定義できます。また、処理に失敗したイベントをデッドレターキューに送信したり、任意の呼び出しのレコードを 送信先に送信したりするように Lambda を設定することもできます。

詳細については、「非同期呼び出し」を参照してください。

イベントソースマッピング

ストリームまたはキューから項目を処理するには、イベントソースマッピングを作成することができます。イベントソースマッピングは、Amazon SQS キュー、Amazon Kinesis ストリーム、または Amazon DynamoDB ストリームから項目を読み取り、バッチで関数に送信する Lambda のリソースです。関数が処理する各イベントには、数百または数千の項目を含めることができます。


        Kinesis ストリームからレコードを読み取るイベントソースマッピング。

イベントソースマッピングは、未処理項目のローカルキューを維持し、関数がエラーを返すかスロットリングされた場合に再試行を処理します。バッチ処理の動作とエラー処理をカスタマイズしたり、処理に失敗した項目のレコードを送信先に送信したりするように、イベントソースマッピングを設定できます。

詳細については、「AWS Lambda イベントソースマッピング」を参照してください。

送信先

送信先は、関数の呼び出しレコードを受け取る AWS リソースです。非同期呼び出しの場合、呼び出しレコードをキュー、トピック、関数、またはイベントバスに送信するように Lambda を設定できます。成功した呼び出しと処理に失敗したイベントに別々の送信先を設定できます。呼び出しレコードには、イベント、関数のレスポンス、レコードが送信された理由に関する詳細が含まれます。


        Lambda は、結果に応じて、呼び出しレコードをキューまたはイベントバスの送信先に送信します。

ストリームから読み取るイベントソースマッピングの場合、処理に失敗したバッチのレコードをキューまたはトピックに送信するように Lambda を設定できます。イベントソースマッピングの失敗レコードには、バッチに関するメタデータが含まれており、ストリームの項目を指しています。

詳細については、「非同期呼び出しの送信先の設定」、および「AWS Lambda を Amazon DynamoDB に使用する」と「AWS Lambda を Amazon Kinesis に使用する」のエラー処理のセクションを参照してください。

関数ブループリント

Lambda コンソールで関数を作成する場合、最初から作成を開始する、ブループリントを使用する、または AWS Serverless Application Repository からアプリケーションをデプロイするのうち、いずれかの方法を選択できます。ブループリントでは、AWS のサービスや一般的なサードパーティのアプリケーションで Lambda を使用する方法を示すサンプルコードが提供されます。ブループリントには、Node.js および Python ランタイム用のサンプルコードおよび関数設定プリセットが含まれています。

ブループリントは、クリエイティブコモンズゼロライセンスの下で使用するために提供されています。これらは Lambda コンソールでのみ使用できます。

アプリケーションテンプレート

Lambda コンソールで、継続的デリバリーパイプラインを使用してアプリケーションを作成できます。Lambda コンソールのアプリケーションテンプレートには、1 つ以上の関数のコード、関数とサポートする AWS リソースを定義するアプリケーションテンプレート、AWS CodePipeline パイプラインを定義するインフラストラクチャテンプレートが含まれます。パイプラインには、含まれている Git リポジトリに変更をプッシュするたびに実行されるビルドとデプロイのステージがあります。

アプリケーションテンプレートは、MIT No Attribution ライセンスの下で使用するために提供されています。これらは Lambda コンソールでのみ使用できます。

詳細については、「Lambda コンソールでの継続的デリバリーによるアプリケーションの作成」を参照してください。