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

如何在AWS Fargate上自动传递Selenium Grid Hub私有IP至节点

AWS Fargate部署Selenium Grid自动传递Hub私有IP方案(无负载均衡)

给你几个实用的方案,不用负载均衡也能自动搞定Hub私有IP的传递:

方案1:ECS服务发现+容器启动脚本(最优推荐)

这个是ECS原生支持的方案,可靠性高,还能自动适配Hub任务重启后的IP变化:

  • 把Hub部署成ECS服务,开启服务发现:先在Cloud Map创建一个私有命名空间(比如selenium.local),然后配置Hub服务注册到这个命名空间,服务名设为hub(最终域名就是hub.selenium.local)
  • 修改Node的任务定义:
    • 替换Node容器的启动命令,用脚本先解析Hub的IP再启动节点。比如原来的启动命令是java -jar selenium-server.jar node,改成:
      #!/bin/bash
      # 解析服务发现域名对应的Hub私有IP
      HUB_IP=$(nslookup hub.selenium.local | grep 'Address:' | grep -v '127.0.0.1' | awk '{print $2}')
      # 注入环境变量启动节点
      SE_EVENT_BUS_HOST=$HUB_IP java -jar selenium-server.jar node
      
    • 确保Node容器的镜像包含nslookup工具(如果用selenium官方镜像,可能需要先装dnsutils包,比如在Dockerfile里加RUN apt-get update && apt-get install -y dnsutils)

方案2:SSM参数存储中转IP

适合Hub是单实例的场景,通过SSM参数共享IP:

  • 在AWS Systems Manager参数商店里创建一个字符串类型的参数,比如/selenium/hub/private-ip
  • 修改Hub的任务定义,添加启动脚本:启动Hub前先获取自身私有IP,写入SSM参数:
    #!/bin/bash
    # 通过ECS元数据API获取自身私有IP
    HUB_IP=$(curl -s http://169.254.170.2/v2/metadata | jq -r '.Containers[0].Networks[0].IPv4Addresses[0]')
    # 写入SSM参数(覆盖旧值)
    aws ssm put-parameter --name "/selenium/hub/private-ip" --value "$HUB_IP" --type String --overwrite
    # 启动Hub服务
    java -jar selenium-server.jar hub
    
  • 给Hub的任务执行角色添加ssm:PutParameter权限
  • 修改Node的任务定义,启动脚本从SSM读取IP再启动:
    #!/bin/bash
    # 读取SSM里的Hub私有IP
    HUB_IP=$(aws ssm get-parameter --name "/selenium/hub/private-ip" --query 'Parameter.Value' --output text)
    # 启动节点
    SE_EVENT_BUS_HOST=$HUB_IP java -jar selenium-server.jar node
    
  • 给Node的任务执行角色添加ssm:GetParameter权限

方案3:ECS API查询Hub任务IP

适合Hub是单任务的场景,直接通过AWS CLI查询任务IP:

  • 修改Node的任务定义,启动脚本用AWS CLI查询Hub任务的私有IP:
    #!/bin/bash
    # 获取Hub任务的ARN(替换成你的集群名和Hub任务家族名)
    HUB_TASK_ARN=$(aws ecs list-tasks --cluster your-ecs-cluster --family selenium-hub --query 'taskArns[0]' --output text)
    # 查询Hub任务的私有IP
    HUB_IP=$(aws ecs describe-tasks --cluster your-ecs-cluster --tasks $HUB_TASK_ARN --query 'tasks[0].containers[0].networkInterfaces[0].privateIpv4Address' --output text)
    # 启动节点
    SE_EVENT_BUS_HOST=$HUB_IP java -jar selenium-server.jar node
    
  • 给Node的任务执行角色添加ecs:ListTasks和ecs:DescribeTasks权限

方案对比

  • 优先选方案1:服务发现是ECS原生能力,不用额外权限配置,能自动处理Hub的扩容、重启,稳定性最高
  • 如果Hub是固定单实例,方案2或3也能凑合用,但需要额外的IAM权限配置,且Hub重启后需要等待参数更新

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:55:32