SAM безсерверный неявный API против AWS :: Serverless :: Api - PullRequest
0 голосов
/ 22 декабря 2018

При настройке шаблона SAM и определении AWS::Serverless::Function есть параметр Events, который принимает тип Api.Создает ли это ресурс API Gateway?В чем разница между этим типом события и автономным AWS::Serverless::Api ресурсом?

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Вопрос касается 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.

Обратите внимание, что эта информация является сводкой информации, найденной в этих трех исходных документах:

0 голосов
/ 22 декабря 2018

Взято из документации :

Нет необходимости явно добавлять ресурс AWS :: Serverless :: Api в шаблон определения приложения AWS Serverless.Ресурс этого типа неявно создается из объединения событий Api, определенных в шаблонах AWS :: Serverless :: Function, определенных в шаблоне, которые не ссылаются на ресурс AWS :: Serverless :: Api.

...