既存のリソースからアプリケーションを作成する

このクイックスタートでは、既存の Google Cloud サービスを App Hub アプリケーションに整理する方法について説明します。まず、サンプル構成をデプロイします。この構成を使用して、コンポーネントを App Hub にアプリケーションとして登録し、グローバル ウェブ アプリケーションを定義します。

このアプローチは、既存のインフラストラクチャを使用して、リソースを論理アプリケーションにグループ化することで可視性と運用制御を実現したいユーザーを対象としています。

始める前に

このクイックスタートを開始する前に、次の操作を行います。

  1. アプリ管理用フォルダを使用して App Hub を設定します

  2. このドキュメント全体で使用する管理プロジェクトのプロジェクト ID をメモします。

  3. 管理プロジェクトで次の API が有効になっていることを確認します。アプリ対応フォルダを構成すると、このクイックスタートに必要な API のほとんどが自動的に有効になります。

    • Compute Engine API(compute.googleapis.com
    • Infrastructure Manager API(config.googleapis.com

    API を有効にする

必要なロール

必要な API を有効にして、既存のリソースからサンプル アプリケーションを作成するために必要な権限を取得するには、管理プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

アプリケーションのリソースをデプロイする

まず、App Hub でグローバル アプリケーションを定義するために後で使用するサンプル リソースのセットをデプロイする必要があります。

  • アプリケーションのバックエンドとして機能する Cloud Run サービス。
  • 転送ルールとして Cloud Run サービスにトラフィックを転送するグローバル外部アプリケーション ロードバランサ。

これらのリソースをデプロイする手順は次のとおりです。

gcloud

  1. 必要な環境変数を設定します。

    export PROJECT_ID="PROJECT_ID"
    export REGION="REGION"
    

    次のように置き換えます。

    • PROJECT_ID: 管理プロジェクトの ID。
    • REGION: リソース用に選択したリージョンus-central1 など)。
  2. hello-run という名前のサンプル Cloud Run サービスをデプロイします。

    gcloud run deploy hello-run \
        --image=us-docker.pkg.dev/cloudrun/container/hello \
        --allow-unauthenticated \
        --region=${REGION} \
        --project=${PROJECT_ID}
    
  3. グローバル外部アプリケーション ロードバランサを作成します。このプロセスには、次のステップが含まれます。

    1. 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 サービスを指します。

    2. トラフィックが NEG に分散される方法を管理するバックエンド サービスを作成します。

      gcloud compute backend-services create hello-backend-service \
          --global \
          --load-balancing-scheme=EXTERNAL_MANAGED \
          --project=${PROJECT_ID}
      
    3. サーバーレス 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}
      
    4. 受信リクエストをバックエンド サービスに転送するための URL マップを作成します。

      gcloud compute url-maps create hello-url-map \
          --default-service=hello-backend-service \
          --project=${PROJECT_ID}
      
    5. リクエストを受信し、URL マップを使用してルーティングする HTTP プロキシを作成します。

      gcloud compute target-http-proxies create hello-http-proxy \
          --url-map=hello-url-map \
          --project=${PROJECT_ID}
      
    6. グローバル転送ルールを作成します。

      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

  1. 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 ポリシー バインディングも含まれており、サービスが一般公開されます。

  2. 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 アドレスとポートを提供します。
  3. Terraform 構成を初期化して適用します。

    terraform init
    terraform apply
    

    Terraform は、リソースをプロジェクトにデプロイします。

App Hub でアプリケーションを定義する

リソースを転送ルールと Cloud Run サービスとしてデプロイしたら、次の手順に沿って App Hub のアプリケーションにグループ化します。

コンソール

  1. App Hub の [アプリケーション] ページに移動します。

    [アプリケーション] に移動

  2. [アプリケーションを作成] をクリックします。

  3. アプリケーションのロケーションとして [Global] を選択します。

  4. [アプリケーション名] に「my-global-app」と入力し、[続行] をクリックします。

  5. 必要に応じて、表示名、重要度、環境、所有者を追加します。

  6. [作成] をクリックします。

  7. [サービスとワークロード] タブで、[サービス / ワークロードを登録] をクリックします。

  8. 転送ルールを選択して frontend-service という名前を付け、[登録] をクリックします。

  9. Cloud Run サービスを選択し、backend-service という名前を付けて、[登録] をクリックします。

gcloud

  1. アプリケーションを作成します。

    gcloud apphub applications create my-global-app \
        --location=global \
        --display-name="My Global Application" \
        --project=${PROJECT_ID}
    
  2. 適切なリージョンの転送ルールと 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 をメモします。

  3. 転送ルールをグローバル アプリケーションに登録します。

    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 に置き換えます。

  4. 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

  1. 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 リソースを使用して、サービスとワークロードの論理グループを作成します。

    この例では、グローバル アプリケーションを作成し、重要度、環境、オーナーなどのガバナンスと検出可能性の属性を定義します。これらの値は、サンプル構成で変更できます。

  2. 次のコードを 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 は登録する特定のリソースを識別できます。

  3. 次のコードを 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 で定義したアプリケーションの間にリンクを作成します。

  4. Terraform 構成を初期化して適用します。

    terraform init
    terraform apply
    

    Terraform は、App Hub の my-global-app アプリケーションにリソースを登録します。

省略可: 新しいアプリケーションをモニタリングする

App Hub でアプリケーションを定義したら、統合されたGoogle Cloud サービスを使用して、アプリケーションの健全性とパフォーマンスをモニタリングできます。

クリーンアップ

このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、次の手順を実施します。

  1. サービスとワークロードの登録を解除する
  2. グローバル アプリケーションを削除します
  3. Terraform を使用してアプリケーションをデプロイした場合は、Terraform ファイルを含むディレクトリで terraform destroy を実行して、作成したすべてのリソースのプロビジョニングを解除します。
  4. 省略可: このクイックスタート用に新しいプロジェクトを作成した場合は、プロジェクトを削除します。

次のステップ