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

Posted

技术标签:

【中文标题】我能否在 SAM 模板中使用 AWS Cloud Formation 资源语法,反之亦然?【英文标题】:Can I use the AWS Cloud Formation resource syntax into SAM template or vice-versa? 【发布时间】:2021-01-06 17:29:42 【问题描述】:

最近,我开始学习 AWS Cloud Formation (CF) 和 AWS Serverless Application Model (SAM)。我发现在其模板文件中的语法方面存在差异。例如,要在 SAM 中创建 Lambda 资源,我们将声明如下内容:-

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

而在 CF 中,我们这样声明:-

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

就 Lambda 而言,SAM 与 CF 的不同之处不仅在于很少有属性/属性。

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

    如果 CF 已经在为 AWS 云做 IaC(基础设施即代码),那么 SAM 的需求是什么? 为什么有人更喜欢 SAM 而不是 CF? 最后,我可以使用 SAM 资源(语法)在 CF 中编写,反之亦然,例如,我可以在普通 CF 模板中使用以下语法声明 Lambda,反之亦然:-

资源: 你好拉姆达: 类型:AWS::Serverless::Function

干杯,

【问题讨论】:

【参考方案1】:
    如果 CF 已经在为 AWS 云做 IaC(基础设施即代码),那么 SAM 的需求是什么?

它简化了涉及 lambda 和 API 网关 的开发 - 一个非常流行的组合。在纯 CFN 中做同样的事情,需要额外的步骤(例如手动设置集成方法),许多人不希望或不需要知道如何制作。 SAM 还有自定义命令行工具,它可以帮助您在本地运行和测试您的 lambda+api 网关,并提供无法通过 CFN 获得的 test events 数量,或者通过 @ 隐藏与您的功能部署相关的复杂性987654322@。仅使用 CFN 无法轻松做到这一点。

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

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

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

SAM 模板可以包含 CFN 资源,反之则不行。 SAM 中的Resources 部分:

    此部分类似于 AWS CloudFormation 模板的资源部分。在 AWS SAM 模板中,此部分可以包含 AWS SAM 资源除了 AWS CloudFormation 资源

【讨论】:

以上是关于我能否在 SAM 模板中使用 AWS Cloud Formation 资源语法,反之亦然?的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS SAM 模板中出现 Fn::GetAtt 错误

AWS - SAM cli yaml 模板不适用于 cloudformation 堆栈

AWS SAM 模板中的 Auth 部分出错

AWS SAM 模板 - 定义由 API Gateway 触发的 SQS 队列

我可以将 aws sam 模板文件拆分为多个文件吗? [复制]

AWS SAM 模板 - 本地测试