SAMのURLパラメタの分析にflaskを使う

template.ymlにて

  SampleFlaskFunction:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: src/
      Handler: flask_test.lambda_handler
      Runtime: python3.7
      Events:
        HttpGet:
          Type: Api
          Properties:
            Path: '/flask'
            Method: GET
        HttpGetProxy:
          Type: Api
          Properties:
            Path: '/flask/{proxy+}'
            Method: GET

のような設定をしている時に

lambda側でパラメタを取得したい場合は

from flask import Flask, jsonify
import awsgi

app = Flask(__name__)

@app.route('/flask/<name>')
def output_name(name):
    return jsonify({'input': name})

def lambda_handler(event, context):
    return awsgi.response(app, event, context)

このようにすると取得できる

なおアクセスできるURLは
http://127.0.0.1:3000/flask/name

SAM側で振り分けたflaskというディレクトリもlambdaでも設定する必要がある。(アクセスしたパスがそのまま渡ってきているイメージか)

@app.route('/flask/<name>/test/<test>/test2/<test2>')
def output_name(name,test,test2):
    return jsonify({'value': name + test + test2}

このように複数の値の取得も可能

Published by

kashioka

有限会社アリウープ 代表取締役社長 PHPユーザ会の発起人の一人。いちばんやさしいPHPの教本(インプレス),PHPハンドブック(ソフトバンククリエイティブ)著者。PHPカンファレンス実行委員 明日の開発カンファレンス開催 認定スクラムマスター。近年、PHPに限らずサーバレス環境でのPythonなども書いたりしている。 http://alleyoop.jp