amazon-web-services - 如何通过 Codepipeline 在 CFN 模板中部署多个 Lambda?
问题描述
用例
我有一个 cloudformation 堆栈,里面有超过 15 个 Lambda。我可以部署Codepipeline
由两个阶段CodeCommit
和CodeDeploy
. 在这种方法中,我所有的 lambda 代码都在 cloudformation 模板中(即内联代码)。出于安全考虑,我想将其更改Inline
为S3
反过来需要S3BucketName
和S3Key
.
作为临时解决方法
到目前为止,我正在压缩每个 lambda 文件并手动将S3keyName
其bucketname
作为参数传递给我的堆栈。
有什么方法可以通过 Codepipeline 执行此步骤吗?
我对 CodeBuild 的假设
我知道我们可以使用CodeBuild
它。但到目前为止我所看到CodeBuild
的只是用于构建package.json
文件。但在我的用例中,我没有任何 . 而且我还可以看到可以指定cloudformation package
将我的 lambda 从本地包装到 S3 的命令,此命令将生成 S3 codeuri`,但这是针对将有单个 lambda 但在我的情况下有 15 个的无服务器应用程序。
我试过的
我知道,只要您给予它git push
,codecommit
它就会让您在 S3 中保留代码。所以我想的是从 codecommit 推送文件中获取 and 并将这些参数传递给我的 CFN 模板S3BucketName
。S3KeyName
我可以得到,S3BucketName
但S3KeyName
我不知道如何得到?而且我不知道这种尝试过的方法是否可行?
顺便说一句,我知道我可以使用 shell 脚本来自动化这个过程。但是有没有办法通过CODE PIPELINE做到这一点?
更新——尝试过的无服务器方法
基本上我使用两个独立运行的不同运行时(即Nodejs,Python)运行两个构建操作。因此,当我使用无服务器方法时,每个构建都会创建一个 template-export.yml 文件,其中包含 bucketlocation 的 codeuri,这意味着我将拥有two template-export.yml files
. 方法的一个问题,Serverless
它必须必须create changeset
然后触发Execute changeset
。因此,我需要merge those two template-export.yml files
运行此create changeset
操作,然后执行execute changeset
. 但我不知道是否有合并两个的命令SAM templates
。否则一个 template-export.yml 堆栈将替换另一个 template-export.yml 堆栈。
感谢任何帮助谢谢
解决方案
如果我的理解正确,您只需要将 S3 存储桶和密钥通过管道传输到您的 Lambda CF 模板中。为此,我ParameterOverrides
在管道中使用声明。
本质上,管道是一个单独的堆栈,并选择位于我的源代码根目录中的 CF 模板。然后,它会覆盖该模板中的两个参数,这些参数将其指向适当的 S3 存储桶/密钥。
- Name: LambdaDeploy
Actions:
- Name: CreateUpdateLambda
ActionTypeId:
Category: Deploy
Owner: AWS
Provider: CloudFormation
Version: 1
Configuration:
ActionMode: CREATE_UPDATE
Capabilities: CAPABILITY_IAM
RoleArn: !GetAtt CloudFormationRole.Arn
StackName: !Join
- ''
- - Fn::ImportValue: !Sub '${CoreStack}ProjectName'
- !Sub '${ModuleName}-app'
TemplatePath: SourceOut::cfn-lambda.yml
ParameterOverrides: '{ "DeploymentBucketName" : { "Fn::GetArtifactAtt" : ["BuildOut", "BucketName"]}, "DeploymentPackageKey": {"Fn::GetArtifactAtt": ["BuildOut", "ObjectKey"]}}'
现在,您在其中有 15 个 Lambda 函数这一事实可能会给它带来麻烦。为此,我并没有确切的答案,因为我实际上是在尝试做完全相同的事情并以这种方式打包多个 Lambda。
推荐阅读
- python - 如何在 Win10 / powerhsell 上获得免费/开放的本地端口以进行 ssh 转发
- html - 在 WordPress 中允许在分类名称中使用 html
- python - 在新的(看不见的)文本上部署文本分类模型
- python - 从 df.to_markdown() 中删除空格
- python - 图顶点排序度问题:找到k-ordering
- android - Toast Android 11 自定义
- excel - 循环以从列中的单元格复制数据
- tensorflow - Yolov2 Frozen Graph To Tensorrt 图
- react-native - 如何将数据传递到详细信息屏幕?我正在尝试,但它给了我这个错误:无效尝试解构不可迭代实例
- php - 无法将 Jetstream 包安装到 Laravel 项目