【问题标题】:AWS SAM - Enforcing Request Validation in API Gateway Method by SAM TemplateAWS SAM - 通过 SAM 模板在 API Gateway 方法中强制执行请求验证
【发布时间】:2020-05-23 08:36:15
【问题描述】:

我正在开发一个具有 lambda 函数的 SAM 应用程序,其中 API 网关作为事件源。 API Endpoint 是一种 POST 方法,需要在请求正文中设置一组参数。 API Gateway 为我们提供了通过使用 AWS 控制台指定请求模型来验证请求正文的能力。

请参阅以下 AWS 控制台选项的屏幕截图:

我需要通过 SAM 模板设置类似的选项,并且能够将模型链接与请求正文,但 无法设置请求验证器选项并且无法找到任何文档或示例。

下面是我的 SAM 模板

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}"

参考文档

请告诉我如何使用 SAM 模板将“请求验证器”设置为“验证正文”选项。感谢您的帮助

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-api-gateway serverless aws-serverless


    【解决方案1】:

    我也遇到过同样的问题,显然 SAM 有一段时间缺少这个功能,正如你从上一个问题中看到的那样:

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

    另外,GitHub 中已经打开了一些问题,最后一个是:

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

    我已经破解了一个解决方案,其中包含 SAM 规范中的两个附加属性来解决这个问题,但我不希望它真正成为 PR。如果您想使用我的分叉存储库从开发分支进行部署,我可以提供进一步的说明。

    【讨论】:

    • 您能否告诉我们您在 SAM 中创建了哪些额外资源来完成这项工作?
    • @KarthikVadla 嘿,上面的问题对我修改的内容有一些解释(github.com/awslabs/serverless-application-model/issues/…)。同样,这只是一个肮脏的黑客。但是如果你真的有兴趣,你可以看看我 github 中的 fork repo:github.com/paolorechia/serverless-application-model/tree/… 看看我在分支api-method-request-validator 中所做的三个提交。我不记得部署它的确切步骤,但 SAM 文档有这方面的信息。如果您需要进一步的帮助,请告诉我。
    【解决方案2】:

    添加 ValidateBody: true

    RequestModel:
     Model: ExchangeRate
     Required: true
     ValidateBody: true
    

    【讨论】:

      猜你喜欢
      • 2020-01-11
      • 2019-09-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      • 2018-05-27
      • 1970-01-01
      • 2020-06-14
      • 2019-08-11
      相关资源
      最近更新 更多