如何配置GitHub Actions将develop分支代码自动部署到AWS Lambda非生产环境
多分支自动部署Lambda实现流程
1 AWS端前置配置
- 进入你的Lambda函数控制台,为当前函数创建2个别名:
prod:绑定生产环境使用的稳定版本,后续master分支推送时更新该别名的指向no-prod:绑定非生产环境使用的开发版本,后续develop分支推送时更新该别名的指向
- 新建专用IAM用户用于GitHub Actions部署,授予最小必要权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:UpdateFunctionCode", "lambda:PublishVersion", "lambda:UpdateAlias" ], "Resource": "你的Lambda函数ARN" } ] } - 把该IAM用户的访问密钥、AWS区域、Lambda函数名存入GitHub仓库的
Secrets and variables > Actions中,对应命名为AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_REGION、LAMBDA_FUNCTION_NAME
2 GitHub Actions工作流配置
在仓库根目录创建.github/workflows/lambda-deploy.yml文件,内容如下(以Python运行时为例,其他语言仅需调整打包步骤即可):
name: Deploy Lambda to AWS on: push: branches: - master - develop jobs: deploy: runs-on: ubuntu-latest steps: - name: 拉取代码 uses: actions/checkout@v4 - 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: ${{ secrets.AWS_REGION }} - name: 安装依赖并打包代码 run: | # 安装运行时依赖,根据你的语言调整 pip install -r requirements.txt -t . # 打包为zip包,排除.git、.github等不必要文件 zip -r lambda-package.zip . -x "*.git*" "*.github*" "tests/*" - name: 上传代码到Lambda并发布新版本 id: publish-lambda-version run: | aws lambda update-function-code --function-name ${{ secrets.LAMBDA_FUNCTION_NAME }} --zip-file fileb://lambda-package.zip --publish > publish_result.json VERSION=$(jq -r '.Version' publish_result.json) echo "version=$VERSION" >> $GITHUB_OUTPUT - name: 更新非生产环境别名(仅develop分支触发) if: github.ref == 'refs/heads/develop' run: | aws lambda update-alias --function-name ${{ secrets.LAMBDA_FUNCTION_NAME }} --name no-prod --function-version ${{ steps.publish-lambda-version.outputs.version }} - name: 更新生产环境别名(仅master分支触发) if: github.ref == 'refs/heads/master' run: | aws lambda update-alias --function-name ${{ secrets.LAMBDA_FUNCTION_NAME }} --name prod --function-version ${{ steps.publish-lambda-version.outputs.version }}
3 后续使用说明
- 所有开发提交合并到develop分支后,会自动打包部署到
no-prod别名对应的非生产环境,你可以通过带:no-prod后缀的Lambda ARN调用测试 - 测试验证通过后合并到master分支,会自动打包部署到
prod别名对应的生产环境 - 所有部署都会生成独立的Lambda版本,出现问题可以快速回滚到历史版本,只需将对应别名指向指定历史版本号即可
内容的提问来源于stack exchange,提问作者FenryrMKIII
相关产品推荐
相关产品推荐

