AWS CLF(Cloud Practitioner)対策

Lambdaとサーバーレス

このレッスンを終えると、「サーバーの管理が要らない」とは具体的に何をしなくてよくなることなのかを、EC2 と比べて説明できるようになります。

小さな処理のために、サーバーを1台建てていた

画像がアップロードされたらサムネイルを作る。こんな数秒の処理のために、オンプレミスでは何をしていたでしょうか。サーバーを 1 台用意し、OS を入れ、ランタイムを入れ、常駐プロセスを書き、監視を仕掛け、OS のセキュリティ更新を毎月当て、ディスクが埋まらないか気にする。処理が 1 日 10 回しか走らなくても、マシンは 24 時間動き続け、24 時間分の電気代とお守りが発生していました。

AWS Lambda は、ここからコードだけを預かるサービスです。実行するサーバーは AWS が用意し、呼ばれたときだけ動かし、終わったら片付けます。あなたが用意するのは関数のコードと、それを起動するきっかけ (トリガー) だけです。

EC2 と Lambda で、どこまで自分の仕事か

項目EC2Lambda
物理・仮想の基盤AWSAWS
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 と切り分けます
生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部

復習ミニクイズ

S3 バケットに画像がアップロードされるたびにサムネイルを生成したい。処理は数秒で終わり、アップロードは 1 日数十回と不定期です。サーバーの管理をせず、使った分だけ支払いたい場合に最も適したサービスはどれですか。