はじめに

apigateway -> lambdaって作りでアプリケーションを作ることが多くなてきて、
コード書いて、アップロードして、api叩いてデバッグしてってめんどくさい、ローカルでもget postとかで開発したい!
ってことから作りました。
とりあえずクエリーパラメータとjsonを受け取れるところまで!

apigatewayとlambdaを設定する

他のサイトを参考にしてください

  • lambdaはこんなの

スクリーンショット 2017-06-02 17.28.06.png

lambda.py

def handler(event, context):

    res = {}
    res['method'] = event['context']['http-method']
    res['url'] = event['params']['path']
    res['query-string'] = event['params']['querystring']
    res['json-body'] = event['body-json']

    return res
  • ApiGatewayのマッピングテンプレートはこんな感じ
#set($allParams = $input.params())
{
"body-json" : $input.json('$'),
"base64-body": "$util.base64Encode($input.body)",
"params" : {
#foreach($type in $allParams.keySet())
  #set($params = $allParams.get($type))
"$type" : {
  #foreach($paramName in $params.keySet())
  "$paramName" : "$util.escapeJavaScript($params.get($paramName))"
      #if($foreach.hasNext),#end
  #end
}
  #if($foreach.hasNext),#end
#end
},
"stage-variables" : {
#foreach($key in $stageVariables.keySet())
"$key" : "$util.escapeJavaScript($stageVariables.get($key))"
  #if($foreach.hasNext),#end
#end
},
"context" : {
  "http-method": "$context.httpMethod",
  }
}

これをローカルで開発したい!

dockerを使って開発環境を作る
githubに上げてあります。

docker build

docker-compose build

docker run

docker-compose up

lambdaを動かす

localhostの:80にアクセスするとlambda.pyが動きます

#GET
curl localhost/aaa?a=1

{
    "json-body": {},
    "method": "GET",
    "query-string": {
        "a": "1"
    },
    "url": "/aaa"
}


#POST
curl -H "Content-type: application/json" -X POST -d '{"a":1,"b":2}' localhost/aaa

{
    "json-body": {
        "a": "1",
        "b": "2"
    },
    "method": "POST",
    "query-string": {},
    "url": "/aaa"
}

今後

urlパラメータも取れるようにします