SAM无服务器隐式API与AWS :: Serverless :: Api

时间:2018-12-22 19:05:40

标签: amazon-web-services aws-serverless aws-sam

在配置SAM模板并定义AWS::Serverless::Function时,有一些接受Api类型的事件参数。这会创建API网关资源吗?此事件类型和独立的AWS::Serverless::Api资源之间有什么区别?

2 个答案:

答案 0 :(得分:3)

问题询问有关SAM AWS :: Serverless :: Function类型的事件源块中引用的API,例如:

MyFunction:
  Type: AWS::Serverless::Function
  Properties:
    ...
    Events:
      MyApi:
        Type: Api
        Properties:
          Path: /resource
          Method: GET

正如文档在不同地方提到的那样,它们在SAM中被称为“隐式API”。

SAM从在AWS :: Serverless :: Function资源上定义的Api事件的并集创建AWS :: Serverless :: Api类型的资源-但只有那些不引用(通过RestApiId属性)到AWS :: Serverless的资源:: Api在模板中明确定义。

在幕后,SAM收集了所有这些隐式API,生成了一个Swagger,并使用此Swagger创建了隐式API。此API默认为无法配置的StageName,称为“ Prod”。

如果确实需要控制在Swagger中定义和记录API,则应显式创建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
  • Swagger定义(通过DefinitionBody)

如果您需要控制这两者之一或两者,则需要显式定义API。否则,您可能可以使用隐式API。

还请注意,SAM中的AWS :: Serverless :: Api资源被“转换”为AWS :: ApiGateway :: RestApi,AWS :: ApiGateway :: Stage和AWS :: ApiGateway :: Deployment类型的CloudFormation资源。

请注意,此信息是在这三个原始文档中找到的信息的摘要:

答案 1 :(得分:0)

Taken from the documentation

  

无需将AWS :: Serverless :: Api资源显式添加到AWS Serverless Application Definition模板。此类资源是根据模板中定义的AWS :: Serverless :: Function资源定义的Api事件并集隐式创建的,这些资源不引用AWS :: Serverless :: Api资源。