ジャンプ スタート ソリューション: GKE にダウンタイムなしでデプロイできるステートフル アプリ

Last reviewed 2023-12-19 UTC

このガイドでは、GKE にダウンタイムなしでステートフル アプリをデプロイする方法について説明します。このソリューションでは、ローリング アップデート デプロイを使用して、メンテナンスの時間枠やダウンタイムなどの大きな停止を発生させることなくライブアプリに変更を加える方法を示します。

このソリューションは、サービスへのアクセスに時間的制約がある業界や、サービス停止の削減に大きく依存するビジネスモデルで特に有用です。

このドキュメントは、継続的インテグレーションと継続的デリバリー(CI / CD)のコンセプトとツールについてある程度の知識があるプラットフォーム エンジニアまたは DevOps エンジニアを対象としています。また、基本的なクラウドのコンセプトと Google Kubernetes Engine(GKE)へのデプロイ方法に精通していることを前提としています。Terraform の使用経験も役に立ちます。

目標

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

  • Go で作成された 3 階層アプリ(1 つのフロントエンド サービス、1 つのバックエンド サービス、1 つのマネージド データベース)をデプロイする。この例で使用するアプリは、すぐに使用できる画像共有アプリです。
  • ユーザーによる利用を中断することなく、GKE のライブアプリに機能の変更を push する方法について学習する。

アーキテクチャ

次の図は、ソリューションのアーキテクチャを示したものです。

GKE ソリューションにダウンタイムなしでデプロイできるステートフル アプリに必要なインフラストラクチャのアーキテクチャ。

以降の各サブセクションでは、図に示された Google Cloud リソースのリクエスト フローと構成について説明します。

リクエスト フロー

このソリューションのリクエスト処理フローは次のとおりです。フローの各ステップには、上記のアーキテクチャ図に対応した番号が付いています。

  1. 画像共有アプリにリクエストを送信します。
  2. Cloud Load Balancing は、(アプリのバージョン 1 を実行している)GKE サービスにリクエストをリダイレクトします。
  3. このアプリは、Firestore データベースと Cloud Storage バケットに保存されている静止画像のメタデータを使用して、レスポンスを提供します。
  4. GKE API を使用してアプリのバージョン 2 をデプロイするスクリプトを実行します。

使用するプロダクト

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

  • GKE: コンテナ化されたアプリケーションを Google のインフラストラクチャを使用してデプロイ、管理、スケーリングするためのマネージド環境。
  • Cloud Load Balancing: Google Cloud で高パフォーマンスでスケーラブルなロード バランシングを行うサービス。
  • Cloud Storage: 低コストで無制限のオブジェクト ストレージをさまざまなデータ型に使用できるサービス。データは Google Cloud の内部および外部からアクセス可能で、地理的に冗長に複製されます。
  • Firestore: 自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQL ドキュメント データベース。

費用

Google Cloud の費用の見積もりについては、Autopilot モードの料金をご覧ください。

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

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

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/storage.objectAdmin
  • roles/datastore.user
  • roles/compute.networkUser
  • roles/cloudtrace.agent
  • roles/iam.workloadIdentityUser

デプロイ方法を選択する

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

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

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

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

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

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

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

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

  1. Google Cloud ジャンプ スタート ソリューションのカタログで、GKE ソリューションにダウンタイムなしでデプロイできるステートフル アプリに移動します。

    GKE ソリューションにダウンタイムなしでデプロイできるステートフル アプリに移動

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

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

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

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

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

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

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

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

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

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

  7. デプロイされた Google Cloud リソースとその構成を確認するには、インタラクティブなツアーをご覧ください。

    ツアーを開始する

  8. このソリューションを使用すると、サンプルの画像共有アプリの新しいバージョンにトラフィックを移行することで、大きな停止を発生させることなく更新を行うことができます。このタスクの手順ガイドを Cloud Shell エディタで直接行うには、[ガイドを表示] をクリックします。

    ガイドを表示

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

このソリューションが不要になった場合は、デプロイメントを削除して、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-cloud-deployment-gke/infra かどうかを確認します。このディレクトリには、ソリューションの Terraform 構成ファイルが含まれています。このディレクトリに移動する必要がある場合は、次のコマンドを実行します。

    cd $HOME/cloudshell_open/terraform-cloud-deployment-gke/infra
    
  4. 次のコマンドを実行して Terraform を初期化します。

    terraform init
    

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

    Terraform has been successfully initialized!
    

Terraform 変数を構成する

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

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

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

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

    • コード スニペットでコメントとして記載されている手順を実施します。
    • このコード スニペットには、値を設定する必要のある変数のみが含まれています。Terraform 構成には、デフォルト値を持つ他の変数が含まれています。すべての変数とデフォルト値を確認するには、$HOME/cloudshell_open/terraform-cloud-deployment-gke/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"
    
    # The following variables have default values. You can set your own values or remove them to accept the defaults.
    
    # Google Cloud region where you want to deploy the solution
    # Example: us-central1
    region = "REGION"
    
    # Google Cloud zone where you want to deploy the solution
    # Example: us-central1-a
    zone = "ZONE"
    
    # Whether project services will be disabled when the resources are destroyed.
    # Example: false
    disable_services_on_destroy = "BOOL"
    
    # The location where the object data in the bucket resides. Permitted regions are ASIA, EU, or US.
    # Example: US
    bucket_location = "BUCKET_LOCATION"
    
    # A map of key/value label pairs to assign to the resources.
    # Example: "team"="monitoring", "environment"="test"
    labels = {"KEY1"="VALUE1",..."KEYn"="VALUEn"}
    
    # Firestore collection ID
    firestore_collection_id = "COLLECTION_ID"
    
    

    必要な変数に割り当てできる値については、以下をご覧ください。

    • project_id: プロジェクトの識別

    • 他の変数にはデフォルト値があります。それらの一部は変更できます(たとえば、disable_services_on_destroylabels)。

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

  1. 現在の作業ディレクトリが $HOME/cloudshell_open/terraform-cloud-deployment-gke/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-cloud-deployment-gke/infra であることを確認します。そうでない場合は、そのディレクトリに移動します。

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

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

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

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

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

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

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

    Apply complete!
    
  5. ソリューションを表示するには、コンソールの [ソリューションのデプロイ] ページに戻ります。

  6. デプロイされた Google Cloud リソースとその構成を確認するには、インタラクティブなツアーをご覧ください。

    ツアーを開始する

  7. このソリューションを使用すると、サンプルの画像共有アプリの新しいバージョンにトラフィックを移行することで、大きな停止を発生させることなく更新を行うことができます。このタスクの手順ガイドを Cloud Shell エディタで直接行うには、[ガイドを表示] をクリックします。

    ガイドを表示

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

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

デプロイを削除する

このソリューションが不要になった場合は、このソリューションで作成したリソースに対する課金が継続しないように、すべてのリソースを削除します。

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

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

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

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

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

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

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

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

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

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

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

Terraform CLI を使用して削除する

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

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

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

    terraform destroy
    

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

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

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

    Destroy complete!
    

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

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

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

ソリューションを新しい 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 コマンドを再度実行します。

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

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

  • コンソールでソリューションをデプロイした後に、ソリューションによってプロビジョニングされたリソースを変更してからデプロイメントを削除しようとすると、削除が失敗することがあります。[ソリューションのデプロイ] ページの [ステータス] フィールドに「失敗」と表示され、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/infra
    

    次の例に示すように、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 カスタマーケアにお問い合わせください。

次のステップ