如何通过Git/AWS CLI管理AWS Lambda代码?含多Node.js微服务场景
我来分享下针对你这种10个Node.js Lambda微服务的场景,用Git+AWS CLI管理的实操方案,都是我在日常工作中验证过的高效流程!
一、先搞定基础配置
首先得把环境搭好,这是后续操作的前提:
- AWS CLI配置:先安装AWS CLI,然后运行
aws configure输入你的Access Key、Secret Key、默认区域,确保账号有Lambda的操作权限(比如lambda:UpdateFunctionCode、lambda:GetFunction这些)。 - Git仓库规划:
- 如果你的服务之间关联度不高,每个Lambda单独建一个Git仓库也可以;
- 要是服务有共用依赖或者需要统一管理,Monorepo会更省心——把所有Lambda放在一个仓库的子目录里,方便批量操作。
二、核心工作流:Git版本控制 + CLI部署
1. 统一代码结构(Node.js专属)
不管是单仓库还是Monorepo,每个Lambda的代码结构尽量标准化,比如:
# 单仓库示例 user-service/ ├── index.js # Lambda入口函数 ├── package.json # 生产依赖声明 ├── .gitignore # 忽略node_modules、.env等敏感/冗余文件 └── README.md # 服务功能、部署说明 # Monorepo示例 lambda-monorepo/ ├── services/ │ ├── user-service/ │ ├── order-service/ │ └── ...(其他8个服务) ├── package.json # 根目录可放共用工具依赖 └── .gitignore
2. Git版本管理流程
- 用分支规范管理:
main分支对应生产环境,dev分支对应测试环境,新功能开发用feat/xxx分支,合并到dev测试没问题再往main合。 - 提交信息写清楚:比如
feat(user-service): 添加用户手机号验证逻辑,后续查历史记录一目了然。
3. AWS CLI部署实操
场景1:简单无依赖的Lambda
如果你的Lambda只有单个index.js文件,直接打包部署:
# 打包代码 zip user-service.zip index.js # 部署到Lambda aws lambda update-function-code --function-name user-service --zip-file fileb://user-service.zip
场景2:带npm依赖的Node.js Lambda(最常用)
Node.js Lambda基本都有依赖,必须先装生产依赖再打包:
# 进入服务目录 cd user-service # 只装生产依赖(别装devDependencies里的测试工具) npm install --production # 打包当前所有文件(包括node_modules) zip -r user-service.zip . # 部署 aws lambda update-function-code --function-name user-service --zip-file fileb://user-service.zip
Windows用户可以用PowerShell的命令打包:
Compress-Archive -Path * -DestinationPath user-service.zip -Force
场景3:批量部署多服务(针对你的10个Lambda)
如果用Monorepo,写个Shell脚本批量部署能省超多时间,比如deploy-all.sh:
#!/bin/bash # 遍历services下的所有服务目录 for service_dir in services/*/; do # 提取服务名(比如从services/user-service/得到user-service) service_name=$(basename "$service_dir") echo "开始部署服务:$service_name" # 进入服务目录,安装依赖、打包 cd "$service_dir" npm install --production zip -r "../$service_name.zip" . # 部署到Lambda aws lambda update-function-code --function-name "$service_name" --zip-file fileb://"../$service_name.zip" # 返回根目录继续下一个 cd ../../ done
给脚本加执行权限:chmod +x deploy-all.sh,之后直接跑./deploy-all.sh就能一键部署所有服务。
三、进阶优化:让管理更高效可靠
1. Git Hooks自动触发部署
可以给Git加钩子,比如推代码到main分支自动部署生产环境,推到dev自动部署测试环境。
在仓库的.git/hooks/pre-push文件里加这段(记得给文件加执行权限chmod +x .git/hooks/pre-push):
#!/bin/bash current_branch=$(git rev-parse --abbrev-ref HEAD) if [ "$current_branch" = "main" ]; then echo "推送到main分支,自动部署生产环境..." ./deploy-production.sh # 这个脚本可以单独写生产环境的部署逻辑 elif [ "$current_branch" = "dev" ]; then echo "推送到dev分支,自动部署测试环境..." ./deploy-staging.sh fi exit 0
2. 环境变量别硬编码
敏感信息比如数据库密码、API密钥,绝对不能写在代码里,用Lambda的环境变量配置:
# 给user-service设置环境变量 aws lambda update-function-configuration --function-name user-service --environment Variables={DB_HOST=xxx.rds.amazonaws.com,DB_PASSWORD=xxx}
可以把不同环境的变量存在.env.prod、.env.staging文件里,用脚本读取后批量设置,避免手动输入出错。
3. 版本回滚很简单
如果部署出问题,用Git回滚代码后重新部署就行,也可以直接用AWS CLI回滚到Lambda历史版本:
# 查看user-service的版本历史 aws lambda list-versions-by-function --function-name user-service # 回滚到指定版本(替换成你要的revision-id) aws lambda update-function-code --function-name user-service --revision-id "xxxxxx-xxxx-xxxx-xxxx-xxxxxx"
4. 可选但推荐:集成CI/CD
如果团队协作,用GitHub Actions、GitLab CI这类工具结合Git和AWS CLI做自动化部署更爽:比如提交代码到dev分支自动跑测试、部署到测试环境,合并到main分支直接部署生产。举个GitHub Actions的简单示例(.github/workflows/deploy.yml):
name: 自动部署Lambda on: push: branches: [ main, dev ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: 安装Node.js uses: actions/setup-node@v4 with: node-version: '20' # 用你Lambda对应的Node版本 - name: 配置AWS凭证 uses: aws-actions/configure-aws-credentials@v4 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 # 替换成你的Lambda区域 - name: 部署到对应环境 run: | if [ "${{ github.ref }}" = "refs/heads/main" ]; then ./deploy-production.sh else ./deploy-staging.sh fi
四、总结适配你的场景
针对你10个Node.js Lambda的情况,我最推荐的组合是:
- 用Monorepo统一管理所有服务,方便批量操作和依赖共享;
- 建立清晰的Git分支流程,确保代码版本可控;
- 写Shell脚本实现批量部署,配合Git Hooks或CI/CD实现自动化;
- 用Lambda环境变量管理敏感信息,彻底告别硬编码。
这样操作下来,你就能摆脱Web界面的低效,管理10个服务会轻松很多!
内容的提问来源于stack exchange,提问作者jaimerr

