У меня есть шаблон AWS SAM, который я пытаюсь проверить локально, а затем развернуть.Локальный тест выполняется (sam local start-api), но полезная нагрузка не проверена.Это означает, что у меня есть RequestValidator, но он ничего не проверяет.
Затем я пытаюсь развернуть файл YAML в AWS для тестирования там, и я получаю сообщение об ошибке:
"Не удалось создать набор изменений: Сбой Waiter ChangeSetCreateComplete: Официант обнаружил состояние сбоя терминала. Состояние: СБОЙ. Причина: Сбой преобразования AWS :: Serverless-2016-10-31 с: Недопустимый документ спецификации приложения без сервера. Номернайденных ошибок: 1. Недопустимый ресурс с идентификатором [BoilerPlateFunction]. Недопустимое событие с идентификатором [ApiEvent]. Свойство RestApiId события Api должно ссылаться на действительный ресурс в том же шаблоне. "
Thisмой файл 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 выполняется.Но я ожидаю, что API-шлюз выдаст ошибку, если я не включу параметр «test» в строку запроса, но он этого не сделает, он пропустит его.
Спасибо, ребята!