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

AWS ECS部署的Rundeck登录异常:日志显示成功但页面超时

问题分析与解决

核心原因:缺少持久化存储

你本地docker-compose配置里明确挂载了data卷到/home/rundeck/server/data,而ECS部署时默认没有配置持久化,导致Rundeck无法保存会话状态、缓存数据或必要的应用配置。虽然登录验证成功,但Rundeck需要读取/写入该目录下的文件才能完成控制台初始化,最终导致浏览器加载超时。

如何在Terraform中为ECS配置Rundeck持久化

以下是基于AWS EFS(适配Fargate和EC2类型ECS任务)的配置步骤,若使用EC2类型任务也可替换为EBS卷:

1. 定义EFS文件系统及挂载目标

# 创建EFS文件系统
resource "aws_efs_file_system" "rundeck_data" {
  creation_token = "rundeck-data"
  tags = {
    Name = "rundeck-data"
  }
}

# 为集群所在子网创建EFS挂载目标
resource "aws_efs_mount_target" "rundeck_data" {
  count             = length(var.subnet_ids)
  file_system_id    = aws_efs_file_system.rundeck_data.id
  subnet_id         = var.subnet_ids[count.index]
  security_groups   = [var.efs_security_group_id] # 安全组需开放NFS 2049端口访问
}

2. 在ECS任务定义中配置卷与挂载点

resource "aws_ecs_task_definition" "rundeck" {
  family                   = "rundeck"
  network_mode             = "awsvpc"
  requires_compatibilities = ["FARGATE"] # EC2类型任务改为["EC2"]
  cpu                      = "1024"
  memory                   = "2048"
  execution_role_arn       = aws_iam_role.ecs_execution_role.arn
  task_role_arn            = aws_iam_role.ecs_task_role.arn

  # 定义EFS卷
  volume {
    name = "rundeck-data"
    efs_volume_configuration {
      file_system_id     = aws_efs_file_system.rundeck_data.id
      root_directory     = "/rundeck-data"
      transit_encryption = "ENABLED"
    }
  }

  container_definitions = jsonencode([
    {
      name      = "rundeck"
      image     = "rundeck/rundeck:4.13.0"
      portMappings = [
        {
          containerPort = 4440
          hostPort      = 4440
          protocol      = "tcp"
        }
      ]
      # 挂载卷到容器指定路径
      mountPoints = [
        {
          sourceVolume  = "rundeck-data"
          containerPath = "/home/rundeck/server/data"
          readOnly      = false
        }
      ]
      environment = [
        { name = "RUNDECK_SECURITY_HTTPHEADERS_ENABLED", value = "false" },
        # 可选:解决权限问题时设置Rundeck运行用户UID/GID
        { name = "RUNDECK_UID", value = "1000" },
        { name = "RUNDECK_GID", value = "1000" }
      ]
      logConfiguration = {
        logDriver = "awslogs"
        options = {
          awslogs-group         = "/ecs/rundeck"
          awslogs-region        = var.region
          awslogs-stream-prefix = "ecs"
        }
      }
    }
  ])
}

3. 权限配置注意事项

  • EFS安全组需允许ECS任务所在安全组的NFS(2049端口)入站流量
  • 生产环境建议配置EFS IAM授权策略,允许ECS任务角色访问;测试环境可临时设置EFS为无服务器匿名访问模式

额外排查点

配置持久化后若仍有问题,可检查:

  • ECS任务安全组是否允许容器向外发起网络请求(Rundeck初始化可能需要下载依赖)
  • 负载均衡健康检查是否正确配置4440端口
  • 容器日志中是否存在登录成功之外的错误信息

内容的提问来源于stack exchange,提问作者blackPanther

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:52:47