通过现有资源创建应用

本快速入门介绍了如何通过将现有 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 应用中,方法是将它们注册为应用'的 服务