You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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日志的发布与读取权限
  • 检查信任策略是否存在额外限制:比如是否添加了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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 06:02:10