通过Github Actions部署AWS Elastic Beanstalk失败及后续访问问题
排查AWS Elastic Beanstalk多容器部署问题
一、解决部署中止错误(ERROR: During an aborted deployment...)
ERROR: During an aborted deployment, some instances may have deployed the new application version. To ensure all instances are running the same version, re-deploy the appropriate application version.
针对这个错误,除了删除旧版本和S3文件,还可以从以下方向排查:
- 查看EB环境事件日志:登录EB控制台,进入对应环境的「事件」标签,这里会显示部署中止的具体触发原因(比如容器启动超时、镜像拉取失败、配置文件语法错误等),比Github Actions日志更详细。
- 修复版本标签唯一性:你的Workflow中
version_label固定为my-site-deployment-1,EB不允许重复的版本标签。每次部署必须使用唯一值,比如替换为:
用Commit SHA或者时间戳保证标签唯一,避免重复部署冲突。version_label: "my-site-deployment-${{ github.sha }}" - 验证S3桶权限:确认EB服务角色(自动生成的那个)拥有对应S3桶(默认是
elasticbeanstalk-<region>-<你的账号ID>)的读写权限,比如s3:PutObject、s3:GetObject、s3:ListBucket,可以给角色附加AWSElasticBeanstalkServicePolicy托管策略快速验证。 - 下载EC2实例完整日志:在EB控制台环境的「日志」标签,选择「请求日志」>「完整日志」,解压后查看
var/log/eb-engine.log(EB部署引擎日志)和var/log/docker.log(容器日志),定位部署过程中的具体错误。
二、部署成功但应用无法访问(This site can’t be reached)
部署成功后无法访问,按以下步骤排查:
- 检查安全组配置:
- EC2实例的安全组必须允许80/443端口的入站流量(根据你应用的端口调整),来源可暂时设为
0.0.0.0/0测试(后续再缩小范围)。 - 如果环境使用了负载均衡,负载均衡的安全组也要允许对应端口的入站流量,并且负载均衡安全组和实例安全组之间要有互通规则(负载均衡能访问实例的应用端口)。
- EC2实例的安全组必须允许80/443端口的入站流量(根据你应用的端口调整),来源可暂时设为
- 确认Dockerrun.aws.json端口映射:v3版本的配置中,端口映射必须正确关联容器端口和主机端口(EB默认监听主机80端口),例如:
"portMappings": [ { "containerPort": 3000, // 你的应用容器端口 "hostPort": 80, "protocol": "tcp" } ] - 检查容器运行状态:登录EC2实例,执行
docker ps查看容器是否处于Up状态;如果容器退出,执行docker logs <容器ID>查看启动报错(比如依赖缺失、端口占用)。 - 测试实例内部访问:在EC2实例上执行
curl localhost:80(对应主机端口),如果能返回应用响应,说明是外部网络/安全组问题;如果不能,说明容器未正确启动或端口映射错误。 - 验证负载均衡健康状态:如果环境使用负载均衡,进入EC2控制台的「目标组」,查看实例的健康检查是否通过。健康检查失败会导致负载均衡不转发流量,常见原因是健康检查路径配置错误(比如应用根路径返回404)。
- 测试域名解析:用
nslookup <EB环境默认域名>(比如my-site-env.xxxx.us-east-1.elasticbeanstalk.com),确认域名能解析到负载均衡或实例的IP,排除DNS解析问题。
内容的提问来源于stack exchange,提问作者louisgm7
相关产品推荐
相关产品推荐

