首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Serverless隐式API与AWS::Serverless::Api

Serverless隐式API与AWS::Serverless::Api
EN

Stack Overflow用户
提问于 2018-12-22 19:05:40
回答 2查看 4.3K关注 0票数 6

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-08 12:02:56

这个问题询问SAM::Serverless::Function的事件源块中引用的API,例如:

代码语言:javascript
复制
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资源。然后,将以这种方式提及:

代码语言:javascript
复制
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
  • 摇摆定义(通过DefinitionBody)

如果您需要控制其中的一个或两者,那么您需要显式地定义您的API。否则,您可能会使用隐式API。

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

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

票数 27
EN

Stack Overflow用户

发布于 2018-12-22 19:32:31

摘自文件

AWS:: Serverless ::Api资源不需要显式地添加到AWS Serverless应用程序定义模板中。此类型的资源是通过定义在AWS::Serverless::函数资源上的Api事件的联合隐式创建的,该模板中定义的函数资源不引用AWS::Serverless::Api资源。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53898543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档