更新AWS Lambda层依赖性

时间:2018-12-13 18:29:08

标签: amazon-web-services aws-lambda amazon-cloudformation layer

这种情况是,我有很多aws lambda函数(使用node js 8.10),它们的功能都非常不同,并且都使用CloudFormation进行了部署。

它们都共享一些非常复杂的功能。

目前,如果通用代码发生更改(这是相当频繁的),我将在每个项目(包括源代码控制)之间复制通用代码,然后重新部署每个功能。一直觉得这是错误的。

现在我们有了lambda图层-是的!还是吗?

太好了,所以现在我可以在一个仓库中维护代码了-tick 但是其余的过程实际上并没有更好,甚至可能更糟...

如果将图层放入CloudFormation模板中,然后将ARN导出以导入到lambda函数模板中,则导出的ARN仅适用于该图层的版本1。

我可以使用Sub函数形成没有版本的ARN,然后在lamda函数CloudFormation模板中添加版本。 但是,只要通用代码发生变化,我仍然需要更新所有下游lambda函数CloudFormation模板以添加最新版本。

我可以编写脚本,但是它仍然是一个巨大的PITA,并不能真正节省很多精力。 我需要获取每个lambda函数项目的最新版本,以更新版本号,然后重新提交回购协议,pr,merge,等等等等。

是否有其他方式可以始终使用最新版本的图层?

2 个答案:

答案 0 :(得分:0)

使用无服务器部署和CloudFormation输出可以帮助解决这种情况。

  1. 在自己的服务中定义图层。创建输出资源(但不创建导出名称)。
resources:
  Outputs:
    MYOUTPUTNAME:
      Value:
        Ref: MYLAYERLambdaLayer # LambdaLayer is a required suffix
  1. 将输出作为任何功能需要的层的参考
functions:
  ...other required function keys in serverless
  layers:
    - ${cf:NAME_OF_STACK.MYOUTPUTNAME}
  1. 每次重新部署该层时,都必须强制重新部署引用该层(sls deploy --force)的整个函数堆栈。仅重新部署功能不会更新输出参考。

注意:如果使用输出导出名称,则在引用当前版本时重新部署图层服务会遇到错误。因此,最好使用不会导致此错误的对堆栈输出的引用。

答案 1 :(得分:0)

您可以与lambda层一起在参数存储区中创建参数:

https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html

这将跟随您的ARN和版本,我在同一堆栈中创建了两个资源(lambda层和参数)。