You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 01:45:03