ジャンプ スタート ソリューション: 生成 AI ナレッジベース

Last reviewed 2024-03-01 UTC

このガイドは、生成 AI ナレッジベース ソリューションを理解してデプロイするのに役立ちます。このソリューションでは、抽出型の質問応答(EQA)パイプラインを構築し、社内ナレッジベースのコンテンツを生成する方法について説明します。

このドキュメントは、LLM について一定の知識があるデベロッパーを対象としています。このドキュメントは、基本的なクラウドのコンセプトに精通していることを前提としていますが、必ずしも Google Cloud について理解している必要はありません。また、Terraform の使用経験も役に立ちます。

目標

このソリューション ガイドは、次のことに役立ちます。

  • ドキュメントから質問と回答のペアを抽出するアプリケーションと、ドキュメントがアップロードされたときにアプリケーションをトリガーするパイプラインをデプロイする。
  • アプリケーションの出力を使用して、プロンプトベースの AI モデルをトレーニングする。

アーキテクチャ

このソリューションでは、生成 AI ナレッジベース アプリケーションをデプロイします。次の図は、アプリケーション インフラストラクチャのアーキテクチャを示しています。

Vertex AI の生成 AI を使用してドキュメントから質問と回答のペアを抽出するアプリケーションのアーキテクチャ図

リクエスト フロー

以下では、アプリケーションのリクエスト処理フローについて詳しく説明します。フローの各ステップには、上のアーキテクチャ図に対応した番号が付いています。

生成 AI ナレッジベース アプリケーションを開始するには、Google Cloud コンソールまたは gcloud CLI を使用して、ドキュメントを Cloud Storage バケットに直接アップロードします。

  1. ドキュメントがアップロードされると、Cloud Functions の関数がトリガーされます。この関数は、抽出型の質問応答プロセスを実行します。

  2. 関数が、Document AI OCR を使用してドキュメントからすべてのテキストを抽出します。

  3. 関数が、ドキュメントのインデックスを作成し、ベクトル検索に登録します。ベクトル検索インデックスは、アップロードされたドキュメントから直接抽出されたコンテンツのみに基づいて、LLM が質問と回答のペアを抽出するためのコンテキストを提供します。

  4. 関数が、Vertex AI を使用して、ドキュメントから質問と回答を抽出して生成します。

  5. 関数が、抽出された質問と回答のペアを Firestore に保存します。

  6. Firestore データベースから JSONL ファイン チューニング データセットが生成され、Cloud Storage に保存されます。

  7. データセットに問題がないことを手動で検証したら、Vertex AI でファインチューニング ジョブを起動できます。

    チューニング ジョブが完了すると、チューニング済みのモデルがエンドポイントにデプロイされます。エンドポイントにデプロイされた後、Colab ノートブックでチューニング済みモデルにクエリを送信し、基盤モデルと比較できます。

使用するプロダクト

このセクションでは、このソリューションで使用するプロダクトについて説明します。

Terraform 構成言語に精通している場合は、サービスの一部の設定を変更できます。

コンポーネント プロダクトの説明 このソリューションでの目的
Cloud Storage 低コストで無制限のオブジェクト ストレージをさまざまなデータ型に使用できるエンタープライズ クラスのサービス。 PDF ドキュメント、抽出されたテキスト、チューニング データセット、チューニング済みモデルを保存します。
Eventarc 分離されたマイクロサービス間の状態変更(イベント)を管理し、配信、セキュリティ、認証、オブザーバビリティ、エラー処理を管理しながらさまざまな宛先にイベントをルーティングするサービス。 Cloud Storage バケット内の新しいドキュメントを監視し、Cloud Functions でイベントをトリガーします。
Cloud Functions サーバーやランタイム環境を管理せずに、Google Cloud イベントに応答する単一目的のスタンドアロン関数を作成できる軽量のサーバーレス コンピューティング サービス。 ドキュメントの処理ステップをオーケストレートします。
Document AI ドキュメントから非構造化データを取得して構造化データに変換するドキュメント理解プラットフォーム。面倒なタスクを自動化し、データ抽出を改善して、データからより深い分析情報を得ることができます。 ドキュメントからテキストを抽出します。
Vertex AI LLM と生成 AI アプリケーションのトレーニング、テスト、チューニング、デプロイを行う ML プラットフォーム。 ドキュメントから質問と回答を生成します。
ベクトル検索 Google 検索、YouTube、Play などの Google サービスの基盤と同じインフラストラクチャを利用できるサービス。 エンベディングを検索して、意味的に類似または関連するエンティティを見つけることができます。
Firestore 高可用性と高スループットを提供する、VM とクラスタ向けのフルマネージドで低レイテンシのファイル システム。 生成された質問と回答を保存します。

Cost

生成 AI ナレッジベース ソリューションで使用される Google Cloud リソースの費用の見積もりについては、Google Cloud 料金計算ツールで事前に計算された見積もりをご覧ください。

見積もりを出発点として使用して、デプロイの費用を計算します。見積もりを変更して、ソリューションで使用するリソースに対して行う予定の構成の変更を反映できます。

事前に計算された見積もりは、次のような特定の要因に関する前提条件に基づいています。

  • リソースがデプロイされている Google Cloud のロケーション。
  • リソースが使用される時間。

  • Cloud Storage に保存されているデータの量。

  • ナレッジベース アプリケーションが呼び出された回数。

  • モデルのチューニングに使用されるコンピューティング リソース。

始める前に

このソリューションをデプロイするには、まず Google Cloud プロジェクトと IAM 権限が必要です。

Google Cloud プロジェクトを作成または選択する

ソリューションをデプロイするときに、リソースがデプロイされている Google Cloud プロジェクトを選択します。既存のプロジェクトを使用するか、新しいプロジェクトを作成するかは、次の要素を考慮して判断してください。

  • ソリューション用のプロジェクトを作成し、デプロイメントが不要になった場合は、プロジェクトを削除して、それ以上の請求を避けることができます。既存のプロジェクトを使用する場合、不要になったプロジェクトを削除する必要があります。
  • 新しいプロジェクトを使用すると、本番環境ワークロードに使用されるリソースなど、以前にプロビジョニングされたリソースとの競合を回避できます。

新しいプロジェクトにソリューションをデプロイする場合は、デプロイを開始する前にプロジェクトを作成します。

プロジェクトを作成するには、次の手順を完了します。

  1. In the Google Cloud console, go to the project selector page.

    Go to project selector

  2. Click Create project.

  3. Name your project. Make a note of your generated project ID.

  4. Edit the other fields as needed.

  5. Click Create.

必要な IAM 権限を取得する

デプロイ プロセスを開始するには、次の表に示す Identity and Access Management(IAM)権限が必要です。ソリューションをデプロイするプロジェクトに対して roles/owner 基本ロールが付与されている場合、必要な権限がすべてすでに付与されています。roles/owner のロールがない場合は、これらの権限(またはこれらの権限を含むロール)を付与するよう管理者に依頼してください。

必要な IAM 権限 必要な権限を含む事前定義ロール

serviceusage.services.enable

Service Usage 管理者
roles/serviceusage.serviceUsageAdmin

iam.serviceAccounts.create

サービス アカウント管理者
roles/iam.serviceAccountAdmin

resourcemanager.projects.setIamPolicy

プロジェクト IAM 管理者
roles/resourcemanager.projectIamAdmin
config.deployments.create
config.deployments.list
Cloud Infrastructure Manager 管理者
roles/config.admin

ソリューション用に作成されたサービス アカウント

コンソールからデプロイ プロセスを開始すると、ユーザーに代わってソリューションをデプロイするために(また、必要に応じて後でデプロイを削除するために)サービス アカウントが作成されます。このサービス アカウントには、特定の IAM 権限が一時的に割り当てられます。つまり、ソリューションのデプロイと削除のオペレーションが完了すると、権限が自動的に取り消されます。ソリューションのデプロイを削除した後に、このガイドの後半で説明するように、サービス アカウントを削除することをおすすめします。

サービス アカウントに割り当てられているロールを表示する

Google Cloud プロジェクトまたは組織の管理者が必要とする場合に備え、各ロールを以下に示します。

  • roles/aiplatform.user
  • roles/artifactregistry.admin
  • roles/documentai.editor
  • roles/firebase.admin
  • roles/iam.serviceAccountUser
  • roles/serviceusage.serviceUsageAdmin
  • roles/iam.serviceAccountAdmin
  • roles/resourcemanager.projectIamAdmin

ソリューションをデプロイする

このソリューションを最小限の労力でデプロイできるように、Terraform 構成が GitHub で提供されています。Terraform 構成では、ソリューションに必要なすべての Google Cloud のリソースを定義しています。

次のいずれかの方法でソリューションをデプロイできます。

  • コンソールから: デフォルトの構成でソリューションを試して動作を確認する場合は、この方法を使用します。Cloud Build は、ソリューションに必要なすべてのリソースをデプロイします。デプロイされたソリューションが不要になった場合は、コンソールから削除できます。ソリューションのデプロイ後に作成したリソースは、個別に削除する必要があります。

    このデプロイ方法を使用する場合、コンソールからデプロイするの手順に沿って操作します。

  • Terraform CLI を使用: このソリューションをカスタマイズする場合、または Infrastructure as Code(IaC)のアプローチを使用してリソースのプロビジョニングと管理を自動化する場合は、この方法を使用します。GitHub から Terraform 構成をダウンロードし、必要に応じてコードをカスタマイズしてから、Terraform CLI を使用してソリューションをデプロイします。ソリューションをデプロイした後も、引き続き Terraform を使用してソリューションを管理できます。

    このデプロイ方法を使用するには、Terraform CLI を使用してデプロイするの手順に沿って操作します。

コンソールからデプロイする

事前構成済みのソリューションをデプロイするには、次の手順を完了します。

  1. Google Cloud ジャンプ スタート ソリューションのカタログで、生成 AI ナレッジベース ソリューションに移動します。

    生成 AI ナレッジベース ソリューションに移動

  2. ソリューションの概算費用やデプロイの推定時間など、ページに表示された情報を確認します。

  3. ソリューションのデプロイを開始する準備ができたら、[デプロイ] をクリックします。

    詳細なインタラクティブ ガイドが表示されます。

  4. インタラクティブ ガイドの手順を完了します。

    デプロイメントに入力する名前をメモします。この名前は、後でデプロイメントを削除するときに必要になります。

    [デプロイ] をクリックすると、[ソリューションのデプロイ] ページが表示されます。このページの [ステータス] フィールドに「デプロイ中」が表示されます。

  5. ソリューションがデプロイされるまで待ちます。

    デプロイが失敗した場合、[ステータス] フィールドに「失敗」と表示されます。Cloud Build のログでエラーを診断できます。詳細については、コンソールからデプロイする際のエラーをご覧ください。

    デプロイが完了すると、[ステータス] フィールドが「デプロイ済み」に変わります。

  6. デプロイされている Google Cloud リソースとその構成を確認するには、コンソールでインタラクティブ ツアーを開始します。

    ツアーを開始する

以降の手順については、ソリューションを使用するをご覧ください。

このソリューションが不要になった場合は、デプロイメントを削除して、Google Cloud リソースに対する課金が継続しないようにします。詳細については、デプロイメントを削除するをご覧ください。

Terraform CLI を使用してデプロイする

このセクションでは、Terraform CLI を使用してソリューションをカスタマイズする方法や、ソリューションのプロビジョニングと管理を自動化する方法について説明します。Terraform CLI を使用してデプロイするソリューションは、Google Cloud コンソールの [ソリューションのデプロイ] ページに表示されません。

Terraform クライアントを設定する

Terraform は、Cloud Shell またはローカルホストで実行できます。このガイドでは、Terraform がプリインストールされ、Google Cloud での認証が構成されている Cloud Shell で Terraform を実行する方法について説明します。

このソリューションの Terraform コードは、GitHub リポジトリで入手できます。

  1. Cloud Shell に GitHub リポジトリのクローンを作成します。

    Cloud Shell で開く

    GitHub リポジトリを Cloud Shell にダウンロードするよう求めるメッセージが表示されます。

  2. [確認] をクリックします。

    別のブラウザタブで Cloud Shell が起動し、Cloud Shell 環境の $HOME/cloudshell_open ディレクトリに Terraform コードがダウンロードされます。

  3. Cloud Shell で、現在の作業ディレクトリが $HOME/cloudshell_open/terraform-genai-knowledge-base/ かどうかを確認します。このディレクトリには、ソリューションの Terraform 構成ファイルが含まれています。このディレクトリに移動する必要がある場合は、次のコマンドを実行します。

    cd $HOME/cloudshell_open/terraform-genai-knowledge-base/
    
  4. 次のコマンドを実行して Terraform を初期化します。

    terraform init
    

    次のメッセージが表示されるまで待ちます。

    Terraform has been successfully initialized!
    

Terraform 変数を構成する

ダウンロードした Terraform コードには、要件に基づいてデプロイメントをカスタマイズするために使用できる変数が含まれています。たとえば、Google Cloud プロジェクトと、ソリューションをデプロイするリージョンを指定できます。

  1. 現在の作業ディレクトリが $HOME/cloudshell_open/terraform-genai-knowledge-base/ であることを確認します。そうでない場合は、そのディレクトリに移動します。

  2. 同じディレクトリに、terraform.tfvars という名前のテキスト ファイルを作成します。

  3. terraform.tfvars ファイルで次のコード スニペットをコピーし、必要な変数の値を設定します。

    • コード スニペットでコメントとして記載されている手順を実施します。
    • このコード スニペットには、値を設定する必要のある変数のみが含まれています。Terraform 構成には、デフォルト値を持つ他の変数が含まれています。すべての変数とデフォルト値を確認するには、$HOME/cloudshell_open/terraform-genai-knowledge-base/ ディレクトリにある variables.tf ファイルをご覧ください。
    • terraform.tfvars ファイルで設定した各値が、variables.tf ファイルで宣言されている変数のと一致していることを確認します。たとえば、variables.tf ファイル内の変数に定義されている型が bool の場合、その変数の値として true または falseterraform.tfvars 内で指定する必要があります。
    # This is an example of the terraform.tfvars file.
    # The values in this file must match the variable types declared in variables.tf.
    # The values in this file override any defaults in variables.tf.
    
    # ID of the project in which you want to deploy the solution
    project_id = "PROJECT_ID"
    

Terraform 構成を検証して確認する

  1. 現在の作業ディレクトリが $HOME/cloudshell_open/terraform-genai-knowledge-base/ であることを確認します。そうでない場合は、そのディレクトリに移動します。

  2. Terraform 構成にエラーがないことを確認します。

    terraform validate
    

    コマンドからエラーが返された場合は、構成で必要な修正を行ってから、terraform validate コマンドを再度実行します。コマンドで次のメッセージが返されるまで、この手順を繰り返します。

    Success! The configuration is valid.
    
  3. 構成で定義されているリソースを確認します。

    terraform plan
    
  4. 前述のように変数定義(terraform.tfvars)ファイルを作成しなかった場合、Terraform でデフォルト値のない変数の値の入力を求められます。必要な値を入力します。

    terraform plan コマンドの出力に、構成の適用時に Terraform がプロビジョニングするリソースのリストが表示されます。

    変更を行う場合は、構成を編集してから、terraform validate コマンドと terraform plan コマンドを再度実行します。

リソースをプロビジョニングする

構成にこれ以上の変更が必要ない場合は、リソースをデプロイします。

  1. 現在の作業ディレクトリが $HOME/cloudshell_open/terraform-genai-knowledge-base/ であることを確認します。そうでない場合は、そのディレクトリに移動します。

  2. Terraform 構成を適用します。

    terraform apply
    
  3. 前述のように変数定義(terraform.tfvars)ファイルを作成しなかった場合、Terraform でデフォルト値のない変数の値の入力を求められます。必要な値を入力します。

    作成されるリソースのリストが表示されます。

  4. アクションの実行を求められたら、「yes」と入力します。

    Terraform でデプロイの進行状況を示すメッセージが表示されます。

    デプロイを完了できない場合、失敗の原因となったエラーが表示されます。エラー メッセージを確認し、構成を更新してエラーを修正します。次に、terraform apply コマンドを再実行します。Terraform のエラーのトラブルシューティングについては、Terraform CLI を使用してソリューションをデプロイする際のエラーをご覧ください。

    すべてのリソースが作成されると、Terraform から次のメッセージが表示されます。

    Apply complete!
    
  5. デプロイされている Google Cloud リソースとその構成を確認するには、コンソールでインタラクティブ ツアーを開始します。

    ツアーを開始する

では、ソリューションを実際に使ってみて、その仕組みを確認してみましょう。

このソリューションが不要になった場合は、デプロイメントを削除して、Google Cloud リソースに対する課金が継続しないようにします。詳細については、デプロイメントを削除するをご覧ください。

ソリューションを使用する

ソリューションがデプロイされたら、ドキュメントをアップロードしてインデックスを登録し、質問を行うことができます。さらに、生成された JSON Lines(JSONL)チューニング データセット ファイルを使用して LLM のプロンプト チューニングを行うことができます。

ドキュメントをアップロードしてモデルをクエリする

ドキュメントをアップロードしてこのソリューションの使用を開始します。続いて、事前トレーニング済みの LLM に、ドキュメントについて質問します。

直接 Google Cloud コンソールで、このタスクの順を追ったガイダンスに沿って進めるには、[ガイドを表示] をクリックします。

ガイドを表示

このタスクが完了するまでに約 10 分かかります。

LLM をチューニングする

ソリューションのドキュメントをアップロードした後は、Vertex AI を使用して質問と回答のペアで LLM をチューニングできます。LLM のチューニングは自動化されたプロセスではありません。LLM をチューニングする前に、データが有効で正確であることを確認します。データに問題がなければ、手動でチューニング ジョブを開始し、Model Registry から LLM を起動します。

JSONL チューニング ファイルには、質問と回答のペアから抽出されたコンテンツが含まれています。ファイルの各行には、input_text フィールドと output_text フィールドを含む JSON エントリが含まれます。input_text フィールドには質問の内容が含まれ、output_text には回答の内容が含まれます。

たとえば、次の JSONL ファイルには、「北京に住んでいる人の数」という質問と、それに対する回答が含まれています。

{"input_text": "CONTEXT: With over 21 million residents, Beijing is the
 world's most populous national capital city and is China's second largest
 city after Shanghai. QUESTION: How many people live in Beijing?,
"output_text": "21 million people"}

直接 Google Cloud コンソールで、モデルのチューニングの順を追ったガイダンスに沿って進めるには、[ガイドを表示] をクリックします。

ガイドを表示

このチュートリアルの所要時間は約 10 分ですが、モデルのチューニングが完了するまでに 1 時間以上かかることがあります。

デプロイを削除する

ソリューションが不要になったら、デプロイを削除します。デプロイを削除すると、作成したリソースに対する課金は発生しません。

削除する前に

このソリューションを削除する前に、次の手順でベクトル検索インデックスのデプロイを削除してください。

  1. [ベクトル検索] ページに移動します。

    [ベクトル検索] に移動

  2. knowledge-base-index をクリックします。

  3. [デプロイされたインデックス] で、more_vert [その他] をクリックします。

  4. [デプロイ解除] をクリックします。

インデックスの削除プロセスが完了するまで待つ必要はありません。

コンソールを使用して削除する

この手順は、ソリューションをコンソールからデプロイした場合に実施します。

  1. Google Cloud コンソールで、[ソリューションのデプロイ] ページに移動します。

    [ソリューションのデプロイ] に移動

  2. 削除するデプロイメントが含まれているプロジェクトを選択します。

  3. 削除するデプロイメントを見つけます。

  4. [アクション] をクリックして、[削除] を選択します。

  5. デプロイメントの名前を入力し、[確認] をクリックします。

    [ステータス] フィールドに「削除中」が表示されます。

    削除に失敗した場合は、デプロイメントの削除時のエラーのトラブルシューティング ガイダンスをご覧ください。

ソリューションに使用した Google Cloud プロジェクトが不要になった場合は、プロジェクトを削除できます。詳細については、省略可: プロジェクトを削除するをご覧ください。

Terraform CLI を使用して削除する

Terraform CLI を使用してソリューションをデプロイした場合は、次の手順に沿って操作します。

  1. Cloud Shell で、現在の作業ディレクトリが $HOME/cloudshell_open/terraform-genai-knowledge-base/ であることを確認します。そうでない場合は、そのディレクトリに移動します。

  2. Terraform によってプロビジョニングされたリソースを削除します。

    terraform destroy
    

    破棄されるリソースのリストが表示されます。

  3. アクションの実行を求められたら、「yes」と入力します。

    進行状況を示すメッセージが表示されます。すべてのリソースが削除されると、次のメッセージが表示されます。

    Destroy complete!
    

    削除に失敗した場合は、デプロイメントの削除時のエラーのトラブルシューティング ガイダンスをご覧ください。

ソリューションに使用した Google Cloud プロジェクトが不要になった場合は、プロジェクトを削除できます。詳細については、省略可: プロジェクトを削除するをご覧ください。

チューニングしたモデルを削除する

チューニング済みのモデルは手動で削除する必要があります。

チューニングされたモデルを削除するには、Vertex AI Model Registry からモデルを削除するをご覧ください。

省略可: プロジェクトを削除する

ソリューションを新しい Google Cloud プロジェクトにデプロイした後、そのプロジェクトが不要になった場合は、次の手順で削除します。

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. プロンプトでプロジェクト ID を入力し、[シャットダウン] をクリックします。

プロジェクトを保持する場合は、次のセクションで説明するように、このソリューション用に作成されたサービス アカウントを削除します。

省略可: サービス アカウントを削除する

ソリューションに使用したプロジェクトを削除した場合は、このセクションをスキップしてください。

このガイドの前半で説明したように、ソリューションをデプロイしたときに、ユーザーに代わってサービス アカウントが作成されました。このサービス アカウントには特定の IAM 権限が一時的に割り当てられました。ソリューションのデプロイと削除オペレーションが完了した後、権限は自動的に取り消されましたが、サービス アカウントは削除されません。このサービス アカウントを削除することをおすすめします。

  • Google Cloud コンソールからソリューションをデプロイした場合は、[ソリューションのデプロイ] ページに移動します(すでにページが表示されている場合は、ブラウザを更新します)。サービス アカウントが削除されるように、バックグラウンドでプロセスがトリガーされます。特に操作を行う必要はありません。

  • Terraform CLI を使用してソリューションをデプロイした場合は、次の手順を完了します。

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

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

    2. ソリューションに使用したプロジェクトを選択します。

    3. 削除するサービス アカウントを選択します。

      ソリューション用に作成されたサービス アカウントのメール ID は、次の形式になります。

      goog-sc-DEPLOYMENT_NAME-NNN@PROJECT_ID.iam.gserviceaccount.com
      

      メール ID には次の値が含まれます。

      • DEPLOYMENT_NAME: デプロイメントの名前。
      • NNN: 3 桁のランダムな数字。
      • PROJECT_ID: ソリューションをデプロイしたプロジェクトの ID。
    4. [削除] をクリックします。

エラーのトラブルシューティングを行う

エラーを診断して解決するために実行できるアクションは、デプロイ方法とエラーの複雑さによって異なります。

コンソールからデプロイする際のエラー

コンソールを使用してデプロイが失敗した場合は、次の操作を行います。

  1. [ソリューションのデプロイ] ページに移動します。

    デプロイが失敗した場合、[ステータス] フィールドに「失敗」と表示されます。

  2. エラーの原因となったエラーの詳細を表示するには:

    1. [アクション] をクリックします。

    2. [Cloud Build のログを表示する] を選択します。

  3. Cloud Build のログを確認し、適切な措置を講じて失敗の原因となった問題を解決します。

Terraform CLI を使用してデプロイする際のエラー

Terraform を使用したデプロイが失敗した場合、terraform apply コマンドの出力には、問題を診断するために確認できるエラー メッセージが含まれます。

次のセクションの例では、Terraform の使用時に発生する可能性のあるデプロイエラーを示します。

「API が有効になっていない」エラー

プロジェクトを作成し、すぐに新しいプロジェクトでソリューションをデプロイすると、デプロイが失敗し、次のようなエラーが発生することがあります。

Error: Error creating Network: googleapi: Error 403: Compute Engine API has not
been used in project PROJECT_ID before or it is disabled. Enable it by visiting
https://console.developers.google.com/apis/api/compute.googleapis.com/overview?project=PROJECT_ID
then retry. If you enabled this API recently, wait a few minutes for the action
to propagate to our systems and retry.

このエラーが発生した場合は、数分待ってから terraform apply コマンドを再度実行します。

「Cannot assign requested address」エラー

terraform apply コマンドを実行すると、cannot assign requested address エラーが発生し、次のようなメッセージが表示されることがあります。

Error: Error creating service account:
 Post "https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts:
 dial tcp [2001:db8:ffff:ffff::5f]:443:
 connect: cannot assign requested address

このエラーが発生した場合は、terraform apply コマンドを再度実行してください。

構成エラー

サポートされていない値を使用して main.tf ファイル内のリソース引数を変更すると、次のようなエラーが発生します。

Error: Error creating Instance: googleapi: Error 400: Provided Redis version is
not supported: REDIS_5_X
│ com.google.apps.framework.request.StatusException:
  <eye3 title='INVALID_ARGUMENT'/>
  generic::INVALID_ARGUMENT: Provided Redis version is not supported: REDIS_5_X
Details:
│ [>
│   {
│     "@type": "type.googleapis.com/google.rpc.BadRequest",
│     "fieldViolations": [
│       {
│         "description": "Invalid value: REDIS_5_X",
│         "field": "instance.redis_version"
│       }
│     ]
│   }
│ ]
│
│   with google_redis_instance.main,
│   on main.tf line 96, in resource "google_redis_instance" "main":
│   96: resource "google_redis_instance" "main" {

この例では、Redis バージョン 5 を使用するために指定した、main.tf ファイル内の instance.redis_version 引数の値(REDIS_5_X)が無効です。Memorystore REST API ドキュメントに記載されているように、正しい値は REDIS_5_0 です。

デプロイメント削除時のエラー

デプロイメントを削除しようとして失敗することもあります。

  • コンソールでソリューションをデプロイした後に、ソリューションによってプロビジョニングされたリソースを変更してからデプロイメントを削除しようとすると、削除が失敗することがあります。[ソリューションのデプロイ] ページの [ステータス] フィールドに「失敗」と表示され、Cloud Build のログにエラーの原因が表示されます。
  • Terraform CLI を使用してソリューションをデプロイした後に、Terraform 以外のインターフェース(コンソールなど)を使用してリソースを変更し、デプロイメントを削除しようとすると、削除が失敗することがあります。terraform destroy コマンドの出力にあるメッセージにエラーの原因が示されます。

エラーログとエラーの内容を確認し、エラーの原因となったリソースを特定して削除してから、もう一度デプロイメントを削除してみてください。

コンソールベースのデプロイメントが削除されず、Cloud Build ログを使用してエラーを診断できない場合は、Terraform CLI を使用してデプロイメントを削除できます。次のセクションをご覧ください。

Terraform CLI を使用してコンソールベースのデプロイメントを削除する

このセクションでは、コンソールからコンソールベースのデプロイメントを削除しようとしたときにエラーが発生した場合に、コンソールベースのデプロイメントを削除する方法について説明します。このアプローチでは、削除するデプロイメントの Terraform 構成をダウンロードし、Terraform CLI を使用してデプロイメントを削除します。

  1. デプロイメントの Terraform コード、ログ、その他のデータが保存されているリージョンを特定します。このリージョンは、ソリューションのデプロイ時に選択したリージョンとは異なる場合があります。

    1. Google Cloud コンソールで、[ソリューションのデプロイ] ページに移動します。

      [ソリューションのデプロイ] に移動

    2. 削除するデプロイメントが含まれているプロジェクトを選択します。

    3. デプロイメントのリストで、削除するデプロイメントの行を特定します。

    4. 行の内容をすべて表示する」をクリックします。

    5. [場所] 列で、次の例でハイライトされているように、2 番目の場所をメモします。

      デプロイメント コード、ログ、その他のアーティファクトの場所。

  2. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  3. プロジェクト ID、リージョン、削除するデプロイメントの名前の環境変数を作成します。

    export REGION="REGION"
    export PROJECT_ID="PROJECT_ID"
    export DEPLOYMENT_NAME="DEPLOYMENT_NAME"
    

    これらのコマンドで、次のように置き換えます。

    • REGION: この手順でメモした場所。
    • PROJECT_ID: ソリューションをデプロイしたプロジェクトの ID。
    • DEPLOYMENT_NAME: 削除するデプロイメントの名前。
  4. 削除するデプロイメントの最新リビジョンの ID を取得します。

    export REVISION_ID=$(curl \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}" \
        | jq .latestRevision -r)
        echo $REVISION_ID
    

    出力は次のようになります。

    projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME/revisions/r-0
    
  5. デプロイメントの Terraform 構成の Cloud Storage のロケーションを取得します。

    export CONTENT_PATH=$(curl \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/${REVISION_ID}" \
        | jq .applyResults.content -r)
        echo $CONTENT_PATH
    

    このコマンドの出力例を次に示します。

    gs://PROJECT_ID-REGION-blueprint-config/DEPLOYMENT_NAME/r-0/apply_results/content
    
  6. Cloud Storage から Cloud Shell に Terraform 構成をダウンロードします。

    gsutil cp -r $CONTENT_PATH $HOME
    cd $HOME/content/
    

    次の例に示すように、Operation completed メッセージが表示されるまで待ちます。

    Operation completed over 45 objects/268.5 KiB
    
  7. Terraform を初期化します。

    terraform init
    

    次のメッセージが表示されるまで待ちます。

    Terraform has been successfully initialized!
    
  8. デプロイされたリソースを削除します。

    terraform destroy
    

    破棄されるリソースのリストが表示されます。

    宣言されていない変数に関する警告が表示された場合は、警告を無視してください。

  9. アクションの実行を求められたら、「yes」と入力します。

    進行状況を示すメッセージが表示されます。すべてのリソースが削除されると、次のメッセージが表示されます。

    Destroy complete!
    
  10. デプロイメント アーティファクトを削除します。

    curl -X DELETE \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}?force=true&delete_policy=abandon"
    
  11. 数秒待ってから、デプロイメント アーティファクトが削除されたことを確認します。

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}" \
        | jq .error.message
    

    出力に null と表示されている場合は、数秒待ってから、もう一度コマンドを実行します。

    デプロイメント アーティファクトが削除されると、次のようなメッセージが表示されます。

    Resource 'projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME' was not found
    

フィードバックを送信する

ジャンプ スタート ソリューションは情報提供のみを目的としており、正式にサポートされているプロダクトではありません。Google は、予告なくソリューションを変更または削除する場合があります。

エラーのトラブルシューティングを行うには、Cloud Build のログと Terraform の出力を確認します。

フィードバックを送信する場合は、次の操作を行います。

  • ドキュメント、コンソール内チュートリアル、またはソリューションについては、このページの [フィードバックを送信] ボタンを使用してください。
  • Terraform コードを変更していない場合は、GitHub リポジトリで問題を作成します。GitHub の問題はベスト エフォート ベースで調査します。これは、一般的な使用に関する質問を目的としたものではありません。
  • ソリューションで使用されているプロダクトに関する問題については、Cloud カスタマーケアにお問い合わせください。

次のステップ