Storage Intelligence の問題のトラブルシューティング

このドキュメントでは、 Storage IntelligenceStorage Insights インベントリ レポートStorage Insights データセット、および ストレージ バッチ オペレーションに関する一般的な問題のトラブルシューティング方法について説明します。

Storage Intelligence の構成エラー

以降のセクションでは、リソースの Storage Intelligence の 構成または 管理時に発生する可能性のあるエラーについて説明します。

400: バケット名が無効です

問題: リクエストが 400 Bad Request を返し、メッセージ The specified bucket is not valid.

解決策: リクエストが無効です。リクエストが次の要件を満たしていることを確認してください。

  • locations/global を使用してください。Storage Intelligence は他のロケーションをサポートしていません。
  • bucket_id_regexes のバケット名または正規表現が有効であることを確認します。

有効なリクエストの例を次に示します。

curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d '{
      "edition_config": "STANDARD",
      "filter": {
        "included_cloud_storage_buckets": {
          "bucket_id_regexes": [
            "my-bucket-name",
            "prod-data-.*"
          ]
        }
      }
    }' \
    "https://storage./v2/projects/PROJECT_ID/locations/global/intelligenceConfig?updateMask=edition_config,filter"

400: 無効な引数 - 空の更新マスク

問題: 構成リクエストまたは更新リクエストを送信すると、リクエストが 400 Bad Request を返し、メッセージ Empty UPDATE_MASK in the request. が表示されます。

ソリューション: リクエストに空でない UPDATE_MASK を指定します。UPDATE_MASK は、更新する IntelligenceConfigリソース内の FieldMask フィールドのカンマ区切りリストを指定します(updateMask=edition_configupdateMask=edition_config,filter など)。

400: 無効な更新マスクのパス

問題: 構成を更新すると、リクエストが 400 Bad Request を返し、メッセージ Invalid UPDATE_MASK paths. が表示されます。

解決策: UPDATE_MASK の各フィールド名が IntelligenceConfig リソースの有効なフィールド と一致していることを確認します。

400: フィールドは編集できません

問題: 構成を更新すると、リクエストが 400 Bad Request を返し、メッセージ Invalid UPDATE_MASK: UPDATE_TIME field is not editable. が表示されます。

解決策: 編集できないシステム フィールド(UPDATE_TIME など)を UPDATE_MASK から削除します。 IntelligenceConfig で定義されている変更可能なフィールドのみを指定します。

400: 無効な値です

問題: リクエストが 400 Bad Request を返し、メッセージ Invalid value at storage_intelligence.edition_config. が表示されます。

解決策: edition_config をサポートされている値(INHERITSTANDARDDISABLED)に設定します。

400: 空でないフィルタ

問題: リクエストが 400 Bad Request を返し、メッセージ Non-empty filter cannot be specified for INHERIT or DISABLED edition configuration.

解決策: リクエストからバケットフィルタを削除します。バケットフィルタ は、edition_configINHERIT または DISABLED に設定されている場合、サポートされていません。

400: フィルタ内のロケーションまたはバケットの値が空です

問題: リクエストが 400 Bad Request を返し、メッセージ Empty location or bucket values in filter.

解決策: locationbucket のどちらも 空の文字列でないことをバケットフィルタで確認します。

Storage Insights の一般的な問題

このセクションでは、インベントリ レポートデータセットに関する一般的な問題を解決する方法について説明します。

毎日複数のインベントリ レポートが生成される

問題: インベントリ レポートの構成で、毎日複数のレポート ファイルが生成されます。

ソリューション: Cloud Storage は、1,000,000 個を超えるオブジェクトを含むバケットのインベントリ レポートをシャード化し、1,000,000 個のオブジェクトごとに 1 つのシャードを生成します。たとえば、3,500,000 個のオブジェクトを含むバケットでは、4 つのレポート シャードと、 各シャードを一覧表示するマニフェスト ファイルが生成されます。

インベントリ レポートが宛先バケットに表示されない

問題: インベントリ レポートが宛先バケットに表示されません。

解決策: レポートが宛先バケットに配信されない場合は、次のことを確認してください。

  • 構成された開始日が過ぎていることを確認します。詳細については、 インベントリ レポート構成を作成するをご覧ください。

  • インベントリ レポートの履歴を表示して、不具合とその根本原因を確認します。インベントリ レポートの履歴を表示する手順は次のとおりです。

    1. Google Cloud コンソールで Cloud Storage の [バケット] ページに移動します。

      [バケット] に移動

    2. バケットのリストで、インベントリ レポートの構成を含むソースバケットの名前をクリックします。

    3. [バケットの詳細] ページで、[インベントリ レポート] タブをクリックします。

    4. インベントリ レポートの構成のリストで、確認するレポートを生成したインベントリ レポート構成の UUID をクリックします。

    5. [インベントリ レポートの履歴] セクションで不具合を確認します。[ヘルプ]()にカーソルを合わせると、不具合が発生した理由の詳細が表示されます。

  • プロジェクト レベルのサービス エージェントに、インベントリ レポートの読み取りと書き込みに必要な IAM ロールが付与されていることを確認します。詳細については、サービス エージェントに必要なロールを付与するをご覧ください。

インベントリ レポートの遅延が発生する

問題: インベントリ レポートの生成が遅延します。

解決策: レポートの生成時間は異なります。最大 24 時間の遅延は正常です。

データセットが入力されない

問題: Storage Insights データセット テーブルが空のままです。

解決策: リンクされた BigQuery データセットで、 error_attributes_view にエラーコードがないか確認します。詳細については、 データセット エラーのトラブルシューティングをご覧ください。

データセットのクエリ時に [ref] 列に null 値が表示される

問題: BigQuery で Storage Insights データセットをクエリすると、 ref 列に null が返されます。

解決策: / で終わるオブジェクトの場合、データセットの ref 列は null です。

BigQuery で Storage Insights データセットをクエリしたときに ref 列に null 値が返される場合は、BigQuery を使用してオブジェクト データとメタデータを分析するで説明されているように、Cloud Storage リソースへのアクセスなど、必要な 接続権限とロールが付与されていることを確認してください。

ストレージ バッチ オペレーション ジョブの検証エラー

このセクションでは、バッチ オペレーション ジョブのリクエストを storagebatchoperations.googleapis.com に送信したときに発生する検証エラーについて説明します。

400: 無効なジョブ ID またはリソース名

問題: ジョブ作成リクエストが 400 Bad RequestINVALID_ARGUMENT) レスポンスを返し、理由が JOB_ID_INVALID または RESOURCE_NAME_TOO_LONG です。

[解決策]: ジョブ ID が 1 ~ 63 文字の小文字の英数字 またはハイフン([a-z0-9]([-a-z0-9]*[a-z0-9])?)で構成され、リソースパス全体の長さが 1,024 バイトを超えていないことを確認します。詳細については、 ジョブ名をご覧ください。

400: 変換パラメータが競合しているか、欠落している

問題: ジョブ作成リクエストが 400 Bad RequestINVALID_ARGUMENT) レスポンスを返し、理由が TRANSFORMATION_NOT_SPECIFIEDREWRITE_OBJECT_MISSING_PARAMETERSPUT_OBJECT_HOLD_MISSING_PARAMETERS、または PUT_METADATA_MISSING_PARAMETERS です。

解決策: 必要な パラメータをすべて指定して、変換タイプを 1 つだけ指定します。オブジェクトの保持を構成する場合は、オブジェクト ロックが バケットで有効になっていることと、タイムスタンプが RFC 3339 UTC 形式を使用していることを確認します。変換ごとのパラメータ要件の詳細については、 サービスの種類をご覧ください。

400: オブジェクトの接頭辞が重複しているか、重複している

問題: ジョブ作成リクエストが 400 Bad RequestINVALID_ARGUMENT) レスポンスを返し、理由が OBJECT_PREFIX_OVERLAP または DUPLICATE_OBJECT_PREFIX です。

ソリューション: 重複する接頭辞を削除し、 included_object_prefixes の接頭辞がリスト内の別のエントリの接頭辞でないことを確認します。詳細については、オブジェクトの接頭辞をご覧ください。

400: マニフェスト ファイルの形式とアクセスに関する問題

問題: ジョブ作成リクエストが 400 Bad RequestINVALID_ARGUMENT) レスポンスを返し、理由が MANIFEST_LOCATION_REQUIRED または MANIFEST_LOCATION_INVALID です。 または、ジョブがマニフェストを読み取ることができません。

解決策: マニフェスト URI が有効な CSV パス (gs://<bucket_name>/<path>/<object_name>.csv)であり、 Storage バッチ オペレーション サービス エージェントにマニフェスト バケットに対する roles/storage.objectViewer ロールがあることを確認します。CSV の形式と スキーマ要件の詳細については、マニフェストをご覧ください。

400: Storage Insights データセットの検出エラー

問題: オブジェクト検出に Storage Insights データセットを使用すると、 400 Bad RequestINVALID_ARGUMENT または FAILED_PRECONDITION)レスポンスが返され、 理由が BUCKET_DISCOVERY_SNAPSHOT_TOO_OLDTARGET_LOCATIONS_REQUIRED_FOR_SNAPSHOT_TIME、または BUCKET_DISCOVERY_TOO_MANY_BUCKETS です。

解決策: snapshot_time が過去 48 時間以内であることを確認し、バケットの target_locations を指定して、検出クエリが 1,000 個以下のバケットと一致するようにします。詳細については、Storage Insights データセットを使用してマニフェストを作成するをご覧ください。

400: Autoclass が有効なバケットでストレージ クラスの変換が失敗する

問題: ジョブ作成リクエストが 400 Bad Request (FAILED_PRECONDITION) レスポンスを返し、理由が AUTOCLASS_STORAGE_CLASS_TRANSFORMATION_UNSUPPORTED です。

解決策: Autoclass が有効なバケットでストレージ クラスの変換を実行することはできません。Autoclass がないバケットをターゲットにするか、ストレージ クラスの変換を削除します。詳細については、Autoclass の制限事項をご覧ください。

400: 均一なバケットレベルのアクセス バケットでオブジェクト ACL の更新が失敗する

問題: ジョブ作成リクエストが 400 Bad Request (FAILED_PRECONDITION) レスポンスを返し、理由が UBLA_OBJECT_ACL_UPDATE_UNSUPPORTED です。

解決策: 均一なバケットレベルのアクセスが有効になっているバケットでオブジェクト ACL を更新することはできません。代わりに、バケットまたはプロジェクト レベルで IAM ロールを使用してアクセスを管理します。詳細については、均一なバケットレベルのアクセスをご覧ください。

ストレージ バッチ オペレーションのランタイムと実行に関する問題

このセクションでは、バッチ オペレーション ジョブの非同期実行中に発生する問題について説明します。

403: 実行中の権限エラー

問題: バッチジョブが実行中に失敗し、403 ForbiddenPERMISSION_DENIED)が返されます。

解決策: ストレージ バッチ オペレーション サービス エージェント (service-PROJECT_NUMBER@gcp-sa-storagebatchoperations.) に、変換タイプに必要な IAM ロールを付与します。詳細については、サービス エージェントに権限を付与するをご覧ください。

オブジェクトの書き換え中の CMEK 暗号化エラー

問題: Cloud KMS 鍵のステータスまたは権限エラーにより、オブジェクトの書き換えが 400 Bad Request または 403 Forbidden で失敗します。

解決策: Cloud KMS 鍵が Enabled であり、ターゲット バケットと同じリージョンに存在し、サービス エージェントに roles/cloudkms.cryptoKeyEncrypterDecrypter ロールがあることを確認します。詳細については、 サービスの種類: オブジェクトの書き換えをご覧ください。

error_summaries の失敗回数が多い

問題: バッチジョブが完了し、counters.failed_object_count がゼロ以外で、error_summaries にエラーコード(404 NOT_FOUND412 FAILED_PRECONDITION403 PERMISSION_DENIED など)が含まれています。

ソリューション: gcloud storage batch-operations jobs describe--location フラグを指定して実行し(例: gcloud storage batch-operations jobs describe JOB_ID --location=LOCATION)、 集計されたエラーの内訳を表示します。また、オブジェクトごとの エラーログについては Cloud Logging を確認します。詳細については、ジョブの詳細を取得するをご覧ください。

2 日以上前のスナップショットが原因でストレージ バッチ オペレーション ジョブが失敗する

問題: CEL フィルタに基づく ストレージ バッチ オペレーション ジョブを作成すると、ジョブの作成が失敗します。エラー メッセージには、スナップショットの時刻が 2 日以上前であることが示されます。

解決策: 古いオブジェクトの状態に対するアクションを防ぐため、ストレージ バッチ オペレーションではジョブの作成が自動的に失敗します。このエラーは、選択したスナップショットが 2 日以上前の場合に発生します。この問題を解決するには、次のいずれかの方法を選択します。

  • マニフェスト ファイルを使用する: BigQuery でデータセットを手動でクエリします。結果を CSV マニフェスト ファイルにエクスポートし、そのファイルを Cloud Storage バケットにアップロードします。マニフェスト メソッドを使用してバッチ オペレーション ジョブを作成すると、2 日間の制限を回避できます。
  • データセットの構成を確認する: データセットの構成が有効で、一時停止していないことを確認します。データセットのスナップショットが正常に実行されることを確認します。構成を確認する方法については、データセットの構成を表示するをご覧ください。
  • ターゲット ロケーションとスナップショット時刻のオーバーライドを使用する: --target-snapshot-time フラグを指定して、RFC 3339 形式でスナップショットを明示的に選択することで、2 日間の有効期限切れエラーを回避します。--target-locations フラグを指定して、スナップショットが存在するロケーションにオペレーションを制限します。これらのオーバーライドを使用すると、自動化されたグローバル スナップショットの更新を妨げる同期の遅延を解決できます。その結果、より新しいリージョン スナップショットを手動でターゲットにできます。コマンド構文については、高度なフィルタを使用してジョブを作成するをご覧ください。

CEL フィルタに基づくストレージ バッチ オペレーション ジョブが、新しくサブスクライブしたプロジェクトで失敗する

問題: 新しくサブスクライブしたプロジェクトで CEL フィルタに基づくストレージ バッチ オペレーション ジョブを実行すると、有効なスナップショットが見つからないため失敗します。

解決策: Storage Intelligence サブスクリプションを有効にした後、CEL フィルタに基づくストレージ バッチ オペレーション ジョブを実行するまでに 24 時間待つ必要があります。この遅延により、システムは最初のメタデータ スナップショットを実行し、開始スナップショット時刻を確立できます。

CEL フィルタに基づくストレージ バッチ オペレーション ジョブが権限エラーで失敗するか、ランタイム エラーが発生する

問題: CEL フィルタに基づくストレージ バッチ オペレーション ジョブが実行中に失敗するか、ランタイム権限エラーが返されます。

解決策: ストレージ バッチ オペレーションでは、ユーザーの認証情報を使用してオブジェクトを処理します。ターゲットのバケットとオブジェクトに必要な IAM 閲覧者または書き込み権限がない場合、ジョブは失敗します。この問題は、CEL フィルタがアクセスできないリソースを選択した場合に発生します。アカウントに、ジョブのスコープ内のすべてのバケットとオブジェクトに対するストレージ管理者(roles/storage.admin)、ストレージ オブジェクト管理者(roles/storage.objectAdmin)、または同等のロールがあることを確認します。ロールの付与手順については、IAM 権限を使用するをご覧ください。

モニタリングとログ分析

Cloud Logging でオブジェクトごとの実行エラーとエラー ペイロードを検査する方法については、ストレージ バッチ オペレーション ログを表示するをご覧ください。

次のステップ