Backgroud
AWS Lambdaを使ったサーバレスアプリケーションについての話を聞く機会が増えたので試しに作ってみた。
Preparetion
↓ ↓Development (lambdaのみ)
import json
def lambda_handler(event, context):
request = "[inner_test]"
num = 30
doc = {
"message":'Hello from Lambda!',
"request":process(num)
}
# TODO implement
return {
'statusCode': 200,
'body': json.dumps(doc)
}
def process(src):
if src % 15 == 0:
return "FizzBuzz"
elif src % 5 == 0:
return "Buzz"
elif src % 3 == 0:
return "Fizz"
else :
return src
と書いたのちに、「Deploy」 -> 「テスト」 を押す。
Development (with API Gateway)
先ほどの構成はlambdaのみだったが、ここではAPI Gatewayを使って外部からリクエストをかけてみる。
まず、トリガーからAPI Gatewayを選ぶ。
セキュリティはお好みで。
「ステージ」→「POST」を選び、URLを取得する。
URL自体の構成はhttps://{restapi_id}.execute-api.{region}.amazonaws.com/{stage_name}/
それで、lambdaにてリクエストされた値を取得し、FizzBuzzする。コードベースで話すとevent["body"]
をjsonでパースして入力値を取得する。
import json
def lambda_handler(event, context):
request = "[inner_test]"
num = 30
#API Gatewayに対応
#ここでリクエストの値を取得
if "body" in event.keys():
request = json.loads(event["body"])
num = request["num"]
doc = {
"message":'Hello from Lambda!',
"request":process(num)
}
# TODO implement
return {
'statusCode': 200,
'body': json.dumps(doc)
}
def process(src):
if src % 15 == 0:
return "FizzBuzz"
elif src % 5 == 0:
return "Buzz"
elif src % 3 == 0:
return "Fizz"
else :
return src
実際にfizzbuzzの値が返ってくるか、Postmanを使ってAPIを叩いてみてみる。
num
の値を変えると、Fizz``Buzz``FizzBuzz
、数字のいずれかが返ってきます。
これでできた。
Future
サーバレス言わずに最小のVPS使って必要なパッケージ落とせばいいと思っていたのですが時間かけずにできた。
lambda処理後にS3とリンクすればデータは残せそうです。