AWS API Gateway не может использовать подпути в API - PullRequest
0 голосов
/ 22 октября 2019

С помощью формирования облака я настроил API, ниже приведен пример из него с опущенными некоторыми именами.

  SwaggerServiceJob:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: swagger-job
      Handler: dsfdsf::handle
      Runtime: java8
      CodeUri: sdfds
      Timeout: 60
      MemorySize: 512
      Policies:
        - Version: '2012-10-17' # Policy Document
          Statement:
            - Effect: Allow
              Action:
                - lambda:InvokeFunction
              Resource: '*'
        - AmazonS3FullAccess
        - AmazonSSMReadOnlyAccess
      Environment:
        Variables:
          jobName: SwaggerService
          filePath: /tmp/
  LogsSwagger:
    Type: AWS::Logs::LogGroup
    Properties:
      LogGroupName: !Sub "/aws/lambda/${SwaggerServiceJob}"
      RetentionInDays: 180

  SwaggerResource:
    Type: AWS::ApiGateway::Resource
    Properties:
      ParentId: !GetAtt ApiGatewayRestApi.RootResourceId
      PathPart: 'swagger'
      RestApiId: !Ref ApiGatewayRestApi

  SwaggerProxyResource:
    Type: AWS::ApiGateway::Resource
    Properties:
      ParentId: !Ref SwaggerResource
      PathPart: '{proxy+}'
      RestApiId: !Ref ApiGatewayRestApi   

SwaggerMethod:
    Type: AWS::ApiGateway::Method
    Properties:
      ApiKeyRequired: false
      AuthorizationType: NONE
      HttpMethod: ANY
      Integration:
        Credentials: !GetAtt ApiGatewayIamRole.Arn
        IntegrationHttpMethod: POST
        PassthroughBehavior: WHEN_NO_MATCH
        TimeoutInMillis: 29000
        Type: AWS_PROXY
        Uri: !Sub 'arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${SwaggerServiceJob.Arn}/invocations'
      ResourceId: !Ref SwaggerProxyResource
      RestApiId: !Ref ApiGatewayRestApi         


ApiGatewayRestApi:
    Type: AWS::ApiGateway::RestApi
    Properties:
      ApiKeySourceType: HEADER
      Description: The API
      BinaryMediaTypes:
        - '*/*'
      EndpointConfiguration:
        Types:
          - REGIONAL
      Name: API

  ApiGatewayStage:
    Type: AWS::ApiGateway::Stage
    Properties:
      DeploymentId: !Ref ApiGatewayDeployment
      Description: Config API Stage
      RestApiId: !Ref ApiGatewayRestApi
      StageName: 'v0'

  ApiGatewayDeployment:
    Type: AWS::ApiGateway::Deployment
    DependsOn: SwaggerMethod
    Properties:
      Description: Lambda API Deployment
      RestApiId: !Ref ApiGatewayRestApi

  ApiGatewayIamRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Sid: ''
            Effect: 'Allow'
            Principal:
              Service:
                - 'apigateway.amazonaws.com'
            Action:
              - 'sts:AssumeRole'
      Path: '/'
      Policies:
        - PolicyName: LambdaAccess
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: 'Allow'
                Action: 'lambda:*'
                Resource: '*'


Outputs:
  apiGatewayInvokeURL:
    Value: !Sub "https://${ApiGatewayRestApi}.execute-api.${AWS::Region}.amazonaws.com/v0"

Теперь моя проблема в том, что я не могу использовать прокси. https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-settings-method-request.html

Я хочу, чтобы конечная точка называлась / swagger, и это прекрасно работает. Тем не менее, я также хочу подпути, такие как / swagger / что-то и / swagger / else Когда я пытаюсь вызвать эти конечные точки, я просто получаю сообщение об ошибке

{
    message: "Missing Authentication Token"
}

Если я пытаюсь перейти к / swagger / testв консоли AWS Gateway я могу пройти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...