無効なリンクのチェッカーを作成する

このドキュメントでは、合成モニターを作成して、URI に含まれるリンクの定期的なテストを構成する方法について説明します。元の URI、テストされるリンクの数、再試行回数など、テスト用のオプションを指定して、事前構成済みの Cloud Run 関数をデプロイします。トラブルシューティングとデバッグをサポートするため、合成モニターはスクリーンショットなど、各テストの詳細情報を保存します。スクリーンショットを使用すると、アプリケーションの顧客に表示される正確なレスポンスを確認できます。

合成モニターの詳細については、合成モニターについてをご覧ください。

リンク切れチェッカーについて

リンク切れチェッカーは、リンクを順番にテストし、全体的な合成タイムアウトがあります。

デフォルトでは、リンク切れチェッカーは次の処理を行います。

  • 元の URI で href 属性を持つ HTML アンカー要素を検索します。
  • 元の URI で検出された最初の 10 個のリンクをテストします。
  • リンクごとにチェッカーがリクエストを発行して、レスポンスを最大で 30 秒間待機します。レスポンスを受信すると、チェッカーは HTTP レスポンスのステータスが 200 であることを確認します。これは、レスポンスが成功したことを示します。チェッカーは再試行を行いません。

生成元 URI を指定します。リンク切れチェッカーが検索する HTML 要素、テストする要素の最大数、テストごとのタイムアウト、再試行の実行有無を構成できます。セレクタが表示されるまで待機するようにリンク切れチェッカーを構成することもできます。

無効なリンク チェッカーは broken-links-ok テンプレートを使用します。リンク切れチェッカーの構成は、index.js ファイルの options オブジェクトで指定します。Google Cloud コンソールを使用してチェッカーを作成すると、各構成オプションの入力を求められ、Cloud Run 関数が更新されます。ただし、Cloud Monitoring API または Terraform を使用する場合は、このオブジェクトにデータを入力する必要があります。

リンク切れチェッカーを作成した後、構成を変更するには、options オブジェクトを更新して Cloud Run 関数を再デプロイします。

始める前に

  1. Google Cloud コンソールを使用して合成モニターを表示して変更するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールの付与を管理者に依頼してください。

    ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

    必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

  2. Enable the Cloud Monitoring API, Artifact Registry API, Cloud Build API, Cloud Functions API, Cloud Logging API, Pub/Sub API, and Cloud Run Admin API APIs.

    Enable the APIs

  3. Google Cloud プロジェクトにデフォルトの Compute Engine サービス アカウントが含まれていることを確認します。このサービス アカウントは、Compute Engine API を有効にしたときに作成され、名前は 12345-compute@developer.gserviceaccount.com のようになります。

    Google Cloud コンソールで、[サービス アカウント] ページに移動します:

    [サービス アカウント] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [IAM と管理者] である結果を選択します。

    デフォルトの Compute Engine サービス アカウントが存在しない場合は、[サービス アカウントを作成する] をクリックしてダイアログを完了します。

  4. デフォルトの Compute Engine サービス アカウントまたは作成したサービス アカウントに編集者(roles/editor)のロールが付与されていることを確認します。

    サービス アカウントに付与されているロールを表示する方法は次のとおりです。

    1. Google Cloud コンソールの [IAM] ページに移動します。

      [IAM] に移動

      検索バーを使用してこのページを検索する場合は、小見出しが [IAM と管理者] である結果を選択します。

    2. [Google 提供のロール付与を含む] を選択します。
    3. 合成モニターで使用されるサービス アカウントがリストに表示されていない場合、または Cloud Trace エージェント(roles/cloudtrace.agent)のロールの権限を含むロールが付与されていない場合、このロールをサービス アカウントに付与します。
  5. 通知の受信に使用する通知チャンネルを構成します。複数の種類の通知チャンネルを作成することをおすすめします。詳細については、通知チャネルを作成して管理するAPI によって通知チャネルを作成して管理するをご覧ください。

無効なリンクのチェッカーを作成する

Console

Google Cloud コンソールを使用して合成モニターを作成すると、新しい Cloud Run 関数(第 2 世代)がデプロイされ、その Cloud Run 関数のモニターが作成されます。既存の Cloud Run 関数をモニタリングする合成モニターは作成できません。

  1. 必要な API が有効になっていること、プロジェクトにデフォルトの Compute Engine サービス アカウントが含まれていること、このアカウントに編集者(roles/editor)のロールが付与されていることを確認します。詳細については、始める前にをご覧ください。
  2. Google Cloud コンソールで、 [Synthetic Monitoring] ページに移動します。

    [合成モニタリング] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] である結果を選択します。

  3. [合成モニターを作成] を選択します。
  4. テンプレートに対して、[無効なリンクのチェッカー] を選択します。
  5. 合成モニターの名前を入力します。
  6. 省略可: [レスポンスのタイムアウト] と [チェック頻度] を更新し、ユーザー定義のラベルを追加します。

  7. テストする URI と要素を構成します。

    1. [元の URI] をクリックして、テストする URI を入力します。入力する値は、HTTP または HTTPS エンドポイントでなければなりません。たとえば、「https://mywebsite.example.com」と入力します。

    2. 省略可: [フォローするリンクの数] で、テストするリンクの最大数を更新します。このフィールドのデフォルト値は 10 です。

    3. 省略可: [HTML 要素セレクタ] フィールドに、照合する HTML 要素をカンマ区切りのリストで入力します。入力する値は文字列に変換され、Document: querySelectorAll() メソッドに渡されます。

      デフォルトでは、このフィールドはアンカーと一致する a に設定します。アンカーと画像の両方を照合する場合は、a, img などの値を入力できます。

    4. 省略可: [フォローする HTML 属性] フィールドに、一致させる HTML 属性を入力します。入力するカンマ区切り値は、個別に getAttribute() メソッドに渡されます。

      デフォルトでは、このフィールドは href に設定され、リンクの URI が指定されます。複数の属性を入力できます(href, src など)。この例では、コードは属性 href を検索してから、属性 src を検索します。

    5. 省略可: セレクタの待機、URI ごとのタイムアウト、再試行、予想されるステータス コードを構成します。

      1. [Show more options] をクリックします。
      2. URI に特定のセレクタが表示されるまで待ってから、リンクがスクレイピングされるように無効なリンク チェッカーを構成するには、要素セレクタを待機するフィールドに CSS セレクタと入力します。入力する値は文字列に変換され、page.waitForSelector() メソッドに渡されます。

        タイムアウトする前にセレクタが表示されなかった場合、エラーはログに記録されます。

      3. テスト用のリンクを選択する順序を更新します。

      4. 再試行を構成します。

        デフォルトでは、各リンクに 1 つのリクエストが送信されます。コマンドがタイムアウトした、HTTP ステータス コードが 200 ではないなど、なんらかの理由で最初のリクエストが失敗した場合、リンクは失敗としてマークされます。

        このフィールドには、リンクが失敗としてマークされる前に、リンクへの HTTP リクエストを実行できる回数を指定します。

      5. 各 URI に適用されるタイムアウトを構成します。デフォルトでは、この値は 30 秒に設定されています。

      6. 特定の URI の予想されるステータス コードとタイムアウトを指定するには、[リンクごとのオプションを追加] をクリックしてダイアログを完了します。

  8. 省略可: 回答のスクリーンショットを収集して保存するかどうかを構成します。デフォルト設定を使用している場合、スクリーンショットは保存されません。スクリーンショットの収集を有効にすると、すべてのテストのスクリーンショットを収集することも、失敗したテストのスクリーンショットのみを収集することもできます。Cloud Monitoring は、次の規則を使用して Cloud Storage バケットに名前を付けます。

    gcm-PROJECT_ID-synthetics-LOCATION
    

    上の式で:

    • PROJECT_ID: 実際の Google Cloud プロジェクトの ID。
    • LOCATION: Cloud Storage バケットのロケーション。

    既存の Cloud Storage バケットを使用することもできます。

  9. 構成が正しく、完全であることを確認し、Cloud Run 関数を作成します。

    1. [ファンクションを作成] をクリックします。

      URI 構成フィールドの値は、[関数を作成] をクリックすると、index.js ファイルの Options オブジェクトにコピーされます。[関数を作成] をクリックして構成を変更するには、Options オブジェクトを編集します。

    2. 表示名を入力し、リージョンを選択します。名前はリージョン内で一意でなければなりません。

    3. [ランタイム、ビルド、接続、セキュリティの設定] セクションで、次の操作を行います。

      • [接続] タブで、[すべてのトラフィックを許可する] が選択されていることを確認します。

      • デフォルト設定を確認し、必要に応じて更新します。

      • [Runtime サービス アカウント] フィールドで、サービス アカウントを選択します。

    4. [関数を適用する] をクリックします。

  10. アラート ポリシーを構成します。

    1. 省略可: アラート ポリシー名と、通知が送信されるまでの障害継続期間を更新します。

    2. 通知チャンネルを追加します。

  11. [作成] をクリックします。

    定義した Cloud Run 関数が第 2 世代としてビルドされ、デプロイされ、合成モニターが作成されます。

API

Cloud Monitoring API を使用してリンク切れチェッカー チェッカーを作成するプロセスは、他の合成モニターを作成するプロセスと同じです。Cloud Monitoring API を使用して合成モニターを作成する方法については、合成モニターを作成するを参照し、[Cloud Monitoring] タブを選択します。

無効なリンク チェッカーは broken-links-ok テンプレートを使用します。リンク切れチェッカーの構成は、index.js ファイルの options オブジェクトで指定します。

options.screenshot_options 構造が定義されている場合、リンク切れチェッカーはスクリーンショットを収集し、Cloud Storage バケットに保存します。screenshot_options.storage_location フィールドが定義されていない場合、または値が空の文字列の場合、Monitoring は Cloud Storage バケットを作成し、スクリーンショットがそのバケットに保存されます。Monitoring では、次の規則を使用して Cloud Storage バケットに名前を付けます。

gcm-PROJECT_ID-synthetics-LOCATION

上の式で:

  • PROJECT_ID: 実際の Google Cloud プロジェクトの ID。
  • LOCATION: Cloud Storage バケットのロケーション。

Terraform

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。 詳細については、Terraform プロバイダのリファレンス ドキュメントをご覧ください。

Terraform を使用してリンク切れチェッカーを作成するプロセスは、他の合成モニターを作成するプロセスと同じです。Terraform を使用して合成モニターを作成する方法については、合成モニターを作成するで Terraform タブを選択してください。

無効なリンク チェッカーは broken-links-ok テンプレートを使用します。リンク切れチェッカーの構成は、index.js ファイルの options オブジェクトで指定します。

options.screenshot_options 構造が定義されている場合、リンク切れチェッカーはスクリーンショットを収集し、Cloud Storage バケットに保存します。screenshot_options.storage_location フィールドが定義されていない場合、または値が空の文字列の場合、Monitoring は Cloud Storage バケットを作成し、スクリーンショットがそのバケットに保存されます。Monitoring では、次の規則を使用して Cloud Storage バケットに名前を付けます。

gcm-PROJECT_ID-synthetics-LOCATION

上の式で:

  • PROJECT_ID: 実際の Google Cloud プロジェクトの ID。
  • LOCATION: Cloud Storage バケットのロケーション。

結果を確認する

実行ごとに、リンク切れチェッカーは次の処理を行います。

  • 各行に特定の URI のテストに関する情報を提供するテーブルを生成します。 概要情報には、ターゲット URI、レイテンシ、ステータス、HTML 要素の識別子が含まれます。たとえば、HTML アンカー要素がテストされている場合、この列には a と表示されます。行が元の URI に対応する場合、HTML 要素 ID の値は - です。

  • 指標、トレースデータ、ログデータを収集します。

  • 構成時にスクリーンショットを収集します。

収集されたデータを確認する方法の詳細については、合成モニターの結果を調べるをご覧ください。

トラブルシューティング

このセクションでは、リンク切れチェッカーのトラブルシューティングに役立つ情報を提供します。

無効なリンク チェッカーの設定を編集できない

Google Cloud コンソールを使用して無効なリンク チェッカーを作成し、テストする HTML 要素を変更するか、URI タイムアウト、再試行、セレクタの待機、リンクごとのオプションを変更します。 ただし、無効なリンク チェッカーを編集しても、Google Cloud コンソールには構成フィールドが表示されません。

この問題を解決するには、次の操作を行います。

  1. Google Cloud コンソールで、 [合成モニタリング] ページに移動します。

    [合成モニタリング] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] である結果を選択します。

  2. 編集する合成モニターを見つけて、 [その他のオプション] をクリックし、[編集] を選択します。
  3. [関数を編集] をクリックします。
  4. index.js ファイルの options オブジェクトを編集し、[Apply function] をクリックします。

    このオブジェクトのフィールドと構文については、broken-links-ok/index.js をご覧ください。

  5. [保存] をクリックします。

Google Cloud コンソールでスクリーンショットの保存が失敗したと表示される

リンク切れチェッカーを作成し、スクリーンショットを保存するように構成しました。しかし、Google Cloud コンソールに次のいずれかの警告メッセージと詳細な情報が表示されます。

  • InvalidStorageLocation
  • StorageValidationError
  • BucketCreationError
  • ScreenshotFileUploadError

これらのエラーを解決するには、次の手順を試してください。

  • InvalidStorageLocation メッセージが表示された場合は、options.screenshot_options.storage_location という名前のフィールドで指定された Cloud Storage バケットが存在することを確認します。

  • Cloud Run 関数に関連するログを表示します。詳細については、ログの検索をご覧ください。

  • 対応する Cloud Run 関数で使用されているサービス アカウントに、Cloud Storage バケットの作成、アクセス、書き込みを許可する Identity and Access Management ロールがあることを確認します。

次のステップ