AWS Lambdaとサーバーレスを理解する
Lambdaの通常の関数実行を中心に、イベントで処理を起動するサーバーレスの考え方を学びます。管理が減る範囲と、利用者が設計するコード・権限・状態・失敗時の扱いを区別します。
この単元で学ぶこと
- サーバーレスの関数実行とイベントを説明する
- 権限・状態・実行時間の条件を区別する
- 再実行・同時実行・費用を含めて適用を判断する
本文解説
1. 関数を必要時に実行する Lambdaは利用者がサーバーを調達・管理せずコードを実行できるサービスです。本単元では、イベントやAPIから呼び出される通常のLambda Functionsを扱います。現行サービスの別実行方式や複数ステップの仕組み全体へ、通常の一回の関数実行の条件を広げないようにします。
2. イベントと処理 S3へのファイル追加、APIからの要求、キューのメッセージ等をきっかけに関数を実行できます。例えば追加された画像の縮小版を作る処理です。トリガーやイベントソースの設定と、渡されたデータを扱うコードの両方が必要です。コードを置くだけで任意のイベントと接続されるわけではありません。
3. 管理の分担 AWSは基盤サーバーの運用を担い、利用者はコード、依存関係、データ、権限等を管理します。サーバーレスはサーバーが存在しないという意味ではありません。特定のホストOSへログインして自在に管理する必要がある場合は、EC2等の別の方式も比較します。
4. 実行ロール 関数がS3へ読書きする等のAWS操作には実行ロールの権限を使います。関数を呼び出す側の権限と、関数が実行中に他サービスへアクセスする権限は別です。処理に必要な操作と資源へ絞り、固定のアクセスキーをコードへ埋め込む設計を避けます。
5. 時間と資源 通常の一回のLambda関数実行のタイムアウトは最大900秒、15分です。必要時間を計測して設定し、超える処理を単純に一回へ押し込まないようにします。メモリ設定は利用できるCPUにも影響するため、メモリ・実行時間・費用を測定して選びます。
6. 状態を外へ保存 実行環境は再利用されることがありますが、次回も同じ環境が使われる保証として扱いません。重要な結果や共有状態はS3やDB等の適切な保存先へ置きます。メモリや一時領域に一つだけ残した注文情報を、永続的な業務記録とみなさないようにします。
7. 失敗と再実行 再試行の動作は呼出し方式やイベントソースによって異なります。イベントが重複して処理されても請求等が二重にならないよう、識別子を利用した冪等な処理を検討します。Lambdaを使うことだけで、あらゆる副作用が一度だけになるわけではありません。
8. 拡張と費用 需要に応じて実行環境は増えますが、同時実行の制約や接続先DB等の能力も確認します。通常の関数の料金は主に要求数と実行時間・メモリ等の条件に関係し、追加機能や他サービスの料金もあります。使っていない時間のサーバー管理を減らす利点と、処理特性や制約を合わせて選びます。
図解
重要ポイント
- イベントに応じて通常の関数を実行する。
- 実行ロールと呼出し側の権限を分ける。
- 重複実行と状態の永続化を設計する。
間違えやすい点
- サーバーレスをコードや権限管理の免除と考える。
- 次回も同じメモリが残る前提で注文を保存する。
用語解説
- イベント
- 処理を起動するきっかけとなる要求やデータの変化等。
- ハンドラー
- 関数が呼び出されたときにイベントを処理するコードの入口。
- 実行ロール
- Lambda関数が実行中に他のAWS資源へアクセスする権限を与えるIAMロール。
- 冪等性
- 同じ入力を繰り返しても業務上の結果を重複させない性質。
関連教材
参考資料
教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。
- https://docs.aws.amazon.com/lambda/latest/dg/welcome.html
- https://docs.aws.amazon.com/lambda/latest/dg/configuration-timeout.html
- https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html
- https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html
- https://docs.aws.amazon.com/lambda/latest/dg/invocation-retries.html
確認問題の出題・採点や学習履歴の保存にはログインが必要です。