sam软件包vs aws cloudformation软件包

问题描述 投票:1回答:1

The文档说他们做的完全一样:

本节中描述的sam软件包和sam部署命令与它们的AWS CLI等效命令完全相同aws cloudformation程序包和aws cloudformation分别部署。

但是我的经验表明,事实并非如此。当我为基于Java的Lambda运行sam deploy时,会使用这种类型的zip结构将工件上传到S3:

  • META-INF
  • com / example / etc,类文件
  • logback.groovy,其他资源
  • lib,其中包含我所有的jars

而且这在Lambda中执行得很好。但是当我遵循Lambda + CodePipeline docs并使用aws cloudformation时,我得到了这个zip结构(本质上是我的git repo):

  • README.md
  • build /
  • build.gradle
  • buildspec.yml
  • 事件
  • gradle /
  • gradlew
  • gradlew.bat
  • src /
  • template.yml

注意:这种替代结构甚至发生在CodeBuild之外,因此我怀疑它是否与buildspec.yml中的内容有关。我可以通过在桌面上调用两个不同的package命令来简单地重现这两种结构。

任何想法为何会有区别?我想了解一下,特别是因为文档说它们应该相同,然后才将我的buildspec.yml切换为使用sam deploy

谢谢!

amazon-web-services aws-lambda amazon-cloudformation aws-codebuild aws-sam
1个回答
0
投票

'sam package'和'aws cloudformation package'一样愚蠢。区别来自“ sam build”,它将构建一个新的“ template.yaml”,并通过依赖项放置在“ {app_dir} /。aws-sam / build / template.yaml”下。

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

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

与--debug一起使用'sam软件包',以查看它正在读取哪个模板文件:

$ 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}
© www.soinside.com 2019 - 2024. All rights reserved.