AWS SAM - Enforcing Request Validation in API Gateway Method by SAM Template
Asked Answered
P

2

10

I am working on a SAM application having a lambda function with API Gateway as source of event. API Endpoint is a POST Method requiring a set of parameters in request body. API Gateway provides us the capability of validating request body by specifying a request Model using AWS Console.

Refer Screenshots below of AWS Console options:

enter image description here

enter image description here

I need to set similar options via SAM template and able to link a Model with the request body but not able to set request validator option and is not able to find any documentation or example also.

Below is my SAM Template

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31

Description: SAM Template

Parameters: 
  Stage: 
    Type: String
    Default: dev

Resources:
  MyApiGateway:
    Type: AWS::Serverless::Api
    Properties:
      Name: My AWS Serverless API
      StageName: !Ref Stage
      Models: 
        ExchangeRate: 
          $schema: "http://json-schema.org/draft-04/schema#"
          properties: 
            base: 
              type: string
            target: 
              type: string
          required: 
            - base
            - target
          title: User
          type: object

  ExchangeRateFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: functions/exchange-rate/
      Handler: index.handler
      Runtime: nodejs12.x
      Description: Function to Get Currency Exchange Rate
      MemorySize: 128
      Timeout: 3
      Policies:
        - AWSLambdaBasicExecutionRole
      Events:
        HelloWorld:
          Type: Api
          Properties:
            RestApiId: !Ref MyApiGateway
            Path: /exchange
            Method: POST
            RequestModel:
              Model: ExchangeRate
              Required: true

Outputs:
  ExchangeRateFunction:
    Description: "Exchange Rate Lambda Function ARN"
    Value: !GetAtt ExchangeRateFunction.Arn
  MyApiGateway:
    Description: "My Seed API EndPoint"
    Value: !Sub "https://${MyApiGateway}.execute-api.${AWS::Region}.amazonaws.com/${Stage}"

Documentation referred

Please let me know how can I set 'Request Validator' to 'Validate body' option using SAM template. Will appreciate the help

Proem answered 7/2, 2020 at 8:19 Comment(0)
A
4

Add ValidateBody: true i.e.

RequestModel:
 Model: ExchangeRate
 Required: true
 ValidateBody: true
Acevedo answered 21/10, 2021 at 10:15 Comment(0)
A
1

I've ran into the same problem, apparently this feature is lacking from SAM for a while, as you can see from this previous question:

How to add a request validator in a AWS SAM template for AWS::Serverless::Api?

Also, a few issues have been opened in GitHub, the last one being:

https://github.com/awslabs/serverless-application-model/issues/1403

I've hacked a solution that includes two additional properties in the SAM specification to solve this issue, but I wouldn't expect it to actually become a PR. I can provide further instructions if you'd like to use my forked repo to deploy from a develop branch.

Avalos answered 31/3, 2020 at 14:26 Comment(2)
Can you please let us know what extra resources you created in SAM to get this work.?Silda
@KarthikVadla Hey, the issue above has some explanation on what I've modified (github.com/awslabs/serverless-application-model/issues/…). Again, this is just a dirty hack. But if you're really interested, you can look at the forked repo in my github: github.com/paolorechia/serverless-application-model/tree/… Just look at the three commits I've done in the branch api-method-request-validator. I don't recall the exact steps to deploy this, but the SAM docs have info on that. Let me know if you need further help.Avalos

© 2022 - 2024 — McMap. All rights reserved.