现有Docker运行时AWS Lambda的自动化构建部署流水线搭建咨询
疑问解答
- 问题1:完全可以直接使用现有ECR仓库,无需额外配置S3存储桶做镜像中转。当前SAM Pipeline、CodePipeline等服务均原生支持ECR镜像直接推送、直接对接Lambda更新,不需要把镜像转存到S3。
- 问题2:你当前需求仅为镜像更新,不需要全量使用AWS相关编排服务:
- 最轻量选型:仅用CodePipeline + CodeBuild组合即可完成全流程,不需要用到CloudFormation、CodeDeploy、SAM
- 不需要提交SAM yaml配置文件到代码仓库:只有当你需要用SAM做全量基础设施即代码管理时才需要用到,纯镜像更新的流水线完全可以脱离SAM运行
- 问题3:可以完全基于现有已配置的Lambda、ECR资源搭建流水线,不需要删除或重建任何现有资源。流水线仅调用ECR推送、Lambda更新接口,不会修改你已有的定时触发器、权限配置等内容。
- 问题4:不需要重新配置:
- 如果你不用SAM做资源编排,完全不会触发现有Lambda配置的覆盖,原有环境变量、Secrets Manager关联配置都会保留
- 如果你选择使用SAM,只需要在SAM配置中添加不覆盖函数配置的参数即可,不需要重新录入已有的变量
- 问题5:两种方案的复杂度取决于你现有技术栈:
- 如果你已经有运行中的Jenkins集群、已经配置好AWS访问权限,Jenkins配置更简单,只需要写几行构建脚本即可
- 如果你没有现成的Jenkins服务,AWS原生方案更省心,不需要自己维护构建服务器,和AWS服务的权限对接更顺畅
落地指引
方案1:AWS原生轻量方案(无需SAM、无需修改现有资源)
不需要编写任何配置文件提交到代码仓库,全程在AWS控制台配置即可:
- 新建CodePipeline,源阶段选择GitHub,完成OAuth授权后选择对应仓库的master分支,配置为提交时自动触发流水线
- 构建阶段选择CodeBuild,创建新的构建项目,构建环境选择AWS托管的带Docker运行环境的标准镜像
- 给CodeBuild的服务角色添加以下权限:ECR镜像推拉权限、Lambda函数更新权限
- 构建命令直接在CodeBuild配置中填写,不需要提交到代码仓库,核心命令如下:
# 替换尖括号内容为你自己的资源配置 # 登录ECR aws ecr get-login-password --region <你的AWS区域> | docker login --username AWS --password-stdin <你的ECR仓库地址> # 构建镜像 docker build -t lambda-image . # 打latest标签 docker tag lambda-image:latest <你的ECR仓库地址>/<你的ECR仓库名>:latest # 推送镜像到ECR docker push <你的ECR仓库地址>/<你的ECR仓库名>:latest # 更新Lambda运行镜像 aws lambda update-function-code --function-name <你的Lambda函数名> --image-uri <你的ECR仓库地址>/<你的ECR仓库名>:latest
- 跳过部署阶段,保存流水线后手动运行一次测试,后续master分支有提交就会自动触发全流程。
方案2:Jenkins方案
- 给Jenkins节点安装AWS CLI、Docker运行环境,绑定有权限操作ECR和Lambda的IAM凭证
- 新建流水线任务,配置源码源为你的GitHub仓库,配置GitHub webhook触发(或定时轮询分支更新)
- 构建步骤执行和上述CodeBuild完全相同的shell命令即可。
内容的提问来源于stack exchange,提问作者kfranz
相关产品推荐
相关产品推荐

