Retail チュートリアルの問題をトラブルシューティングする

チュートリアルの構成中に問題が発生した場合、生じている可能性のある問題と、各問題の修正方法の提案がこのページに表示されます。

cloudshell_open フォルダがありません

ls ~ を実行して、ホーム ディレクトリに cloudshell_open フォルダが表示されない場合、フォルダとそのファイルは失われます。この問題は、Cloud Shell をエフェメラル モードで使用していて、インターネット接続が失われるか、ページを更新したときに発生します。この問題を解決するには、チュートリアルを最初からやり直します。将来ファイルが失われるのを防ぐために、デフォルト モードに切り替えることを検討してください。

現在の環境でプロジェクト ID を検出できません

コードサンプルを実行しようとすると、次のエラーが発生します。

ERROR Unable to detect a Project Id in the current environment.

この問題は、Google Cloud プロジェクトが設定されていない場合に発生します。この問題を解決するには、次のコマンドを実行してプロジェクトを設定します。

gcloud config set project <YOUR-PROJECT-ID>

コードサンプルの実行時に key.json エラーが発生する

コードサンプルを実行すると、次のいずれかのエラーが発生します。

File /home/user/key.json is not a valid json file
no JSON input found
The file at /home/user/key.json does not exist, or it is not a file
Could not find file '/home/user/key.json'
Error reading credential file from location /home/user/key.json: Value cannot be null

この問題は、サービス アカウントの認証に使用する key.json ファイルが空であるか、存在しない場合に発生します。この問題が発生しているかどうかを確認するには、次のコマンドを実行します。

cat ~/key.json

これにより、ファイルの内容または No such file or directory メッセージが出力されます。空のファイルは、鍵の作成中にエラーが発生したことを意味します。ファイルがない場合は、その前にエラーが発生したことを意味します。 この問題を解決するには、チュートリアルの「作業環境を準備する」の手順に従います。

Retail API がプロジェクトで以前に使用されていないか、無効になっています

チュートリアルを実行しようとすると、次のエラーが発生します。

PERMISSION_DENIED: Retail API has not been used in project <YOUR-PROJECT-ID> before or it is disabled

この問題を解決するには、Google Cloud コンソールの [API/サービスの詳細] ページで Retail API を有効にするか、次のコマンドを実行します。

gcloud services enable \
    retail.googleapis.com \
    --project=<YOUR-PROJECT-ID>

サービス アカウントにプロジェクト インスタンスにアクセスする権限がありません

サービス アカウントにロールを割り当てると、次のエラーが発生します。

User [USER@YOUR-PROJECT-ID.iam.gserviceaccount.com] does not have permission to access projects instance [YOUR-PROJECT-ID:setIamPolicy] (or it may not exist): Policy update access denied.

この問題を解決するには、ターミナルで gcloud auth list コマンドを実行して、正しいアカウントが有効になっているかを確認します。有効なアカウントがサービス アカウントであることを確認します。Google Cloud コンソールの [IAM] ページに移動して、サービス アカウントが Google Cloud プロジェクトのオーナーであることを確認します。

エンドユーザーの認証情報を使用した無効な認証

コードサンプルを実行すると、次のエラーが発生します。

PERMISSION_DENIED: Your application has been authenticated using end user credentials from the Google Cloud SDK or Google Cloud Shell which are not supported by the retail.googleapis.com.

この問題は、サービス アカウントの代わりにエンドユーザーの認証情報を使用している場合に発生します。この問題は、サービス アカウントがアクティブでないか、必要な環境変数が設定されていない場合にも発生することがあります。このエラーは、Cloud Shell の再起動または新しいターミナル ウィンドウの起動後に表示されることがあります。

この問題を解決するには:

  1. チュートリアルの「作業環境の準備」の手順に従い、gcloud auth list を実行してサービス アカウントが有効になっていることを確認します。
  2. 環境変数を設定します。

    1. すべての言語で、次のコマンドを実行します。
    export GOOGLE_APPLICATION_CREDENTIALS=~/key.json
    
    1. さらに .NET の場合は、次のコマンドを実行します。
    export GOOGLE_PROJECT_ID=<YOUR-PROJECT-ID>
    

サービス アカウントに必要なロールがない場合の権限エラー

コードサンプルを実行すると、次のエラーが発生します。

google.api_core.exceptions.PermissionDenied: 403 Permission 'retail.<YOUR-REQUEST>' denied on resource '//retail.googleapis.com/projects/<YOUR-PROJECT-ID>/locations/<YOUR-LOCATION>' (or it may not exist). [reason: "IAM_PERMISSION_DENIED"

この問題は、サービス アカウントに必要なロール(retail.admin と editor)がない場合に発生します。この問題を解決するには、チュートリアルの「作業環境を準備する」の手順に従って作業環境を設定します。

検索オペレーションから返された結果はありません

この問題は、検索クエリに一致する商品がない場合や商品カタログが空の場合に発生します。この問題を解決するには、Google Cloud コンソールの [カタログ] ページで、カタログに商品が含まれているかどうかを確認します。それ以外の場合は、チュートリアルの「カタログデータをインポートする」の手順に従ってカタログデータをインポートします。

問題が解決しない場合

Cloud Shell をリセットして、チュートリアルを最初から実行してみてください。