Вопрос касается API, указанных в блоке источника события типа SAM AWS :: Serverless :: Function, например:
MyFunction:
Type: AWS::Serverless::Function
Properties:
...
Events:
MyApi:
Type: Api
Properties:
Path: /resource
Method: GET
Как упоминалось в документах в разных местах, этиназываются «неявными API» в SAM.
SAM создает ресурсы типа AWS :: Serverless :: Api из объединения событий Api, определенных в ресурсах AWS :: Serverless :: Function, - но только тех, которые этого не делают.обратитесь (через свойство RestApiId) к AWS :: Serverless :: Api, определенному явно в шаблоне.
За кулисами SAM собирает все эти неявные API, генерирует Swagger и создает неявные API, используя этоКураж.По умолчанию для этого API используется имя StageName с именем «Prod», которое не может быть настроено.
Если вам необходим контроль над определением и документированием API в Swagger, ресурс AWS :: Serverless :: Api должен быть создан явно.Затем это можно отнести к следующему:
MyFunction:
Type: AWS::Serverless::Function
Properties:
...
Events:
MyApi:
Type: Api
Properties:
Path: /resource
Method: GET
RestApiId: !Ref MyAPI # Add this line
MyApi:
Type: AWS::Serverless::Api
Properties:
StageName: Prod
DefinitionBody:
...
Таким образом, единственное различие между ними заключается в том, насколько вы контролируете их конфигурацию, и ключевым моментом является то, нужно ли вам определить:
- StageName
- a Определение Swagger (через DefinitionBody)
Если вам нужен контроль над одним или обоими из них, то вам необходимо явно определить свой API.В противном случае вы, вероятно, можете использовать неявные API.
Также обратите внимание, что ресурсы AWS :: Serverless :: Api в SAM «преобразуются» в ресурсы CloudFormation типа AWS :: ApiGateway :: RestApi, AWS :: ApiGateway:: Stage и AWS :: ApiGateway :: Deployment.
Обратите внимание, что эта информация является сводкой информации, найденной в этих трех исходных документах: