AWS LambdaへのJSON入力はごっつええかんじ
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にデータを渡したい時はお試しください。