amazon-web-services - sam 包与 aws cloudformation 包

标签 amazon-web-services aws-lambda aws-cloudformation aws-codebuild aws-sam

The文档说他们做了完全相同的事情:

Both the sam package and sam deploy commands described in this section are identical to their AWS CLI equivalent commands aws cloudformation package and aws cloudformation deploy, respectively.

但我的经验表明这并不完全正确。当我为基于 Java 的 Lambda 运行 sam deploy 时,会使用这种类型的 zip 结构将工件上传到 S3:

  • 元信息
  • com/example/etc,类文件
  • logback.groovy,其他资源
  • lib,其中包含我所有的 jar

这在 Lambda 中执行得很好。但是当我按照Lambda + CodePipeline docs并使用aws cloudformation,我得到了这个zip结构(本质上是我的git存储库):

  • README.md
  • 构建/
  • 构建.gradle
  • buildspec.yml
  • 事件
  • 梯度/
  • 格拉德卢
  • gradlew.bat
  • src/
  • 模板.yml

注意:这种替代结构甚至发生在 CodeBuild 之外,因此我怀疑它与 buildspec.yml 中的内容有什么关系。我只需在桌面上调用两个不同的包命令即可重现这两个结构。

有什么想法为什么会出现差异吗?我想理解它,特别是因为文档说它们应该是相同的,然后我将 buildspec.yml 切换为使用 sam deploy

谢谢!

最佳答案

“sam package”与“aws cloudformation package”一样愚蠢。差异来自于“sam build”,它将构建一个新的“template.yaml”,并将依赖项放置在“{app_dir}/.aws-sam/build/template.yaml”下。

这个新的“template.yaml”由“sam package”(而不是“{app_dir}/template.yaml”)使用,从而在包中添加所需的依赖项。请调查目录“{app_dir}/.aws-sam/build/”以了解更多信息。

如果您在目录“{app_dir}/.aws-sam/build”中运行“cloudformation package”,您将获得与“sam package”相同的结果。

使用“sam package”和 --debug 来查看它正在读取哪个模板文件:

$ sam package --output-template-file packaged.yaml --s3-bucket {bucket_name} --debug
Using SAM Template at /home/ec2-user/sam-app/.aws-sam/build/template.yaml

“aws cloudformation package”将仅从您指定的位置读取模板文件:

$ aws cloudformation package --template-file template.yaml --output-template-file packaged.yaml --s3-bucket {my-bucket}

关于amazon-web-services - sam 包与 aws cloudformation 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58823209/

相关文章:

amazon-web-services - 存储 AMI 的成本

http - 如何从 AWS Lambda 函数返回错误集合/对象并映射到 AWS API 网关响应代码

amazon-web-services - AWS cloudwatch 自定义指标作为弹性 beantalk 自动缩放触发器

aws-lambda - Fargate 与 Lambda,何时使用哪个?

amazon-web-services - 我无法使用 CloudFormation 中的用户数据将 S3 文件复制到 EC2 实例

amazon-web-services - CloudFormation 嵌套堆栈名称

amazon-web-services - Javascript - 无法使用 AWS-SDK 初始化 AWS Textract 对象

amazon-web-services - 将 MQTT 消息从 AWS Lambda 发送到我的 IOT 设备

node.js - Sam 构建失败,代码为 : Build Failed Error: NodejsNpmBuilder:NpmPack - NPM Failed: npm ERR! Z_DATA_ERROR

amazon-web-services - 从 CloudFormation 模板指定 Amazon EMR 中的安全配置