たろ
Lambda function URLs 神アップデートやん!が、POSTデータってどうやって取得できるの?
こんな疑問にお答えします。
本記事の内容
- Lambda function URLs を使ってみた!
- POSTデータをPythonで受け取ってみた
はじめに
こんにちはー。
神アップデートされたLambda function URLsを使ってみました!
これまでは API Gateway を駆使しめんどくさい設定を行なっていましたが Lambda で簡単にエンドポイントを作成できます!!!!!!!
ありがとうLambda!ありがとうAWS様!
てなわけで早速エンドポイントを作成しPOSTデータを受け取ってみます!
環境
- AWS
- Lambda
- Python 3.9
AWS Lambda 作成
もろもろの設定は割愛します。下記の箇所を有効化だけしました。
- 関数 URL を有効化
すでにエンドポイントがあること前提で話を進めます。
デフォルトのエンドポイントにアクセスしてみた
このURLをブラウザで叩くと・・・
import json
def lambda_handler(event, context):
# TODO implement
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
初期のコードがレスポンスされます。
Lambda – Python に POST リクエストを投げてみた
これまでのLambdaの使い方通り event 内にPOST情報が格納されているだろうと思い、まずは中身を確認します。
curl -X POST -H 'Content-Type: application/json' -d '{ "hoge": "fuga" }' https://hogehogefugafuga.lambda-url.region.on.aws/
POSTリクエストをターミナルで実行!
$ curl -X POST -H 'Content-Type: application/json' -d '{ "hoge": "fuga" }' https://hogehogefugafuga.lambda-url.region.on.aws/
# 以下の結果が戻ってきました(一部削除済み)
{
"version": "2.0",
"routeKey": "$default",
"rawPath": "/",
"rawQueryString": "",
"headers": {
"content-length": "18",
"x-amzn-trace-id": "**************************************",
"x-forwarded-proto": "https",
"host": "**************************************",
"x-forwarded-port": "443",
"content-type": "application/json",
"x-forwarded-for": "**************************************",
"accept": "*/*",
"user-agent": "curl/7.64.1"
},
"requestContext": {
"accountId": "anonymous",
"apiId": "**************************************",
"domainName": "**************************************",
"domainPrefix": "**************************************",
"http": {
"method": "POST",
"path": "/",
"protocol": "HTTP/1.1",
"sourceIp": "**************************************",
"userAgent": "curl/7.64.1"
},
"requestId": "**************************************",
"routeKey": "$default",
"stage": "$default",
"time": "13/May/2022:03:17:05 +0000",
"timeEpoch": **************************************
},
"body": "{ \"hoge\": \"fuga\" }",
"isBase64Encoded": false
}
なるほどー!
"body": "{ \"hoge\": \"fuga\" }",
POSTしたデータを発見!!!
bodyにポストデータが格納されているようでした。
Python で POST データを取得するには
ここで素直に event[‘body’][‘hoge’] のような感じではエラーとなるので、以下のようにコードを書き換えます。
import json
def lambda_handler(event, context):
# TODO implement
body = json.loads(event['body'])
hoge = body['hoge']
return {
'statusCode': 200,
'body': json.dumps(hoge)
}
もう一度リクエストを投げてみると・・・
$ curl -X POST -H 'Content-Type: application/json' -d '{ "hoge": "fuga" }' https://hogehogefugafuga.lambda-url.region.on.aws/
"fuga"
キーとバリューを認識して値を想定通りに返すことができました。
おわりに
まとめ
- Lambda 新機能 Lambda function URLs を使ってみました
- POSTデータを Lambda – Python で取得する方法を紹介しました
- Lambda は 神!