AWS API Gateway + Lambda (Python) でモックを作ってみよう
前回記事での失敗
前回記事のAWS API Gatewayでモックを作ってみようで、API Gatewayの統合タイプ:Mock
でAPIのモックを作ってみました。
が、統合タイプ:Mock
ではPOSTのリクエストデータが取得できないようでした。
(参考:teratail AWS API GatewayでHTTPリクエストのjsonを取得したい)
そのため今回は統合タイプ:Mock
を使わず、統合タイプ:LAMBDA
で作っていくことにします。
PythonでLambda関数を作る
-
Amazon Lambdaコンソールで
関数の作成
ボタンから関数の作成画面に遷移する
- 基本的な情報の
関数名
に任意の関数名を入力する
- 基本的な情報の
ランタイム
で使用する言語を選択する(この記事ではPython 3.7を選んでいます)
- 基本的な情報のアクセス権限でロールを選択する(ロールの説明は省略 説明できるほど詳しくないので)
- 画面右下の
関数の作成
ボタンをクリックする
- 関数を作成する画面に遷移するので、関数コード欄にPythonコードを打ち込んでいく
Lambdaプロキシ統合を使用しない場合
- API Gatewayでの設定
- 統合タイプ:Lambda関数
- Lambdaプロキシ統合の使用:チェックOff
- Lambda関数コード
import json
def lambda_handler(event, context):
return {
'test_data': 123456,
'test_message': 'Hello, World!'
}
関数の作成
ボタンから関数の作成画面に遷移する関数名
に任意の関数名を入力するランタイム
で使用する言語を選択する(この記事ではPython 3.7を選んでいます)関数の作成
ボタンをクリックする- 統合タイプ:Lambda関数
- Lambdaプロキシ統合の使用:チェックOff
import json
def lambda_handler(event, context):
return {
'test_data': 123456,
'test_message': 'Hello, World!'
}
上記のように記述すると、ステータス 200としてreturnの内容がレスポンス本文として返されます。
ステータス 400等で返す場合は
import json
def lambda_handler(event, context):
raise Exception('400')
というような形で例外を発生させます。
例外を発生させた場合のレスポンス本文は、API Gatewayの統合レスポンス
で設定します。
API Gatewayでメソッドレスポンス
に該当ステータス(この場合は400)を追加し、統合レスポンス
の該当ステータスのマッピングテンプレートにレスポンス本文を入力します。
Lambdaプロキシ統合を使用する場合
- API Gatewayでの設定
- 統合タイプ:Lambda関数
- Lambdaプロキシ統合の使用:チェックOn
- Lambda関数コード
import json
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': json.dumps(
{
'test': 123456,
'test_message': 'Hello, World!'
}
)
}
ステータス 400等で返す場合は、statusCode
とbody
を書き換えます。
Lambdaプロキシ統合を使用している場合はAPI Gatewayの統合レスポンス
でレスポンス本文を設定する必要はありません。(というかLambdaプロキシ統合を使用している場合は統合レスポンス
は触れない)
Lambdaプロキシ統合を使用する場合の出力の基本は以下になります。(公式ドキュメントより)
{
"isBase64Encoded" : "boolean",
"statusCode": "number",
"headers": { ... },
"body": "JSON string"
}
複数のリソースからのリクエストを振り分ける
Lambdaプロキシ統合を使用するとAPI GatewayのリソースパスをLambda関数で受け取ることができるので、リソース毎にLambda関数を作るのではなくLambda関数を一つにまとめてみましょう。
API Gatewayのリソースパスはevent['path']
で取得できます。
import json
def lambda_handler(event, context):
path = event['path']
if path == '/proxy200':
return {
'statusCode': 200,
'body': json.dumps('Good Request!')
}
elif path == '/proxy400':
return {
'statusCode': 400,
'body': json.dumps('Bad Request..')
}
(API Gatewayで/proxy200
と/proxy400
というというリソースを作成した場合)
このようにevent['path']
の値で処理内容を分ければ、一つのLambda関数で複数のリソースに対応できます。
次回
前回と今回の内容で、API Gatewayでのモック作りがある程度出来るようになりました。
次回はSlackからAPI Gatewayモック作りを行えるようにしてみます。
プチ連載
1回目 AWS API Gatewayでモックを作ってみよう
2回目 AWS API Gateway + Lambda (Python) でモックを作ってみよう(本記事)
3回目 Slack + Lambda (Python) でAWS API Gatewayモックを作ってみよう
We're hiring!
AIチャットボットを開発しています。
ご興味ある方は Wantedlyページ からお気軽にご連絡ください!
参考記事
Qiita 【API Gateway】AWS Lambda統合のPythonでHello, world
AWSドキュメント API Gateway で Lambda エラーを処理する
Author And Source
この問題について(AWS API Gateway + Lambda (Python) でモックを作ってみよう), 我々は、より多くの情報をここで見つけました https://qiita.com/takeh/items/3915e47f58939a6fab88著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .