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

使用AWS SDK v3上传文件至S3遇[ERR_SOCKET_CONNECTION_TIMEOUT]超时错误

AWS SDK v3 上传S3遭遇Socket连接超时[ERR_SOCKET_CONNECTION_TIMEOUT]问题排查及解决

我使用AWS SDK v3向S3存储桶上传文件,尽管持有有效的IAM凭证,却反复遇到Socket连接超时错误[ERR_SOCKET_CONNECTION_TIMEOUT]。

初始的S3Client初始化代码如下:

const s3 = new S3Client({
  region: process.env.AWS_REGION || '',
  credentials: {
    accessKeyId: process.env.AWS_ACCESS_KEY_ID || '',
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY || '',
  },
});

我尝试延长超时时间,但问题仍未解决,修改后的代码:

const s3 = new S3Client({
  region: process.env.AWS_REGION || '',
  credentials: {
    accessKeyId: process.env.AWS_ACCESS_KEY_ID || '',
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY || '',
  },
  requestHandler: new NodeHttpHandler({
    connectionTimeout: 10000,
    requestTimeout: 10000,
  })
});

可能的排查方向及解决方法

  • 检查网络连通性与防火墙
    确认运行代码的环境能正常访问AWS S3服务。企业内网、VPC或防火墙环境中,需确保允许出站访问S3的443端口。可以通过以下命令测试:

    telnet <bucket-name>.s3.<region>.amazonaws.com 443
    # 或者
    curl https://<bucket-name>.s3.<region>.amazonaws.com
    
  • 验证Region配置有效性
    确保process.env.AWS_REGION是合法的AWS区域值(如us-east-1、ap-southeast-1),空值会导致SDK无法解析正确的S3端点。可以先硬编码区域测试,排除环境变量读取问题:

    const s3 = new S3Client({
      region: 'ap-southeast-1', // 替换为你的实际区域
      credentials: { /* ... */ },
    });
    
  • 配置代理(若环境使用代理)
    如果系统依赖HTTP/HTTPS代理,SDK不会自动读取系统代理设置,需显式配置:

    import { NodeHttpHandler } from "@aws-sdk/node-http-handler";
    import HttpsProxyAgent from "https-proxy-agent";
    
    const s3 = new S3Client({
      region: process.env.AWS_REGION,
      credentials: { /* ... */ },
      requestHandler: new NodeHttpHandler({
        httpAgent: new HttpsProxyAgent(process.env.HTTPS_PROXY),
        connectionTimeout: 10000,
        requestTimeout: 10000,
      }),
    });
    

    需先安装依赖:npm install https-proxy-agent

  • 确认IAM权限覆盖范围
    即使凭证有效,也要确保IAM用户/角色拥有s3:PutObject权限,且策略明确指定了目标存储桶。可以用AWS CLI验证:

    aws s3 cp test.txt s3://<your-bucket-name>/test.txt --region <your-region>
    

    CLI能成功上传则权限无问题,问题出在SDK配置或环境;CLI失败则需检查IAM策略。

  • 切换HTTP客户端
    尝试将默认的NodeHttpHandler替换为FetchHttpHandler(Node.js 18+可直接使用,低版本需安装node-fetch):

    import { FetchHttpHandler } from "@aws-sdk/fetch-http-handler";
    
    const s3 = new S3Client({
      region: process.env.AWS_REGION,
      credentials: { /* ... */ },
      requestHandler: new FetchHttpHandler({
        timeout: 10000,
      }),
    });
    
  • 排查DNS解析问题
    若环境DNS无法解析S3端点,可尝试手动指定DNS服务器,或临时在hosts文件中添加S3端点的IP映射测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:47:18