通过现有资源创建应用

本快速入门介绍了如何通过将现有 Google Cloud 资源注册为 服务,在 App Hub 应用中整理这些资源。 首先,您将部署示例组件,然后使用这些组件在 App Hub 中定义全球 Web 应用。

本快速入门面向希望通过将资源分组到 逻辑应用中,利用现有基础架构来 提高可见性和运营控制能力的用户。 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. 创建网址映射以将传入请求路由到后端服务:

      gcloud compute url-maps create hello-url-map \
          --default-service=hello-backend-service \
          --project=${PROJECT_ID}
      
    5. 创建 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 的后端服务。
    • 用于将传入请求路由到后端服务的网址映射。
    • 用于接收请求并使用网址映射路由这些请求的 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. 应用资源 标签页中,浏览基础架构资源,然后选中转发规则和 Cloud Run 服务的复选框。

  8. 点击继续

  9. 属性和所有者 标签页中,您可以为 应用添加 属性,例如重要性、环境和应用所有者。

    您可以选择为注册到应用的资源使用相同的属性和所有者 ,也可以稍后 定义这些属性和所有者

  10. 点击创建

创建应用后,应用 页面会显示其详细信息,包括您注册为服务的资源。

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 产品来监控应用的健康状况和性能:

  • 在 Cloud Hub 中查看运营数据

    1. 设置 Cloud Hub

    2. 在 Google Cloud 控制台中,前往 Cloud Hub 的首页

      前往主屏幕

    3. 从应用选择器中,选择 my-global-app 应用。 该页面会显示应用健康状况的摘要。如需了解更多 信息,请参阅Cloud Hub 概览

  • 在应用监控中查看详细信息中心

    1. 设置 Google Cloud Observability 来监控应用

    2. 在 Google Cloud 控制台中,前往 应用监控 页面:

      前往应用监控

      如果您使用搜索栏查找此页面,请选择子标题为监控 的结果。

    3. 从控制台的项目选择器中,选择管理项目。 Google Cloud

      应用监控 页面会显示应用的预定义信息中心。如需了解详情,请参阅 监控应用健康状况和性能

      如需详细了解如何使用预定义信息中心和 探索遥测数据,请参阅 查看应用遥测数据

清理

为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。

  1. 取消注册服务
  2. 删除全球应用
  3. 如果您使用 Terraform 部署了应用,请在包含 Terraform 文件的目录中运行 terraform destroy,以取消预配您创建的所有资源。
  4. 可选:如果您为此快速入门创建了新项目, 请删除该项目

后续步骤