如何解决我在 VPC 中创建的 CloudWatch 金丝雀失败时收到的错误?

1 分钟阅读
0

我在虚拟私有云(VPC)中的 Amazon CloudWatch 金丝雀收到错误并失败了。

简短描述

在 VPC 中创建金丝雀还会在指定的 VPC 子网中创建具有弹性网络接口的 AWS Lambda 函数。默认情况下,这些弹性网络接口即使已添加到公有子网中,也没有公有 IP 地址。要将日志写入 Amazon Simple Storage Service(Amazon S3),并将数据点发布到 CloudWatch,金丝雀必须有权访问以下端点:

  • Amazon S3 端点
  • CloudWatch 监控端点

如果您的金丝雀在访问这两个端点时出现问题,则您会收到以下其中一条错误消息:

  • **TimeoutError: 已超过导航超时:已超过 30000 毫秒:**如果来自受监控端点的响应超过了为 page.goto 方法配置的超时时间,则您会收到此错误。例如,假设您的配置是“const response = await page.goto(URL, {waitUntil: 'domcontentloaded', timeout: 30000});”。由于超时时间为 30 秒,因此超过 30 秒的响应会导致此错误。
    -或-
    如果安全组、网络访问控制列表(ACL)或路由表不允许访问金丝雀的端点,则您会收到此错误。
  • 没有返回测试结果。30000 毫秒后连接超时以及**未上传任何构件:**如果您的金丝雀无权访问 CloudWatch 监控或 Amazon S3 端点,则您会收到这些错误。如果金丝雀指标中没有数据点,则您的金丝雀无权访问 CloudWatch 监控。如果金丝雀指标中有数据点,则您的金丝雀有权访问 CloudWatch 监控,但不能访问 Amazon S3。请注意,30000 毫秒反映了在金丝雀上配置的超时时间。

在任何时候,您都可以使用 VPC Reachability Analyzer 测试您的金丝雀的互联网连接。

解决方法

解决“导航超时”错误

确认附加到金丝雀的安全组具有下列属性:

  • 它必须有一个出站规则,允许在已配置的端口和受监控端点的 IP 地址之间建立连接。
  • 它必须允许流向端口 443 的出站流量。请注意,可通过 HTTPS 访问 Amazon S3 和 CloudWatch 监控端点。如有必要,请添加一个出站规则,使用 HTTPS(TCP 端口 443)作为类型,使用 0.0.0.0/0 作为目标。
  • 金丝雀子网中的网络 ACL 必须允许入站和出站访问。
    对于入站访问: 允许临时端口访问源地址和您的端点 IP 地址的端口。允许临时端口通过端口 443 访问 0.0.0.0/0。
    对于出站访问: 允许访问目标地址和您的端点 IP 地址的端口。允许目标通过端口 443 访问 0.0.0.0/0。
  • 确认您的端点在配置的超时时间内响应。

要查找您的端点响应时间,请运行下面的命令:

time curl http/(s)://[your Endpoint IP/DNS]:Port

在金丝雀代码中,将心跳超时更改为超过您的端点响应时间:

const response = await page.goto(URL, {waitUntil: 'domcontentloaded', timeout: 30000});

解决“未上传任何构件”或“没有返回测试结果”错误

以 0.0.0.0/0 作为网络地址转换(NAT)网关或 NAT 实例将金丝雀添加到私有子网:

1.    创建 NAT 网关

2.    更新金丝雀的私有子网路由表。有关在路由表中将 NAT 网关用作目标的信息,请参阅路由到 NAT 设备

-或-

使用适用于 Amazon S3 和 CloudWatch 监控的 VPC 端点将金丝雀添加到私有子网:

1.    为 Amazon S3 端点创建网关端点
注意:对于服务名称,搜索 Amazon S3,然后选择 com.amazonaws.region.s3

2.    为 CloudWatch 监控端点创建接口端点。请务必选中启用 DNS 名称复选框。
注意:对于服务名称,搜索 monitoring,然后选择 com.amazonaws.[region].monitoring。请务必选中启用 DNS 名称复选框。

AWS 官方
AWS 官方已更新 1 年前