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

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

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

始める前に

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

  1. アプリケーションのセットアップ モデルを選択します。このクイックスタートでは、フォルダレベルのアプリケーション管理境界が定義されていることを前提として、フォルダの管理プロジェクトを使用してアプリケーションを作成します。このリソース構成の詳細については、App Hub リソースモデルをご覧ください。

  2. このドキュメント全体で使用する管理プロジェクトのプロジェクト ID をメモします。詳細については、プロジェクト名、番号、ID を確認するをご覧ください。

  3. 管理プロジェクトで次の API が有効になっていることを確認します。管理プロジェクトを設定すると、このクイックスタートに必要な API のほとんどが自動的に有効になります。

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

    API を有効にする

必要なロール

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

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

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

アプリケーションのサンプル コンポーネントをデプロイする

まず、一連のサンプル Google Cloud リソースをデプロイする必要があります。これらのリソースは、後で App Hub でグローバル アプリケーションを定義するために使用します。そのためには、これらのリソースをアプリケーション コンポーネントとして登録します。

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

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. アプリケーションのロケーションとして [グローバル] を選択します。

  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. 省略可: このクイックスタート用に新しいプロジェクトを作成した場合は、プロジェクトを削除します。

次のステップ