Интеграция HTTP-прокси API шлюза с aws-sam (НЕ Lambda Proxy)
Я пытаюсь использовать aws-sam для разработки / моделирования моего шлюза API локально. Мой API-шлюз свободно использует интеграцию HTTP-прокси. Производственный ресурс выглядит так:
Все примеры aws-sam, которые я нашел, а также сопутствующая документация и вопросы и ответы, используют интеграцию Lambda / имеют жесткую зависимость от функции Lambda, являющейся прокси-ресурсом, по сравнению с интеграцией прокси-сервера HTTP.
Есть ли способ определить прокси-ресурс HTTP для приложения aws-sam? (В отличие от ресурса Lambda Proxy?)
Связанные с:
- Создайте прокси-ресурс шлюза API с помощью SAM
- Я также пытаюсь решить ту же проблему с помощью автономного сервера, в следующем посте - интеграция HTTP-прокси API шлюза с автономным сервером (в отличие от лямбда-прокси)
2 ответа
Да, SAM - это просто преобразование облачных образований. Таким образом, вы по-прежнему можете создавать традиционные объекты Cloud Formation как обычно. Возможно, вы также сможете прикрепить его к своему Serverless::API, но я менее уверен в этом.
Resource:
Api:
Type: 'AWS::ApiGateway::RestApi'
Properties:
Description: A test API
Name: MyRestAPI
Type: 'AWS::ApiGateway::Resource'
Properties:
ParentId: !GetAtt Api.RootResourceId
RestApiId: !Ref Api
PathPart: '{proxy+}'
или возможно (непроверено):
Resource:
Api:
Type: 'AWS::Serverless::Api'
Properties:
Description: A test API
Name: MyRestAPI
Type: 'AWS::ApiGateway::Resource'
Properties:
ParentId: !GetAtt Api.RootResourceId
RestApiId: !Ref Api
PathPart: '{proxy+}'
Я протестировал второе предложение JA, и оно работает! Спасибо.
MyGalleryApi:
Type: AWS::Serverless::Api
Properties:
StageName: prod
GetImagesResource:
Type: AWS::ApiGateway::Resource
Properties:
RestApiId: !Ref MyGalleryApi
ParentId: !GetAtt MyGalleryApi.RootResourceId
PathPart: getImages
GetImagesMethod:
Type: AWS::ApiGateway::Method
Properties:
RestApiId: !Ref MyGalleryApi
ResourceId: !Ref GetImagesResource
HttpMethod: GET
AuthorizationType: AWS_IAM
Integration:
Type: HTTP_PROXY
IntegrationHttpMethod: GET
Uri: https://proxy.com/path/getImages
Вы можете объединить HTTP_PROXY и LAMBA_PROXY вместе в одном шаблоне, используя
RestApiId
в определении вашей функции:
NonceFunction:
Type: AWS::Serverless::Function
Properties:
Handler: src/handlers/nonce.handler
Role: !GetAtt MyGalleryLambdaExecutionRole.Arn
Architectures:
- x86_64
MemorySize: 256
Description: Nonce function to start authentication
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref UsersTable
Environment:
Variables:
USERTABLE_NAME: !Ref UsersTable
Events:
ApiEvent:
Type: Api
Properties:
Path: /nonce
Method: GET
RestApiId: !Ref MyGalleryApi
RequestParameters:
- method.request.path.address:
Required: True