AWS Lambda(ラムダ)はサーバーレスでプログラムのコードを実行できるフルマネージドサービスです。サーバーレスとは、EC2インスタンスなどのサーバーを必要とせずリクエスト発生時にだけプログラムが実行されるアーキテクチャのことです。サーバーレスアーキテクチャでは、インフラストラクチャの管理は完全にAWSによって行われます。
Lambdaを利用すると次のようなメリットがあります。
・プログラム実行環境の構築や運用が不要になる
・プログラムはリージョン内の複数のAZに分散して配置される(耐障害性・可用性の向上)
・プログラムへのリクエスト数に応じたスケーリングが自動的に行われる(拡張性の向上)
開発したプログラムを動作させるためには、通常、実行環境となるサーバーが必要です。サーバー管理は構築・運用ともに負担の大きな作業ですが、Lambdaを利用することにより煩雑な業務を行わなくて済むようになりプログラムの開発に集中できます。
【Lambda関数】
Lambdaで実行されるコードを「Lambda関数」といいます。
Lambda関数は以下のような特徴があります。
・開発言語:Java、Node.js、Pythonなど様々な開発言語に対応
・実行時間:最長15分
・課金方式:リクエスト数に基づく課金と実行時間(単価はメモリ量に依存)に基づく課金の合計
・実行タイミング:特定のイベントがトリガーとして発生したときに実行
ユーザーは、Lambda関数を実行するため
・Lambda関数のコード作成と更新、環境変数設定、IAMロール設定など、アプリケーションに関する設定
・Lambda関数を実行するメモリサイズや最大実行時間の指定など、リソースに関する設定
などを行います。
実行時間が15分以上になる処理や常時稼働が必要なアプリケーションには適していないので、EC2インスタンスやコンテナなどで運用する検討が必要です。
Lambdaを1年以上継続して利用する場合は「Compute Savings Plans」で契約すると、サービスを割引価格で利用できます。Compute Savings Plansは1年または3年の期間、一定のサービス使用量(1時間あたりの利用料金)を決めて契約することで、通常よりも低価格になる購入オプションです。
【Lambda関数のトリガー】
Lambda関数実行の起点となるイベントを「トリガー」といいます。以下はトリガーとして設定できるイベントの一例です。
・Amazon S3バケットにオブジェクトが作成された時
・Amazon DynamoDBのテーブルに変更があった時
・Amazon SQSのキューにメッセージが追加された時
・Amazon SNSからトピックが通知された時
・Amazon API Gateway経由で直接Lambda関数が呼び出された時
例えば、ユーザーからアップロードされた画像ファイルがS3バケットに保存(オブジェクトが作成)された時に、Lambda関数が実行されて画像ファイルの情報をDynamoDBに書き込むといった利用方法があります。
【Lambda関数のアクセス権限】
Lambda関数には実行ログを出力するために、CloudWatch Logsへのアクセス権限が割り当てられています。デフォルトではCloudWatch Logs以外へのアクセス権限はないので、Lambda関数から他のAWSサービスへアクセスさせたい場合はアクセス権限の設定が必要です。Lambda関数のアクセス権限は、他のAWSサービスへのアクセス権限を持つIAMロールによって付与します。その際、Well-Architected Frameworkの「最小権限の原則」に基づき、コード実行に必要な最低限の権限のみ割り当てることが推奨されています。