問題
AWS SAM を使用して、Lambda と API Gateway の間の簡単な統合を実行しようとしています。ラムダの入力をカスタマイズしたい - いくつかのrequestTemplatesを適用します。しかし、それらは無視されているようです。
再現する手順
実行中:
sam local start-api
curl -v -XPOST -H "Content-type: application/json" -d '{"jarmil":"prdel"}' http://localhost:3000/
出力は次のとおりです。
START RequestId: 43594e8a-c3af-4f47-9d85-6c605131f02a Version: $LATEST
Processing event {'httpMethod': 'POST', 'body': '{"jarmil":"prdel"}', 'resource': '/', 'requestContext': {'resourcePath': '/', 'httpMethod': 'POST', 'stage': 'prod', 'identity': {'sourceIp': '127.0.0.1:53210'}}, 'queryStringParameters': {}, 'headers': {'Accept': '*/*', 'Content-Length': '18', 'Content-Type': 'application/json', 'User-Agent': 'curl/7.43.0'}, 'pathParameters': None, 'stageVariables': None, 'path': '/'}
END RequestId: 43594e8a-c3af-4f47-9d85-6c605131f02a
デフォルトのAPIが作成されたかのように動作するようです。イベントを印刷します。しかし、私の API 定義は完全に無視されているようです。適用されずに常に元のイベントを返しrequestTemplates
ます。症状:
- 私が闊歩する定義に何を入れても効果はありません。変更
produces
、不正な形式の闊歩をそこに置く - 無効な
RestApiId
(存在しない参照) を使用した場合 - 変更なし type
代わりに存在しないものを使用するとAWS::Serverless::Api
- 効果なし
環境
- サムのバージョン: 0.2.4
- OS:×
コード
私のtemplate.yml
:
AWSTemplateFormatVersion : '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: POC
Resources:
ScheduleFunction:
Type: 'AWS::Serverless::Function'
Properties:
Runtime: python3.6
Handler: lambda_function2.lambda_handler
Events:
ApiRoot:
Type: Api
Properties:
RestApiId: !Ref ScheduleApi
Path: /
Method: ANY
ScheduleApi:
Type: 'AWS::Serverless::Api'
Properties:
StageName: dev
DefinitionUri: swagger.yml
私のswagger.yml
:
swagger: 2.0
info:
title: "Scheduling API"
consumes:
- application/json
produces:
- application/json
paths:
/:
post:
x-amazon-apigateway-integration:
httpMethod: post
type: aws
requestTemplates:
application/json: "#input x"
そしてlambda_function2.py
:
def lambda_handler(event, context):
print("Processing event", event)
return event
その他のリソース
このsam repo の例は、私が達成したいものとほとんど同じに見えます。どちらも機能しません。