既存のリソースからアプリケーションを作成する
このクイックスタートでは、既存の Google Cloud サービスを App Hub アプリケーションに整理する方法について説明します。まず、サンプル構成をデプロイします。この構成を使用して、コンポーネントを App Hub にアプリケーションとして登録し、グローバル ウェブ アプリケーションを定義します。
このアプローチは、既存のインフラストラクチャを使用して、リソースを論理アプリケーションにグループ化することで可視性と運用制御を実現したいユーザーを対象としています。
始める前に
このクイックスタートを開始する前に、次の操作を行います。
このドキュメント全体で使用する管理プロジェクトのプロジェクト ID をメモします。
管理プロジェクトで次の API が有効になっていることを確認します。アプリ対応フォルダを構成すると、このクイックスタートに必要な API のほとんどが自動的に有効になります。
- Compute Engine API(
compute.googleapis.com
) - Infrastructure Manager API(
config.googleapis.com
)
- Compute Engine API(
必要なロール
必要な API を有効にして、既存のリソースからサンプル アプリケーションを作成するために必要な権限を取得するには、管理プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
必要な API を有効にする: Service Usage 管理者 (
roles/serviceusage.serviceUsageAdmin
) -
必要なサービスへのフルアクセス権を取得するには:
-
App Hub 管理者 (
roles/apphub.admin
) -
Cloud Run 管理者(
roles/run.admin
) -
Compute 管理者(
roles/compute.admin
) -
Cloud Infrastructure Manager 管理者 (
roles/config.admin
)
-
App Hub 管理者 (
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
アプリケーションのリソースをデプロイする
まず、App Hub でグローバル アプリケーションを定義するために後で使用するサンプル リソースのセットをデプロイする必要があります。
- アプリケーションのバックエンドとして機能する Cloud Run サービス。
- 転送ルールとして Cloud Run サービスにトラフィックを転送するグローバル外部アプリケーション ロードバランサ。
これらのリソースをデプロイする手順は次のとおりです。
gcloud
必要な環境変数を設定します。
export PROJECT_ID="PROJECT_ID" export REGION="REGION"
次のように置き換えます。
PROJECT_ID
: 管理プロジェクトの ID。REGION
: リソース用に選択したリージョン(us-central1
など)。
hello-run
という名前のサンプル Cloud Run サービスをデプロイします。gcloud run deploy hello-run \ --image=us-docker.pkg.dev/cloudrun/container/hello \ --allow-unauthenticated \ --region=${REGION} \ --project=${PROJECT_ID}
グローバル外部アプリケーション ロードバランサを作成します。このプロセスには、次のステップが含まれます。
hello-run-neg
というサーバーレス ネットワーク エンドポイント グループ(NEG)を作成します。gcloud compute network-endpoint-groups create hello-run-neg \ --region=${REGION} \ --network-endpoint-type=serverless \ --cloud-run-service=hello-run \ --project=${PROJECT_ID}
NEG はロードバランサのバックエンドとして機能し、
hello-run
サービスを指します。トラフィックが NEG に分散される方法を管理するバックエンド サービスを作成します。
gcloud compute backend-services create hello-backend-service \ --global \ --load-balancing-scheme=EXTERNAL_MANAGED \ --project=${PROJECT_ID}
サーバーレス NEG をバックエンドとしてバックエンド サービスに追加します。
gcloud compute backend-services add-backend hello-backend-service \ --global \ --network-endpoint-group=hello-run-neg \ --network-endpoint-group-region=${REGION} \ --project=${PROJECT_ID}
受信リクエストをバックエンド サービスに転送するための URL マップを作成します。
gcloud compute url-maps create hello-url-map \ --default-service=hello-backend-service \ --project=${PROJECT_ID}
リクエストを受信し、URL マップを使用してルーティングする HTTP プロキシを作成します。
gcloud compute target-http-proxies create hello-http-proxy \ --url-map=hello-url-map \ --project=${PROJECT_ID}
グローバル転送ルールを作成します。
gcloud compute forwarding-rules create hello-forwarding-rule \ --global \ --load-balancing-scheme=EXTERNAL_MANAGED \ --target-http-proxy=hello-http-proxy \ --ports=80 \ --project=${PROJECT_ID}
この転送ルールは、受信したユーザー リクエストを処理してプロキシに転送するためのパブリック IP アドレスとポートを提供します。
Terraform
main.tf
ファイルを作成し、次のコードを追加します。# Provider configuration provider "google" { project = "PROJECT_ID" } # Cloud Run service resource "google_cloud_run_v2_service" "default" { name = "hello-run" location = "REGION" template { containers { image = "us-docker.pkg.dev/cloudrun/container/hello" } } } # Allow unauthenticated access to the Cloud Run service resource "google_cloud_run_v2_service_iam_member" "noauth" { project = google_cloud_run_v2_service.default.project location = google_cloud_run_v2_service.default.location name = google_cloud_run_v2_service.default.name role = "roles/run.invoker" member = "allUsers" }
次のように置き換えます。
PROJECT_ID
: 管理プロジェクトの ID。REGION
: リソース用に選択したリージョン(us-central1
など)。
このブロックは Google Cloud プロバイダを定義し、サンプル
hello-world
コンテナ イメージを使用して一般公開の Cloud Run サービスを構成します。また、認証なしの呼び出しを許可する IAM ポリシー バインディングも含まれており、サービスが一般公開されます。main.tf
ファイルに次のコードを追加して、グローバル外部アプリケーション ロードバランサを作成します。# Serverless NEG for the Cloud Run service resource "google_compute_region_network_endpoint_group" "serverless_neg" { name = "hello-run-neg" network_endpoint_type = "SERVERLESS" region = "REGION" cloud_run { service = google_cloud_run_v2_service.default.name } } # Global external backend service resource "google_compute_backend_service" "default" { name = "hello-backend-service" protocol = "HTTP" load_balancing_scheme = "EXTERNAL_MANAGED" backend { group = google_compute_region_network_endpoint_group.serverless_neg.id } } # URL map to route requests to the backend service resource "google_compute_url_map" "default" { name = "hello-url-map" default_service = google_compute_backend_service.default.id } # HTTP proxy to route requests to the URL map resource "google_compute_target_http_proxy" "default" { name = "hello-http-proxy" url_map = google_compute_url_map.default.id } # Global forwarding rule to handle incoming requests resource "google_compute_global_forwarding_rule" "default" { name = "hello-forwarding-rule" target = google_compute_target_http_proxy.default.id port_range = "80" }
このブロックでは、次のコンポーネントを定義します。
- サーバーレス ネットワーク エンドポイント グループ(NEG)。ロードバランサのバックエンドとして機能し、Cloud Run サービスを指します。
- サーバーレス NEG にトラフィックを転送するバックエンド サービス。
- 受信リクエストをバックエンド サービスに転送する URL マップ。
- リクエストを受信し、URL マップを使用してルーティングする HTTP プロキシ。
- グローバル転送ルール。受信したユーザー リクエストを処理してプロキシに転送するためのパブリック IP アドレスとポートを提供します。
Terraform 構成を初期化して適用します。
terraform init terraform apply
Terraform は、リソースをプロジェクトにデプロイします。
App Hub でアプリケーションを定義する
リソースを転送ルールと Cloud Run サービスとしてデプロイしたら、次の手順に沿って App Hub のアプリケーションにグループ化します。
コンソール
App Hub の [アプリケーション] ページに移動します。
[アプリケーションを作成] をクリックします。
アプリケーションのロケーションとして [Global] を選択します。
[アプリケーション名] に「
my-global-app
」と入力し、[続行] をクリックします。必要に応じて、表示名、重要度、環境、所有者を追加します。
[作成] をクリックします。
[サービスとワークロード] タブで、[サービス / ワークロードを登録] をクリックします。
転送ルールを選択して
frontend-service
という名前を付け、[登録] をクリックします。Cloud Run サービスを選択し、
backend-service
という名前を付けて、[登録] をクリックします。
gcloud
アプリケーションを作成します。
gcloud apphub applications create my-global-app \ --location=global \ --display-name="My Global Application" \ --project=${PROJECT_ID}
適切なリージョンの転送ルールと Cloud Run サービスの ID を確認します。
gcloud apphub discovered-services list \ --location=global \ --project=${PROJECT_ID} gcloud apphub discovered-services list \ --location=${REGION} \ --project=${PROJECT_ID}
転送ルールと Cloud Run サービスの ID をメモします。
転送ルールをグローバル アプリケーションに登録します。
gcloud apphub applications services create frontend-service \ --application=my-global-app \ --discovered-service=projects/${PROJECT_ID}/locations/global/discoveredServices/FRONTEND_ID \ --display-name="Frontend Service" \ --location=global \ --project=${PROJECT_ID}
FRONTEND_ID
は、転送ルールの ID に置き換えます。Cloud Run サービスをグローバル アプリケーションに登録します。
gcloud apphub applications services create backend-service \ --application=my-global-app \ --discovered-service=projects/${PROJECT_ID}/locations/${REGION}/discoveredServices/BACKEND_ID \ --display-name="Backend Service" \ --location=global \ --project=${PROJECT_ID}
BACKEND_ID
は、Cloud Run サービスの ID に置き換えます。
Terraform
application.tf
ファイルを作成し、次のコードを追加します。# Application resource "google_apphub_application" "my_global_app" { project = "PROJECT_ID" location = "global" application_id = "my-global-app" display_name = "My Global Web App" description = "A sample global web application." scope { type = "GLOBAL" } attributes { criticality { type = "MEDIUM" } environment { type = "DEVELOPMENT" } business_owners { display_name = "Example Business Owner" email = "business-owner@example.com" } developer_owners { display_name = "Example Developer" email = "dev-owner@example.com" } operator_owners { display_name = "Example Operator" email = "operator-owner@example.com" } } }
このブロックは、
google_apphub_application
リソースを使用して、サービスとワークロードの論理グループを作成します。この例では、グローバル アプリケーションを作成し、重要度、環境、オーナーなどのガバナンスと検出可能性の属性を定義します。これらの値は、サンプル構成で変更できます。
次のコードを
application.tf
に追加して、デプロイされたリソースを検出します。# Discover the forwarding rule data "google_apphub_discovered_service" "frontend_service" { location = "global" service_uri = "//compute.googleapis.com/${google_compute_global_forwarding_rule.default.id}" } # Discover the Cloud Run service data "google_apphub_discovered_service" "backend_service" { location = "REGION" service_uri = "//run.googleapis.com/${google_cloud_run_v2_service.default.id}" }
google_apphub_discovered_service
データソースは、URI に基づいて既存のインフラストラクチャのリソース名を見つけます。この手順により、App Hub は登録する特定のリソースを識別できます。次のコードを
application.tf
に追加して、検出されたリソースを登録します。# Register the forwarding rule as a service in the application resource "google_apphub_service" "frontend" { project = "PROJECT_ID" location = "global" application_id = google_apphub_application.my_global_app.application_id service_id = "frontend-service" display_name = "Frontend Service (LB)" discovered_service = data.google_apphub_discovered_service.frontend_service.name } # Register the Cloud Run service as a service in the application resource "google_apphub_service" "backend" { project = "PROJECT_ID" location = "global" application_id = google_apphub_application.my_global_app.application_id service_id = "backend-service" display_name = "Backend Service (Cloud Run)" discovered_service = data.google_apphub_discovered_service.backend_service.name }
google_apphub_service
リソースは、検出されたリソースをアプリケーションに正式に登録します。この手順では、インフラストラクチャと App Hub で定義したアプリケーションの間にリンクを作成します。Terraform 構成を初期化して適用します。
terraform init terraform apply
Terraform は、App Hub の
my-global-app
アプリケーションにリソースを登録します。
省略可: 新しいアプリケーションをモニタリングする
App Hub でアプリケーションを定義したら、統合されたGoogle Cloud サービスを使用して、アプリケーションの健全性とパフォーマンスをモニタリングできます。
Cloud Hub で運用データを表示する:
Google Cloud コンソールで、Cloud Hub の [ホーム] ページに移動します。
アプリケーション セレクタで、
my-global-app
アプリケーションを選択します。このページには、アプリケーションの健全性の概要が表示されます。詳細については、Cloud Hub の概要をご覧ください。
アプリケーション モニタリングで詳細なダッシュボードを表示する:
-
Google Cloud コンソールで、[アプリケーションのモニタリング] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] である結果を選択します。
Google Cloud コンソールのプロジェクト選択ツールで、管理プロジェクトを選択します。
[アプリケーション モニタリング] ページに、アプリケーションの事前定義されたダッシュボードが表示されます。詳細については、アプリケーションの健全性とパフォーマンスをモニタリングするをご覧ください。
事前定義されたダッシュボードを使用してテレメトリー データを調べる方法の詳細な手順については、アプリケーションのテレメトリーを表示するをご覧ください。
クリーンアップ
このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、次の手順を実施します。
- サービスとワークロードの登録を解除する。
- グローバル アプリケーションを削除します。
- Terraform を使用してアプリケーションをデプロイした場合は、Terraform ファイルを含むディレクトリで
terraform destroy
を実行して、作成したすべてのリソースのプロビジョニングを解除します。 - 省略可: このクイックスタート用に新しいプロジェクトを作成した場合は、プロジェクトを削除します。