Node.js
curl
python3
lambda
APIGateway

API Gateway から Lambda にアクセスする

次の Lambda 関数に、API Gateway からアクセスする方法です。

index.js
// ---------------------------------------------------------------------
//
//  index.js
//
//                      Nov/03/2017
//
// ---------------------------------------------------------------------
console.log ("*** start *** index.js ***")

exports.handler = function (event,context,callback)
{
    var name = (event.name === undefined ? 'No-Name' : event.name)
    console.log('"Hello":"' + name + '"')
    console.log ("*** handler *** start ***")
    console.log ("event.key1 = " + event.key1)
    console.log ("event.key2 = " + event.key2)
    console.log ("event.key3 = " + event.key3)
    console.log ("おはようございます。")
    var dt = new Date()
    const year = dt.getFullYear()
    const month = dt.getMonth()+1
    const date = dt.getDate()
    const hours = dt.getHours()
    const minutes = dt.getMinutes()
    const seconds = dt.getSeconds()
    var str_out = "" + year + "-" + month + "-" + date
    str_out += " " + hours + ":" + minutes + ":" + seconds
    console.log(str_out)
    console.log(dt.toUTCString())
    console.log ("version Nov/03/2017 PM 14:16")
    console.log ("*** handler *** end ***")

    const rvalue = {"Hello": name,
            "city": "シモツケ"}
    callback(null, rvalue) // SUCCESS with message
}

// ---------------------------------------------------------------------

この関数を、morning_function という名前で Lambda に登録します。
登録の方法は、こちらです。
aws cli でラムダを使う

次との違いは、uri が、http か、lambda の違いです。
aws cli で API Gateway の API を作成する

1) RestApi を作成。出力にrest-api-id が表示される

restapi_create.sh
#
aws apigateway create-rest-api --name 'Afternoon AAA' \
    --region ap-northeast-1
#

2) RestApi のルートリソース ID を取得

restapi_resource.sh
#
REST_API_ID=1awvlqh2cc
#
aws apigateway get-resources \
    --rest-api-id $REST_API_ID \
    --region ap-northeast-1
#

3) Method を作成します。

gateway_oct1801.png

gateway_oct1802.png

4) テストをします。

gateway_oct1804.png

gateway_oct1805.png

5) デプロイします。

gateway_oct1806.png

gateway_oct1807.png

6) curl でテストします。

restapi_test.sh
#
REST_API_ID=oa7ucmnfhj
#
URL="https://"$REST_API_ID".execute-api.ap-northeast-1.amazonaws.com/test01"
#
curl  -H "Content-Type: application/json" -X POST -d@in01.json $URL
in01.json
{"name": "夏目漱石",
"key1": "aaaa",
"key2": "bbbb",
"key3": "cccc"}

7) python でテストします。

restapi_test.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
#
#   restapi_test.py
#
#                   Oct/18/2017
# ----------------------------------------------------------------
import sys
import json
import requests
# ----------------------------------------------------------------
#
rest_api_id="oa7ucmnfhj"
#
url="https://" + rest_api_id + ".execute-api.ap-northeast-1.amazonaws.com/test"
#
print(url)
#
name = '夏目漱石'
key1 = 'abcdef'
key2 = 'test2'
key3 = 'test3'
#
payload = {'Content-Type': 'application/json',
        'name': name,
        'key1': key1,
        'key2': key2,
        'key3': key3}
#
rr = requests.post(url, data=json.dumps(payload))
#
print(rr.text)
#
# ----------------------------------------------------------------

8) Node.js でテストします。

restapi_test.js
#! /usr/bin/node
// ---------------------------------------------------------------
//
//  restapi_test.js
//
//                  Oct/18/2017
//  
// ---------------------------------------------------------------
var Client = require('node-rest-client').Client

var client = new Client()
const args = {
    data: { "name": "夏目漱石" },
    headers: { "Content-Type": "application/json" }
}

const rest_api_id="oa7ucmnfhj"


const url="https://" + rest_api_id + ".execute-api.ap-northeast-1.amazonaws.com/test"

client.post(url, args, function (data, response) {
    // parsed response body as js object 
    console.log(data)
    // raw response 
//    console.log(response);
})

//
// ---------------------------------------------------------------