AWS Lambdaとは?サーバーレス関数を解説
AWS Lambdaはサーバーレスのcomputeサービスです: 関数をアップロードすると、AWSがイベントに応じてオンデマンドで実行し、実行したミリ秒に対してのみ支払います。
Lambdaは、サーバーをプロビジョニングも管理もせずにコードを実行できるようにします。関数をパッケージ化し、何がトリガーするかを定義すると、AWSがスケーリング、パッチ適用、可用性を処理します。これは "サーバーレス" computeの典型例です: サーバーは依然として存在しますが、あなたはそれを見ることも管理することもありません。
Lambda関数の実行のしかた
サポートされているruntime (Node.js、Python、Java、Go、その他) でhandler関数をデプロイするか、コンテナイメージとしてデプロイします。トリガーが発火すると、Lambdaはexecution environmentを起動し、handlerを実行し、その後それをフリーズまたは破棄します。イベントが到着するにつれ、並行性が自動的にスケールします。
何が関数をトリガーするか
- API Gatewayまたはfunction URL経由のHTTPリクエスト。
- S3、DynamoDB streams、またはSQSやSNSからのイベント。
- cronのようなタイマーでのスケジュールされた呼び出し。
- 他のサービスやAWS SDKからの直接呼び出し。
cold startと制限
アイドル状態の関数への最初の呼び出しは、environmentが初期化される間、cold startを支払います。関数には設定可能なメモリサイズ、最大timeout、そしてdeployment packageサイズの制限があります。packageを小さくdependenciesを軽く保つことで、cold-startのレイテンシが減ります。
料金モデル
requestごとに加え、gigabyte-ミリ秒で測定されるcompute時間を支払うので、めったに実行されない関数はほとんどコストがかかりません。これにより、常時稼働のサーバーが無駄になるようなスパイクの多い、あるいはイベント駆動のworkloadにLambdaが魅力的になります。
CI/CDでの役割
deploy jobが関数コードをzip化 (またはコンテナイメージをbuild) し、それからAWS CLI、SAM、Serverless Framework、またはTerraformで関数を更新します。pipelineはIAM roleで認証し、新しいバージョンを発行し、より安全なrolloutのためにaliasを使ってトラフィックを段階的に移動できます。testsとlintingは、deployステップが発火するより前にCIの早い段階で実行されます。
重要なポイント
- Lambdaは、管理するサーバーなしにイベントに応じてオンデマンドでコードを実行します。
- requestごと、実行のミリ秒ごとに支払うので、スパイクの多いworkloadに理想的です。
- pipelineは、IAM認証されたツールでコードやイメージを更新して関数をデプロイします。