是否可以在SAM模板中使用AWS Cloud Formation资源语法,反之亦然?

时间:2020-09-20 11:17:18

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

最近,我开始学习AWS云形成(CF)和AWS无服务器应用程序模型(SAM)。我发现在模板文件的语法方面存在差异。例如,要在SAM中创建Lambda资源,我们需要声明以下内容:-

Resources:
  HelloLambda:
    Type: AWS::Serverless::Function

在CF中,我们以此声明:-

Resources:
  HelloLambda:
    Type: AWS::Lambda::Function

在Lambda方面,不仅具有很少的属性/属性,而且在SAM和CF方面也有所不同。

我仍然无法理解并困惑。我有一些疑问,如果您能消除我的疑问,我将不胜感激:-

  1. 如果CF已经像AWS Cloud的IaC(基础架构即代码)一样做得很好,那么对SAM的需求是什么?
  2. 为什么有人会更喜欢SAM而不是CF?
  3. 最后,我可以使用SAM资源(语法上的)来写CF还是反之,例如,我可以在普通CF模板中使用以下语法声明Lambda吗,反之亦然:-

资源: HelloLambda: 类型:AWS :: Serverless :: Function

干杯

1 个答案:

答案 0 :(得分:1)

  1. 如果CF已经像AWS Cloud的IaC(基础架构即代码)一样做得很好,那么对SAM的需求是什么?

它简化了涉及 lambda和API网关的开发,这是一种非常流行的组合。在纯CFN中执行相同的操作将需要额外的步骤(例如,手动设置集成方法),而这很多人都不希望或不需要知道如何进行。 SAM还具有自定义命令行工具,该工具可帮助您在本地运行和测试lambda + api网关,并提供CFN无法提供的test events数量,或隐藏与功能部署相关的复杂性通过CodeDeploy。仅使用CFN很难做到这一点。

  1. 为什么有人会更喜欢SAM而不是CF?

能够轻松地在本地测试事物,并与CodeDeploy进行简化的集成非常有用。因此,对于希望更加专注于为应用程序编写代码的人,而不是花大量时间从头开始设置所有内容(这是DevOps的工作)的人来说,这很有益。

最后,我可以使用SAM资源(语法上的)来写CF还是反之,例如,我可以在普通CF模板中使用以下语法声明Lambda吗,反之亦然:-

SAM模板可以包含CFN资源,但不能相反。 SAM中的Resources部分:

  1. 此部分类似于AWS CloudFormation模板的“资源”部分。在AWS SAM模板中,此部分除了AWS CloudFormation资源之外,还可以包含AWS SAM资源