AWS CLF(Cloud Practitioner)対策
Lambdaとサーバーレス
このレッスンを終えると、「サーバーの管理が要らない」とは具体的に何をしなくてよくなることなのかを、EC2 と比べて説明できるようになります。
小さな処理のために、サーバーを1台建てていた
画像がアップロードされたらサムネイルを作る。こんな数秒の処理のために、オンプレミスでは何をしていたでしょうか。サーバーを 1 台用意し、OS を入れ、ランタイムを入れ、常駐プロセスを書き、監視を仕掛け、OS のセキュリティ更新を毎月当て、ディスクが埋まらないか気にする。処理が 1 日 10 回しか走らなくても、マシンは 24 時間動き続け、24 時間分の電気代とお守りが発生していました。
AWS Lambda は、ここからコードだけを預かるサービスです。実行するサーバーは AWS が用意し、呼ばれたときだけ動かし、終わったら片付けます。あなたが用意するのは関数のコードと、それを起動するきっかけ (トリガー) だけです。
EC2 と Lambda で、どこまで自分の仕事か
| 項目 | EC2 | Lambda |
|---|---|---|
| 物理・仮想の基盤 | AWS | AWS |
| OS の更新とパッチ | 利用者 | AWS |
| ランタイムの用意 | 利用者 | AWS (対応言語から選ぶ) |
| スケール | 自分で Auto Scaling を設計する | リクエストに応じて自動 |
| 課金の考え方 | インスタンスが動いている時間 | 呼び出し回数と実行時間 |
| アプリのコード | 利用者 | 利用者 |
目を引くのは課金の行です。Lambda は呼ばれていない間は課金されません。1 日 10 回の処理なら、その 10 回分の実行時間だけを負担します。アイドル時間に払い続ける構造が消えるということです。
もう一段大きい違いはスケールの行にあります。EC2 では台数を増やす設計を自分でしましたが、Lambda は同時に来た呼び出しの数だけ実行環境が自動で並びます。台数という概念を利用者が持たない、これが「サーバーレス」の意味です。サーバーが存在しないのではなく、サーバーを利用者が意識しないと理解してください。
代表的なトリガーとして、S3 へのファイル配置、API Gateway が受けた HTTP リクエスト、DynamoDB の変更、EventBridge のスケジュールなどがあります。イベントが起きたら関数が走る、という組み立て方をイベント駆動と呼びます。
向くもの、向かないもの
Lambda には 1 回の実行に時間の上限があり、実行環境は使い捨てなのでローカルディスクに状態を残せません。したがって次のように分かれます。
- 向くもの。短時間で終わる処理、イベントに応じて散発的に走る処理、実行回数の波が大きい処理
- 向かないもの。何時間も動き続ける処理、OS レベルの細かい制御が要るもの、常時高負荷で走り続けるもの。これらは EC2 やコンテナのほうが素直です
他のサーバーレス寄りのサービスとして、キュー の Amazon SQS、通知の Amazon SNS、NoSQL の Amazon DynamoDB、API の入口となる Amazon API Gateway があります。いずれも利用者がサーバーの台数を管理しません。
試験ではこう出る
- 「サーバーのプロビジョニングや管理をせずにコードを実行したい」と書いてあれば、ほぼ Lambda です
- 「S3 にファイルが置かれたら処理したい」「イベント駆動で」は Lambda のトリガーの話です
- 「使った分だけ支払い、アイドル時間の課金をなくしたい」も Lambda を選ばせる言い換えです
- 「OS に独自のカーネル設定が必要」「常時稼働の長時間処理」とあれば、Lambda ではなく EC2 を選ばせる引っかけです
- 「Lambda の実行環境の OS にパッチを当てるのは誰か」は AWS です。EC2 の場合との違いが問われます
まとめ
- Lambda はコードだけを預け、呼ばれたときだけ実行するサービスです
- OS とランタイムの管理、スケールの手当てが AWS 側に移ります
- 課金は呼び出し回数と実行時間で、待機中は発生しません
- 短時間でイベント駆動なら Lambda、長時間や OS 制御が要るなら EC2 と切り分けます
復習ミニクイズ
S3 バケットに画像がアップロードされるたびにサムネイルを生成したい。処理は数秒で終わり、アップロードは 1 日数十回と不定期です。サーバーの管理をせず、使った分だけ支払いたい場合に最も適したサービスはどれですか。