Skip to main content

AWS Lambda とは?基本的な使い方や関数の作成を学ぼう

Tags:

アプリケーション開発ではサーバーの管理や起動・停止の自動化など、コード以外の作業が増えがちです。AWS Lambda はサーバーのプロビジョニングや管理を気にしないで、コードの実行だけに集中できるサーバーレスコンピューティングサービスです。本記事では Lambda の基本概念から実際の関数作成・実行手順まで説明します。

AWS Lambda とは

Lambda は AWS が提供するサーバーレスのコンピューティングサービスです。コードをアップロードするだけで実行環境が自動的に準備され、リクエストに応じてスケールします。サーバーの管理や容量のプロビジョニングを自分で行う必要はないです。

実行したいコードを「関数」という単位で管理し、HTTP リクエスト・S3 へのファイルアップロード・DynamoDB のストリームなど、さまざまなイベントをトリガーにして実行できます。料金はコードが実行されている時間にのみ発生するため、常時稼働のサーバーと比較してコストを抑えやすいです。

主な特徴

Lambda にはサーバーレスならではの特徴があります。それぞれの特徴を把握しておきましょう。

特徴概要
サーバー管理不要OS のパッチ適用や容量の管理は AWS が行うため、コードの開発に集中できる
自動スケーリングリクエスト数に応じて自動でスケールし、急なトラフィック増加にも対応する
従量課金関数が実行された時間(1 ms 単位)とリクエスト数に応じた課金で、アイドル時間はコストが発生しない
イベント駆動S3・API Gateway・DynamoDB など AWS の各サービスやカスタムイベントをトリガーにして実行できる
タイムアウト制限最大実行時間は 15 分のため、長時間処理が必要なバッチ処理などには向かない場合がある

コールドスタートと呼ばれる、初回実行時や一定時間アイドル後の起動遅延が発生することがある点も頭に入れておきましょう。プロビジョニング済み同時実行数とは、あらかじめ指定した数の実行環境を初期化した状態で待機させておく機能です。レスポンスタイムが重要な用途では、この機能を有効にすることでコールドスタートを回避できます。

サポートするランタイム

Lambda は多くのプログラミング言語のランタイムをサポートしています。サポート外の言語が必要な場合はカスタムランタイムを用意することもできます。

ランタイム対応バージョン(例)
Python3.9 / 3.10 / 3.11 / 3.12 / 3.13
Node.js18.x / 20.x / 22.x
Java11 / 17 / 21
Go1.x(provided.al2023)
Ruby3.2 / 3.3
.NET8

各ランタイムには AWS が管理するマネージドランタイムと、カスタムランタイム(provided.al2023)の 2 種類があります。マネージドランタイムはセキュリティパッチの適用を AWS が行いますが、サポートが終了したランタイムは廃止されるため定期的なバージョンアップが必要になります。

AWS CLI で Lambda を使ってみる

AWS CLI を使って Python の Lambda 関数を作成し、実行するまでの流れを確認します。関数には実行に必要な権限を持つ IAM ロールが必要なため、まずロールを作成してから関数を作成する手順になります。

IAM ロールの作成

Lambda 関数が実行時に使用する IAM ロールを作成します。まず、Lambda がロールを引き受けられるようにするための信頼ポリシーファイルを作成します。

cat << 'EOF' > trust-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
EOF

作成したファイルを使って IAM ロールを作成します。

❯ aws iam create-role \
--role-name exrecord-lambda-role \
--assume-role-policy-document file://trust-policy.json
{
"Role": {
"Path": "/",
"RoleName": "exrecord-lambda-role",
"RoleId": "AROA0a1b2c3d4e5f67890",
"Arn": "arn:aws:iam::123456789012:role/exrecord-lambda-role",
"CreateDate": "2026-04-18T04:00:35+00:00",
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
}
}

次に、CloudWatch Logs へのロググループ・ストリームの作成とログ書き込みを許可するマネージドポリシーをアタッチします。AWSLambdaBasicExecutionRole は CloudWatch Logs への書き込みのみを許可するポリシーで、Lambda からログを記録するために必要です。

❯ aws iam attach-role-policy \
--role-name exrecord-lambda-role \
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

関数コードの準備

シンプルな Python 関数を作成し、zip ファイルにまとめます。

cat << 'EOF' > lambda_function.py
def lambda_handler(event, context):
print("Hello from Lambda!")
return {
"statusCode": 200,
"body": "Hello, World!"
}
EOF

作成したファイルを zip に圧縮します。

zip function.zip lambda_function.py
adding: lambda_function.py (deflated 21%)

関数の作成

IAM ロールの ARN と zip ファイルを指定して Lambda 関数を作成します。--handler には ファイル名.関数名 の形式でエントリーポイントを指定します。

❯ aws lambda create-function \
--function-name exrecord-hello \
--runtime python3.12 \
--role arn:aws:iam::123456789012:role/exrecord-lambda-role \
--handler lambda_function.lambda_handler \
--zip-file fileb://function.zip
実行結果
{
"FunctionName": "exrecord-hello",
"FunctionArn": "arn:aws:lambda:ap-northeast-1:123456789012:function:exrecord-hello",
"Runtime": "python3.12",
"Role": "arn:aws:iam::123456789012:role/exrecord-lambda-role",
"Handler": "lambda_function.lambda_handler",
"CodeSize": 302,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2026-04-18T04:01:54.411+0000",
"CodeSha256": "0a1b2c3d4e5f67890abcdef1234567890abcdef1234567890abcdef1234567890",
"Version": "$LATEST",
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "0a1b2c3d-4e5f-6789-0abc-def123456789",
"State": "Pending",
"StateReason": "The function is being created.",
"StateReasonCode": "Creating",
"PackageType": "Zip",
"Architectures": [
"x86_64"
],
"EphemeralStorage": {
"Size": 512
},
"SnapStart": {
"ApplyOn": "None",
"OptimizationStatus": "Off"
},
"RuntimeVersionConfig": {
"RuntimeVersionArn": "arn:aws:lambda:ap-northeast-1::runtime:0a1b2c3d4e5f67890"
},
"LoggingConfig": {
"LogFormat": "Text",
"LogGroup": "/aws/lambda/exrecord-hello"
}
}

関数の実行

作成した関数を AWS CLI から実行します。実行結果は指定したファイルに書き込まれます。

❯ aws lambda invoke \
--function-name exrecord-hello \
--payload '{}' \
response.json
{
"StatusCode": 200,
"ExecutedVersion": "$LATEST"
}

レスポンスの中身を確認します。

cat response.json
{"statusCode": 200, "body": "Hello, World!"}

関数が正常に実行され、定義したレスポンスが返ってきています。ログは CloudWatch Logs の /aws/lambda/exrecord-hello グループに記録されます。

関数の削除

不要になった関数とロールは削除しましょう。関数を先に削除してから、IAM ロールのポリシーをデタッチしてロールを削除する順番で進めます。

❯ aws lambda delete-function \
--function-name exrecord-hello
{
"StatusCode": 204
}

IAM ロールを削除する前に、アタッチしたポリシーをデタッチします。

❯ aws iam detach-role-policy \
--role-name exrecord-lambda-role \
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

ポリシーをデタッチしてからロールを削除します。

❯ aws iam delete-role \
--role-name exrecord-lambda-role

まとめ

AWS Lambda の基本概念と AWS CLI を使った関数の作成・実行手順について説明しました。

  • Lambda はサーバーのプロビジョニングや管理が不要なサーバーレスコンピューティングサービス
  • イベント駆動で動作し、リクエスト数に応じて自動的にスケールする
  • 料金はコードの実行時間とリクエスト数に基づく従量課金で、アイドル時間のコストは発生しない
  • Python・Node.js・Java など多くのランタイムをサポートしており、カスタムランタイムも利用できる
  • 関数の実行には信頼ポリシーを設定した IAM ロールが必要で、CloudWatch Logs にログを記録するには AWSLambdaBasicExecutionRole をアタッチする