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
Связанные с:
- Настройка общего Lambda-авторизатора в Serverless Framework (только свободно; OP ищет решение CloudFormation, но в ответе не используется CF)