仮想プライベートクラウド (VPC) 内の Amazon CloudWatch canary がエラーを受け取り、失敗します。
簡単な説明
VPC に canary を作成すると、指定した VPC サブネットに Elastic Network インターフェイスを備えた AWS Lambda 関数も作成されます。これらの Elastic Network インターフェイスには、パブリックサブネットに追加されたとしても、デフォルトではパブリック IP アドレスはありません。Amazon Simple Storage Service (Amazon S3) にログを書き込み、CloudWatch にデータポイントを公開するには、canary が以下のエンドポイントにアクセスできる必要があります。
- Amazon S3 エンドポイント
- CloudWatch Monitoring エンドポイント
canary でこれらのエンドポイントへのアクセスに問題がある場合は、以下のいずれかのエラーメッセージが表示されます。
- TimeoutError: Navigation Timeout Exceeded:30000ms exceeded: 監視対象エンドポイントからの応答が page.goto メソッドに設定されたタイムアウト期間を超えると、このエラーが表示されます。たとえば、設定が 「const response = await page.goto(URL, {waitUntil: 'domcontentloaded')、timeout: 30000});」の場合、タイムアウトは 30 秒なので、応答が 30 秒を超えると、このエラーが発生します。
または
このエラーは、セキュリティグループ、ネットワークアクセスコントロールリスト (ACL)、またはルーティングテーブルが canary のエンドポイントへのアクセスを許可していない場合に表示されます。
- No test result returned.Connection timed out after 30000ms and No artifacts were uploaded: canary が CloudWatch Monitoring または Amazon S3 エンドポイントのいずれにもアクセスできない場合、これらのエラーが表示されます。canary メトリックスにデータポイントがない場合、canary は CloudWatch Monitoring にアクセスできません。canary メトリックスにデータポイントがある場合、canary は CloudWatch Monitoring にはアクセスできますが、Amazon S3 にはアクセスできません。30000ms は、canary に設定されているタイムアウト期間を反映していることに注意してください。
VPC Reachability Analyzer を使えば、いつでも canary のインターネット接続をテストできます。
解決策
「ナビゲーションタイムアウト」エラーの解決
canary にアタッチされているセキュリティグループに以下のプロパティがあることを確認します。
- 設定したポートと監視対象エンドポイントの IP アドレス間の接続を許可するアウトバウンドルールが必要です。
- ポート 443 へのアウトバウンドトラフィックを許可する必要があります。Amazon S3 と CloudWatch Monitoring エンドポイントには HTTPS 経由でアクセス可能であることに注意してください。必要に応じて、[タイプ] に HTTPS (TCP ポート 443)、[宛先] に 0.0.0.0/0 を使用するアウトバウンドルールを追加します。
- 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」エラーを解決する
ネットワークアドレス変換 (NAT) ゲートウェイまたは NAT インスタンスとして 0.0.0.0/0 のプライベートサブネットに canary を追加します。
1. NAT ゲートウェイを作成します。
2. canary のプライベートサブネットルーティングテーブルを更新します。NAT ゲートウェイをルートテーブルの宛先として使用する方法については、「NAT デバイスへのルーティング」を参照してください。
または
Amazon S3 と CloudWatch Monitoring の VPC エンドポイントを持つプライベートサブネットに canary を追加します。
1. Amazon S3 エンドポイントのゲートウェイエンドポイントを作成します。
注:****[サービス名] では、Amazon S3 を検索し、com.amazonaws.region.s3 を選択します。
2. CloudWatch Monitoring エンドポイントのインターフェイスエンドポイントを作成します。必ず [DNS 名を有効にする] チェックボックスをオンにしてください。
注:****[サービス名] では、[モニタリング] を検索し、[com.amazonaws.[region].monitoring] を選択します。必ず [DNS 名を有効にする] チェックボックスをオンにしてください。