仮想プライベートクラウド (VPC) 内の Amazon CloudWatch Canary がエラーを受け取り、失敗します。
簡単な説明
VPC で Canary を作成すると、Amazon CloudWatch Synthetics は、指定された VPC サブネットに Elastic Network Interface を備えた AWS Lambda 関数を自動的に作成します。これらの Elastic Network Interface は、パブリックサブネットに追加しても、デフォルトではパブリック IP アドレスを受け取りません。
Amazon Simple Storage Service (Amazon S3) にログを書き込み、データポイントを CloudWatch に公開するには、Canary が Amazon S3 エンドポイントと CloudWatch ネットワークモニタリングエンドポイントにアクセスできる必要があります。
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" エラーを解決する
Canary のエンドポイントへのアクセスを許可するには、セキュリティグループ、ネットワークアクセスコントロールリスト (ネットワーク ACL)、およびルーティングテーブルを正しく設定する必要があります。監視対象エンドポイントに設定されたタイムアウト期間は、エンドポイントの応答時間より長くなければなりません。
Canary にアタッチされているセキュリティグループに次のプロパティが含まれていることを確認します。
- セキュリティグループには、設定したポートと監視対象エンドポイントの IP アドレス間の接続を許可するアウトバウンドルールが必要です。
- セキュリティグループは、ポート 443 へのアウトバウンドトラフィックを許可する必要があります。Amazon S3 と CloudWatch モニタリングエンドポイントには HTTPS 経由でアクセスできます。アウトバウンドルールが存在しない場合は、アウトバウンドルールを追加します。アウトバウンドルールを追加するときは、[タイプ] に HTTPS (TCP ポート 443)、[宛先] に 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 を開き、[その他の設定] を選択して、エンドポイントが設定されたタイムアウト期間内に応答することを確認します。
次に、次のコマンドを実行してエンドポイントの応答時間を確認します。
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 ネットワークモニタリングエンドポイントにアクセスする必要があります。Canary メトリクスにデータポイントがある場合、Canary は Amazon S3 エンドポイントにアクセスする必要があります。30000ms は、Canary に設定されているタイムアウト期間を反映していることに注意してください。
Canary が Amazon S3 および CloudWatch モニタリングエンドポイントにアクセスできるようにするには、次のいずれかの方法を選択してください。
- NAT ゲートウェイを使用して Canary をプライベートサブネットに追加し、プライベートサブネットからインターネットにトラフィックをルーティングします。
- VPC エンドポイントを使用して、Canary をプライベートサブネットに追加して、AWS サービスへのプライベート接続を可能にします。
NAT ゲートウェイを使用する
NAT ゲートウェイを作成します。その後、Canary のプライベートサブネットルーティングテーブルを更新します。ルートテーブルの宛先としての NAT ゲートウェイの詳細については、「NAT デバイスへのルーティング」を参照してください。
VPC エンドポイントを使用する
Amazon S3 エンドポイントのゲートウェイエンドポイントを作成します。<br id=hardline_break/>
注: [サービス名] では、Amazon S3 を検索し、com.amazonaws.region.s3 を選択します。
次に、CloudWatch ネットワークモニタリングエンドポイント用のインターフェイス VPC エンドポイントを作成します。[その他の設定] で [DNS 名を有効にする] を選択します。<br id=hardline_break/>
注: [サービス名] では、モニタリングを検索し、com.amazonaws.[region].monitoring を選択します。