我的 Amazon CloudWatch Canary 在虛擬私有雲端 (VPC) 中收到錯誤並失敗。
簡短說明
當您在 VPC 中建立 Canary 時,Amazon CloudWatch Synthetics 會自動在指定的 VPC 子網路中,建立帶有彈性網路介面的 AWS Lambda 函式。即使您將這些彈性網路介面新增至公共子網路,預設情況下它們也不會收到公共 IP 位址。
若要將日誌寫入 Amazon Simple Storage Service (Amazon S3) 並將資料點發佈至 CloudWatch,Canary 必須具備存取 Amazon S3 端點與 CloudWatch Network Monitoring 端點的權限。
如果您的 Canary 無法存取這兩個端點中的任何一個,則您會收到以下其中一則錯誤訊息:
「TimeoutError: Navigation Timeout Exceeded:30000ms exceeded」
「No test result returned.Connection timed out after 30000ms and No artifacts were uploaded」
若要測試您 Canary 的網際網路連線性,請使用 VPC Reachability Analyzer。
解決方法
解決「Navigation timeout」錯誤
您必須正確地設定安全群組、網路存取控制清單 (網路 ACL) 與路由表,才能允許存取 Canary 的端點。您為受監控端點設定的逾時期間必須大於該端點的回應時間。
確認連接至 Canary 的安全群組包含以下屬性:
- 安全群組必須具有傳出規則,其允許在設定的連接埠與受監控端點的 IP 位址之間建立連線。
- 安全群組必須允許傳出流量至連接埠 443。您可以透過 HTTPS 連到 Amazon S3 和 CloudWatch Monitoring 端點。如果傳出規則不存在,請新增傳出規則。當您新增傳出規則時,請在 Type (類型) 使用 HTTPS (TCP 連接埠 443),並在 Destination (目的地) 使用 0.0.0.0/0。
- Canary 子網路中的網路 ACL 必須允許傳入與傳出存取。<br id=hardline_break/>
對於針對傳入存取,請允許暫時連接埠存取您端點 IP 位址的來源地址與連接埠。允許暫時連接埠針對連接埠 443 存取 0.0.0.0/0。<br id=hardline_break/>
對於傳出存取,請允許存取您端點 IP 位址的目的地地址與連接埠。允許目的地針對連接埠 443 存取 0.0.0.0/0。
- 開啟 Canary,然後選擇 Additional configurations (其他組態),以確認您的端點在設定的逾時期間內回應。
然後,執行以下命令以尋找您的端點回應時間:
time curl http/(s)://YOUR ENDPOINT IP/DNS:PORT
**注意:**將 YOUR ENDPOINT IP/DNS 替換為您的 DNS 或 IP 位址,並將 PORT 替換為您的 TCP 連接埠編號。
最後,在 Canary 程式碼中,將活動訊號逾時值變更為大於您的端點回應時間:
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」錯誤
如果 Canary 指標中沒有資料點,則您的 Canary 需要存取 CloudWatch Network Monitoring 端點。如果 Canary 指標中有資料點,則您的 Canary 需要存取 Amazon S3 端點。請注意,30000ms 反映的是您在 Canary 上設定的逾時期間。
若要允許您的 Canary 存取 Amazon S3 與 CloudWatch Monitoring 端點,請選擇以下其中一種方法:
- 使用 NAT gateway (NAT 閘道) 將 Canary 新增至私有子網路,並將流量從私有子網路路由至網際網路。
- 使用 VPC 端點將 Canary 新增至私有子網路,以允許與 AWS 服務進行私有連線。
使用 NAT 閘道
建立 NAT 閘道。然後,更新 Canary 的私有子網路路由表。如需有關將 NAT 閘道作為路由表中目的地的資訊,請參閱路由至 NAT 裝置。
使用 VPC 端點
為 Amazon S3 端點建立閘道端點。<br id=hardline_break/>
注意: 在 Service name (服務名稱),搜尋 Amazon S3,然後選取 com.amazonaws.region.s3。
然後,為 CloudWatch Network Monitoring 端點建立介面 VPC 端點。在 Additional settings (其他設定),選取 Enable DNS name (啟用 DNS 名稱)。<br id=hardline_break/>
注意: 在 Service name (服務名稱),搜尋 monitoring,然後選取 com.amazonaws.[region].monitoring。