Github Actions部署AWS Elastic Beanstalk版本找不到错误排查
AWS Elastic Beanstalk部署版本找不到问题排查与解决
核心问题
你碰到的InvalidParameterValue错误,本质是Elastic Beanstalk里找不到你指定的应用版本——不管用带SHA的动态标签还是固定标签,问题都出在版本创建环节,不是标签格式本身。
Version Label的正确用法
- 带SHA的动态标签:推荐用
myapp-devel-${{ github.sha }},每个提交对应唯一版本,方便后续回溯、回滚,完全符合EB版本管理的最佳实践(每个版本是不可变的部署包快照)。 - 固定标签:只适合测试环境重复覆盖同一版本,但EB默认不允许同名版本重复存在,必须先删除旧版本才能重新创建,不建议生产环境这么用。
你的部署配置里的坑
- 重复上传包:你手动把包传到了S3,但
einaregilsson/beanstalk-deploy这个Action会自动处理包的上传和应用版本创建,手动上传的路径和Action预期的不匹配,导致Action找不到包来创建版本。 - 注释的版本创建代码有语法错误:被注释的
create-application-version命令里,S3Bucket="github"是HTML转义字符,应该直接写S3Bucket="github-action"(你的桶名是github-action,不是github),这也是之前手动创建版本失败的原因。 - 冗余的EB CLI操作:
eb init在这个Action流程里完全多余,Action不需要依赖本地EB CLI配置。
修正后的完整配置
name: EB deploy to myapp on: push: branches: - 'myapp-devel' jobs: deploy: runs-on: ubuntu-latest env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_DEVELOP_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_DEVELOP_SECRET_ACCESS_KEY }} AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }} AWS_APPLICATION_NAME: ${{ secrets.AWS_DEVELOP_APPLICATION_4_NAME }} AWS_ENVIRONMENT_NAME: ${{ secrets.AWS_DEVELOP_ENVIRONMENT_4_NAME }} steps: - uses: actions/checkout@v4 - name: Install Python 3.9 uses: actions/setup-python@v2 with: python-version: 3.9 - name: Generate deployment package run: zip -r deploy-${{ github.sha }}.zip . -x '*.png' '.gitignore' '/plugins/*/webroot/build/*' '*.git/*' '*.jpeg' 'build/*' '*.webp' 'config-dev-server' '*.JPG' '*/node_modules/*' '.env_example' '.htaccess' '/plugins/*/webroot/node_modules/*' 'webroot/webpack-updater/*' '.dockerignore' '.vscode' '*.gif' 'tmp/*' 'webroot/cypress/*' 'Dockerfile' 'docker-compose.yml' '*/files/*' 'webroot/tests/*' '/webroot/node_modules/*' '*.jpg' 'webroot/emails/*' # 移除冗余的EB CLI安装和手动S3上传步骤,交给Action处理 - name: Deploy myapp-devel to EB uses: einaregilsson/beanstalk-deploy@v21 with: aws_access_key: ${{ secrets.AWS_DEVELOP_ACCESS_KEY_ID }} aws_secret_key: ${{ secrets.AWS_DEVELOP_SECRET_ACCESS_KEY }} application_name: ${{ secrets.AWS_DEVELOP_APPLICATION_4_NAME }} environment_name: ${{ secrets.AWS_DEVELOP_ENVIRONMENT_4_NAME }} use_existing_version_if_available: true version_label: myapp-devel-${{ github.sha }} region: ${{ secrets.AWS_DEFAULT_REGION }} deployment_package: deploy-${{ github.sha }}.zip - name: Fetch Elastic Beanstalk logs run: | # 先关联环境再拉取日志 eb init --platform 'PHP 8.2' --region ${{ secrets.AWS_DEFAULT_REGION }} ${{ secrets.AWS_DEVELOP_APPLICATION_4_NAME }} eb use ${{ secrets.AWS_DEVELOP_ENVIRONMENT_4_NAME }} eb logs
额外排查建议
- 权限检查:确保你的AWS密钥拥有
elasticbeanstalk:CreateApplicationVersion、elasticbeanstalk:UpdateEnvironment、s3:PutObject的权限(Action会自动使用EB的默认S3桶或你指定的桶)。 - 版本验证:可以在部署前加个步骤,检查版本是否已经存在:
aws elasticbeanstalk describe-application-versions --application-name ${{ secrets.AWS_DEVELOP_APPLICATION_4_NAME }} --version-labels myapp-devel-${{ github.sha }} - 固定标签测试:如果非要用固定标签
myapp-devel,需要先删除旧版本(注意:会丢失旧版本快照,谨慎操作):aws elasticbeanstalk delete-application-version --application-name ${{ secrets.AWS_DEVELOP_APPLICATION_4_NAME }} --version-label myapp-devel --delete-source-bundle
内容的提问来源于stack exchange,提问作者R0bertinski
相关产品推荐
相关产品推荐

