ジャンプ スタート ソリューション: Kubernetes にデプロイされる e コマース ウェブアプリ

Last reviewed 2023-08-29 UTC

このガイドでは、Kubernetes にデプロイされる e コマース ウェブアプリを理解してデプロイし、ジャンプ スタート ソリューションを使用する方法について説明します。このソリューションでは、一般公開されているショップ ウェブサイトを使用して、小売業向けの e コマース アプリケーションを構築して実行する方法を紹介します。ここでは、使用量の急増(セールなどのピークスケール イベントなど)に対応してスケーリングし、ユーザーの位置情報に基づいてリクエストを管理できるアプリケーションの作成方法について説明します。このようなアプリケーションにより、オンライン ショップは地理的に分散した顧客ベースに対して一貫したサービスを提供できるようになります。

このアプリケーションは、Google Cloud が管理する Kubernetes クラスタで実行される複数の小さなサービス(マイクロサービス)としてデプロイされます。各サービスは、ウェブ フロントエンドの提供やショッピング カートの管理など、特定のタスクを実行します。

このソリューションは、ウェブサイト管理時に Kubernetes 機能によって提供される構成と柔軟性が必要な場合に適しています。このようなマイクロサービス アーキテクチャは、チームやデベロッパーがアプリケーションのさまざまな部分を個別に作成、管理できるため、エンジニアリング チームの規模が大きい場合は特に便利です。これが自分の組織に当てはまらない場合や、確信が持てない場合は、Cloud Run にデプロイされる e コマース ウェブアプリも試してみてください。これは、Cloud Run を使用して同様のオンライン ショップ アプリケーションをデプロイしています。Kubernetes を必要とせず、また、マイクロサービスも使用していません。

このドキュメントは、クラウドの基本的なコンセプトを理解していることを前提としていますが、Google Cloud の知識が必須というわけではありません。また、Terraform の使用経験も役に立ちます。

Cymbal Shops について

このソリューションで使用するアプリケーションは、Cymbal Shops と呼ばれる架空の小売チェーンのデモ オンライン ショップです。ウェブサイトでは、訪問者が会社の商品を閲覧したり、カートに商品を追加したり、購入手続きに移動したりできます。ソリューションのデプロイ後にご自身で試すこともできますが、残念ながら商品を購入することはできません。Cymbal Shops には米国とヨーロッパの両方に顧客があるため、どちらの訪問客によっても遅くないウェブサイト ソリューションが必要です。また、Cymbal Shops ではセールが頻繁に行われ、ホリデー シーズンには多くの買い物客が訪れています。そのため、トラフィックの急増に対応でき、遅延や他の問題が生じたり、不要なクラウド リソースに対する課金が発生しないようなウェブサイトが必要になります。

使用するプロダクト

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

  • Google Kubernetes Engine(GKE): Google のインフラストラクチャを使用して、コンテナ化されたアプリケーションのデプロイ、管理、スケーリングを行えるマネージド環境。
  • マルチクラスタ Ingress: Google がホストするサービス。クラスタ間やリージョン間で共有されたロード バランシング リソースのデプロイをサポートします。

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

アーキテクチャ

このソリューションでは、一般公開されているウェブ インターフェースを使用して e コマース アプリケーションをデプロイします。次の図は、このソリューションがデプロイする Google Cloud リソースのアーキテクチャを示しています。

Kubernetes にデプロイされた e コマース ウェブアプリのジャンプスタート ソリューションの図

リクエスト フロー

デプロイされたアプリケーションのリクエスト処理フローは次のとおりです。フロー内のステップには、上のアーキテクチャ図のように番号が付いています。

  1. ユーザーがブラウザで Cymbal Shops のウェブサイトを操作すると、Google Cloud ロードバランサに HTTP リクエストが送信されます。このロードバランサは、Google のネットワークのエッジに配置され、トラフィックを Google Cloud 内の適切な宛先に転送します。
  2. ユーザー リクエストは、アプリケーション フロントエンドが実行されている 2 つの GKE クラスタのいずれかに転送されます。デフォルトでは、ユーザーに最も近いクラスタが選択されます。上の図では、ユーザーに最も近いクラスタがあるヨーロッパにリクエストが送信されます。マルチクラスタ Ingress サービスを使用してこれを構成する方法については、次のセクションで説明します。
  3. リクエストは、残りの Cymbal Shops アプリケーションを構成する 1 つ以上のバックエンド マイクロサービスによって処理されます。
  4. アプリケーションの cartservice は、ユーザーがサイトにアクセスしたときに、Redis データベースを使用してユーザーのショッピング カートの状態を保存します。1 つの Redis データベースが US クラスタにのみデプロイされます。

コンポーネントと構成

Cymbal Shops アプリは Google Kubernetes Engine(GKE)クラスタで実行されます。Kubernetes は、コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化するためのオープンソース システムで、アプリケーションには、環境に依存しない方法で依存関係がパッケージ化(またはコンテナ化)されています。Kubernetes クラスタはノードと呼ばれるマシンのセットで、コンテナの実行に使用します。GKE と Autopilot は完全にスケーラブルな Google の Kubernetes サービスです。ここでは、クラスタが Google Cloud 上の Compute Engine 仮想マシンで構成されています。

Cymbal Shops ソリューションは、次のコンポーネントから構成されています。

  • 3 つの GKE クラスタ:
    • 構成クラスタと呼ばれる 1 つのクラスタ。アプリケーションのマルチクラスタ Ingress サービスの管理に使用されます。マルチクラスタ Ingress は、アプリケーションに単一の仮想 IP アドレスを使用し、指定されたクラスタセット間でトラフィックをロード バランシングするサービスです。
    • 異なるリージョンにある 2 つのクラスタ。Cymbal Shops マイクロサービスを実行します。各クラスタには、同じ Kubernetes Namespace で実行される同じ Cymbal Shops サービスがあります。これにより、マルチクラスタ Ingress は両方のフロントエンド サービスを同じサービスのように扱うことができます。つまり、ウェブサイトの訪問者との距離に応じて、トラフィックを送信するクラスタを選択します。マルチクラスタ Ingress を使用すると、正常なクラスタのみにトラフィックが送信されるようにしたり、アップグレード時に段階的にロールアウトできます。
  • 3 つの GKE クラスタすべてで Autopilot が有効になっています。Autopilot は GKE の機能の一つで、Google がクラスタ構成(ノード、スケーリング、セキュリティ、その他の事前構成された設定など)を管理するクラスタを作成できます。Cymbal Shops の場合、サイト訪問者が通常より多くなると、クラスタは、アプリケーションのニーズに応じて使用する CPU、メモリ、ストレージの量を自動的にスケールアップできます。Autopilot を有効にすると、Cymbal Shops のプラットフォーム管理者は、必要以上に Cloud リソースをリクエストして、それに対する料金を支払うこと心配する必要がなくなります。また、繁忙期のトラフィック増加でリソースが不足するリスクも回避できます。

費用

デフォルトのリソース ロケーションと想定された使用時間に基づく毎月の費用の概算については、Kubernetes にデプロイされた e コマース ウェブアプリのページをご覧ください。GKE、Autopilot、マルチクラスタ Ingress の料金の詳細については、GKE の料金ページをご覧ください。

始める前に

このソリューションをデプロイするには、まず 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.serviceAccount.actAs サービス アカウント ユーザー
roles/iam.serviceAccountUser

一時的なサービス アカウントの権限について

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

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

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

  • roles/container.admin
  • roles/gkehub.editor
  • roles/compute.networkAdmin
  • roles/iam.serviceAccountAdmin
  • roles/iam.serviceAccountUser
  • roles/resourcemanager.projectIamAdmin
  • roles/serviceusage.serviceUsageAdmin

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

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

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

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

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

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

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

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

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

  1. Google Cloud ジャンプ スタート ソリューションのカタログで、Kubernetes にデプロイされる e コマース ウェブアプリ ソリューションに移動します。

    Kubernetes ソリューションにデプロイされる e コマース ウェブアプリに移動

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

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

    順を追って構成するペインが表示されます。

  4. 構成ペインの手順を実施します。

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

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

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

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

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

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

Cymbal Shops の探索に進んで、ソリューションのテスト方法と探索方法をご確認ください。

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

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

デプロイが不要になったら、Terraform CLI を使用して削除するで説明しているように、Terraform CLI を使用して削除できます。

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

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

    terraform init
    

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

    Terraform has been successfully initialized!
    

Terraform 変数を構成する

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

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

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

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

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

project_id 変数に代入できる値については、プロジェクトの識別をご覧ください。

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

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

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

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

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

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

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

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

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

    Apply complete!
    

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

Cymbal Shops の探索に進んで、ソリューションのテスト方法と探索方法をご確認ください。

Cymbal Shops を調べる

これで、Cymbal Shops ウェブサイトがデプロイされました。Cymbal Shops のウェブサイトにアクセスして詳細を確認し、Google Cloud コンソールでソリューションの仕組みを確認できます。アプリケーションが正常にデプロイされてから、指定したアドレスにサイトが表示されるまでに 5 分ほどかかる場合があります。

Cymbal Shops のサイトにアクセスする

Cymbal Shops のサイトを探す方法は、ソリューションのデプロイ方法によって異なります。

コンソールからデプロイした場合

コンソールからソリューションをデプロイした場合は、[ソリューションのデプロイ] ページから直接サイトにアクセスできます。

  • ソリューションのデプロイを完了したばかりの場合は、[ウェブアプリを表示] をクリックしてサイトにアクセスします。それ以外の場合は、デプロイメントの [アクション] メニューをクリックして、[ウェブアプリを表示] を選択します。

Terraform デプロイメント

Terraform CLI を使用してソリューションをデプロイした場合は、まずマルチクラスタ Ingress によって提供されるフロントエンドの IP アドレスを確認します。これは、Google Cloud CLI を使用してコマンドラインから行うか(最もシンプルなアプローチ)、Google Cloud コンソールから行うことができます。

gcloud

  1. Google Cloud CLI の最新バージョンがインストールされていることを確認します。ツールがすでにインストールされている Cloud Shell からコマンドを実行することをおすすめします。
  2. 次のコマンドを実行して IP アドレスを取得します。PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。

    gcloud compute addresses list \
       --filter="name=('multi-cluster-ingress-ip-address-1')" \
       --project=PROJECT_ID
    
  3. コマンドから返されたアドレスをコピーしてブラウザに貼り付け、ウェブサイトにアクセスします。

コンソール

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. ナビゲーション メニューで [オブジェクト ブラウザ] を選択します。

  3. [オブジェクト ブラウザ] リストで [networking.gke.io] セクションを開き、「MultiClusterIngress」を選択します。このセクションが見つからない場合は、さらに下にスクロールしてください。

  4. [MultiClusterIngress] ページで、[frontend-multi-cluster-ingress] を選択します。

  5. frontend-multi-cluster-ingress の詳細ページで、IP アドレスを見つけます。このアドレスをクリックしてウェブサイトにアクセスします。

ウェブサイトを調べる

これで、Cymbal Shops ウェブサイトで顧客と同じように商品の閲覧、カートへの商品の追加、ゲストとしての決済などができるようになりました。

ソリューションを探す

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

ツアーを開始

デプロイを削除する

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

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

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

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

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

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

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

  4. デプロイメントの行で、アクション)アイコンをクリックし、[削除] を選択します。

    行にアクション アイコンが表示されない場合は、スクロールしてください。

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

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

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

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

Terraform CLI を使用して削除する

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

  1. Cloud Shell で、現在の作業ディレクトリが $HOME/cloudshell_open/terraform-ecommerce-microservices-on-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 の使用時に発生する可能性のあるデプロイエラーを示します。

機能の作成中にエラーが発生しました: リソースがすでに存在します

マルチクラスタ Ingress がすでに構成されているプロジェクトにこのソリューションをデプロイすると、次のようなエラーが表示されます。

Error: Error creating Feature: Resource already exists - apply blocked by lifecycle params: &beta.Feature{Name:(*string)(0xc0017d1d00), Labels:map[string]string{}, ResourceState:(*beta.FeatureResourceState)(0xc001b9d890), Spec:(*beta.FeatureSpec)(0xc001792f00), State:(*beta.FeatureState)(0xc001792f50), CreateTime:(*string)(0xc001792fd0), UpdateTime:(*string)(0xc001792ff0), DeleteTime:(*string)(nil), Project:(*string)(0xc0017d1d40), Location:(*string)(0xc0017d1ca0)}.
running tf apply: terraform apply failed: running terraform failed: exit status 1

このソリューションは、選択したプロジェクトに新しい GKE 構成クラスタをデプロイするためです。プロジェクト(具体的には、プロジェクトのフリート)には、マルチクラスタ Ingress を構成するための構成クラスタを 1 つだけ含めることができます。この問題を解決するには、既存のマルチクラスタ Ingress 構成クラスタを削除するか、新しいプロジェクトでやり直してください。

エラー: ジョブ: default/kubernetes-manifests-deployer-job が失敗状態です

このソリューションの Terraform は、kubernetes-manifests-deployer-job という Kubernetes Job をデプロイします。この Kubernetes Job は、このソリューションに必要な Kubernetes リソース(Cymbal Shops マイクロサービス、Redis データベースなど)を 3 つのクラスタすべてにデプロイします。

この Kubernetes Job は複雑で、3 つのクラスタすべての準備状況に依存しているため、次のようなエラー メッセージが表示されることがあります。

kubernetes_job.kubernetes_manifests_deployer_job: Creation errored after 5m8s
...
Error: job: default/kubernetes-manifests-deployer-job is in failed state

このエラーが表示された場合は、デプロイの残りの部分が正常に完了しなくても、ソリューションの Google Cloud インフラストラクチャの一部がすでにプロビジョニングされている可能性があります。このようなリソースへの課金を回避するために、プロジェクトを削除し、別のプロジェクトでデプロイを再試行することをおすすめします。

「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 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 構成をダウンロードします。

    gcloud storage cp $CONTENT_PATH $HOME --recursive
    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 カスタマーケアにお問い合わせください。

    また、ソリューションの GitHub リポジトリで問題と未解決の問題のリストを確認することをおすすめします。

次のステップ