serverless-offline: удаленный пользовательский авторизатор Lambda для шлюза API - PullRequest
1 голос
/ 14 марта 2019

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

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

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

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

Когда я загружаю нижеуказанную безсерверную конфигурацию,для моего ресурса не загружены авторизаторы.Я не вижу, что не так или отсутствует в моем файле 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

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

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

Похожие:

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