このガイドは、Python と JavaScript を使用した動的ウェブ アプリケーションのジャンプ スタート ソリューションの理解、デプロイ、使用に役立ちます。このソリューションでは、Google Cloud で動的ウェブサイトを構築して実行する方法を説明します。
このアプリケーションのデプロイと管理は、サーバーレス アプリケーションに使用できるツールとプロダクトを使用して、動的ウェブ アプリケーションを構築する実装例として利用できます。このソリューションは、次のことを学習する場合にデプロイできます。
- Django REST フレームワーク(DRF)アプリケーション
- ストアフロント アプリケーション
- データベースを基盤としたウェブサイト
このソリューションでは、Avocano アプリをデプロイします。これは商品購入用の架空のストアフロントです。ただし、ユーザーがカートに商品を追加すると、それが架空のストアであること(Avoca--no!)が表示されます。実際に商品の購入はできませんが、アプリは提供可能な商品数を 1 つ減らして、在庫管理を行います。
Avocano では、Cloud Run ベースの API、Cloud SQL for PostgreSQL データベース、Firebase フロントエンドを利用しています。
Avocano アプリケーションのソースコードをご覧ください。
目標
このソリューション ガイドでは、Google Cloud で次のタスクを実行する方法について説明します。
- 一般公開されているウェブ アプリケーションをデプロイする
- Google Cloud が推奨するセキュリティ対策に従ってアプリケーションを Google Cloud データベースに接続する。
- Secret Manager を使用してパスワード、鍵、証明書を保存する。
- タスクの実行に必要な IAM 権限のみを付与する。これは、最小権限の原則の適用とも呼ばれます。
- バックエンド サービスをデプロイして運用する
- Google Cloud が推奨するセキュリティ対策に従ってアプリケーションを Google Cloud データベースに接続する。
- アプリケーションをカスタマイズする
- コンテンツを変更するか、アプリケーションを修正して機能を追加する。
- ビルドと再デプロイを安全に行う。
使用するプロダクト
このソリューションで使用する Google Cloud プロダクトの概要は次のとおりです。
- Cloud Run: サーバーレスのコンテナ化アプリを構築してデプロイできるフルマネージド サービス。Google Cloud がスケーリングなどのインフラストラクチャ タスクを処理するので、デベロッパーはコードのビジネス ロジックに集中できます。
- ジョブ: コンテナベースのタスク処理。
- Cloud Build: リポジトリや Cloud Storage スペースからソースコードをインポートし、ビルドを実行して、Docker コンテナや Java アーカイブなどのアーティファクトを生成するサービス。
- Cloud SQL for PostgreSQL: Google Cloud インフラストラクチャで完全に管理される、クラウドベースの PostgreSQL データベース。
- Secret Manager: シークレットをバイナリ blob またはテキスト文字列として保存、管理、アクセスできるサービス。Secret Manager を使用すると、ランタイム時にアプリケーションが必要とするデータベース パスワード、API キー、TLS 証明書を格納できます。
- Cloud Storage: 低コストで無制限のオブジェクト ストレージをさまざまなデータ型に使用する、エンタープライズ クラスのサービス。データは Google Cloud の内部および外部からアクセス可能で、地理的に冗長に複製されます。
- Firebase: iOS、Android、ウェブ用のアプリケーションをビルド、リリース、モニタリングできる開発プラットフォーム。
アーキテクチャ
次の図は、ソリューションのアーキテクチャを示したものです。
コンポーネントと構成
このアーキテクチャは、次のコンポーネントで構成されます。
- ウェブ クライアントは Firebase Hosting でホストされています。
- ウェブ クライアントは、Cloud Run でサービスとして実行される Python で記述された API バックエンドを呼び出します。
- Python アプリケーションの構成とその他のシークレットは Secret Manager に保存されます。
- Cloud SQL for PostgreSQL は、Python アプリケーションのリレーショナル データベース バックエンドとして使用されます。
- アプリケーションの静的アセットとコンテナ イメージは Cloud Storage に保存されます。
費用
動的ウェブ アプリケーション ソリューションで使用される Google Cloud リソースの費用を見積もるには、Google Cloud 料金計算ツールで事前に計算された見積もりをご覧ください。
見積もりを出発点として使用して、デプロイの費用を計算します。見積もりを変更して、ソリューションで使用するリソースに対して行う予定の構成の変更を反映できます。
事前に計算された見積もりは、次のような特定の要因に関する前提条件に基づいています。
- リソースがデプロイされている Google Cloud のロケーション。
- リソースが使用される時間。
始める前に
このソリューションをデプロイするには、まず Google Cloud プロジェクトと IAM 権限が必要です。
Google Cloud プロジェクトを作成または選択する
ソリューションをデプロイするときに、リソースがデプロイされている Google Cloud プロジェクトを選択します。デプロイには、新しいプロジェクトを作成するか、既存のプロジェクトを使用できます。
新しいプロジェクトを作成する場合は、デプロイを始める前に作成します。新しいプロジェクトを使用すると、本番環境ワークロードに使用されるリソースなど、以前にプロビジョニングされたリソースとの競合を回避できます。
プロジェクトを作成するには、次の手順を完了します。
-
In the Google Cloud console, go to the project selector page.
-
Click Create project.
-
Name your project. Make a note of your generated project ID.
-
Edit the other fields as needed.
-
Click Create.
必要な IAM 権限を取得する
デプロイ プロセスを開始するには、次の表に示す Identity and Access Management(IAM)権限が必要です。
このソリューション用に新規プロジェクトを作成した場合は、そのプロジェクトに roles/owner
基本ロールが付与され、必要なすべての権限を持っています。roles/owner
ロールがない場合は、これらの権限(またはこれらの権限を含むロール)の付与を管理者に依頼してください。
必要な IAM 権限 | 必要な権限を含む事前定義ロール |
---|---|
|
Service Usage 管理者 ( roles/serviceusage.serviceUsageAdmin ) |
|
サービス アカウント管理者 ( roles/iam.serviceAccountAdmin ) |
|
プロジェクト IAM 管理者 ( roles/resourcemanager.projectIamAdmin ) |
config.deployments.create config.deployments.list |
Cloud Infrastructure Manager 管理者 ( roles/config.admin ) |
一時的なサービス アカウントの権限について
コンソールからデプロイ プロセスを開始すると、ユーザーに代わってソリューションをデプロイするために(また、必要に応じて後でデプロイを削除するために)サービス アカウントが作成されます。このサービス アカウントには、特定の IAM 権限が一時的に割り当てられます。つまり、ソリューションのデプロイと削除のオペレーションが完了すると、権限が自動的に取り消されます。ソリューションのデプロイを削除した後に、このガイドの後半で説明するように、サービス アカウントを削除することをおすすめします。
サービス アカウントに割り当てられたロールを確認する
Google Cloud プロジェクトまたは組織の管理者が必要とする場合に、以下のロールの情報を表示してください。
roles/cloudsql.admin
roles/cloudsql.admin
roles/firebasehosting.admin
roles/iam.serviceAccountAdmin
roles/iam.serviceAccountUser
roles/resourcemanager.projectIamAdmin
roles/run.admin
roles/secretmanager.admin
roles/storage.admin
roles/compute.networkAdmin
roles/compute.admin
ソリューションをデプロイする
このソリューションを最小限の労力でデプロイできるように、Terraform 構成が GitHub で提供されています。Terraform 構成では、ソリューションに必要なすべての Google Cloud のリソースを定義しています。
次のいずれかの方法でソリューションをデプロイできます。
コンソールから: デフォルトの構成でソリューションを試して動作を確認する場合は、この方法を使用します。Cloud Build は、ソリューションに必要なすべてのリソースをデプロイします。デプロイされたソリューションが不要になった場合は、コンソールから削除できます。ソリューションのデプロイ後に作成したリソースは、個別に削除する必要があります。
このデプロイ方法を使用する場合、コンソールからデプロイするの手順に沿って操作します。
Terraform CLI を使用: このソリューションをカスタマイズする場合、または Infrastructure as Code(IaC)のアプローチを使用してリソースのプロビジョニングと管理を自動化する場合は、この方法を使用します。GitHub から Terraform 構成をダウンロードし、必要に応じてコードをカスタマイズしてから、Terraform CLI を使用してソリューションをデプロイします。ソリューションをデプロイした後も、引き続き Terraform を使用してソリューションを管理できます。
このデプロイ方法を使用するには、Terraform CLI を使用してデプロイするの手順に沿って操作します。
コンソールからデプロイする
事前構成済みのソリューションをデプロイするには、次の手順を完了します。
Google Cloud ジャンプ スタート ソリューション カタログで、Python と JavaScript の動的ウェブ アプリケーション ソリューションに移動します。
ソリューションの概算費用やデプロイの推定時間など、ページに表示された情報を確認します。
ソリューションのデプロイを開始する準備ができたら、[デプロイ] をクリックします。
順を追って構成するペインが表示されます。
構成ペインの手順を実施します。
デプロイメントに入力する名前をメモします。この名前は、後でデプロイメントを削除するときに必要になります。
[デプロイ] をクリックすると、[ソリューションのデプロイ] ページが表示されます。このページの [ステータス] フィールドに「デプロイ中」が表示されます。
ソリューションがデプロイされるまで待ちます。
デプロイが失敗した場合、[ステータス] フィールドに「失敗」と表示されます。Cloud Build のログでエラーを診断できます。詳細については、コンソールからデプロイする際のエラーをご覧ください。
デプロイが完了すると、[ステータス] フィールドが「デプロイ済み」に変わります。
ソリューションを表示して使用するには、[more_vert] アクション メニューをクリックして、[このソリューションを確認] を選択します。
ソリューションのデプロイメントを調べる方法については、デプロイメントを調べるをご覧ください。
このソリューションが不要になった場合は、デプロイメントを削除して、Google Cloud リソースに対する課金が継続しないようにします。詳細については、デプロイメントを削除するをご覧ください。
Terraform CLI を使用してデプロイする
このセクションでは、Terraform CLI を使用してソリューションをカスタマイズする方法や、ソリューションのプロビジョニングと管理を自動化する方法について説明します。Terraform CLI を使用してデプロイするソリューションは、Google Cloud コンソールの [ソリューションのデプロイ] ページに表示されません。
Terraform クライアントを設定する
Terraform は、Cloud Shell またはローカルホストで実行できます。このガイドでは、Terraform がプリインストールされ、Google Cloud での認証が構成されている Cloud Shell で Terraform を実行する方法について説明します。
このソリューションの Terraform コードは、GitHub リポジトリで入手できます。
Cloud Shell に GitHub リポジトリのクローンを作成します。
GitHub リポジトリを Cloud Shell にダウンロードするよう求めるメッセージが表示されます。
[確認] をクリックします。
別のブラウザタブで Cloud Shell が起動し、Cloud Shell 環境の
$HOME/cloudshell_open
ディレクトリに Terraform コードがダウンロードされます。Cloud Shell で、現在の作業ディレクトリが
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
かどうかを確認します。このディレクトリには、ソリューションの Terraform 構成ファイルが含まれています。このディレクトリに移動する必要がある場合は、次のコマンドを実行します。cd $HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
次のコマンドを実行して Terraform を初期化します。
terraform init
次のメッセージが表示されるまで待ちます。
Terraform has been successfully initialized!
Terraform 変数を構成する
ダウンロードした Terraform コードには、要件に基づいてデプロイメントをカスタマイズするために使用できる変数が含まれています。たとえば、Google Cloud プロジェクトと、ソリューションをデプロイするリージョンを指定できます。
現在の作業ディレクトリが
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
であることを確認します。そうでない場合は、そのディレクトリに移動します。同じディレクトリに、
terraform.tfvars
という名前のテキスト ファイルを作成します。terraform.tfvars
ファイルで次のコード スニペットをコピーし、必要な変数の値を設定します。- このコード スニペットにコメントとして記載されている手順を実施します。
- このコード スニペットには、値を設定する必要のある変数のみが含まれています。Terraform 構成には、デフォルト値を持つ他の変数が含まれています。すべての変数とデフォルト値を確認するには、
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
ディレクトリにあるvariables.tf
ファイルをご覧ください。 terraform.tfvars
ファイルで設定した各値が、variables.tf
ファイルで宣言されている変数の型と一致していることを確認します。たとえば、variables.tf
ファイル内の変数に定義されている型がbool
の場合、その変数の値としてtrue
またはfalse
をterraform.tfvars
内で指定する必要があります。
# ID of the project in which you want to deploy the solution. project_id = "PROJECT_ID" # Google Cloud region where you want to deploy the solution. # Example: us-central1 region = "REGION" # Whether or not to enable underlying APIs in this solution. # Example: true enable_apis = "ENABLE_APIS" # Initial image to deploy to Cloud Run service. # Example: gcr.io/hsa-public/developer-journey/app initial_run_image = "INITIAL_RUN_IMAGE" # Identifier for the deployment. Used in some resource names. # Example: dev-journey deployment_name = "DEPLOYMENT_NAME" # Whether or not to initialize a Firestore instance. # Example: true init_firestore = "INIT_FIRESTORE"
必要な変数に割り当てできる値については、以下をご覧ください。
project_id
: プロジェクトの識別。regions
: 利用可能なリージョン。enable_apis
: このソリューションの基盤となる API を有効にするには、true
に設定します。initial_run_image
: Cloud Run サービスにデプロイする最初のイメージの URL。deployment_name
: デプロイの ID。init_firestore
: Firestore インスタンスの初期化を有効にするには、true
に設定します。
Terraform 構成を検証して確認する
現在の作業ディレクトリが
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
であることを確認します。そうでない場合は、そのディレクトリに移動します。Terraform 構成にエラーがないことを確認します。
terraform validate
コマンドからエラーが返された場合は、構成で必要な修正を行ってから、
terraform validate
コマンドを再度実行します。コマンドで次のメッセージが返されるまで、この手順を繰り返します。Success! The configuration is valid.
構成で定義されているリソースを確認します。
terraform plan
Terraform でデフォルト値のない変数の値の入力を求められます。必要な値を入力します。
terraform plan
コマンドの出力に、構成の適用時に Terraform がプロビジョニングするリソースのリストが表示されます。変更を行う場合は、構成を編集してから、
terraform validate
コマンドとterraform plan
コマンドを再度実行します。
リソースをプロビジョニングする
構成にこれ以上の変更が必要ない場合は、リソースをデプロイします。
現在の作業ディレクトリが
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
であることを確認します。そうでない場合は、そのディレクトリに移動します。Terraform 構成を適用します。
terraform apply
Terraform でデフォルト値のない変数の値の入力を求められます。必要な値を入力します。
作成されるリソースのリストが表示されます。
アクションの実行を求められたら、「
yes
」と入力します。Terraform でデプロイの進行状況を示すメッセージが表示されます。
デプロイを完了できない場合、失敗の原因となったエラーが表示されます。エラー メッセージを確認し、構成を更新してエラーを修正します。次に、
terraform apply
コマンドを再実行します。Terraform のエラーのトラブルシューティングについては、Terraform CLI を使用してソリューションをデプロイする際のエラーをご覧ください。すべてのリソースが作成されると、Terraform から次のメッセージが表示されます。
Apply complete!
このソリューションが不要になった場合は、デプロイメントを削除して、Google Cloud リソースに対する課金が継続しないようにします。詳細については、デプロイメントを削除するをご覧ください。
デプロイを確認する
動的ウェブ アプリケーションのサンプルをデプロイしました。ソリューションのデプロイは、次のような単一の Google Cloud プロジェクトに統合されている複数の主要サービスで構成されています。
- Lit フレームワークを使用して記述された、Firebase Hosting クライアントのフロントエンド。
- Django REST Framework を使用して Django で記述された Cloud Run API サーバー。
- PostgreSQL を使用する Cloud SQL データベース。
デプロイされた Google Cloud リソースとその構成を確認するには、インタラクティブなツアーをご覧ください。
省略可: アプリケーションをカスタマイズする
Python および JavaScript ソリューションを使用した動的ウェブ アプリケーションをカスタマイズするには、アプリケーションのフロントエンドとバックエンドを変更してから、再デプロイします。このタスクを Cloud Shell エディタで直接行う際のガイダンスについては、「ガイドを表示」をクリックしてください。
このタスクが完了するまでに約 15 分かかります。
デプロイメントを削除する
ソリューションのデプロイメントが不要になった場合は、作成したリソースに対して課金されないようにするため、デプロイメントを削除します。
コンソールからデプロイメントを削除する
この手順は、ソリューションをコンソールからデプロイした場合に実施します。
Google Cloud コンソールで、[ソリューションのデプロイ] ページに移動します。
削除するデプロイメントが含まれているプロジェクトを選択します。
削除するデプロイメントを見つけます。
[アクション] をクリックして、[削除] を選択します。
デプロイメントの名前を入力し、[確認] をクリックします。
[ステータス] フィールドに「削除中」が表示されます。
削除に失敗した場合は、デプロイメントの削除時のエラーのトラブルシューティング ガイダンスをご覧ください。
ソリューションに使用した Google Cloud プロジェクトが不要になった場合は、プロジェクトを削除できます。詳細については、省略可: プロジェクトを削除するをご覧ください。
Terraform CLI を使用してデプロイメントを削除する
Terraform CLI を使用してソリューションをデプロイした場合は、この手順を使用します。
Cloud Shell で、現在の作業ディレクトリが
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
であることを確認します。そうでない場合は、そのディレクトリに移動します。Terraform によってプロビジョニングされたリソースを削除します。
terraform destroy
破棄されるリソースのリストが表示されます。
アクションの実行を求められたら、「
yes
」と入力します。進行状況を示すメッセージが表示されます。すべてのリソースが削除されると、次のメッセージが表示されます。
Destroy complete!
削除に失敗した場合は、デプロイメントの削除時のエラーのトラブルシューティング ガイダンスをご覧ください。
ソリューションに使用した Google Cloud プロジェクトが不要になった場合は、プロジェクトを削除できます。詳細については、省略可: プロジェクトを削除するをご覧ください。
省略可: プロジェクトを削除する
ソリューションを新しい Google Cloud プロジェクトにデプロイした後、そのプロジェクトが不要になった場合は、次の手順で削除します。
- Google Cloud コンソールで、[リソースの管理] ページに移動します。
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- プロンプトでプロジェクト ID を入力し、[シャットダウン] をクリックします。
プロジェクトを保持する場合は、次のセクションで説明するように、このソリューション用に作成されたサービス アカウントを削除します。
省略可: サービス アカウントを削除する
ソリューションに使用したプロジェクトを削除した場合は、このセクションをスキップしてください。
このガイドの前半で説明したように、ソリューションをデプロイしたときに、ユーザーに代わってサービス アカウントが作成されました。このサービス アカウントには特定の IAM 権限が一時的に割り当てられました。ソリューションのデプロイと削除オペレーションが完了した後、権限は自動的に取り消されましたが、サービス アカウントは削除されません。このサービス アカウントを削除することをおすすめします。
Google Cloud コンソールからソリューションをデプロイした場合は、[ソリューションのデプロイ] ページに移動します。(すでにページが表示されている場合は、ブラウザを更新します)。サービス アカウントが削除されるように、バックグラウンドでプロセスがトリガーされます。特に操作を行う必要はありません。
Terraform CLI を使用してソリューションをデプロイした場合は、次の手順を完了します。
Google Cloud コンソールで、[サービス アカウント] ページに移動します。
ソリューションに使用したプロジェクトを選択します。
削除するサービス アカウントを選択します。
ソリューション用に作成されたサービス アカウントのメール ID は、次の形式になります。
goog-sc-DEPLOYMENT_NAME-NNN@PROJECT_ID.iam.gserviceaccount.com
メール ID には次の値が含まれます。
- DEPLOYMENT_NAME: デプロイメントの名前。
- NNN: 3 桁のランダムな数字。
- PROJECT_ID: ソリューションをデプロイしたプロジェクトの ID。
[削除] をクリックします。
エラーのトラブルシューティングを行う
エラーを診断して解決するために実行できるアクションは、デプロイ方法とエラーの複雑さによって異なります。
コンソールからデプロイする際のエラー
コンソールを使用してデプロイが失敗した場合は、次の操作を行います。
[ソリューションのデプロイ] ページに移動します。
デプロイが失敗した場合、[ステータス] フィールドに「失敗」と表示されます。
エラーの原因となったエラーの詳細を表示するには:
[アクション] をクリックします。
[Cloud Build のログを表示する] を選択します。
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 を使用してデプロイメントを削除します。
デプロイメントの Terraform コード、ログ、その他のデータが保存されているリージョンを特定します。このリージョンは、ソリューションのデプロイ時に選択したリージョンとは異なる場合があります。
Google Cloud コンソールで、[ソリューションのデプロイ] ページに移動します。
削除するデプロイメントが含まれているプロジェクトを選択します。
デプロイメントのリストで、削除するデプロイメントの行を特定します。
「行の内容をすべて表示する」をクリックします。
[場所] 列で、次の例でハイライトされているように、2 番目の場所をメモします。
In the Google Cloud console, 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.
プロジェクト ID、リージョン、削除するデプロイメントの名前の環境変数を作成します。
export REGION="REGION" export PROJECT_ID="PROJECT_ID" export DEPLOYMENT_NAME="DEPLOYMENT_NAME"
これらのコマンドで、次のように置き換えます。
- REGION: この手順でメモした場所。
- PROJECT_ID: ソリューションをデプロイしたプロジェクトの ID。
- DEPLOYMENT_NAME: 削除するデプロイメントの名前。
削除するデプロイメントの最新リビジョンの 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
デプロイメントの 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
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
Terraform を初期化します。
terraform init
次のメッセージが表示されるまで待ちます。
Terraform has been successfully initialized!
デプロイされたリソースを削除します。
terraform destroy
破棄されるリソースのリストが表示されます。
宣言されていない変数に関する警告が表示された場合は、警告を無視してください。
アクションの実行を求められたら、「
yes
」と入力します。進行状況を示すメッセージが表示されます。すべてのリソースが削除されると、次のメッセージが表示されます。
Destroy complete!
デプロイメント アーティファクトを削除します。
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"
数秒待ってから、デプロイメント アーティファクトが削除されたことを確認します。
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
「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
コマンドを再度実行してください。
フィードバックを送信する
ジャンプ スタート ソリューションは情報提供のみを目的としており、正式にサポートされているプロダクトではありません。Google は、予告なくソリューションを変更または削除する場合があります。
エラーのトラブルシューティングを行うには、Cloud Build のログと Terraform の出力を確認します。
フィードバックを送信する場合は、次の操作を行います。
- ドキュメント、コンソール内チュートリアル、またはソリューションについては、このページの [フィードバックを送信] ボタンを使用してください。
コードが変更されていない場合は、適切な GitHub リポジトリで問題を作成します。
GitHub の問題はベスト エフォート ベースで審査されます。これは、一般的な使用に関する質問を目的としたものではありません。
- ソリューションで使用されているプロダクトに関する問題については、Cloud カスタマーケアにお問い合わせください。
次のステップ
Google Cloud のプロダクトと機能の詳細については、以下をご覧ください。