我有一个 AWS SAM 模板,我正在尝试在本地测试然后部署。本地测试运行(sam local start-api),但未验证有效负载。这意味着我有一个 RequestValidator,但它不验证任何东西。
然后,我尝试将 YAML 文件部署到 AWS 以在那里进行测试,我收到一条错误消息:
“创建变更集失败:Waiter ChangeSetCreateComplete 失败:Waiter 遇到终端故障状态状态:FAILED。原因:转换 AWS::Serverless-2016-10-31 失败,原因是:无服务器应用程序规范文档无效。发现的错误数:1。 id 为 [BoilerPlateFunction] 的资源无效。id 为 [ApiEvent] 的事件无效。Api 事件的 RestApiId 属性必须引用同一模板中的有效资源。
这是我的 yaml 文件,所以首先我希望能够使 RequestValidator 在我的本地工作,一旦完成,就知道我做错了什么以及为什么我不能部署:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
sam-app
Sample SAM Template for sam-app
Globals:
Function:
Timeout: 20
Parameters:
operationName:
Type: String
Default: testoperationName
restApiName:
Type: String
Default: testrestApiName
validatorName:
Type: String
Default: testvalidatorName
validateRequestBody:
Type: String
Default: testvalidateRequestBody
validateRequestParameters:
Type: String
Default: true
Resources:
BoilerPlateApi:
Type: AWS::ApiGateway::Api
Properties:
Name: !Ref restApiName
BoilerPlateFunctionMethod:
Type: AWS::ApiGateway::Method
Properties:
HttpMethod: ANY
RestApiId: !Ref BoilerPlateApi
RequestValidatorId: !Ref RequestValidator
RequestParameters:
method.request.querystring.test: true
RequestValidator:
Type: AWS::ApiGateway::RequestValidator
Properties:
Name: !Ref validatorName
RestApiId: !Ref BoilerPlateApi
ValidateRequestParameters: !Ref validateRequestParameters
BoilerPlateFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: boilerplate/apiName
Handler: index.handler
Runtime: nodejs8.10
Events:
ApiEvent:
Type: Api
Properties:
RestApiId: !Ref BoilerPlateApi
Path: /hello
Method: GET
再次,使用 sam local start-api 运行,我可以点击端点并执行 Lambda。但是如果我没有在查询字符串中包含“test”参数,我希望 API 网关会抛出错误,但它没有,它让它通过。
多谢你们!