同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-certificatesAWS 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正常,但需排除极端情况)。
- 对比Ruby与Python请求的目标IP,确认DNS解析是否一致:
系统OpenSSL库兼容性
AL2023搭载的OpenSSL版本高于AL2,检查Ruby编译链接的OpenSSL版本是否存在兼容问题:ruby -r openssl -e 'puts OpenSSL::OPENSSL_VERSION'Docker环境下,可尝试更换基于AL2023构建的Ruby镜像,验证是否解决问题。
内容的提问来源于stack exchange,提问作者Sachin Kumar
相关产品推荐
相关产品推荐

