Lambda の機能
Lambda には、関数の管理と呼び出しを行うためのマネジメントコンソールと API が用意されています。また、必要に応じて言語間やフレームワーク間の切り替えを簡単にできるように、標準の機能セットをサポートするランタイムが提供されています。関数に加えて、バージョンやエイリアス、レイヤー、カスタムランタイムを作成することもできます。
プログラミングモデル
オーサリングの詳細はランタイムによって異なりますが、すべてのランタイムには、コードとランタイムコードとのインターフェイスを定義する共通のプログラミングモデルがあります。関数の設定でハンドラーを定義することにより実行するメソッドをランタイムに伝えると、そのメソッドがランタイムで実行されます。ランタイムは、呼び出しイベント、および関数名やリクエスト ID などのコンテキストを含むオブジェクトをハンドラーに渡します。
ハンドラーが最初のイベントの処理を終了すると、ランタイムは別のイベントを送信します。関数のクラスはメモリ内にとどまるため、初期化コードにおいて、ハンドラーメソッドの外部で宣言されたクライアントおよび変数は再利用が可能です。後続のイベントの処理時間を短縮するには、初期化中に AWS SDK クライアントなどの再利用可能なリソースを作成します。初期化されると、関数の各インスタンスは数千件のリクエストを処理できます。
初期化処理には、関数のインスタンスによって処理される最初の呼び出しの期間の一部として料金が発生します。AWS X-Ray トレースが有効な場合、ランタイムは初期化と実行のために、別個のサブセグメントを記録します。

また、関数は、/tmp
ディレクトリ内のローカルストレージにもアクセスできます。リクエストを処理している関数のインスタンスは、リサイクルされるまで数時間アクティブのままになります。
ランタイムは、関数からのログ出力をキャプチャし、それを Amazon CloudWatch Logs に送信します。ランタイムは、関数の出力をログに記録するだけでなく、関数の呼び出しの開始時と終了時にエントリも記録します。これには、リクエスト ID、請求期間、初期化期間、およびその他の詳細を含むレポートログが含まれます。関数によりエラーがスローされた場合、そのエラーは、ランタイムにより呼び出し元に返信されます。
ログ記録には、CloudWatch Logs のクオータが適用されます。ログデータは、スロットリングが原因で失われることがあります。また、場合によっては、関数のインスタンス停止時に失われることがあります。
プログラミング言語別のプログラミングモデルの実践的な入門ガイドについては、以下の章を参照してください。
Lambda は、関数をスケーリングし、需要が増えると追加のインスタンスを実行して、需要が減るとインスタンスを停止します。特に明記されていない限り、受信リクエストは、順不同または同時に処理されます。アプリケーションの状態は他のサービスに保存します。関数のインスタンスが長く存続するとは想定しないでください。ローカルストレージとクラスレベルのオブジェクトを使用することで、パフォーマンスを向上させられます。その場合でも、デプロイパッケージのサイズと実行環境に転送するデータの量は最小限に抑えてください。
スケーリング
Lambda は、コードを実行するインフラストラクチャを管理し、受信リクエストに応じて自動的にスケーリングします。関数の呼び出しが速くて関数の単一のインスタンスではイベントを処理できない場合、Lambda は追加のインスタンスを実行することでスケールアップします。トラフィックが低下すると、非アクティブなインスタンスはフリーズまたは停止されます。支払いは、関数でイベントを初期化または処理している時間に対してのみ発生します。

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

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

詳細については、「Lambda 関数の同時実行数の管理」を参照してください。
非同期呼び出し
関数を呼び出す際は、同期的に呼び出すか非同期的に呼び出すかを選択できます。同期呼び出しでは、イベントを処理する関数を待ってレスポンスを返します。非同期呼び出しでは、Lambda は処理のためにイベントをキューに入れ、すぐにレスポンスを返します。

非同期呼び出しの場合、関数がエラーを返すか、またはスロットリングされると Lambda は再試行を処理します。この動作をカスタマイズするため、関数、バージョン、またはエイリアスのエラー処理設定を定義できます。また、処理に失敗したイベントをデッドレターキューに送信したり、任意の呼び出しのレコードを 送信先に送信したりするように Lambda を設定することもできます。
詳細については、「非同期呼び出し」を参照してください。
イベントソースマッピング
イベントソースマッピングを作成することで、ストリームまたはキューからの項目を処理できます。イベントソースマッピングは、Amazon Simple Queue Service (Amazon SQS) キュー、Amazon Kinesis ストリーム、または Amazon DynamoDB ストリームから項目を読み取り、バッチとして関数に送信するための Lambda のリソースです。関数が処理する各イベントには、数百または数千の項目を含めることができます。

イベントソースマッピングでは、未処理項目がローカルでキューに保存されており、関数がエラーを返すかスロットリングされた場合には処理が再試行されます。イベントソースマッピングを設定することで、バッチ処理の動作とエラー処理をカスタマイズできます。あるいは、処理に失敗した項目のレコードを送信先に伝達させることも可能です。
詳細については、「AWS Lambda イベントソースマッピング」を参照してください。
送信先
送信先は、関数の呼び出しレコードを受け取る AWS リソースです。非同期呼び出しの場合、呼び出しレコードをキュー、トピック、関数、またはイベントバスに送信するように Lambda を設定できます。成功した呼び出しと処理に失敗したイベントに別々の送信先を設定できます。呼び出しレコードには、イベント、関数のレスポンス、レコードが送信された理由に関する詳細が含まれます。

ストリームから読み取るイベントソースマッピングの場合、処理に失敗したバッチのレコードをキューまたはトピックに送信するように Lambda を設定できます。イベントソースマッピングの失敗レコードには、バッチに関するメタデータが含まれており、ストリームの項目を指しています。
詳細については、「非同期呼び出しの送信先の設定」、および「AWS Lambda を Amazon DynamoDB に使用する」と「AWS Lambda を Amazon Kinesis に使用する」でエラー処理のセクションを参照してください。
関数ブループリント
Lambda コンソールで関数を作成する場合、最初から作成を開始する、ブループリントを使用する、コンテナイメージを使用する、または AWS Serverless Application Repository からアプリケーションをデプロイするのうち、いずれかの方法を選択できます。ブループリントからは、AWS のサービスや一般的なサードパーティのアプリケーションで Lambda を使用する方法を示す、サンプルコードが提供されます。ブループリントには、Node.js および Python ランタイム用のサンプルコードおよび関数設定プリセットが含まれています。
ブループリントは、クリエイティブコモンズゼロ
テストおよびデプロイのツール
Lambdaでは、コードをそのまま、またはコンテナイメージとしてデプロイできます。エコシステムの中の豊富なツールを使用して、AWS や Docker コマンドラインインターフェイス (CLI) などの一般的なコミュニティツールにより、Lambda 関数の作成、ビルド、デプロイを行うことができます。
詳細については、「Lambda を使用するためのツール」を参照してください。
アプリケーションテンプレート
Lambda コンソールで、継続的デリバリーパイプラインを使用してアプリケーションを作成できます。Lambda コンソールのアプリケーションテンプレートには、1 つ以上の関数のコード、関数とそれをサポートする AWS リソースを定義するためのアプリケーションテンプレート、 AWS CodePipeline パイプラインを定義するためのインフラストラクチャテンプレートが含まれています。パイプラインには、含まれている Git リポジトリに変更をプッシュするたびに実行されるビルドとデプロイのステージがあります。
アプリケーションテンプレートは、MIT No Attribution
詳細については、「Lambda コンソールでの継続的デリバリーによるアプリケーションの作成」を参照してください。