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

Posted

技术标签:

【中文标题】AWS - SAM cli yaml 模板不适用于 cloudformation 堆栈【英文标题】:AWS - SAM cli yaml template does not work with cloudformation stack 【发布时间】:2022-01-16 13:24:17 【问题描述】:

我在使用 aws CloudFormation 时遇到问题…… 我想我是新手,所以我错过了一些东西……

所以我在我的 Mac 上安装了 sam cli,它生成了这个 .yaml 文件 然后我去云形成并尝试将此文件上传到堆栈

在创建过程中它给了我一个错误:

Transform AWS::Serverless-2016-10-31 failed with: Invalid Serverless 
Application Specification document. Number of errors found: 1. Resource 
with id [HelloWorldFunction] is invalid. 'CodeUri' is not a valid S3 Uri 
of the form 's3://bucket/key' with optional versionId query parameter.. 
Rollback requested by user.

我应该在这里做什么? 我正在尝试在 s3 文件上传时创建一个带有触发器的 lambda 函数,我需要一个用于 CloudFormation 的 .yaml 文件来描述所有服务和触发器……我发现很难找到一个有效的模板……

我应该如何解决这个问题?当甚至 cli 生成的 yaml 文件不起作用时? CloudFormation 不应该在没有创建 lambda 函数的情况下初始化这样的函数吗?

非常感谢

【问题讨论】:

模板是什么? 这里不能发,字符串太长了……是sam cli hello-world app自带的基本模板 也许回顾一下 www.serverlessland.com 上的一些官方 AWS 教程,那里也有很多模式,您可以获取 SAM 模板并构建/打包和部署任何您想要的内容,这会帮助您获得开始 【参考方案1】:

AWS SAM 使用的模板比 AWS CloudFormation 可以解释的模板更灵活。您在这里遇到的问题是 AWS SAM 可以将文件系统上的相对路径作为 lambda 函数的 CodeUri 处理,但 CloudFormation 需要 S3 uri 以便检索要上传到 lambda 的函数代码。

你应该看看sam package 命令。此命令将解决所有特定的问题(例如,它将代码上传到 S3 并替换模板中的 CodeUri)。并创建一个“打包模板”文件,您可以将其上传到 CloudFormation。

您也可以使用sam deploy 命令,它将模板打包并将其部署到cloudformation 本身。

【讨论】:

以上是关于AWS - SAM cli yaml 模板不适用于 cloudformation 堆栈的主要内容,如果未能解决你的问题,请参考以下文章

ASK-CLI 部署不适用于托管“使用 CloudFormation 的 AWS” - Alexa 区域“默认”:访问被拒绝

如何在 SAM 模板中设置舞台名称

Installing the AWS SAM CLI on macOS

“aws cloudformation delete-stack”不能使用 SAM CLI 使用的 StackName?

尝试使用“brew tap aws/tap”命令在 ubuntu 上通过 brew 安装 aws-sam-cli,出现错误“致命:无法将 HEAD 解析为修订版”

AWS SAM CLI 全新安装引发错误 - dyld:未加载库:@executable_path/../.Python