ジャンプスタート ソリューション: 大規模なデータ共有 Java ウェブアプリ

Last reviewed 2023-06-22 UTC

このガイドは、大規模なデータ共有 Java ウェブアプリのジャンプ スタート ソリューションを理解、デプロイ、使用するのに役立ちます。このソリューションは、大量のファイルを提供できるアプリケーションを構築する方法を示します。

Java の代わりに Go を使用する場合は、大規模データ共有 Golang ウェブアプリのジャンプ スタート ソリューションをご覧ください。

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

目標

  • 大規模なデータ共有ユーザー パターンについて理解します。
  • クラウドベースのオブジェクト ストレージ サービスでオブジェクトを保存、提供します。
  • 分散配信ネットワークを使用して多数のオブジェクトを処理するアプリケーションをデプロイします。
  • 最小限のアクセス権限で各レイヤのオブジェクトを保護します。

使用するプロダクト

このソリューションでは、次の Google Cloud プロダクトを使用します。

  • Cloud CDN(コンテンツ配信ネットワーク): 高速で信頼性の高いウェブ コンテンツと動画配信をグローバル規模で提供します。
  • Cloud Storage: 低コストで無制限のオブジェクト ストレージをさまざまなデータ型に使用する、エンタープライズ クラスのサービス。データは Google Cloud の内部および外部からアクセス可能で、地理的に冗長に複製されます。
  • Cloud Run: サーバーレスのコンテナ化アプリを構築してデプロイできるフルマネージド サービス。Google Cloud がスケーリングやその他のインフラストラクチャ タスクを処理するため、ユーザーはコードのビジネス ロジックに集中できます。
  • Cloud Load Balancing: Google Cloud で高パフォーマンスでスケーラブルなロード バランシングを行うサービス。
  • Firestore: フルマネージドでスケーラブルなサーバーレスのドキュメント データベース。

これらのプロダクトの構成と相互作用については、次のセクションをご覧ください。

アーキテクチャ

このソリューションでは、完全に実装されたすぐに使えるイメージ共有アプリがデプロイされます。次の図では、ソリューションがデプロイする Google Cloud リソースのアーキテクチャを示します。

Cloud CDN を使用してファイルを配信するイメージ共有アプリのアーキテクチャ図。

リクエスト フロー

このソリューションがデプロイする画像共有アプリのリクエスト処理フローは次のとおりです。フロー内のステップには、上のアーキテクチャ図のように番号が付いています。

  1. ユーザーからのファイルのアップロード リクエストは、ロードバランサを使用してフロントエンドにルーティングされます。
  2. フロントエンドは、Cloud Run を使用するバックエンドにこれらのリクエストを転送します。
  3. バックエンドは、Cloud Storage にファイルと Firestore 内のファイルに関するメタデータを保存します。
  4. Cloud CDN キャッシュ ヒットが発生した場合、ファイルを表示するユーザーからのリクエストは Cloud CDN にルーティングされます。
  5. Cloud CDN キャッシュミスが発生した場合、ファイルを表示するユーザーからのリクエストは Cloud Storage にルーティングされます。

コンポーネントと構成

このアーキテクチャは、次のコンポーネントで構成されています。

  • Cloud Run で実行されるフロントエンドとバックエンドで構成される画像共有ウェブアプリ。 アプリ フロントエンドでは Angular を使用します。アプリ バックエンドは Java で記述されています。
  • Cloud Load Balancing を使用して作成されたロードバランサは、受信リクエストを適切なリソースにルーティングします。
  • 画像ファイルを保存する Cloud Storage バケット。
  • Cloud CDN は、Cloud Storage バケットから画像をキャッシュに保存して、コンテンツ配信を高速化します。
  • ファイル メタデータを格納する Firestore データベース。

コスト

大規模なデータ共有 Java ウェブアプリ ソリューションで使用される Google Cloud リソースの費用を見積もるには、Google Cloud 料金計算ツールで事前に計算された見積もりをご覧ください。

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

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

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

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

このセクションでは、ソリューションのデプロイ プロセスについて説明します。

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 構成マネージャー管理者
roles/config.admin

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

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

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

Google Cloud プロジェクトまたは組織の管理者が必要とする場合に、以下のロールの情報を表示してください。

  • roles/storage.admin
  • roles/datastore.owner
  • roles/appengine.appAdmin
  • roles/compute.admin
  • roles/compute.networkAdmin
  • roles/cloudtrace.admin
  • roles/iam.serviceAccountUser
  • roles/run.admin
  • roles/monitoring.admin
  • roles/vpcaccess.admin

デプロイ方法を選択する

このソリューションは、次の方法でデプロイできます。

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

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

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

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

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

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

  1. Google Cloud ジャンプ スタート ソリューション カタログで、大規模データ共有 Java ウェブアプリ ソリューションに移動します。

    大規模データ共有 Java ウェブアプリ ソリューションに移動

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

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

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

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

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

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

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

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

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

  6. ソリューションを表示して使用するには、コンソールの [ソリューションのデプロイ] ページに戻ります。

    1. [アクション] メニューをクリックします。
    2. [ウェブアプリを表示] を選択して、画像共有アプリを開きます。

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

Terraform を使用したデプロイ

このセクションでは、Terraform を使用してソリューションをカスタマイズする方法や、ソリューションのプロビジョニングと管理を自動化する方法について説明します。Terraform コードを使用してデプロイするソリューションは、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-large-data-sharing-java-webapp/infra かどうかを確認します。このディレクトリには、ソリューションの Terraform 構成ファイルが含まれています。そのディレクトリに変更する必要がある場合は、次のコマンドを実行します。

    cd $HOME/cloudshell_open/terraform-large-data-sharing-java-webapp/infra
    
  4. 次のコマンドを実行して Terraform を初期化します。

    terraform init
    

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

    Terraform has been successfully initialized!
    

Terraform 変数を構成する

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

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

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

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

    • コード スニペットでコメントとして記載されている手順を実施します。
    • このコード スニペットには、値を設定する必要のある変数のみが含まれています。Terraform 構成には、デフォルト値を持つ他の変数が含まれています。すべての変数とデフォルト値を確認するには、$HOME/cloudshell_open/terraform-large-data-sharing-java-webapp/infra ディレクトリにある 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"
    

    project_id については、プロジェクトの識別をご覧ください。

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

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

  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-large-data-sharing-java-webapp/infra であることを確認します。そうでない場合は、そのディレクトリに移動します。

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

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

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

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

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

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

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

    Apply complete!
    
    Outputs:
    bucket_name = "BUCKET_NAME"
    lb_external_ip = "IP_ADDRESS"
    neos_walkthrough_url = "https://console.cloud.google.com/products/solutions/deployments?walkthrough_id=solutions-in-console--large-data-sharing--large-data-sharing-java_tour"
    
  5. サンプルアプリを表示して使用するには、ブラウザで lb_external_ip を開きます。

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

ソリューションをカスタマイズする

このセクションでは、Terraform のデベロッパーが独自の技術要件とビジネス要件を満たすために、大規模なデータ共有 Java ウェブアプリ ソリューションを変更する方法について説明します。このセクションのガイダンスは、Terraform を使用してソリューションをデプロイする場合にのみ該当します。

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

    cd $HOME/cloudshell_open/terraform-large-data-sharing-java-webapp/infra
    
  2. 次の表の例に示すように、main.tf を開き、必要な変更を行います。


    パラメータ

    main.tf の Terraform 引数

    アプリ バックエンド用の CPU 上限

    引数: cloud_run_server.limits.cpu

    main.tf の関連コード スニペット:

    
    module "cloud_run_server" {
    …
      limits = {
        cpu    = "2000m"
        …
      }
    


    アプリ バックエンドのメモリ上限

    引数: cloud_run_server.limits.memory

    main.tf の関連コード スニペット:

    
    module "cloud_run_server" {
    …
      limits = {
        …
        memory = "2Gi"
        …
    


    アプリ フロントエンドの CPU 上限

    引数: cloud_run_client.limits.cpu

    main.tf の関連コード スニペット:

    
    module "cloud_run_client" {
    …
      limits = {
        cpu    = "1000m"
        …
      }
    


    アプリ フロントエンドのメモリ上限

    引数: cloud_run_client.limits.memory

    main.tf の関連コード スニペット:

    
    module "cloud_run_client" {
    …
    
      limits = {
        …
        memory = "512Mi"
        …
    

  3. 前のセクションと同じ手順を使用して、リソースを検証してプロビジョニングします。

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

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

デプロイを削除する

ソリューションのデプロイが不要になった場合は、作成したリソースに対して課金されないようにするため、デプロイを削除します。

プロジェクトの削除

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

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

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

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

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

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

コンソールでソリューションのデプロイを削除しても、Firestore データベースは削除されません。このデータベースを削除するには、前述の説明に沿ってプロジェクトを削除します。

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

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

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

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

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

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

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

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

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

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

Terraform を使用して削除する

Terraform を使用してソリューションのデプロイを削除しても、Firestore データベースは削除されません。このデータベースを削除するには、前述の説明に沿ってプロジェクトを削除します。

Terraform を使用してソリューションをデプロイした場合は、この手順を実施します。

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

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

    terraform destroy
    

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

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

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

    Destroy complete!
    

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

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

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

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

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

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

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

    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 を使用してソリューションをデプロイする際のエラー

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

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

エラー: データベースの作成中にエラーが発生しました: googleapi: エラー 409: データベースはすでに存在します。別の database_id を使用してください。

デフォルトでは、Terraform データベースのデプロイは、プロジェクトに Firestore データベースが存在しないことを前提としています。データベースがすでに存在する場合は、次のフラグを指定してデプロイを再度実行し、データベースの作成をスキップします。

$ terraform apply -var "init=false"

エラー: インデックスの作成中にエラーが発生しました: googleapi: エラー 409: インデックスがすでに存在します

このエラーは、このソリューションが以前にこのプロジェクトにデプロイされたことを示しています。別のプロジェクトを選択するか、サンプルアプリで以前に作成した Firestore インデックスを削除します。

API not enabled エラー

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

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 コマンドを再度実行します。

デプロイ削除時のエラー

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

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

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

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

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

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

  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 カスタマーケアにお問い合わせください。

次のステップ