使用GitHub Action部署至Elastic Beanstalk遇FileTooLargeError求助
尝试通过GitHub Action将应用部署到Elastic Beanstalk,已在推送前压缩文件,压缩包大小约400MB(小于官方512MB的限制),但Action执行后仍报错:FileTooLargeError - Archive cannot be any larger than 512MB。
使用的GitHub Action配置如下:
name: EB deploy on: push: branches: [ develop ] 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_DEVELOP_DEFAULT_REGION }} AWS_APPLICATION_NAME: ${{ secrets.AWS_DEVELOP_APPLICATION_NAME }} AWS_ENVIRONMENT_NAME: ${{ secrets.AWS_DEVELOP_ENVIRONMENT_NAME }} steps: - uses: actions/checkout@v2 - name: Install Python 3.9 uses: actions/setup-python@v2 with: python-version: 3.9 - name: Generate deployment package # run: zip -r deploy.zip * .[^.]* -x "**node_modules, Dockerfile, docker-compose.yml, vendor**" # create the zip run: zip -r deploy.zip . -x '*.png' -x '.gitignore' -x '/plugins/*/webroot/build/*' -x '/plugins/*/webroot/fonts/*' -x '*.git/*' -x '*.jpeg' -x 'build/*' -x '*.webp' -x 'config-dev-server' -x '*.JPG' -x '*/node_modules/*' -x '.env_example' -x '.htaccess' -x '/plugins/*/webroot/node_modules/*' -x 'webroot/webpack-updater/*' -x '.dockerignore' -x '.vscode' -x '*.gif' -x 'tmp/*' -x 'webroot/cypress/*' -x 'Dockerfile' -x 'docker-compose.yml' -x '*/files/*' -x 'webroot/tests/*' -x '/webroot/node_modules/*' -x '*.jpg' -x '/vendor/*' -x 'webroot/nodeScripts/*' -x '/db/*' -x 'config-dev-server/*' -x 'amplify/*' -x 'amplify_new/*' -x 'webroot/admin/dev/*' -x '/plugins/*/webroot/build/*' -x 'plugins/*/webroot/dev/*' -x '.elasticbeanstalk/app_versions/*' - name: Install EB CLI using pip run: | python -m pip install --upgrade pip pip install awsebcli - name: Deploy to Elastic Beanstalk run: | eb init --platform 'PHP 7.4 running on 64bit Amazon Linux 2' --region 'eu-west-2' Develop eb deploy
排查思路
确认压缩包实际大小:在
Generate deployment package步骤后添加ls -lh deploy.zip命令,查看Action环境中生成的压缩包真实大小。本地测试的压缩包和CI环境生成的可能存在差异,比如CI环境中是否混入了额外文件。检查排除规则有效性:你的zip排除规则存在重复项(如两次排除
/plugins/*/webroot/build/*),且部分路径写法可能失效。比如带开头斜杠的路径在相对目录下可能不生效,建议改为plugins/*/webroot/build/*这类写法;同时可以添加unzip -l deploy.zip | grep node_modules命令,检查是否有未被排除的大目录(如node_modules)被意外包含。验证EB CLI是否使用了手动生成的压缩包:默认情况下
eb deploy会自动打包整个项目目录,而非你手动生成的deploy.zip。这会导致即使你手动压缩了小文件,EB CLI还是会重新打包所有文件,触发大小限制。解决方法:- 在
eb deploy命令中指定你的压缩包:eb deploy --package deploy.zip - 或者在
.elasticbeanstalk/config.yml中配置打包规则,避免EB CLI自动打包。
- 在
排查遗漏的大文件:在压缩前添加
du -sh .查看当前目录总大小,对比压缩后的包大小,判断是否有未被排除的大文件(如日志、缓存、未忽略的第三方依赖)。测试最小化压缩包:如果前面步骤都没找到问题,可以尝试上传一个仅包含核心文件的小型测试包,确认是否能成功部署,以此排除平台限制异常的可能。
内容的提问来源于stack exchange,提问作者R0bertinski

