httpでPOSTする受け口をSAM CLI + API Gateway + Lambdaで作る

[最終更新] 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

コメントを残す

メールアドレスが公開されることはありません。