如何解决因我在 VPC 中创建 CloudWatch Canary 失败而收到错误消息的问题?

上次更新日期:2021 年 1 月 8 日

我在 Virtual Private Cloud (VPC) 中创建了 Amazon CloudWatch Canary。但是,我收到一条错误消息,我的 Canary 失败了。如何解决此问题?

简短描述

当您在 VPC 中创建 Canary 时,将在指定的 VPC 子网中创建具有弹性网络接口的 AWS Lambda 函数。默认情况下,这些弹性网络接口没有公有 IP 地址,即使它们已添加到公有子网中。要将日志写入 Amazon Simple Storage Service (Amazon S3) 并将数据点发布到 CloudWatch,Canary 需要访问:

  • Amazon S3 终端节点
  • CloudWatch 监控终端节点

包括以下可能的错误消息及原因:

  • 如果无法访问 CloudWatch 监控,则您会收到错误消息“No test result returned.Connection timed out after 60000ms”。请注意,“60000 毫秒”反映了在 Canary 上配置的超时时间段。您还会收到“No artifacts were uploaded”错误消息,这表明 Canary 指标中没有数据点。
  • 如果无法访问 Amazon S3,您将收到“No artifacts were uploaded”和“No test result returned.Connection timed out after 300000ms”错误消息。请注意,“300000 毫秒”反映了在 Canary 上配置的超时时间段。如果 Canary 指标中有数据点,但仍收到这些错误消息,则无法从您的 Canary 子网访问 Amazon S3 终端节点,但可以访问 CloudWatch 监控终端节点。
  • 如果来自受监控终端节点的响应时间超过了为 page.goto 方法配置的超时时间段(例如“const response = await page.goto(URL, {waitUntil: 'domcontentloaded', timeout: 30000});”,其中超时时间为 30 秒),那么您会收到“TimeoutError: Navigation Timeout Exceeded:30000ms exceeded”错误消息。
  • 如果安全组、网络访问控制列表或路由表不允许访问 Canary 的终端节点,则您会收到“TimeoutError: Navigation Timeout Exceeded:30000ms exceeded”错误消息。30000 毫秒是在 page.goto 函数上配置的超时时间段。

解决方法

解决“Navigation timeout”错误

  • 确认附加到 Canary 的安全组:
    • 具有出站规则,允许在配置的端口和受监控终端节点的 IP 地址之间建立连接。
    • 允许端口 443 的出站流量(Amazon S3 和 CloudWatch 监控终端节点可通过 HTTPS 访问)。如有必要,请使用 HTTPS(TCP 端口 443)为 Type(类型)和 0.0.0.0/0 为 Destination(目标)添加出站规则。
  • 确认 Canary 子网中的网络访问控制列表 (ACL) 允许入站和出站访问。
    • 入站:
      • 允许临时端口连接到源地址和终端节点 IP 地址的端口。
      • 允许端口 443 的临时端口为 0.0.0.0/0。
    • 出站:
      • 允许终端节点 IP 地址的目标地址和端口。
      • 允许端口 443 的目标地址为 0.0.0.0/0。
  • 确认您的终端节点在配置的超时时间段内响应:
    • 查找终端节点响应时间。
time curl http/(s)://[your Endpoint IP/DNS]:Port
    • 在 Canary 代码中,将检测信号超时更改为超过终端节点响应时间。
const response = await page.goto(URL, {waitUntil: 'domcontentloaded', timeout: 30000});

解决“No artifacts were uploaded”或“No test result returned”错误

将 0.0.0.0/0 私有子网中的 Canary 添加到网络地址转换 (NAT) 网关或 NAT 实例中。

  1. 创建 NAT 网关
  2. 更新 Canary 的私有子网路由表

-或者-

将 Canary 添加到私有子网中 Amazon S3 和 CloudWatch 监控的 VPC 终端节点

  1. 请按照以下步骤为 Amazon S3 终端节点创建网关终端节点。
    注意:对于服务名称,请搜索“Amazon S3”,然后选择 com.amazonaws.region.s3
  2. 按照相同的步骤为 CloudWatch 监控终端节点创建接口终端节点。请务必选中启用 DNS 名称复选框。
    注意:对于服务名称,请搜索“monitoring”,然后选择 com.amazonaws.[region].monitoring。请务必选中启用 DNS 名称复选框。

这篇文章对您有帮助吗?


您是否需要账单或技术支持?