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

同EC2实例中Ruby aws-sdk-ec2创建实例遇Net::OpenTimeout故障排查

Ruby aws-sdk-ec2 Net::OpenTimeout 问题排查方向
  • TLS版本与密码套件兼容性
    AL2023默认TLS配置比AL2更严格,需确认Ruby的aws-sdk版本是否支持AWS API要求的TLS 1.2+标准。可在代码中显式指定TLS版本验证:

    Aws.config.update(ssl_version: :TLS1_2)
    

    同时对比Python Boto3使用的密码套件,排查Ruby SDK是否采用了AWS端点不支持的套件。

  • CA证书配置验证
    AL2023的CA证书存储路径与AL2不同,Ruby的OpenSSL库可能无法自动加载系统证书。检查环境变量SSL_CERT_FILE或SSL_CERT_DIR是否指向正确路径(如/etc/pki/tls/certs/ca-bundle.crt)。
    若使用ruby:3.0 Docker容器,需确认镜像内已安装ca-certificates包,可在Dockerfile中添加:

    RUN apt-get update && apt-get install -y ca-certificates
    
  • AWS SDK版本兼容性
    旧版本aws-sdk-ec2可能不兼容AL2023网络环境或AWS最新API要求,尝试升级至稳定版:

    gem update aws-sdk-ec2
    

    同时排查代码中是否硬编码了旧版AWS端点地址,导致解析错误。

  • 网络连接细节排查

    • 对比Ruby与Python请求的目标IP,确认DNS解析是否一致:
      require 'resolv'
      puts Resolv.getaddress('ec2.us-east-1.amazonaws.com')
      
    • 用Ruby原生Net::HTTP测试AWS API端点的SSL连接,缩小问题范围:
      require 'net/http'
      require 'openssl'
      uri = URI('https://ec2.us-east-1.amazonaws.com')
      http = Net::HTTP.new(uri.host, uri.port)
      http.use_ssl = true
      http.verify_mode = OpenSSL::SSL::VERIFY_PEER
      http.start { |h| puts h.get('/').body }
      
    • 确认实例安全组、NACL无针对Ruby进程的特殊限制(虽Python正常,但需排除极端情况)。
  • 系统OpenSSL库兼容性
    AL2023搭载的OpenSSL版本高于AL2,检查Ruby编译链接的OpenSSL版本是否存在兼容问题:

    ruby -r openssl -e 'puts OpenSSL::OPENSSL_VERSION'
    

    Docker环境下,可尝试更换基于AL2023构建的Ruby镜像,验证是否解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 04:32:27