我想解决在 AWS Systems Manager Agent (SSM Agent) 日志中发现的“RequestError: send request failed caused by: Post https://ssm.RegionID.amazonaws.com/: dial tcp IP:443: i/o timeout”错误消息。
简短描述
“RequestError: send request failed caused by:”错误表明 Systems Manager 未将您的 Amazon Elastic Compute Cloud (Amazon EC2) 实例注册为托管实例。
以下问题可能会导致您的实例无法注册:
- AWS Systems Manager 在 Amazon Virtual Private Cloud (Amazon VPC) 中使用接口 VPC 端点,而实例在私有子网中使用自定义 DNS 服务器。
- 该实例位于私有子网中,并且无法访问 Systems Manager 端点或互联网。
- 您的实例位于公有子网中,该子网不允许通过端口 443 与 Systems Manager 端点建立出站连接。
- 对于 HTTP 代理后面的实例,SSM Agent 无法连接到元数据服务器。
解决方法
使用以下位置路径来验证您的其中一个日志是否包含错误消息:
- 对于 Linux 和 macOS:
/var/log/amazon/ssm/amazon-ssm-agent.log
/var/log/amazon/ssm/errors.log
- 对于 Windows:
%PROGRAMDATA%\Amazon\SSM\Logs\amazon-ssm-agent.log
%PROGRAMDATA%\Amazon\SSM\Logs\errors.log
如果您的某条日志包含错误,请完成以下解决步骤。
对私有子网中使用 Systems Manager VPC 端点和自定义 DNS 服务器的实例进行故障排除
VPC 端点仅支持使用 Amazon Route 53 Resolver 的 Amazon DNS 服务器。使用 Route 53 Resolver resolve DNS queries between the VPC and your network(解析 VPC 与您的网络之间的 DNS 查询)。
要将对 amazonaws.com 域的查询转发到默认 VPC DNS 解析器,请在您的自定义 DNS 服务器中使用条件转发器。
对公有子网中无法连接到 Systems Manager 端点或互联网的实例进行故障排除
使用 AWSSupport-TroubleshootManagedInstance 运行手册、AWS 命令行界面 (AWS CLI) 或手动故障排除步骤来解决您实例的连接问题。有关说明,请参阅为什么 Systems Manager 没有将我的 Amazon EC2 实例显示为托管实例?
对公有子网中不允许通过端口 443 建立出站连接的实例进行故障排除
将您的 Amazon VPC 安全组规则和网络访问控制列表(网络 ACL)配置为允许通过端口 443 与 Systems Manager 端点建立出站连接。
对使用代理的实例进行故障排除
将 SSM Agent 配置为使用代理,并为元数据 URL 设置 no_proxy。有关说明,请参阅以下 AWS 文档:
相关信息
Understanding Amazon DNS(了解 Amazon DNS)
Creating VPC endpoints for Systems Manager(为 Systems Manager 创建 VPC 端点)
DHCP option sets in Amazon VPC(Amazon VPC 中的 DHCP 选项集)