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

使用AWS SDK建立端口转发失败,已成功获取会话ID如何排查?

问题排查点

  • SSM Endpoint硬编码错误
    你代码中最后一个入参固定写死了美东1的SSM端点https://ssm.us-east-1.amazonaws.com/,如果你使用的AWS_REGION不是us-east-1,请求会直接发往错误区域,导致会话无法建立。需要把这个参数改成动态拼接:
arguments.add(String.format("https://ssm.%s.amazonaws.com/", AWS_REGION));
  • 进程生命周期没有维持
    session-manager-plugin是长驻进程,需要持续运行才能维持端口转发通道。你当前代码只读取了一次进程输出就结束了逻辑,如果主线程直接退出,JVM会销毁启动的plugin子进程,端口转发自然会中断。需要补充进程等待逻辑:
// 读取输出的逻辑保持不变
// 补充等待进程退出的逻辑
int exitCode = p.waitFor();
System.out.println("会话进程退出,退出码:" + exitCode);

如果需要在Java程序中同时做其他操作,可以把plugin进程的运行逻辑放在独立的后台线程中执行。

  • 手动拼接JSON容易出现转义错误
    自己用StringBuilder拼接JSON很容易出现特殊字符转义错误,比如密钥、实例ID包含特殊符号时就会导致参数解析失败。建议用Jackson、Gson等JSON序列化库生成标准JSON字符串,避免手动拼接的语法错误。

  • 前置环境校验失败
    先做基础校验排除环境问题:

  1. 本地已正确安装session-manager-plugin,执行session-manager-plugin --version能正常返回版本号
  2. 目标EC2实例的SSM Agent版本不低于2.3.672.0,旧版本不支持端口转发功能
  3. 调用SDK使用的AK/SK对应IAM用户,以及目标实例绑定的IAM角色,都已配置ssm:StartSession和AWS-StartPortForwardingSession相关权限
  4. 本地AWS_LOCALPORT端口没有被其他进程占用,目标实例安全组已放开AWS_REMOTEPORT的入站访问
  • 调试方法
    可以把构造完成的arguments完整打印出来,手动复制到终端执行,直接看session-manager-plugin的报错输出,就能快速定位是参数错误还是权限、环境问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:54:02