Lambdaとは?
サーバのプロビジョニングや管理なしでコードを実行できる技術(サーバレス)です。課金は実際に使用したコンピューティングの時間に対してのみに発生し、コードが実行されていない時間は料金が発生しない。また、プラットフォームの仕様も公開されていないので脆弱性をついた攻撃をしづらくなっている。
まずは、Lambdaで実現できるか検討して難しい場合は、ECS、EKS、それでもダメな場合はEC2を検討する形になるでしょう。
サーバレスとは?
プログラムを実行するためのサーバが必要ないということです。Lambdaはプログラムを実行する環境を提供してくれます。簡単にいえば、EC2も、その上にのるWebサーバもアプリケーションを実行するアプリケーションサーバも不要になるのです。
仕組み
Firecrackerというコンテナ上で実行され、軽量のマイクロ仮想マシン(microVM)を起動します。つまり、Lambdaもコンテナと似た技術を利用しているのです。
Lambdaのデメリット
「セッション状態」や「クラスのインスタンス変数」などを保持しない。
実行が終わったら環境が破棄されステートレスな実行環境になります。そのため前回の状態は保持できません。(例えば、Railsであればリクエストを跨いで「セッション」や「クラスのインスタンス変数」の値などは保持されます。)
ただ、Railsなどの開発でも「クラスのインスタンス変数」はスレッドセーフな観点で使うケースはあまりないですし、セッション情報の保持ができない程度なので、少なくとも普通のWebアプリケーションではデメリットと言える内容ではないでしょう。
最大稼働時間がある。
設定できる最大稼働時間は5分です。なので、例えばバッチ処理などの大量に時間がかかる処理などはLambdaで実行することはできません。
Fargateとの違い
Lambdaはコンテナ技術を意識せずに開発者がコードに意識を集中できる。
Labmdaで意識すること
Lambdaを利用した場合、以下のことのみ意識すれば良いだけになります。
- コード
- 割り当てるメモリ
- 実行可能なIAM権限
対応言語
- Java
- Node.js
- C#
- Pyathon
トリガー
何らかのイベントが発生したら、設定した処理を実行できる環境
対応しているイベントのAWSサービス
- S3のファイルアップロード
- DynamoDB
- Kinesisストリームデータのリアルタイム処理
- API Gatewayと組み合わせることでHTMLフォームやAjaxからのAPIリクエストも待ち受けることができます。
具体的な用途
- S3に画像がアップロードされたらリサイズしたサムネイル画像を生成する。
- ログ等のストリーミングデータを分析する。
- IoTセンサーからデータを受け取りDBに登録する。
- APIリクエストによるバックエンド処理
- バックアップ処理
- アクセス数の増減が激しいWebアプリケーション
- ツイッターボットのような四六時中動いている必要がないアプリには最適
上記のような用途があるので、Lambdaを使えばいちいち監視サーバや分析サーバを別途作成する必要がなくなります。
料金
毎月100万リクエストまで無料(無料利用枠)
ログ
コードのエラーやデバッグ情報、Lambdaで受け取ったイベント内容などは全てCloudWatchで閲覧できる。
Lambdaの非同期呼び出し
いくつかのサービス(S3、SNS)では非同期に呼び出すことが可能です。
設定
成功、失敗時の送信先
- Amazon SQS
- Amazon SNS
- 別のLambda
- Amazon EventBriage
Lambda側の関数の定義
関数名
関数名を定義する。
ランタイム設定
ランタイム
関数を記述する言語を指定します。
ハンドラ
lamdaがどの関数を呼ぶかという設定になります。下記のような形で指定します。
1 |
ファイル名_関数名 |
アクセス権限
lambdaが必要な権限を指定する。
実行ロールの選択または作成
実行ロール
「基本的なLambdaアクセス権限で新しいロールを作成」を選ぶとCloudWatchにログが出力されるようになります。
この記事へのコメントはありません。