・・・サーバーの管理を行うことなくコードを実行できる、コンピューティングサービス。コードが実行され、スケールアップとスケールダウンが自動的に実行され、従量課金制の価格設定が適用される。
・サービスのジャンル:サーバーレスコンピューティング
・特徴:
- アプリケーション実行環境が不要、ソースコードだけでアプリケーションの実行が可能
- 様々な開発言語が使用可能
- 必要なときだけ関数を実行し、需要に基づいてオートスケーリングする
- 従量課金制(常時課金は発生しない)
- 他のAWSサービスとの連携
- プログラムの同時実行(同時実行数がデフォルトで1000)
・使用用途:
- ファイル処理:Amazon S3にアップロードされたファイルを自動的に処理する
- 長時間のワークフロー:耐久性のあるLambda関数を使い、最大1年間実行できる、ステートフルで複数ステップのワークフローを構築する(注文処理、承認ワークフローなど)
- データベースオペレーションと統合:データベースの変更に反応して、データワークフローを自動化する
- スケジュールされたタスク:EventBridgeを使って、定期的な自動オペレーションを実行する
- ストリーム処理:分析・モニタリングのために、リアルタイムのデータストリームを処理する
AWS Lambda の機能
基本的な仕組み
事前にLamda関数でコード(プログラム) とトリガー(イベントソース) を定義しておき、イベントが発生したときに、その組み合わせが自動的に実行される
呼び出しの種類
同期呼び出し
・・・関数を実行し、呼び出し元がそのレスポンス(応答)を待つ方式。
- 関数の実行が終了すると、Lambdaは関数のコードからのレスポンスを、呼び出されたバージョンなどの追加データとともに返す
- 関数が実行できた場合、関数自体がエラーを返しても、ステータスコードは200になる(実行そのものは成功しているため)
- 再試行が必要かどうかは、呼び出し元(クライアントやAWSサービス)側が判断する。Lambda自体が自動で再試行するわけではない
- タイムアウトが長い関数では、レスポンスを待っている間にクライアント側が切断されてしまう場合があるため、注意が必要
- 代表的な同期呼び出しの例:API Gateway経由でのリクエスト処理(すぐに結果を返す必要がある処理)
非同期呼び出し
・・・呼び出し元がレスポンスを待たず、イベントをキューに入れて処理を任せる方式。
- 呼び出し元には、イベント送信後にステータスコードのみが返る(処理結果そのものは待たない)
- 関数がエラーを返すと、Lambdaが自動的に最大2回まで再試行する(1回目と2回目の間は1分、2回目と3回目の間は2分の待機時間)
- 関数の同時実行数が不足している場合、イベントはキュー内で数時間待機することがある(デフォルトで最大6時間)
- すべての再試行が失敗した場合に備えて、デッドレターキュー(SNSトピックまたはSQSキュー)を設定し、失敗したイベントを退避させることができる
- キューは最終的に一貫性を持つ仕組みのため、同じイベントが複数回届く可能性がある。そのため、関数のコードは冪等性(同じ処理を何度実行しても結果が変わらない性質)を持たせて設計する必要がある
比較表
| 観点 | 同期呼び出し | 非同期呼び出し |
|---|---|---|
| レスポンスを待つか | 待つ | 待たない(キューに送るだけ) |
| 再試行の主体 | 呼び出し元(クライアント・AWSサービス) | Lambda自身が自動で行う |
| エラー時の挙動 | 呼び出し元次第 | 最大2回自動再試行→失敗時はデッドレターキューへ |
| 重複実行の可能性 | 呼び出し元の再試行次第 | あり(冪等性の考慮が必要) |
同時実行数
- 同時実行数がデフォルトで1000
- 同時実行数が多くなると、Lambdaは自動でスケーリングする
- リージョンごとに同時実行数の初期クォータ(上限)が設定されている
プロビジョニング済み同時実行
・・・あらかじめ一定数の実行環境を初期化しておき、リクエストに対して即座に応答できるようにする機能。
- 関数のエイリアスやバージョンに対して、必要な同時実行数を割り当てて設定する
- コールドスタート(初回呼び出し時に実行環境の準備で発生する遅延)を回避したい場合に活用される
サービスコスト
・使用した分だけ支払う、従量課金制。関数へのリクエスト数と、コードの実行時間に基づいて課金される。
課金のタイミング
| 課金項目 | 内容 |
|---|---|
| リクエスト料金 | Lambdaは、イベント通知や呼び出しに応答して実行を開始するたびにリクエストを登録し、その合計数に対して課金する(コンソールからのテスト呼び出しを含む) |
| 実行時間料金(期間料金) | コードの実行開始から、結果を返す(または終了する)までの時間を1ミリ秒単位で切り上げて計算。関数に割り当てたメモリ量によって単価が変わる(メモリを増やすとCPUパワーも比例して増える) |
無料利用枠(無期限)
| 項目 | 無料枠 |
|---|---|
| リクエスト数 | 1か月あたり100万件 |
| コンピューティング時間 | 1か月あたり40万GB秒(最大320万秒) |
無料枠を超えた場合の料金
| 項目 | 単価 |
|---|---|
| リクエスト | 100万件あたり0.20 USD |
| コンピューティング時間 | 1GB秒あたり0.00001667 USD |
コスト削減の仕組み
- Compute Savings Plans:1年または3年間、USD/時間で一貫した使用量を確約することで、Lambdaを含むコンピューティングサービス全体を低コストで利用できる。最大17%のコスト削減が可能
追加料金が発生するケース
- Lambda関数が、他のAWSサービスを使用したり、データを転送したりすると、追加料金が発生する場合がある
- 例:Lambda関数がAmazon S3との間でデータを読み書きする場合、S3側の読み取り/書き込みリクエスト料金・保存データ料金も別途発生する