VPC で作成した CloudWatch Canary が失敗するエラーの解決方法を教えてください。

最終更新日: 2021 年 1 月 8 日

Virtual Private Cloud (VPC) に Amazon CloudWatch Canary を作成しました。しかし、エラーが発生し、Canary は失敗しました。どうすれば解決できますか?

簡単な説明

VPC で Canary を作成すると、指定した VPC サブネットに Elastic Network Interface のある AWS Lambda 関数が作成されます。これらの Elastic Network Interface は、パブリックサブネットに追加された場合でも、デフォルトでパブリック IP アドレスがありません。Amazon Simple Storage Service (Amazon S3) にログを書き込み、データポイントを CloudWatch に公開するには、Canary は次のものにアクセスする必要があります。

  • Amazon S3 エンドポイント
  • CloudWatch モニタリングエンドポイント

考えられるエラーメッセージとその原因を以下に示します。

  • CloudWatch モニタリングにアクセスできない場合、「No test result returned.Connection timed out after 60000ms」エラーが返されます。「60000ms」は Canary で設定されているタイムアウト期間です。また、Canary メトリックにデータポイントがない場合は、「No artifacts were uploaded」エラーも表示されます。
  • Amazon S3 へのアクセスがない場合、「No artifacts were uploaded」および「No test result returned.Connection timed out after 300000ms」エラーが発生します。「300000ms」は Canary で設定されているタイムアウト期間です。これらのエラーが Canary メトリックスにデータポイントが存在するときに発生した場合、Amazon S3 エンドポイントに Canary 用のサブネットからアクセスできませんが、CloudWatch モニタリングエンドポイントにはアクセスできます。
  • モニタリングするエンドポイントからの応答が page.goto メソッドに設定されたタイムアウト期間を超える場合 (タイムアウトが 30 秒の場合の "const response = await page.goto(URL, {waitUntil: 'domcontentloaded', timeout: 30000});" など)、「TimeoutError: Navigation Timeout Exceeded:30000ms exceeded」エラーが発生します。
  • セキュリティグループ、ネットワークアクセス制御リスト、またはルーティングテーブルによって Canary のエンドポイントへのアクセスが許可されない場合、「TimeoutError: Navigation Timeout Exceeded:30000ms exceeded」エラーが表示されます。30000msは、page.goto 関数で設定されたタイムアウト期間です。

解決方法

「Navigation timeout」エラーを解決する

  • セキュリティグループが Canary にアタッチされていることを確認します。
    • 設定されたポートと監視対象のエンドポイントの IP アドレス間の接続を許可するアウトバウンドルールがあります。
    • ポート 443 へのアウトバウンドトラフィックを許可します(Amazon S3 および CloudWatch モニタリングエンドポイントは HTTPS 経由でアクセス可能)。必要に応じて、[Type] に HTTPS (TCP ポート 443) を使用し、[Destination] に 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」エラーを解決する

0.0.0.0/0 のプライベートサブネットの Canary をネットワークアドレス変換 (NAT) ゲートウェイまたは NAT インスタンスに追加します。

  1. NAT ゲートウェイを作成します。
  2. Canary のプライベートサブネットルーティングテーブルを更新します。

- または -

Amazon S3 および CloudWatch モニタリング用の VPC エンドポイントを使用して、プライベートサブネットに Canary を追加します

  1. Amazon S3 エンドポイントに対して、この手順を実行して ゲートウェイ エンドポイントを作成します ()。
    注意: [Service name] で「Amazon S3」を検索し、[com.amazonaws.region.s3] を選択します。
  2. 同じ手順に従って、CloudWatch モニタリングエンドポイントにインターフェイスエンドポイントを作成します ()。[Enable DNS name] チェックボックスを選択します。
    注意: [Service name] で「monitoring」を検索し、[com.amazonaws.[region].monitoring] を選択します。[Enable DNS name] チェックボックスを選択します。

この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?