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

AWS SAM在API网关中指定方法请求

桑博远
2023-03-14

我是AWS SAM的新手。我已经使用AWS web控制台实现了一个API网关,并在API方法请求中指定了主体验证,我希望使用SAM模板实现同样的功能。我对如何在API网关SAM模板中指定方法请求的搜索与此无关。需要帮忙吗?

共有2个答案

诸超
2023-03-14

如果您希望配置“授权”,这里是SAM模板。

MyApi:
  Type: AWS::Serverless::Api
  Properties:
    StageName: Prod
    Auth:
      DefaultAuthorizer: AWS_IAM
MyFunction:
  Type: AWS::Serverless::Function
  Properties:
    FunctionName: MyFunction
    ...
    Events:
      Post:
        Type: Api
        Properties:
          Path: /compute
          Method: POST
          RestApiId: !Ref MyApi
          Auth:
            Authorizer: AWS_IAM

您必须在AWS::Serverless::Api定义中定义授权者,并在函数中使用它。

参考资料:

https://github.com/awslabs/serverless-application-model/blob/master/examples/2016-10-31/api_aws_iam_auth/template.yaml

https://github.com/awslabs/serverless-application-model/blob/master/examples/2016-10-31/api_cognito_auth/template.yaml

曾鸿振
2023-03-14

在API网关上添加验证的完整指南。

下面是来自SAMtemplate.yaml的代码片段,用于在示例API上添加正文验证。在这里,在API的 /ping路径上定义了一个平输入API模型。模型包含一个必需参数和一个可选参数。如果没有所需的参数,调用API将失败。

AuthApiGateway:
     Type: AWS::Serverless::Api
     Properties:
         StageName: Prod
         DefinitionBody:
             swagger: '2.0'
             info:
                 version: '1.0'
                 title: 'AwsRestServiceTemplate'
             paths:
                 /ping:
                     x-amazon-apigateway-any-method:
                         responses: {}
                     post:
                         x-amazon-apigateway-request-validator: 'Validate body' # To specify that the Http Post body needs to be validated
                         parameters:
                             - in: 'body'
                                 name: 'PingInput'
                                 required: true
                                 schema:
                                     $ref: '#/definitions/PingInput'
                         x-amazon-apigateway-integration:
                             httpMethod: post
                             type: aws_proxy
                             uri:
                                 Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${PingFunction.Arn}/invocations
             x-amazon-apigateway-request-validators:
                 Validate body:
                     validateRequestParameters: true
                     validateRequestBody: true
             definitions:
                 PingInput:
                     type: 'object'
                     required:
                         - 'requiredKey'
                     properties:
                         requiredKey:
                             type: 'string'
                         optionalKey:
                             type: 'string'
 类似资料:
  • 在我的理解中,Spring Cloud Gateway必须实现一个HTTP客户端来发出反向代理请求。Spring框架提供了WebClient。我不知道Spring云网关是否真的在内部使用它。

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

  • 在AWS文档之后,我尝试使用以下http请求从api网关导出api定义。知道它为什么不起作用吗?

  • ✔加200积分响应期权法 ✔将Access-Control-Allog-Headers,Access-Control-Allog-Methods,Access-Control-Allog-Origin方法响应头添加到OPTIONS ✔将Access-Control-Allow-Headers,Access-Control-Allow-Methods,Access-Control-Allow-Ori

  • 我在使用Axis2-1.6.2制作客户机时遇到了问题,然后我总结了这个问题。 当我尝试将此客户端与下一段代码一起使用时: 我收到下一个错误: 线程“main”org.apache.axis2.AxisFault中的异常:请求中没有指定方法。在org.apache.axis2.util.utils.GetInboundFaultFromMessageContext(utils.java:531)在o