▪️目的
AWSでシステムを構築する場合、アプリケーションを動かすためのサーバーが必要になることがあります。
例えば、EC2を利用する場合は、インスタンスの構築やOSの管理、ソフトウェアの設定などを行います。
では、サーバーを直接管理せずにプログラムを実行する方法はあるのでしょうか?
そこで登場するのが、AWS Lambdaです。
Lambdaは、プログラムの実行環境をAWSに管理してもらい、必要なタイミングでコードを実行できるサービスです。
この記事では、AWS初心者向けに以下の内容を解説します。
- AWS Lambdaとは何か
- サーバーレスとは何か
- Lambdaの仕組み
- Lambdaの実行方法とトリガー
- LambdaとIAMロールの関係
- API GatewayやDynamoDBとの連携
- Lambdaの料金と注意点
それでは、順番に見ていきましょう。
目次
- AWS Lambdaとは?
- サーバーレスとは?
- Lambdaの仕組み
- Lambdaの基本用語
- Lambdaの実行方法とトリガー
- LambdaとAPI Gatewayの連携
- LambdaとDynamoDBの連携
- LambdaとIAMロールの関係
- Lambdaの料金
- Lambdaを利用するときの注意点
- まとめ
▪️AWS Lambdaとは?
AWS Lambdaは、AWSが提供するサーバーレスのコンピューティングサービスです。
プログラムのコードをLambdaに登録し、イベントなどをきっかけに実行できます。
例えば、Webアプリケーションからリクエストを受け取ったときに、必要な処理だけを実行する構成を作れます。
イベント発生
|
v
AWS Lambda
|
v
プログラムを実行
|
v
処理結果を返す
Lambdaでは、利用者がEC2のようにサーバーインスタンスを作成して、OSをインストールしたり、OSのパッチ適用を管理したりする必要がありません。
プログラムの実行に必要な基盤はAWSが管理します。
Lambdaの主な特徴は、以下のとおりです。
- サーバーのプロビジョニングやOS管理が不要
- イベントをきっかけにプログラムを実行できる
- AWSのさまざまなサービスと連携できる
- 実行時間やリクエスト数などに応じた料金体系
- 必要に応じて実行環境をスケールできる
例えば、S3にファイルがアップロードされたときにLambdaで処理したり、Amazon EventBridgeで定期的にLambdaを呼び出したりできます。
このように、LambdaはAWS上で処理を実行するためのサービスです。
▪️サーバーレスとは?
Lambdaを理解するうえで重要なのが、サーバーレスという考え方です。
サーバーレスとは、サーバーが物理的に存在しないという意味ではありません。
サーバーや実行基盤の管理を、AWSなどのサービス提供者に任せられる仕組みを指します。
♦︎EC2を利用する場合
例えば、EC2でアプリケーションを動かす場合、次のような作業が必要になります。
- EC2インスタンスの作成
- OSやソフトウェアの設定
- アプリケーションの配置
- OSやソフトウェアの更新
- インスタンスの監視や容量管理
もちろん、マネージドサービスや自動化ツールを利用すれば管理作業を減らせますが、EC2ではインスタンスやOSなどを利用者側で管理する範囲があります。
♦︎Lambdaを利用する場合
一方、Lambdaでは、コードや実行に必要な設定を用意し、イベントなどをきっかけに処理を実行します。
EC2
|
├─ インスタンス管理
├─ OS管理
├─ ソフトウェア管理
└─ アプリケーション実行
Lambda
|
├─ コードの作成
├─ 実行設定
└─ イベントに応じて実行
Lambdaでは、サーバーやOSの管理をAWSに任せられます。
ただし、アプリケーションのコード、権限、依存ライブラリ、ログ、エラー処理などは利用者側で適切に設計する必要があります。
つまり、サーバーレスは「管理が一切不要」という意味ではなく、インフラ管理の負担を減らし、アプリケーションの処理に集中しやすくする仕組みと考えると分かりやすいでしょう。
▪️Lambdaの仕組み
Lambdaでは、作成した関数にコードを登録し、その関数をイベントなどによって実行します。
例えば、画像ファイルがS3にアップロードされたときに、Lambdaで画像の情報を取得して記録する構成を考えてみましょう。
S3に画像をアップロード
|
v
イベント発生
|
v
AWS Lambda
|
v
画像情報を処理
|
v
処理結果を保存
このように、Lambdaはイベントをきっかけに処理を実行できます。
イベントの発生元には、S3やDynamoDB、EventBridgeなど、さまざまなAWSサービスを利用できます。
また、API Gatewayなどを通じて、WebアプリケーションからLambdaを呼び出す構成も作れます。
ここで重要なのは、Lambdaが単独でシステム全体を構成するわけではないということです。
実際のシステムでは、リクエストの受付、データの保存、認証・認可、ログの記録など、必要な役割をほかのAWSサービスと組み合わせて実現します。
▪️Lambdaの基本用語
Lambdaを利用するうえで、まず押さえておきたい用語を整理します。
① 関数(Function)
Lambdaで実行するプログラムの単位です。
例えば、次のような処理を関数として作成できます。
- 入力データのチェック
- データベースへのデータ登録
- ファイルの変換
- 通知の送信
② ランタイム(Runtime)
プログラムを実行するための環境です。
Lambdaでは、対応する言語やランタイムを指定してコードを実行します。PythonやNode.jsなどが代表例です。
対応するランタイムやバージョンは変更されるため、実際に開発するときはAWSの公式ドキュメントで確認しましょう。
③ ハンドラー(Handler)
Lambdaが呼び出されたときに、最初に実行する関数や処理の入口を指定する設定です。
例えばPythonでは、関数を定義して、その関数をハンドラーとして指定できます。
def lambda_handler(event, context):
return {
"statusCode": 200,
"body": "Hello AWS Lambda!"
}
この例では、Lambdaが呼び出されると lambda_handler が実行され、ステータスコードと本文を含む結果を返します。
なお、この形式の戻り値は、API GatewayなどからHTTPレスポンスとして利用する構成でよく使われます。Lambdaの戻り値の扱いは、呼び出し元や連携方式によって異なります。
④ イベント(Event)
Lambdaを呼び出すきっかけとなる情報です。
例えば、API Gatewayからのリクエスト情報や、S3にアップロードされたオブジェクトの情報などがイベントとして渡されることがあります。
⑤ 実行ロール(Execution Role)
LambdaのコードがAWSサービスにアクセスするときに利用するIAMロールです。
例えば、LambdaからDynamoDBにデータを書き込む場合、実行ロールに必要な権限を付与します。
このように、Lambdaではコードだけでなく、実行環境やアクセス権限も設定する必要があります。
▪️Lambdaの実行方法とトリガー
Lambdaは、さまざまな方法で実行できます。
代表的なものを見てみましょう。
| 実行のきっかけ | 連携サービスの例 | 利用例 |
|---|---|---|
| HTTPリクエスト | API Gateway | Web APIの処理 |
| ファイルのアップロード | Amazon S3 | 画像やファイルの処理 |
| 定期実行・スケジュール | Amazon EventBridge | 定期的な集計処理 |
| キューへのメッセージ登録 | Amazon SQS | 非同期処理 |
| データの変更 | DynamoDB Streams | 更新データに応じた処理 |
例えば、毎日午前9時にデータを集計したい場合は、EventBridgeのスケジュール機能などを利用してLambdaを呼び出す構成にできます。
また、SQSにメッセージが登録されたときに、Lambdaでメッセージを処理する構成も可能です。
ただし、イベントの連携方式はサービスごとに異なります。例えばSQSでは、Lambdaのイベントソースマッピングがキューからメッセージを取得し、Lambda関数を呼び出す仕組みを利用します。
このように、Lambdaはさまざまなイベントと連携できるため、用途に応じて柔軟なシステムを構築できます。
▪️LambdaとAPI Gatewayの連携
Lambdaの代表的な利用方法のひとつが、API Gatewayとの連携です。
API Gatewayは、アプリケーションからのHTTPリクエストを受け付けるためのサービスです。
Lambdaと組み合わせることで、サーバーを直接管理せずにWeb APIを構築できます。
例えば、ユーザー情報を取得するAPIを作成する場合、次のような構成が考えられます。
ユーザー
|
| HTTPリクエスト
v
API Gateway
|
| Lambdaを呼び出す
v
Lambda
|
| データを取得
v
DynamoDB
この構成では、それぞれのサービスが異なる役割を担います。
- API Gateway:HTTPリクエストを受け付ける
- Lambda:リクエストに応じた処理を実行する
- DynamoDB:ユーザー情報などのデータを保存する
例えば、ユーザーがWebサイトでプロフィールを表示するときに、API Gatewayがリクエストを受け付け、LambdaがDynamoDBから対象のデータを取得し、結果を返す構成にできます。
このように、API Gateway・Lambda・DynamoDBを組み合わせることで、サーバーレスなWeb APIを構築できます。
ただし、実際のシステムでは認証・認可、入力値の検証、エラー処理、ログ記録なども必要です。
▪️LambdaとDynamoDBの連携
前の記事で解説したDynamoDBも、Lambdaと相性のよいサービスです。
DynamoDBはデータを保存するサービスであり、Lambdaはプログラムを実行するサービスです。
それぞれの役割を組み合わせることで、データの登録や取得、更新などを行うアプリケーションを作成できます。
例えば、ユーザーが注文情報を登録するシステムを考えてみましょう。
API Gateway
|
v
Lambda
|
| 注文情報を登録
v
DynamoDB
この構成では、Lambdaがリクエストの内容を確認し、注文情報をDynamoDBに登録します。
また、DynamoDB Streamsを利用すれば、テーブルの変更をきっかけにLambdaを呼び出す構成も作れます。
例えば、注文情報が登録されたあとに、通知や集計などの後続処理を実行できます。
ただし、DynamoDB Streamsを利用する場合は、重複処理への対策やエラー時の再試行なども考慮する必要があります。
また、LambdaからDynamoDBにアクセスするには、実行ロールに必要な権限を設定しなければなりません。
▪️LambdaとIAMロールの関係
Lambdaを利用するうえで、IAMによるアクセス制御も重要です。
例えば、LambdaからDynamoDBのデータを取得する場合、Lambdaに対してDynamoDBを読み取る権限を付与する必要があります。
このときに利用するのが、**Lambdaの実行ロール(Execution Role)**です。
Lambda関数
|
| 実行ロールの権限を利用
v
IAM Role
|
| 許可された操作
v
DynamoDB
実行ロールに必要なIAMポリシーを設定することで、Lambdaから許可されたAWSリソースを操作できるようになります。
例えば、DynamoDBの特定のテーブルだけを読み取る必要があるなら、そのテーブルに対する読み取り権限を付与します。
反対に、データの更新や削除が不要であれば、それらの権限を与える必要はありません。
このように、Lambdaには必要最小限の権限を設定することが重要です。
なお、Lambdaの実行ロールは、Lambda関数そのものを呼び出せる人の権限とは異なります。
- Lambdaの呼び出し権限:誰がLambdaを実行できるか
- Lambdaの実行ロール:LambdaのコードがAWS上で何を操作できるか
この違いを理解しておくと、AWSのアクセス制御を整理しやすくなります。
▪️Lambdaの料金
Lambdaの料金は、主にリクエスト数やコードの実行時間、設定したメモリ量などに基づいて計算されます。
EC2のようにインスタンスを起動しておく時間に対して料金が発生する仕組みとは異なり、Lambdaでは実際の利用状況に応じて料金が発生する仕組みになっています。
例えば、処理が必要なときだけLambdaを実行する構成であれば、常時稼働するサーバーを用意せずに済む場合があります。
ただし、Lambdaを利用すれば必ず安くなるわけではありません。
リクエスト数や実行時間が多い場合には、料金が増加する可能性があります。また、API Gateway、DynamoDB、SQSなど、連携するサービスにもそれぞれ料金が発生する場合があります。
そのため、システム全体の利用量を想定してコストを検討することが重要です。
▪️Lambdaを利用するときの注意点
Lambdaは便利なサービスですが、利用するときにはいくつか注意点があります。
① 実行時間の制限
Lambdaには、1回の呼び出しで実行できる時間に上限があります。
そのため、長時間にわたる処理や、Lambdaの実行時間の上限を超える処理には向いていない場合があります。
処理内容に応じて、AWS Batch、ECS、Step Functionsなど、ほかのサービスも検討しましょう。
② タイムアウトの設定
Lambdaでは、処理が完了しない場合に備えてタイムアウトを設定します。
タイムアウトが短すぎると、正常に処理できる内容でも途中で終了してしまう可能性があります。
一方、必要以上に長く設定すると、エラーが発生したときに処理の終了まで時間がかかる場合があります。
処理内容や外部サービスへの接続時間を考慮して設定することが大切です。
③ エラー処理と再試行
Lambdaでは、呼び出し方式やイベントソースによって、エラー時の再試行動作が異なります。
例えば、イベントが再配信された場合、同じ処理が複数回実行される可能性があります。
そのため、データの二重登録や重複処理が発生しないように、冪等性を考慮した設計が重要です。
④ ログと監視
Lambdaの実行状況やエラーを確認するために、Amazon CloudWatch LogsやCloudWatch Metricsなどを利用できます。
エラーが発生した場合に原因を調査できるよう、ログやメトリクス、アラームなどを適切に設計しましょう。
⑤ VPC内のリソースへの接続
Lambdaからプライベートサブネット内のRDSなどに接続する場合、VPCへの接続設定が必要になることがあります。
また、VPC内に接続したLambdaから外部サービスへアクセスする場合は、ルートやNAT Gateway、VPCエンドポイントなどのネットワーク設計も確認する必要があります。
Lambdaを利用しても、ネットワークやセキュリティの設計が不要になるわけではありません。
▪️まとめ
今回はAWS Lambdaについて解説しました。
Lambdaを一言で表すと、
「サーバーの管理をAWSに任せ、イベントなどをきっかけにプログラムを実行できるサービス」
です。
重要なポイントを整理すると、以下のようになります。
- Lambdaはサーバーレスのコンピューティングサービス
- 関数に登録したコードをイベントなどによって実行できる
- API Gatewayと組み合わせてWeb APIを構築できる
- DynamoDBと組み合わせてデータの登録・取得などを行える
- IAMの実行ロールによってアクセス権限を制御する
- CloudWatchを利用してログやメトリクスを監視できる
- 実行時間、エラー処理、コストなどを考慮する必要がある
特に重要なのは、Lambda単体で考えるのではなく、ほかのAWSサービスと組み合わせてシステム全体を構築することです。
例えば、
API Gateway
|
v
Lambda
|
v
DynamoDB
という構成では、API Gatewayがリクエストを受け付け、Lambdaが処理を実行し、DynamoDBがデータを保存します。
このように各サービスの役割を理解すると、AWSのサーバーレスアーキテクチャをイメージしやすくなります。
今後AWSを学ぶ際には、サービス単体の機能だけでなく、実際のシステムの中でどのように連携するのかも意識してみましょう。
次は、AWS上でイベントを検知して処理を連携させるAmazon EventBridgeについて学ぶと、Lambdaを利用したイベント駆動型のシステムへの理解がさらに深まります。

No responses yet