私は現在、PythonとdynamoDBを備えたサーバーレスフレームワークを使用してRESTAPIを開発しています。ラムダ関数でパラメーターを渡したり取得したりする方法を知りたいのですが。私の設定はserverless.xml
次のようになります:
getNearestConvenios:
handler: src/controllers/convenio_controller.get_nearest_convenios
events:
- http:
path: convenios/nearest
method: get
cors: True
request:
template:
application/json: '{ "lat" : "$input.params(''lat'')", "long" : "$input.params(''long'')"}'
そして私はこのようなパラメータを取得しようとしています:
def get_nearest_convenios(event, context):
try:
parameters = event['pathParameters']
convenios = service.get_nearest_convenios(parameters['lat'], parameters['long'])
return http.ok(convenios)
except Exception as ex:
logger.warn("WARNING: Request id: {0}, Error: {1}, Info: {2}".format(context.aws_request_id, type(ex), ex.args))
return http.bad_request(str(ex))
公式ドキュメントに記載されているカスタムリクエストテンプレートに従いましたが、これまで成功しませんでした。また、CloudWatchでは次のエラーが表示されています。
[WARNING] 2020-08-14T09:04:11.783Z 3c9222b2-4601-4460-ba7c-3cd89ba3b04b WARNING: Request id: 3c9222b2-4601-4460-ba7c-3cd89ba3b04b, Error: <class 'TypeError'>, Info: ("'NoneType' object is not subscriptable",)
ラムダで統合タイプを指定していないため、デフォルトのlambda-proxy
統合タイプが使用されます。Lambdaプロキシ統合では、クライアントがAPIリクエストを送信すると、APIGatewayは統合されたLambda関数に生のリクエストをそのまま渡します。lambda-proxy
統合でマッピングテンプレートを使用することはできません。リクエストまたはレスポンスを変換したい場合は、プロキシなしのラムダ統合を選択できます。
HTTPGETを使用しています。したがって、データをクエリ文字列またはパスパラメータとして渡すことができます。
クエリ文字列:たとえばhttp://api.example.com/Books?id=1などのURLでデータを渡します。クエリ文字列パラメーターは、ラムダ内で次のようにアクセスできます。event. queryStringParameters
パスパラメーター:サーバーレステンプレートで以下のようにパラメーターを定義できます。次に、ラムダ内のパスパラメータに次のようにアクセスできます。event.pathParameters
getNearestConvenios:
handler: src/controllers/convenio_controller.get_nearest_convenios/{parameter}
events:
- http:
path: convenios/nearest
method: get
cors: True
参照:Lambdaプロキシ統合
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加