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

Tem*_*Fix 2 amazon-web-services aws-serverless aws-sam

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

Ale*_*vey 7

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

MyFunction:
  Type: AWS::Serverless::Function
  Properties:
    ...
    Events:
      MyApi:
        Type: Api
        Properties:
          Path: /resource
          Method: GET
Run Code Online (Sandbox Code Playgroud)

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

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

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

如果确实需要控制在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:
      ...
Run Code Online (Sandbox Code Playgroud)

因此,它们之间的唯一区别是您对它们的配置拥有多少控制权,而关键的考虑因素是您是否需要定义以下两者之一:

  • 艺名
  • Swagger定义(通过DefinitionBody)

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

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

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