基于现有资源创建应用
本快速入门介绍了如何将现有 Google Cloud 服务整理到 App Hub 应用中。首先,您需要部署一个示例配置,然后通过在 App Hub 中将该配置的组件注册为应用,来使用该配置定义一个全局 Web 应用。
此方法适用于希望通过将资源分组到逻辑应用中来获得可见性和运营控制权的用户。
准备工作
在开始本快速入门之前,请执行以下操作:
记下管理项目的项目 ID,以便在本文档中全程使用。
验证管理项目中是否已启用以下 API。配置启用应用功能的文件夹时,本快速入门所需的大部分 API 会自动启用。
- Compute Engine API (
compute.googleapis.com
) - Infrastructure Manager API (
config.googleapis.com
)
- Compute Engine API (
所需的角色
如需获得启用必需 API 和从现有资源创建示例应用所需的权限,请让管理员向您授予管理项目的以下 IAM 角色:
-
如需启用必需的 API,请执行以下操作:
Service Usage Admin (
roles/serviceusage.serviceUsageAdmin
) -
如需完全访问所需的服务,请执行以下操作:
-
App Hub Admin (
roles/apphub.admin
) -
Cloud Run Admin (
roles/run.admin
) -
Compute Admin (
roles/compute.admin
) -
Cloud Infrastructure Manager Admin (
roles/config.admin
)
-
App Hub Admin (
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
为应用部署资源
您必须先部署一组示例资源,以便稍后在 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}
创建网址映射以将传入请求路由到相应后端服务:
gcloud compute url-maps create hello-url-map \ --default-service=hello-backend-service \ --project=${PROJECT_ID}
创建一个 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 的后端服务。
- 用于将传入请求路由到后端服务的 网址映射。
- 一个 HTTP 代理,用于接收请求并使用网址映射路由这些请求。
- 全局转发规则,用于提供公共 IP 地址和端口来处理传入的用户请求,并将这些请求定向到代理。
初始化并应用 Terraform 配置:
terraform init terraform apply
Terraform 会将资源部署到您的项目中。
在 App Hub 中定义应用
将资源部署为转发规则和 Cloud Run 服务后,请按照以下步骤将其分组到 App Hub 中的应用:
控制台
通过 App Hub 前往应用页面:
点击创建应用。
选择全球作为应用位置。
为应用名称输入
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 控制台中,前往应用监控页面:
如果您使用搜索栏查找此页面,请选择子标题为监控的结果。
在 Google Cloud 控制台的项目选择器中,选择管理项目。
系统会显示应用监控页面,其中包含应用的预定义信息中心。如需了解详情,请参阅监控应用健康状况和性能。
如需详细了解如何使用预定义的信息中心和探索遥测数据,请参阅查看应用遥测数据。
清理
为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。
- 取消注册服务和工作负载。
- 删除全局应用。
- 如果您使用 Terraform 部署了应用,请在包含 Terraform 文件的目录中运行
terraform destroy
,以取消预配您创建的所有资源。 - 可选:如果您为此快速入门创建了新项目,请删除该项目。