AWS Lambda-在CI / CD管道中对lambda进行版本控制和推广的最佳实践是什么

时间:2020-09-29 12:41:24

标签: amazon-web-services aws-lambda continuous-integration continuous-delivery

我是AWS Lambda的新手,想检查对lambda进行版本控制并将其提升到CI / CD管道中更高环境的最佳实践。

作为一个例子,让我们遵循以下假设:

  • 我有3种环境:dev / ci / prod
  • 我在一个Git存储库中有多个lambda(它们共享一些通用代码)

我看到以下过程:

  • 共享代码将打包在单独的层中
  • 每个lambda都将单独打包,并将重新使用共享层

现在,回到CI流程,我需要一些方法来区分一个环境中的一组lambda /层。到另一个。

我的第一个假设是为此目的利用标签:

"Environment=Dev"
"Environment=CI"
"Environment=Prod" 

标签可以区分在不同环境中使用的同一lambda。不幸的是,如果我正确的话,就没有办法使用多个具有相同名称的lambda(即使标签不同)?

下一个想法是根据环境保留不同名称的lambda函数。例如:

mylambda-dev-<DEV_NAME>-<SPECIFIC_BRANCH_NAME> # where <DEV_NAME> is used to differentiate between dev env. for multiple developers
mylambda-ci-<INTEGRATION_BRANCH_NAME>
mylambda-prod
  • 在开发过程中,开发人员将运行CI作业,该作业将创建/更新mylambda-dev-<DEV_NAME>-<SPECIFIC_BRANCH_NAME>
  • 当处于集成状态(并且代码已合并到集成分支)处于良好状态时,将有一个CI作业将创建/更新mylambda-ci-<INTEGRATION_BRANCH_NAME>
  • 最后,当我们准备在生产中发布时,将有一个CI作业,该作业将创建具有特定版本(1、2、3 ...)的mylambda-prod,以使发布的lambda不可变。另外,将创建别名以指向生产中的特定版本。此别名会将数字版本映射到对项目更有意义的内容,例如:<PROJECT_NAME>_v1.0.0

相同的过程也将应用于图层。

这些是我对该主题的初步想法。任何有助于实现覆盖此主题的最佳实践的帮助/指导/经验都将很棒。

谢谢。

1 个答案:

答案 0 :(得分:1)

我们遵循的Lambda促销活动是

  1. 每个lambda都具有-{{环境}},例如my-lambda-dev,my-lambda-stage,my-lambda-prod

  2. 每个lambda都有“ Smoke”和“ Live”别名。

当我们执行CI / CD作业时,请按照以下步骤操作

循环查看环境列表(例如dev-> stage-> prod)

2.1在当前的工作环境(如5.1.0)上为“ Live”版本备份绿色版本

2.2部署到当前工作环境,并且仅使用'Smoke'别名

2.3在“烟雾”别名下执行测试用例

2.4如果所有测试用例都通过了,请将其应用到Live别名,然后继续循环(这意味着继续升级到更高的环境)

2.5如果有任何失败,请回滚到针对当前环境及以下环境以2.1备份的版本。在那之后打破循环

注意:请确保所有源事件都使用实时版本,而不是Smoke版本。

谢谢