AWS LambdaへのJSON入力はごっつええかんじ

2018.05.17

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS Lambdaでは、json形式でLambda関数に入力できます。

Python3で試してみました。

Lambdaへの入力と受け取り

Lambda実行時に、PayloadとしてJSON形式のデータを渡せます。{"key":value}といった形です。 Lambda関数では、event['key']でvalueを取得できます。

Payloadの階層が深い場合、keyを繋げます。 Payloadが{"name": "koki", "like": {"aws": "s3", "sports": "soccer"}}の場合、Lambda関数ではevent['like']['aws']で"s3"を取得できます。

サンプルアプリ

サンプルアプリを作ってみました。 引数に数字を与えて実行すると、3と5の公倍数の時に"Fizz Buzz!"、3の倍数の時に"Fizz!"、5の倍数の時に"Buzz!"と表示します。

$ python3 InvokeLambda.py 6
"Fizz!"
$ python3 InvokeLambda.py 10
"Buzz!"
$ python3 InvokeLambda.py 30
"Fizz Buzz!"

InvokeLambda.py

Lambdaの起動(Invoke)は、AWS SDK for Python (Boto3) を使いました。 Lambda関数testLambdaを起動します。

Payloadとして、JSON形式のデータを入力します。{"number":30}といった形です。 結果は、response['Payload'].read().decode('utf-8')で表示します。

# -*- coding: utf-8 -*-
import boto3
import sys

args = sys.argv
num = args[1]

client = boto3.client('lambda')
response = client.invoke(
    FunctionName='testLambda',
    InvocationType='RequestResponse',
    Payload='{\"number\":' + num + '}'
)
output = response['Payload'].read().decode('utf-8')

print(output)

FizzBuzz関数

testLambdaという名前でLambda関数を作成します。 event['number']に数字が入ります。 数字に応じてメッセージを返します。

# -*- coding: utf-8

import boto3
import json

def lambda_handler(event, context):
    # Lambdaが返す値
    message=""

    # Payloadにnumberが指定されているか確認する
    if 'number' in event:
        # 指定されている場合、続行
        num = int(event['number'])

        if num % 15 == 0:
            message = "Fizz Buzz!"
        elif num % 3 == 0:
            message = "Fizz!"
        elif num % 5 == 0:
            message = "Buzz!"
        else:
            message = num
    else:
        # numberが指定されていない場合、指定するように返す
        message = 'Please set the number. {"number":"xx"}'

    return message

おわりに

AWS Lambdaでは、json形式でLambda関数に入力できます。{"key":value}といった形です。 Lambda関数では、event['key']でvalueを取得できます。 Lambdaにデータを渡したい時はお試しください。

参考