serverless-offline: удаленный пользовательский авторизатор Lambda для шлюза API

Я объявил метод HTTP-прокси на своем ресурсе API-шлюза с использованием синтаксиса CloudFormation ( подробно в этом предыдущем посте).

Я пытаюсь подключить пользовательский авторизатор типа "Запрос", который использует существующую функцию AWS Lambda. У безсерверных документов есть хороший пример настройки пользовательских авторизаторов с помощью CloudFormation. В то же время автономный сервер явно поддерживает (исходные) пользовательские авторизаторы в области запросов.

Я создал перекрестную ссылку на соответствующую документацию AWS CloudFormation для AWS::ApiGateway::Resource и AWS::ApiGateway::Authorizer вместе со связанными безсерверными документами при создании приведенного ниже безсерверного шаблона. Но до сих пор я не получаю ожидаемый результат или поведение от автономного сервера.

Ресурсы создаются без авторизаторов

Когда я загружаю приведенную ниже конфигурацию без сервера, для моего ресурса не загружаются авторизаторы. Я не вижу, что не так или не хватает в моем serverless.yml файл. Есть ли у вас какие-либо советы? Заранее спасибо!

➜  serverless-offline-attempt git:(master) ✗ npm start

> @ start /Users/freen/src/apig/serverless-offline-attempt
> ./node_modules/serverless/bin/serverless offline

Serverless: Starting Offline: dev/us-east-1.

Serverless: Routes defined in resources:
Serverless: ANY /upstream/{proxy*} -> http://upstream.company.cool/{proxy}

Serverless: Offline listening on http://localhost:3000

serverless.yml

Приведенный ниже файл шаблона содержит ресурсы API G и конфигурацию авторизатора.

service: company-apig
provider:
  name: aws
  stage: dev
  runtime: python2.7

plugins:
  - serverless-offline

custom:
  serverless-offline:
    resourceRoutes: true

resources:
  Resources:
    # Parent APIG RestApi
    ApiGatewayRestApi:
      Type: AWS::ApiGateway::RestApi
      Properties:
        Name: company-apig
        Description: 'The main entry point of the APIG'

    # Shared Authorizers
    AuthorizeCompanyJWTAccessToken:
      Type: AWS::ApiGateway::Authorizer
      Properties:
        Name: AuthorizeCompanyJWTAccessToken
        Type: REQUEST
        RestApiId:
          Ref: ApiGatewayRestApi
        AuthorizerUri: 
          Fn::Join: 
            - ""
            - 
              - "arn:aws:apigateway:"
              - Ref: "AWS::Region"
              - ":lambda:path/2015-03-31/functions/"
              - "arn:aws:lambda:us-east-1:123456789012:function:jwt-tokens-staging-AccessTokenAuthorizer"
              - "/invocations"

    # Resource /upstream
    UpstreamResource:
      Type: AWS::ApiGateway::Resource
      Properties:
        ParentId:
          Fn::GetAtt:
            - ApiGatewayRestApi
            - RootResourceId
        PathPart: 'upstream'
        RestApiId:
          Ref: ApiGatewayRestApi

    # Resource /upstream/{proxy+}
    UpstreamProxyPath:
      Type: AWS::ApiGateway::Resource
      Properties:
        ParentId:
          Ref: UpstreamResource
        PathPart: '{proxy+}'
        RestApiId:
          Ref: ApiGatewayRestApi

    # Method ANY /upstream/{proxy+}
    UpstreamProxyAnyMethod:
      Type: AWS::ApiGateway::Method
      Properties:
        AuthorizationType: CUSTOM
        AuthorizerId:
          Ref: AuthorizeCompanyJWTAccessToken
        HttpMethod: ANY
        Integration:
          IntegrationHttpMethod: ANY
          Type: HTTP_PROXY
          Uri: http://upstream.company.cool/{proxy}
          PassthroughBehavior: WHEN_NO_MATCH
        MethodResponses:
          - StatusCode: 200
        ResourceId:
          Ref: UpstreamProxyPath
        RestApiId:
          Ref: ApiGatewayRestApi

Связанные с:

0 ответов

Другие вопросы по тегам