这种情况是,我有很多aws lambda函数(使用node js 8.10),它们的功能都非常不同,并且都使用CloudFormation进行了部署。
它们都共享一些非常复杂的功能。
目前,如果通用代码发生更改(这是相当频繁的),我将在每个项目(包括源代码控制)之间复制通用代码,然后重新部署每个功能。一直觉得这是错误的。
现在我们有了lambda图层-是的!还是吗?
太好了,所以现在我可以在一个仓库中维护代码了-tick 但是其余的过程实际上并没有更好,甚至可能更糟...
如果将图层放入CloudFormation模板中,然后将ARN导出以导入到lambda函数模板中,则导出的ARN仅适用于该图层的版本1。
我可以使用Sub函数形成没有版本的ARN,然后在lamda函数CloudFormation模板中添加版本。 但是,只要通用代码发生变化,我仍然需要更新所有下游lambda函数CloudFormation模板以添加最新版本。
我可以编写脚本,但是它仍然是一个巨大的PITA,并不能真正节省很多精力。 我需要获取每个lambda函数项目的最新版本,以更新版本号,然后重新提交回购协议,pr,merge,等等等等。
是否有其他方式可以始终使用最新版本的图层?
答案 0 :(得分:0)
使用无服务器部署和CloudFormation输出可以帮助解决这种情况。
resources:
Outputs:
MYOUTPUTNAME:
Value:
Ref: MYLAYERLambdaLayer # LambdaLayer is a required suffix
functions:
...other required function keys in serverless
layers:
- ${cf:NAME_OF_STACK.MYOUTPUTNAME}
sls deploy --force
)的整个函数堆栈。仅重新部署功能不会更新输出参考。注意:如果使用输出导出名称,则在引用当前版本时重新部署图层服务会遇到错误。因此,最好使用不会导致此错误的对堆栈输出的引用。
答案 1 :(得分:0)
您可以与lambda层一起在参数存储区中创建参数:
https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html
这将跟随您的ARN和版本,我在同一堆栈中创建了两个资源(lambda层和参数)。