我在虚拟私有云 (VPC) 中的 Amazon CloudWatch 金丝雀收到错误并出现故障。
简短描述
当您在 VPC 中创建金丝雀时,Amazon CloudWatch Synthetics 会自动在指定的 VPC 子网中创建具有弹性网络接口的 AWS Lambda 函数。默认情况下,即使这些弹性网络接口已添加到公有子网,也不会接收公有 IP 地址。
要将日志写入 Amazon Simple Storage Service (Amazon S3) 并将数据点发布到 CloudWatch,金丝雀必须有权访问 Amazon S3 端点和 CloudWatch 网络监控端点。
如果您的金丝雀无法访问上述任一端点,则您会收到以下错误消息之一:
"TimeoutError: Navigation Timeout Exceeded:30000ms exceeded"
"No test result returned.Connection timed out after 30000ms and No artifacts were uploaded"
要测试您的金丝雀的互联网连接,请使用 VPC Reachability Analyzer。
解决方法
解决 "Navigation timeout" 错误
您必须正确配置安全组、网络访问控制列(网络 ACL)和路由表,以便允许访问金丝雀的端点。为受监控端点配置的超时时长必须大于端点的响应时间。
确认附加到金丝雀的安全组包含以下属性:
- 安全组必须具有出站规则,允许在已配置的端口和受监控端点的 IP 地址之间建立连接。
- 安全组必须允许流向端口 443 的出站流量。Amazon S3 和 CloudWatch 监控端点可通过 HTTPS 进行访问。如果不存在出站规则,则添加出站规则。添加出站规则时,请使用 HTTPS(TCP 端口 443)作为类型,使用 0.0.0.0/0 作为目标。
- 金丝雀子网中的网络 ACL 必须允许入站和出站访问。<br id=hardline_break/>
对于入站访问,允许临时端口访问源地址和您的端点 IP 地址的端口。允许临时端口通过端口 443 访问 0.0.0.0/0。<br id=hardline_break/>
对于出站访问,允许访问目标地址和您的端点 IP 地址的端口。允许目标通过端口 443 访问 0.0.0.0/0。
- 打开金丝雀,然后选择 Additional configurations(其他配置),确认您的端点在配置的超时时长内做出响应。
然后,运行以下命令来查找您的端点响应时间:
time curl http/(s)://YOUR ENDPOINT IP/DNS:PORT
**注意:**请将 YOUR ENDPOINT IP/DNS 替换为您的 DNS 或 IP 地址,并将 PORT 替换为您的 TCP 端口号。
最后,在金丝雀代码中,更改心跳超时值以超过您的端点响应时间:
const response = await page.goto(URL, {waitUntil: 'domcontentloaded', timeout: 30000});
例如,如果您的配置是 "const response = await page.goto(URL, {waitUntil: 'domcontentloaded', timeout: 30000});",并且您的端点需要 35 秒才能响应,则将超时值更改为超过 35000 毫秒。
解决 "No artifacts were uploaded" 或 "No test result returned" 错误
如果金丝雀指标中没有数据点,则您的金丝雀需要访问 CloudWatch 网络监控端点。如果金丝雀指标中存在数据点,则您的金丝雀需要访问 Amazon S3 端点。请注意,30000 毫秒反映了您在金丝雀上配置的超时时长。
要允许您的金丝雀访问 Amazon S3 和 CloudWatch 监控端点,请选择以下方法之一:
- 使用 NAT 网关将金丝雀添加到私有子网,并将流量从私有子网路由到互联网。
- 使用 VPC 端点将金丝雀添加到私有子网,允许与 AWS 服务进行私有连接。
使用 NAT 网关
创建 NAT 网关。然后,更新金丝雀的私有子网路由表。有关在路由表中将 NAT 网关作为目标的信息,请参阅路由到 NAT 设备。
使用 VPC 端点
为 Amazon S3 端点创建网关端点。<br id=hardline_break/>
**注意:**对于 Service name(服务名称),搜索 Amazon S3,然后选择 com.amazonaws.region.s3。
然后,为 CloudWatch 网络监控端点创建接口 VPC 端点。对于 Additional settings(其他设置),选择 Enable DNS name(启用 DNS 名称)。<br id=hardline_break/>
**注意:**对于 Service name(服务名称),搜索 monitoring,然后选择 com.amazonaws.[region].monitoring。