当前位置: 首页 > 知识库问答 >
问题:

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

夏志国
2023-03-14

我试图使用AWS SAM将请求验证器资源链接到SAM模板中的无服务器API。我已经创建了请求验证器,并在其RestApiId中引用了API,但是验证器没有在AWS控制台中设置为API默认验证器选项。

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
    Discription for the template
Globals:
  Function:
    Timeout: 30

Resources:
  MyAPI:
    Type: AWS::Serverless::Api
    Properties:
      Name: MyAPI
      StageName: prod
      Auth:
        DefaultAuthorizer: MyAuthorizer
        Authorizers:
            MyAuthorizer:
              FunctionPayloadType: REQUEST
              FunctionArn: here goes the function Arn
              Identity:
                Context:
                  - identity.sourceIp
                ReauthorizeEvery: 60
      Models:
        RequestModel:
          $schema: 'http://json-schema.org/draft-04/mySchema#'
          type: object
          properties:
            Format:
              type: string
            Name:
              type: string
              minLength: 3
            Id:
              type: string
          required:
            - Format
            - Id

  RequestValidator:
    Type: AWS::ApiGateway::RequestValidator
    Properties:
      Name: RequestValidator
      RestApiId: !Ref MyAPI
      ValidateRequestBody: true

  LambdaFunction:
    Type: AWS::Serverless::Function 
    Properties:
      FunctionName: NameOfTheFunction
      CodeUri: ./src/folder/
      Handler: Project::nameSpace.class::Handler
      Runtime: dotnetcore2.1
      Environment: 
        Variables:
          variableA : value
          variableB : value
          variableC : value
          variableD : value
      Events:
        ApiEndpoint:
          Type: Api
          Properties:
            RestApiId: !Ref MyAPI
            Path: /path
            Method: post
            RequestValidatorId: !Ref RequestValidator
            Auth:
              Authorizer: MyAuthorizer
            RequestModel: 
              Model: RequestModel
              Required: true

验证程序被创建,如果我点击API上的RequestValidator下拉菜单,我可以看到它。但是,请求验证器并不默认为我定义的验证器。它只是将“无”作为所选选项的一个选项

共有1个答案

国斌斌
2023-03-14

我在源代码中搜索了api转换函数,但没有办法附加请求验证。SAM将AWS::Serverless::Api转换为内联body swagger/openapi定义,但没有用于x-amazon-apigateway-request-validator的内容。我不明白为什么当lambda事件只在api方法中附加schema部分时,就有办法在lambda事件中定义模型

"paths": {
  "/post": {
    "post": {
      "requestBody": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/user"
            }
          }
        }, 
        "required": true
      }, 

也许在SAM github中添加功能请求

 类似资料:
  • 我正在开发一个SAM应用程序,它有一个lambda函数,API网关是事件源。APIendpoint是一种POST方法,要求在请求体中有一组参数。API网关通过使用AWS控制台指定请求模型,为我们提供了验证请求体的能力。 请参阅以下AWS控制台选项的屏幕截图: 我需要通过SAM模板设置类似的选项,能够将模型与请求主体链接,但无法设置请求验证程序选项,也无法找到任何文档或示例。 下面是我的SAM模板

  • def validate_mobile_number(value):如果不是str(value).isdigit():引发ValidationError(“请输入有效的手机号码”)类ModelA(AbstractUser): mobile=models.CharField(u(“mobile”),unique=True,max_length=10,验证器[validate_mobile_numbe

  • 我有一个简单的表单,需要验证输入的开头和结尾是否不是空格。 在HTML5中,我将这样做: 在新的Angular 2 ngControl指令中,验证模式的正确属性是什么?官方的Beta API在这个问题上仍然缺乏留档。

  • 本文向大家介绍在SAPUI5的AJAX请求中添加身份验证详细信息,包括了在SAPUI5的AJAX请求中添加身份验证详细信息的使用技巧和注意事项,需要的朋友参考一下 基本上,您需要利用JQuery AJAX的beforeSend函数来整理您的需求。 这是一个基本的代码片段- 您可以按照AddToHeader方法中的说明向标头添加更多详细信息。

  • 对不起,如果这个问题似乎很明显,但我是新的表达,节点,和大摇大摆。 我相信有,但很难找到,或者我没有找到正确的东西。

  • 我正在尝试使用JQuery在Ajax中向请求添加头。 以下是代码:- 然后我使用了要求(要求是chrome火狐插件,我们可以手动添加一个标题到请求)。 手动添加标题后:- 在这两个pics请求头中,“ACCESS-CONTROL-request-HEADERS”中都有x-auth-token,但第二个pic中有“x-auth-token”头和头值,而第一个pic中没有。 所以我的问题是如何使用JQ