这个医生说他们做的事情完全一样:
本节中描述的sam包和sam命令分别与它们的AWS CLI等效命令aws cloudformation包和aws cloudformation部署完全相同。
但我的经验表明这并不完全正确。当我为我的基于Java的Lambda运行sam deploy
时,它得到一个被上传到具有这种压缩结构的S3的工件:
这在Lambda中执行得很好。但是,当我遵循Lambda + CodePipeline文档并使用aws cloudformation
时,我得到了这个压缩结构(本质上是我的git ):
注意:这种替代结构甚至发生在CodeBuild之外,所以我怀疑它与buildspec.yml
中的内容有什么关系。我可以简单地通过调用桌面上的两个不同的包命令来再现这两个结构。
有什么不同吗?我想了解它,特别是因为在我将buildspec.yml
切换到使用sam deploy
之前,文档说它们应该是相同的。
谢谢!
发布于 2019-11-15 09:36:05
“cloudformation”和“aws cloudformation”一样愚蠢。区别来自“sam”,它将构建一个新的“template.yaml”,并将其放置在“{app_dir}/..aws sam/ build /template.yaml”和依赖项下。
这个新的'template.yaml‘由'sam包’使用(而不是'{app_dir}/template.yaml'),从而在包中添加所需的依赖项。请查看“{app_dir}/..aws sam/build/”目录以了解更多信息。
如果您在目录‘{app_dir}/. as sam/build’中运行'cloudformation‘,您将得到与’same‘相同的结果。
使用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包’将从您指定的位置读取模板文件:
$ aws cloudformation package --template-file template.yaml --output-template-file packaged.yaml --s3-bucket {my-bucket}
发布于 2021-08-16 14:37:17
aws cloudformation package ...
有一个问题,它没有将DefinitionUri
更新为SAM模板的相应S3 URI,如下所示:
DemoStepFunction:
Type: AWS::Serverless::StateMachine
Properties:
DefinitionUri: stepfunctions/demo_step_1.json
sam package...
解决了这个问题,并创建了正确的Cloudformation模板:
DemoStepFunction:
Type: AWS::Serverless::StateMachine
Properties:
DefinitionUri:
Bucket: pipeline-demo-test1
Key: cassdasd6565casdawwebf5f3
https://stackoverflow.com/questions/58823209
复制相似问题