概要
AWS Lambda は、サーバーのプロビジョニングや管理なしにコードを実行できるサーバーレスコンピューティングサービスです。コードをアップロードするだけで、Lambda がコードの実行に必要なすべてのインフラストラクチャを管理します。
従来のサーバーベースのアーキテクチャでは、リクエストの有無にかかわらずサーバーを稼働させ続ける必要がありました。Lambda を使うことで、リクエストが発生したときだけコードが実行され、使用した分だけ課金されるため、コスト効率が大幅に向上します。
本記事では、Lambda 関数の基本的な作成方法と、イベント駆動での実行を体験します。

この記事のメリット
- AWS Lambda の基本概念(関数、トリガー、実行ロール)を理解できる
- マネジメントコンソールから Lambda 関数を作成・実行する手順を習得できる
- テストイベントを使った関数の動作確認方法を体験できる
- CloudWatch Logs で実行ログを確認する方法を理解できる
- イベント駆動アーキテクチャの基本的な考え方を把握できる
キャラクター紹介
クラウド資格実践ラボの基礎学習記事では、ルクシーちゃんと代表の土肥が対話形式で AWS 認定試験で必要な知識をハンズオンとともに解説していくブログです。これからこのブログを案内する2人を紹介します。

ルクシーちゃん
クラウド資格に挑戦中の好奇心旺盛なナビゲーター。初学者目線で「これってなんだろう?」と素朴な疑問を投げかけ、知識を引き出していく役どころ。難しい内容も、ルクシーちゃんと一緒なら一歩ずつ理解できると思います!
土肥(とひ)
株式会社Luxyの代表であり同社の元エンジニア。これまでオンプレとAWS環境のインフラを担当。AWS認定資格の学習で得た知識をハンズオンとともに解説するのが得意。直近では新人の教育なども行っており、これから技術を学ぼうという方が納得できるように解説できることに喜びを感じているとのこと。

技術解説
AWS Lambda とは
Luxyちゃんとひさん、AWS Lambda ってよく聞くんですけど、どういうサービスなんですか?
Lambda は「イベント駆動型のサーバーレスコンピューティングサービス」だよ。ざっくり言うと、サーバーを自分で用意しなくても、コードをアップロードするだけで実行できる仕組みなんだ。



サーバーレスということは、裏側のサーバーは AWS が全部管理してくれるんですか?
そのとおり。OS のパッチ当てやスケーリングも AWS が面倒を見てくれるから、開発者はコードを書くことに集中できるんだ。対応するランタイムも Python、Node.js、Java、Go、.NET など幅広いよ。



へぇ、いろんな言語が使えるんですね!でも「イベント駆動」ってどういう意味ですか?
何かのイベント、つまり「きっかけ」が起きたときに自動的にコードが実行される仕組みのことだよ。Lambda 関数は以下のようなイベントソースからトリガーされるんだ。
- Amazon S3 のオブジェクト作成・削除
- Amazon API Gateway への HTTP リクエスト
- Amazon EventBridge のスケジュールルール
- Amazon DynamoDB Streams のレコード変更
- Amazon SNS の通知



S3 にファイルをアップロードしたら自動で処理が走る、みたいなことができるんですね!
そうそう、まさにそういう使い方が得意なサービスなんだ。
Lambda 関数の構成要素



Lambda 関数を作るときに、どんな要素を設定する必要があるんですか?
Lambda 関数は主に以下の要素で構成されているよ。表にまとめるとこんな感じだね。
| 要素 | 説明 |
|---|---|
| 関数コード | 実行されるプログラムコード |
| ランタイム | コードの実行環境(Python 3.13、Node.js 22.x など) |
| ハンドラー | Lambda が呼び出すエントリーポイント(例: lambda_function.lambda_handler) |
| 実行ロール | Lambda 関数が AWS リソースにアクセスするための IAM ロール |
| トリガー | 関数を起動するイベントソース |
| メモリ・タイムアウト | 割り当てるメモリ量(128 MB〜10,240 MB)と最大実行時間(最大15分) |



けっこう項目が多いですね。メモリとタイムアウトも設定するんですか?
うん。メモリは 128 MB から最大 10,240 MB まで設定できて、タイムアウトは最大 15 分だよ。メモリを増やすと CPU パワーも比例して上がるから、処理が重い関数はメモリを多めに割り当てるといいんだ。



なるほど、メモリの設定がパフォーマンスにも影響するんですね!
ハンドラーの仕組み



さっきの表にあった「ハンドラー」って、もう少し詳しく教えてもらえますか?
ハンドラーは Lambda 関数の「入口」にあたる部分だよ。イベントが発生すると、Lambda サービスがこのハンドラーを呼び出して処理が始まるんだ。Python の場合は、こんなシグネチャになるよ。
def lambda_handler(event, context):
# event: トリガー元から渡されるイベントデータ
# context: 実行環境に関するメタデータ
return {
'statusCode': 200,
'body': 'Hello from Lambda!'
}


event と context という2つの引数を受け取るんですね。それぞれ何が入っているんですか?
event にはトリガー元のサービスから渡されるデータが入っているよ。例えば S3 トリガーならバケット名やオブジェクトキーが入ってくるんだ。context には関数名やメモリ制限、残りの実行時間といった実行環境のメタデータが含まれるよ。





event の中身はトリガー元によって変わるんですね。context で残り時間もわかるのは便利そうです!
そうなんだ。タイムアウトが近いときに処理を打ち切るような制御にも使えるから、覚えておくといいよ。
実行ロール



Lambda 関数が他の AWS サービスにアクセスするときは、どうやって権限を管理するんですか?
Lambda 関数には「実行ロール」という IAM ロールを紐づけるんだ。関数はこのロールの権限を使って S3 や DynamoDB などの AWS リソースにアクセスするよ。



実行ロールは自分で作らないといけないんですか?
関数の作成時に既存のロールを指定することもできるし、基本的な権限を持つロールを自動作成することもできるよ。自動作成の場合は AWSLambdaBasicExecutionRole というポリシーがアタッチされて、CloudWatch Logs へのログ出力権限が含まれるんだ。



ログ出力の権限がないと、せっかくの print 文も記録されないってことですか?
そのとおり。だから最低限 AWSLambdaBasicExecutionRole は必要なんだ。もし S3 や DynamoDB にアクセスしたい場合は、追加でポリシーをアタッチする必要があるよ。



最小限の権限から始めて、必要に応じて追加していくのが安全ですね!
実践
前提条件
- リージョン:
ap-northeast-1(東京) - IAM ユーザーに Lambda および CloudWatch Logs の操作権限があること
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| Lambda 関数 | hello-lambda-basic | 基本動作確認用の関数 |
| IAM ロール | (自動作成) | Lambda 実行ロール |
Lambda 関数を作成する
- AWS マネジメントコンソールにログインし、リージョンが
ap-northeast-1(東京)であることを確認します - 上部の検索バーに
Lambdaと入力し、表示された「Lambda」を選択します - 左側ナビゲーションの「関数」を選択し、「関数の作成」をクリックします
- 「一から作成」が選択されていることを確認します
- 以下の項目を入力します
- 関数名:
hello-lambda-basic - ランタイム:
Python 3.x(最新のものでOKです) - その他の項目はデフォルトのままにします
- 「関数の作成」をクリックします


- 関数が作成され、コードエディタが表示されることを確認します


関数コードを編集する
- 「コード」タブのコードエディタに、デフォルトのコードが表示されています
- コードを以下の内容に書き換えます
import json
import datetime
def lambda_handler(event, context):
current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
name = event.get('name', 'World')
message = f'Hello, {name}! Current time is {current_time}'
print(f'Received event: {json.dumps(event)}')
print(f'Generated message: {message}')
return {
'statusCode': 200,
'body': json.dumps({
'message': message,
'input_event': event
}, ensure_ascii=False)
}- 「Deploy」をクリックしてコードをデプロイします
- 「関数 hello-lambda-basic が正常に更新されました。」と表示されることを確認します


テストイベントで関数を実行する
- 「テスト」タブを選択します
- 「新しいイベントを作成」が選択されていることを確認します
- 以下の項目を入力します
- イベント名:
testEvent - イベント JSON:
{
"name": "Lambda Beginner"
}- 「テスト」をクリックします


- 実行結果が「成功」と表示されることを確認します
- 「詳細」を展開すると、レスポンスボディに
Hello, Lambda Beginner!を含むメッセージが表示されます


CloudWatch Logs で実行ログを確認する
- 「モニタリング」タブを選択します
- 「CloudWatch ログを表示」をクリックします
- CloudWatch のコンソールが開き、ロググループ
/aws/lambda/hello-lambda-basicが表示されます - 最新のログストリームを選択します
Received eventやGenerated messageといったログ出力が記録されていることを確認します


関数の設定を確認する
- Lambda コンソールに戻り、「設定」タブを選択します
- 「一般設定」で以下の値を確認します
- メモリ:
128MB - タイムアウト:
3秒 - 「アクセス権限」を選択すると、自動作成された実行ロールとアタッチされたポリシーを確認できます


まとめ
- AWS Lambda はサーバーレスでコードを実行できるサービスであり、サーバーの管理が不要
- Lambda 関数はハンドラーをエントリーポイントとして、
eventとcontextの2つのパラメータを受け取る - 関数の作成時に実行ロールが自動作成され、CloudWatch Logs への書き込み権限が含まれる
- テストイベントを使って任意のイベントデータで関数を実行し、動作確認ができる
print()関数で出力した内容は CloudWatch Logs に自動的に記録される- メモリやタイムアウトなどのリソース設定は「一般設定」で確認・変更できる









