Elastic Beanstalk环境Suspended状态及部署失败问题求助
Elastic Beanstalk Node.js应用部署失败:服务角色权限问题及环境状态异常
问题详情
- 初始状态:通过CLI+密钥对创建并部署Node.js应用,昨日运行正常且可更新部署
- 告警阶段:环境健康状态从
Pending转为Warning,提示无法承担角色arn:aws:iam::387726373049:role/aws-elasticbeanstalk-service-role,但该角色确实存在,信任策略如下:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "elasticbeanstalk.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] } - 当前状态:环境变为
Suspended,部署失败,CLI部署报错:❯ eb deploy Creating application version archive "app-2765-230711_085546971343". Uploading api-meeting-dev/app-2765-230711_085546971343.zip to S3. This may take a while. Upload Complete. 2023-07-11 06:55:48 INFO Environment update is starting. 2023-07-11 06:55:50 ERROR Failed to check health. Verify the permissions on the environment's service role and try again later. Permissions changes take up to two hours to propagate. 2023-07-11 06:55:51 ERROR Failed to deploy application. ERROR: ServiceError - Failed to deploy application. - 附加问题:环境配置的
Service access中修改IAM角色和密钥对,保存显示成功但未生效;aws-elasticbeanstalk-ec2-role信任策略如下:{ "Version": "2008-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "ec2.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] } - 临时缓解:将健康检查改为basic后可部署,但环境状态仍为
Grey;已两次创建新环境,问题重复出现。
解决方案
1. 确认服务角色的核心权限配置
- 检查
aws-elasticbeanstalk-service-role是否附加了AWSElasticBeanstalkService托管策略,该策略包含Elastic Beanstalk服务运行所需的全部基础权限。如果使用自定义策略,需确保包含以下关键权限:- 弹性Beanstalk资源的管理权限(
elasticbeanstalk:*) - EC2实例、安全组、负载均衡器的访问权限
- S3存储桶(应用版本存储)的读写权限
- CloudWatch日志的发布与读取权限
- 弹性Beanstalk资源的管理权限(
- 检查信任策略是否存在额外限制:比如是否添加了
Condition字段(如SourceIp、ExternalId),这些会导致Elastic Beanstalk服务无法正常AssumeRole。
2. 强制刷新IAM权限缓存
- IAM权限变更最长可能2小时生效,可通过以下方式加速:
- 执行
eb restart重启环境实例,触发临时凭证刷新 - 在IAM控制台重新保存一次
aws-elasticbeanstalk-service-role的信任策略和权限策略 - 使用AWS CLI重新关联服务角色:
aws elasticbeanstalk update-environment --environment-name YOUR_ENV_NAME --service-role aws-elasticbeanstalk-service-role
- 执行
3. 修复服务角色无法修改的问题
- 如果控制台修改服务角色不生效,尝试用CLI强制指定角色部署:
eb deploy --service-role aws-elasticbeanstalk-service-role - 若环境处于
Suspended状态,先执行eb restore恢复环境,再尝试修改角色配置。
4. 排查Grey环境状态问题(健康检查改为basic后)
- 验证
aws-elasticbeanstalk-ec2-role权限:确保附加了AWSElasticBeanstalkWebTier托管策略(Web应用场景),该策略允许EC2实例向Elastic Beanstalk上报健康状态。 - 登录EC2实例检查健康日志:查看
/var/log/healthd/目录下的日志文件,确认健康检查脚本是否正常执行,是否存在网络连通性问题(比如无法访问Elastic Beanstalk服务端点)。 - 检查安全组配置:确保EC2实例的出站规则允许HTTPS(443)访问Elastic Beanstalk服务,若使用应用级健康检查,需开放对应端口的入站/出站规则。
5. 重置IAM角色关联(终极方案)
- 如果以上步骤无效,删除当前
aws-elasticbeanstalk-service-role(确认无其他环境依赖),重新创建该角色并附加AWSElasticBeanstalkService托管策略,再通过CLI或控制台更新环境使用新角色。
内容的提问来源于stack exchange,提问作者ThomasM
相关产品推荐
相关产品推荐

