下記でAPI GatewayとLambdaを連携させてみました。

"API Gateway"のバックエンドを"Lambda"にしてJSONデータをエコーさせる

今回はLambdaから更に別のAWSコンポーネントと連動させてみたいと思います。
(つまりLambdaのPythonのBotoの練習です)

具体的には下記のようにJSONデータをAPI GatewayにPOSTして、
バックエンドのLambdaが、そのJSONデータをSQSにエンキューさせてみます。

Untitled%283%29+%283%29

基本的には上記リンクのLambdaファンクションの部分を
POSTされたJSONデータをSQSにエンキューするように修正した形となります。

Lambdaのコード

下記のように実装しました。(今回はロギングまわりも改善しています)

import json
import boto3
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    try:
        logger.info(event)
        response = boto3.client('sqs').send_message(
            QueueUrl = 'https://sqs.ap-northeast-1.amazonaws.com/00000000000/test',
            MessageBody = json.dumps(event)
        )
        logger.info(response)
        return response
    except Exception as e:
        logger.error(e)
        raise e

2015-10-09_08-32-31

IAMの設定

Lambdaファンクションには”lambda_basic_execution”という
IAMロールをつけていますが、このロールにSQSの処理を行うための
ポリシーをアタッチする必要があります。

2015-10-09_08-35-03

2015-10-09_08-37-21

2015-10-09_08-38-13

Lambdaのテスト

まずはテスト用のJSONデータを設定します。

2015-10-09_08-39-36

2015-10-09_08-40-25

そして、実際にテストです。

2015-10-09_08-40-58

実行結果のログはCloudWatch Logsで確認します。
([INFO]等のロギングまわりの改善も確認できます)

2015-10-09_08-44-59

実際にSQSのキューにメッセージ(JSONデータ)が溜まっていることも確認できます。

2015-10-09_08-46-26

API Gatewayのテスト

実際にCURLでAPI Gatewayにアクセスしてテストしてみます。

$ curl -d '{"key1":"value7","key2":"value8","key3":"value9"}' https://8vdagewkwe.execute-api.ap-northeast-1.amazonaws.com/prod
{"MD5OfMessageBody": "ee7ad5a858124910f959a2823d4ceab0", "ResponseMetadata": {"HTTPStatusCode": 200, "RequestId": "98eac97c-7480-52c6-b661-87ed97272520"}, "MessageId": "a4185f6a-6861-44b3-995e-e0f2d07bedb5"}

この時のJSONデータもSQSにエンキューされたことが確認できます。

2015-10-09_08-48-19

元記事はこちら

“API Gateway → Lambda → SQS”でJSONデータをエンキューする