在配置SAM模板和定义AWS::Serverless::Function时,有接受Api类型的事件参数。这会创建一个API网关资源吗?此事件类型与独立的AWS::Serverless::Api资源之间有什么区别?
发布于 2019-03-08 12:02:56
这个问题询问SAM::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默认为无法配置的名为"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:
...因此,它们之间唯一的区别在于您对它们的配置有多大的控制,而关键的考虑是您是否需要定义以下两种方法:
如果您需要控制其中的一个或两者,那么您需要显式地定义您的API。否则,您可能会使用隐式API。
还请注意,SAM中的AWS::Serverless::Api资源被“转换”为AWS::ApiGateway::RestApi、AWS::ApiGateway:Stage和AWS::ApiGateway::Deployment类型的CloudFormation资源。
请注意,此信息是在这三个源文档中找到的信息的摘要:
发布于 2018-12-22 19:32:31
AWS:: Serverless ::Api资源不需要显式地添加到AWS Serverless应用程序定义模板中。此类型的资源是通过定义在AWS::Serverless::函数资源上的Api事件的联合隐式创建的,该模板中定义的函数资源不引用AWS::Serverless::Api资源。
https://stackoverflow.com/questions/53898543
复制相似问题