SAA / ドメイン2 レジリエントなアーキテクチャの設計
重要な内容
AWS Lambda
は、サーバーを管理せず、イベントに応じてコードを実行するコンピューティングサービスです。SAA では、短時間のイベント処理、自動スケーリング、なで選びます。
概要
関数、実行ロール、トリガーを設定すると、が実行環境の用意、スケーリング、障害対応を管理します。、、、、 Streamsなどと連携します。
1回の呼び出しの実行時間は最大15分(900秒)で、これを超える処理はタイムアウトします。数十分以上かかる処理や常時稼働のサービスは、 on やを検討します。関数はイメージ(最大10GB)からも作れますが、Lambdaのランタイムインターフェイスに合わせた作りにする必要があり、実行時間の上限も変わりません。LambdaとFargateはどちらもを使えないため、GPUが要る処理はを選びます。
主要技術
①同期・非同期・ストリーム呼び出し
| 方式 | 例 | 障害時の考え方 |
|---|---|---|
| 同期 | 呼び出し元が応答と再試行を管理します。 | |
| 非同期 | 、 | 側で再試行し、失敗先を設定できます。 |
| イベントソースマッピング | 、Streams | バッチとチェックポイントを管理します。 |
②同時実行とスケーリング ⚠️ 頻出
イベント増加に応じて並列実行されます。予約済みで関数の上限と確保枠を設定し、済み同時実行でコールドスタートの影響を抑えます。名前が似ているため、何のための設定かを取り違えないようにします。
| 設定 | 何をするか | 選ぶ場面 |
|---|---|---|
| 予約済み同時実行 | その関数が使える同時実行数の上限と枠を確保する | 他の関数に枠を奪われたくない、または下流を守るため上限を付けたいときに使います。 |
| プロビジョニング済み同時実行 | 実行環境を事前に初期化して待機させる | 初回応答の遅さ(コールドスタート)を無くしたいときに使います。 |
コールドスタートは、実行環境の作成とランタイムや依存関係の初期化にかかる時間です。プロビジョニング済み同時実行を設定した数だけ初期化済みの環境が待機するため、その範囲のリクエストは初期化を待たずに応答できます。待機中も課金されるので、必要な時間帯だけ確保するとコストを抑えられます。
プロビジョニング済み同時実行はApplication の対象で、スケジュールドアクションを使うと「業務開始の前に引き上げ、終業後に下げる」といった時間帯ごとの増減を自動化できます。ターゲット追跡で利用率に応じて調整することもできます。
定期的にダミーのリクエストを送って実行環境を温める方法は、どの環境が再利用されるかを制御できないため、同時アクセスが集中する時間帯の初回応答を保証できません。のは同じ応答を返し続ける仕組みなので、初回起動の遅さそのものは解消しません。
Point
- Reserved concurrency = 予約済み同時実行 で、使える枠の上限を予約します。
- Provisioned concurrency = プロビジョニング済み同時実行 で、初期化済みの環境をあらかじめ用意します。
- 和訳
- Provision: 供給する、あらかじめ用意する
- Weblio英和辞書「provision」
⚠️ 頻出: 「他の関数に枠を奪われたくない」は予約済み同時実行、「初回応答が遅い」はプロビジョニング済み同時実行です。決まった時間帯だけ必要ならApplication Auto Scalingのスケジュールドアクションと組み合わせます。
はメモリをに比例して割り当てます。メモリは128MB〜10,240MBの範囲で設定でき、1,769MBで1vCPU相当です。CPUが律速の処理では、使用メモリに余裕があってもメモリ設定を引き上げると実行時間が縮みます。タイムアウトや一時ストレージを増やしてもCPUの割り当ては変わりません。
のイベントソースマッピングでは、最大同時実行数 (2〜1,000) でそのキューが呼び出す関数の同時実行を制限できます。上限に達すると受信を控えるため、下流のDBなどへの同時書き込みを抑えられます。予約済み同時実行だけで絞ると、ポーラーが受信を続けて関数がされ、再試行を重ねたメッセージがへ移ることがあります。
③VPC接続と状態管理
内リソースへ接続できますが、関数自体はとして設計します。永続状態は、、などへ保存し、実行環境の再利用に依存しません。
④失敗処理と冪等性
再試行により同じイベントが複数回処理される可能性があるため、を持たせます。送信先、、部分バッチ応答などを利用して失敗を隔離します。
試験対策
| 要件 | 選ぶサービス |
|---|---|
| の短時間処理 | |
| をサーバー管理なしで実行 | |
| 長時間の常駐処理 | / |
| 複数Lambdaの順序管理 | |
| 決まった時刻に初回応答を速くしたい | 済み + スケジュールドアクション |
「管理不要」「イベント発生時だけ実行」「自動スケール」がLambdaです。状態をローカルへ永続化する設計は避けます。