在配置SAM模板并定义AWS::Serverless::Function
时,有一些接受Api类型的事件参数。这会创建API网关资源吗?此事件类型和独立的AWS::Serverless::Api
资源之间有什么区别?
答案 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:
...
因此,它们之间的唯一区别是您对它们的配置拥有多少控制权,而关键的考虑因素是您是否需要定义以下两者之一:
如果您需要控制这两者之一或两者,则需要显式定义API。否则,您可能可以使用隐式API。
还请注意,SAM中的AWS :: Serverless :: Api资源被“转换”为AWS :: ApiGateway :: RestApi,AWS :: ApiGateway :: Stage和AWS :: ApiGateway :: Deployment类型的CloudFormation资源。
请注意,此信息是在这三个原始文档中找到的信息的摘要:
答案 1 :(得分:0)
无需将AWS :: Serverless :: Api资源显式添加到AWS Serverless Application Definition模板。此类资源是根据模板中定义的AWS :: Serverless :: Function资源定义的Api事件并集隐式创建的,这些资源不引用AWS :: Serverless :: Api资源。