AWS SAM - 通过SAM模板在API Gateway方法中实施请求验证

10

我正在开发一个SAM应用程序,其中包含一个具有API Gateway作为事件源的Lambda函数。API端点是一个POST方法,需要在请求正文中提供一组参数。API Gateway通过在AWS Console中指定请求模型来提供验证请求正文的功能。

请参考下面的AWS Console选项截图:

输入图片说明

输入图片说明

我需要通过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 模板中设置“请求验证器”为“验证正文”选项。感谢您的帮助。

2个回答

4

添加 ValidateBody: true,即:

RequestModel:
 Model: ExchangeRate
 Required: true
 ValidateBody: true

1

我遇到了同样的问题,显然这个功能在一段时间内缺失了SAM,正如您可以从这个之前的问题看到:

如何在AWS::Serverless::Api的AWS SAM模板中添加请求验证器?

此外,在GitHub上已经有一些问题被提出,最后一个是:

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

我已经破解了一个解决方案,它在SAM规范中包括两个额外的属性来解决这个问题,但我不指望它实际上会成为一个公共关系。如果你想使用我的分支库从开发分支部署,我可以提供进一步的说明。


请问您在SAM中创建了哪些额外的资源来完成这项工作? - Karthik Vadla
@KarthikVadla 嘿,上面的问题有一些关于我所修改的内容的解释(https://github.com/awslabs/serverless-application-model/issues/1403#issuecomment-606602702)。 再次说明,这只是一个肮脏的hack。但如果你真的感兴趣,可以查看我在github上分叉的repo:https://github.com/paolorechia/serverless-application-model/tree/api-method-request-validator 只需查看我在“api-method-request-validator”分支中所做的三个提交即可。我不记得部署这个的确切步骤,但SAM文档中有相关信息。如果需要进一步帮助,请告诉我。 - Paolo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接