Lambdaとは
AWS Lambdaとは、AWSが提供するサーバーレスでサービスを提供できる仕組みです。
サーバーはAWS上で管理する為、利用者はLambda用のプログラムコードを用意し、デプロイするだけでインターネット上でサービス提供できます。
他のサービスとの連携も可能でSaaS(Software as a Service)と差別化されFaaS(Function as a Service)と呼ばれます。
以下、Lambda使用のメリット・デメリット、使用する際の考慮点を簡単にまとめてみました。
今後も気づいたら変更・追加していこうと思います。
メリット
- サーバの構成組みや管理をする必要がなく、開発にリソースを集中できる。
- リクエスト時にのみ課金されるので、大量リクエストが必要なアプリ以外は安く済む。
- 想定以上のアクセスが続いた時などにサーバが落ちる心配などがない。
- 各ソフトウェアやミドルウェアのアップデートやパッチ適用、検証作業等の必要がない。
- サポート期間やライセンス切れを考慮する必要がない。
- 平行処理、不可分散について複数サーバのロードバランシング設定もする必要がない。
- Lambdaの同時実行数は1秒当たりのコール数×平均実行時間(秒)
- 例:5秒の関数が1秒当たり呼べる数は200個となる
- 平行処理が可能な数は1000と決められているが、申請により増やす事が出来る
- StepFunctionなど、Lambda関数を組み合わせてコードレスで機能を作成するツールが存在する。
- Api GatewayというWebアプリケーションからリクエスト受けてLambdaを実行するAPIフルマネージド型サービスが存在する。
- 対応するプログラミング言語は複数存在する。
デメリット
- モニタリングがLambda単位になる為、複数のLambda関数を使用する場合は複雑になる。
- 実行時間上限が15分しかない。
- 実行する際にコールドスタートになる場合がある為、関数起動が遅い(ミリ秒単位)場合がある。
- オンプレミス環境や他のクラウドに移行しようとするとコストがかかる。
- ステートレスなので、Lambdaに状態を保持しておく事が出来ない。
- Api GatewayからLambdaを呼ぶ場合は29秒でタイムアウトする。
システムにLambdaを使用した際に考慮すべき事
- マイクロサービスとして動作する目的で、細かい単位でLambda関数を設計するのが望ましい。
- バッチ処理などは15分以内に収まるものにする。
- 平行処理をする際は、「1秒当たりのコール数×平均実行時間(秒)」で指定の同時実行数を超えないようにする。
- Lambdaの一時ファイル容量は基本は512MBで、それ以上になると追加料金が発生するので考慮に入れておく。
- 大量アクセスがあるシステムには向かない。(リクエスト単位で課金されるため)
- 状態管理をしたい場合はS3やキャッシュサービスなど他のサービスを使用する。
- Lambdaのサイズ上限は250MBなので、外部ライブラリなどを使用する際はDockerコンテナ又はLayerを使用してサイズを小さくする。
- Lambda内で作成した一時ファイルなどは処理が終わったら保管されない為、保管したい場合はS3などのサービスを使用する。