[最終更新] 2020年4月29日
httpで何かPOSTしてその内容を確認したい時がある。しかしそのためだけにわざわざWebサーバーたてるのも面倒。ということで、API Gateway + Lambdaでさらっと確認できるようの受け口を作りたい。
SAM CLIを使って構築する。楽。
環境
- macOS 10.15.4
- AWS SAM CLI 0.47.0
- Python 3.8
どうでもいいけどほとんどクラウド環境になってくると、ローカルの環境書いても片手落ち感すごい。
受け口を作る
ファイルを準備する。最初に大まかな構成を書く。なお、環境にもあるとおり、Lambda関数はPython 3.8を想定している。ディレクトリ名はなんでもいいが、そのまま使えば設定ファイルもコピペでできる。
.
├── post_recv
│ ├── app.py
│ └── requirements.txt
├── samconfig.toml
└── template.yaml
post_recv/app.py
import json
def lambda_handler(event, context):
print(event)
print(event['body'])
return {
"statusCode": 200,
"body": json.dumps({
"message": event['body'],
}),
}
post_recv/requirements.txt
特にライブラリはいらないので空ファイルでよい。ないとsam buildで怒られる。
template.yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
test-api
Sample SAM Template for test-api
# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
Function:
Timeout: 3
Resources:
PostRecvFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: post_recv/
Handler: app.lambda_handler
Runtime: python3.8
Events:
HelloWorld:
Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
Properties:
Path: /post
Method: post
samconfig.toml
以下で準備する。
$ sam build
$ sam deploy --guided
-> スタック名適当に(後でも使うので覚えておく)
-> region適当に。東京regionは ap-northeast-1
-> 後は enter でOK
2回目以降のsam deployは–guided なしでよい。
確認
API Gatewayから作成したendpointを確認する。コンソール画面から確認してもよいが、ここではコマンドを用いる(参考「curlでJSONをPOSTする – Qiita」)。
$ aws apigateway get-rest-apis
先の手順で作成したstack名がnameになっているもののidを確認する。で、以下を投げる。
$ curl -X POST -d "{\"key\":\"val\",\"key2\":\",val2\"}" "https://確認したID.execute-api.ap-northeast-1.amazonaws.com/Prod/post"
-> {"message": "{\"key\":\"val\",\"key2\":\",val2\"}"}
CloudWatchからも確認可能。
後片付け
使いおわったらスタックを始末する。
$ aws cloudformation delete-stack --stack-name スタック名
以上。
関連記事
aws の記事
- [2020年12月8日] DynamoDB から DocumentClient で get() した StringSet型 の値を取り出す
- [2020年11月20日] AWS Lambdaでイベント起動した時にeventに渡されるパラメータあれこれ
- [2020年10月13日] AWS Lambda (Python 3.8)から Amazon Elasticsearchを使う(LambdaはSAMで)
- [2020年10月12日] AWS SAM CLIでSNSからLambdaを起動する(Python 3.8)、S3からSNSに通知する
- [2020年5月13日] Grafana on EC2 で Let’s Encrypt 使ってSSL
- ---本記事---
- [2020年4月26日] DynamoDBで多対多のテーブル設計
- [2020年4月17日] S3に指定のバケットにファイル生成したらSQSに通知
- [2019年6月12日] とにかくCloudSearch + boto3で全文検索するために学習する
- [2019年4月21日] DynamoDBのテーブル設計をするとき、自分に問いかけていること
- [2019年4月16日] S3 + CloudFrontでS3にファイルをアップロードしたら自動でキャッシュをクリアする
スポンサーリンク