AWS Lambda を使ってFizzBuzzしたった


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 の値を変えると、FizzBuzzFizzBuzz、数字のいずれかが返ってきます。

これでできた。

Future

サーバレス言わずに最小のVPS使って必要なパッケージ落とせばいいと思っていたのですが時間かけずにできた。
lambda処理後にS3とリンクすればデータは残せそうです。

Reference

Amazon API Gateway で REST API を呼び出す