この記事の最終更新日: 2025年5月8日
はじめに
AWS のサーバーレスサービスである AWS Lambda を利用して、Python 製の API を構築してみましょう。AWS Lambda はサーバーを管理する手間を大幅に削減でき、API Gateway と組み合わせることで比較的簡単に HTTP(S) エンドポイントを公開できます。
本記事では、以下の流れで「Hello World」を返す API を構築してみます。
- Lambda 関数の作成
- コードの編集とテスト
- API Gateway の設定
- Lambda 関数との統合
- API のデプロイと動作確認
ここでは最小限の実装を紹介していますが、必要に応じてデータベース連携やログイン認証などの機能を追加していくことも可能です。

前提条件
- AWS アカウント をお持ちであること
- AWS Management Console にログインできること
- Python の基本的な文法を理解していること
- AWS Lambda や API Gateway の概要をざっくり知っているとスムーズ
補足: この記事では AWS CLI を使ったデプロイではなく、AWS マネジメントコンソールから直接操作する方法を紹介します。より本格的な開発・運用では、AWS CLI や AWS SAM (Serverless Application Model)、Serverless Framework などを活用してコード管理と CI/CD を行うケースが多いです。
ステップ 1: AWS Lambda 関数の作成
まずは Lambda 関数を新規作成し、Python コードを実行できる環境を用意しましょう。
1. Lambda の画面へ移動
- AWS マネジメントコンソールにログイン
- サービス検索バーから Lambda を入力し選択
2. 関数の作成
Lambda コンソール画面にて、以下のように設定します。
- [Create function](関数を作成)ボタンをクリック
- Author from scratch(一から作成)を選択
- 必須入力項目
- 関数名: 例)
hello_lambda
- ランタイム:
Python 3.9
(あるいは 3.8 や 3.10 でも可) - アーキテクチャ: x86_64 (ARM も選択可能ですが、ここではデフォルト設定で OK)
- デフォルトロール: 「Create a new role with basic Lambda permissions」を選択ロールとは、AWS リソースに対して何ができるかを定義した IAM (Identity and Access Management) の概念です。Lambda で最低限必要となるのは、ログを保存するための CloudWatch に書き込みできるポリシー(
AWSLambdaBasicExecutionRole
)などです。
- 関数名: 例)
- 画面下部の [Create function] ボタンをクリック
これで空の Lambda 関数が作成されます。
ステップ 2: Lambda 関数のコードを編集
1. コードエディタで Python コードを記述
Lambda 関数の詳細画面に移動すると、上部に「Code」のタブがあるので、そこをクリックしてください。エディタにデフォルトでサンプルコードが入っている場合がありますが、以下のようなシンプルなコードに置き換えましょう。
def lambda_handler(event, context):
"""
AWS Lambda が呼び出された時のエントリポイント関数。
event: dict 形式で API Gateway 等から渡されるイベント情報
context: ランタイム情報やメモリなどコンテキスト情報
"""
# 返却するレスポンス
response = {
"statusCode": 200,
"body": "Hello World from Lambda!"
}
return response
ここでのポイント:
- 関数名
lambda_handler
は Lambda のデフォルトエントリポイント(handler)として設定されるため、原則変更しない方が無難です。(設定画面で変えることもできます。) event
にリクエストボディやクエリパラメータなどが入り、context
には Lambda 実行環境に関する情報が入ります。- API Gateway を経由して呼び出される場合は、
return
するオブジェクトが API のレスポンスとなります。statusCode
は HTTP ステータスコードbody
は文字列として扱われるため、JSON を返す場合はjson.dumps
などで文字列に変換します。
2. テストイベントを使った動作確認
コードをエディタに貼り付けたら、画面右上にある Test ボタンを使ってローカルテストを行えます。
- Test ボタンをクリック
- 「Configure test event」(テストイベントの作成)ダイアログが出るので、適当な名前を(例:
testEvent
)入力 - イベント JSON はデフォルトのままでも OK
- [Create] ボタンを押してから Test ボタンを再度押下
テストの結果が画面下部に表示され、{"statusCode":200,"body":"Hello World from Lambda!"}
が返ってくれば OK です。
補足:
event
の内容によって動作を分岐する場合は、テストイベントを自由に編集して確認できます。
ステップ 3: API Gateway でエンドポイントを作成
ここからは API Gateway の設定を行い、Lambda 関数を HTTP(S) 経由で呼び出せるようにしていきます。
1. API Gateway の画面へ移動
- AWS マネジメントコンソールで「API Gateway」を検索
- 「API Gateway」を選択
2. API の作成 (REST API)
API Gateway には複数のタイプ(REST API / HTTP API / WebSocket API など)がありますが、
ここでは学習用途として「REST API (API Gateway v1)」を使います。
- [Create API](API の作成)をクリック
- 「REST API」を選択し、[Build] をクリック
- 「New API」を選択し、必要な項目を入力
- API name: 例)
hello-api
- Endpoint Type:
Regional
(基本はこれで OK)
- API name: 例)
- 最後に [Create API] ボタンを押す
3. Resource とメソッドを作成
続いて、API ゲートウェイのリソース(エンドポイントのパス)と、HTTP メソッド(GET, POST など)を設定します。
- 作成した API の左メニューにある「Resources」を選択
- 「Actions」 -> [Create Resource] をクリック
- リソース名を
hello
と入力(Resource Path は/hello
となる) - [Create Resource] ボタンをクリック
次に、/hello
に対して GET メソッドを作成します。
/hello
を選択している状態で、「Actions」 -> [Create Method] をクリック- 下向き矢印をクリックして「GET」を選択し、チェックボタンを押す
- 新しく GET メソッドが追加される
ステップ 4: Lambda と API Gateway の連携
1. メソッドの Integration Type 設定
GET メソッドをクリックすると、右側にメソッドの設定画面が表示されます。ここで Lambda 関数を呼び出すように設定します。
- Integration type: 「Lambda Function」を選択
- Lambda Region: Lambda 関数を作成したリージョン(例:
ap-northeast-1
) - Lambda Function:
hello_lambda
- [Save] ボタンをクリックすると、API Gateway から権限付与を求められるので [OK] をクリック
これで、GET /hello
を呼び出すと、AWS Lambda 関数 hello_lambda
が起動するように紐付けられました。
注意: Lambda 関数名を設定する際に、スペルミスやリージョンの不一致があるとエラーが出ます。正しいものを選択してください。
ステップ 5: API のデプロイ
1. デプロイ作業の必要性
API Gateway のリソースやメソッドを定義しただけでは、まだ外部からアクセスできません。
「デプロイ」 と呼ばれる作業を行い、ステージ(環境)を作って初めてインターネット経由で呼び出せるようになります。
2. ステージの作成とデプロイ
- 左メニューの「Actions」 -> [Deploy API] をクリック
- 「Deployment Stage」にて「[New Stage]」を選択し、ステージ名を
dev
と入力 (またはprod
,test
など適宜) - [Deploy] をクリック
3. Invoke URL の確認
デプロイに成功すると、画面上部に Invoke URL が表示されます。これが公開されるエンドポイントのベース URL です。
例:
今回は /hello
リソースを作成したので、実際のアクセス先は以下のようになります。
ステップ 6: 動作確認
最後に、ブラウザまたは curl
などを使ってアクセスし、レスポンスを確認しましょう。
1. ブラウザで確認
上記で表示された URL にアクセスしてみます。
何らかの文字列が表示されれば成功です。今回は "Hello World from Lambda!"
という文字列が返ってくるはずです。
2. curl コマンドでの確認
ターミナルやコマンドプロンプトで以下のように curl
コマンドを実行します。
curl https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/dev/hello
同様に "Hello World from Lambda!"
のレスポンスが返ってきたら、API が正しく動いていることを確認できます。
発展: より実践的な活用ポイント
1. Request Body / Path Parameters / Query Parameters
API Gateway では、クエリパラメータ や パスパラメータ、リクエストボディ を Lambda に渡せます。たとえば GET /hello/{username}
のように定義して、username
を取得するには、API Gateway のマッピングテンプレートを活用したり、event["pathParameters"]
や event["queryStringParameters"]
から取得します。
def lambda_handler(event, context):
username = event["pathParameters"]["username"] if "pathParameters" in event else "NoName"
greeting = f"Hello, {username}!"
response = {
"statusCode": 200,
"body": greeting
}
return response
2. JSON を返す
API から JSON を返したい場合は、Python の json
モジュールを使ってシリアライズしましょう。
import json
def lambda_handler(event, context):
data = {
"message": "Hello",
"value": 123
}
response = {
"statusCode": 200,
"body": json.dumps(data),
"headers": {
"Content-Type": "application/json"
}
}
return response
3. ログ出力 (CloudWatch Logs)
Lambda は実行時のログを CloudWatch Logs に送信します。Python で標準出力 (print
) や logging
ライブラリを使えば、実行状況やデバッグ情報を残せます。
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
logger.info("Lambda function is invoked!")
...
API Gateway 側でもアクセスログや詳細ログの設定ができ、リクエストがどのように処理されたかを追跡できます。
4. IAM ロールとセキュリティ
Lambda から他の AWS リソース(DynamoDB, S3 など)にアクセスする場合は、適切な IAM ポリシーを付与したロールを割り当てる必要があります。最小権限の原則に従い、必要なアクセスのみ許可してください。
5. バージョニングとエイリアス
Lambda では、デプロイ時に自動でバージョンが付与されます。$LATEST
の他に、固定バージョンを使うことで、リリース管理をより安全に行うことができます。また、エイリアス を使ってステージごと(dev, prod など)に異なるバージョンを割り当てる運用も一般的です。
6. コストとスケーラビリティ
- Lambda はリクエスト数と実行時間 (GB-秒) に応じた従量課金制です。小規模利用なら無料枠(Lambda 無料利用枠で毎月 100 万回まで)で収まるケースも多いです。
- 負荷が高まった場合、自動的に水平スケーリングが走り、複数の Lambda インスタンスでリクエストを処理してくれます。
- 一方で、同時実行数に上限が設定されているので、大量のアクセスが見込まれる場合は事前に 同時実行数 や プロビジョンドコンカレンシー の設定を検討しましょう。
7. ローカルでの開発・テスト
実際の開発では、AWS サービスとやりとりをせずにローカル環境でテストしたい場面が多々あります。その際は AWS SAM の「sam local」機能や Serverless Framework などを活用すると便利です。ホットリロード付きでローカル検証できるので、デプロイサイクルが減り効率的に開発できます。
まとめ
以上のステップで、AWS Lambda と API Gateway を使った Python 製 API の公開ができました。サーバーの構築や管理が不要という大きなメリットがある一方、従来のサーバー常駐型アプリケーションとは少し異なる設計が必要です。
しかし一度慣れてしまえば、スケーラブル かつ 手軽 な構成でサービスを迅速に立ち上げることができます。
- 最低限のハローワールド実装: Lambda + API Gateway で HTTP GET リクエスト→レスポンスの流れを体験
- JSON や複雑な構造のレスポンス:
json.dumps()
を使ってレスポンスを拡張 - DynamoDB / S3 など、AWS リソースと連携: IAM ロールを付与し、権限管理を適切に行う
- 認証・認可(Cognito / JWT / IAM 認証): API Gateway には認証を挟む仕組みがあり、企業システムや個人プロジェクトにも対応
みなさんもぜひ、プライベートプロジェクトや学習用途で試してみてください。サーバーレスに慣れると、アイデアを形にするまでの時間が驚くほど短くなるはずです。
参考リンク
- AWS Lambda 公式ドキュメント
- Amazon API Gateway 公式ドキュメント
- AWS SAM (Serverless Application Model)
- Serverless Framework
本記事が、Lambda + API Gateway を使ったサーバーレスアプリケーション開発の入門としてお役に立てば幸いです。ぜひいろいろなユースケースで活用してみてください!

大阪のエンジニアが書いているブログ。
コメント