如何在AWS App Runner中回滚至旧版本?含ECR镜像回滚方案
AWS App Runner版本回滚方法及ECR旧镜像选择方案
一、App Runner通用回滚方法
1. 控制台手动操作
进入AWS App Runner控制台,找到目标服务,切换到「部署历史」标签页,选择之前成功完成的部署版本,点击「回滚」按钮,确认后App Runner会自动重新部署该版本的配置与镜像。
2. AWS CLI命令回滚
使用aws apprunner start-deployment命令,指定目标服务ARN和要回滚的部署ID即可触发回滚:
aws apprunner start-deployment --service-arn arn:aws:apprunner:us-east-1:123456789012:service/your-service --deployment-id d-ABCDEFG123
部署ID可通过控制台部署历史或aws apprunner list-deployments --service-arn <你的服务ARN>命令获取。
二、结合GitHub Actions与ECR的旧镜像回滚方案
由于你的工作流是通过GitHub Actions构建镜像并上传至ECR,回滚时可通过以下方式指定旧镜像:
1. 手动触发工作流选择旧镜像标签
新增一个支持手动触发的GitHub Actions工作流,允许输入要回滚的ECR镜像标签,示例工作流核心步骤如下:
name: App Runner Rollback on: workflow_dispatch: inputs: image_tag: description: 'ECR旧镜像标签(如commit hash、版本号)' required: true jobs: rollback: runs-on: ubuntu-latest steps: - name: Configure AWS credentials 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 - name: Rollback to old ECR image run: | aws apprunner update-service --service-arn arn:aws:apprunner:us-east-1:123456789012:service/your-service --source-configuration '{ "ImageRepository": { "ImageIdentifier": "123456789012.dkr.ecr.us-east-1.amazonaws.com/your-repo:${{ github.event.inputs.image_tag }}", "ImageConfiguration": { "Port": "80", "RuntimeEnvironmentVariables": {} }, "ImageRepositoryType": "ECR" } }'
触发时输入旧镜像的标签(比如之前构建时用的commit hash、版本号),工作流会调用API更新App Runner服务,拉取指定的旧镜像完成部署。
2. 基于部署历史关联旧镜像
每次成功部署后,将部署ID与对应ECR镜像标签绑定存储(比如存入GitHub环境变量、Secrets或用Release记录)。回滚时直接使用该部署ID触发回滚(即前文CLI的方法),App Runner会自动复用该部署对应的ECR镜像,无需手动指定标签。
注意事项
- 确保ECR生命周期规则未自动清理旧镜像,否则回滚会因镜像不存在失败。
- 回滚操作会生成新的部署记录,不会覆盖原有历史,便于后续排查。
内容的提问来源于stack exchange,提问作者mmm
相关产品推荐
相关产品推荐

