通过现有资源创建应用
本快速入门介绍了如何通过将现有 Google Cloud 资源注册为 服务,在 App Hub 应用中整理这些资源。 首先,您将部署示例组件,然后使用这些组件在 App Hub 中定义全球 Web 应用。
本快速入门面向希望通过将资源分组到 逻辑应用中,利用现有基础架构来 提高可见性和运营控制能力的用户。 Google Cloud
准备工作
在开始本快速入门之前,请执行以下操作:
选择应用设置模型。本 快速入门假定您已定义应用管理边界并 使用 管理项目创建应用。 如需详细了解此资源配置,请参阅 App Hub 资源模型。
记下管理项目的项目 ID,以便在本文档中使用。如需了解详情,请参阅 查找项目名称、编号和 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 (
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
为应用部署示例组件
您必须先部署一组示例 Google Cloud 资源,稍后您将通过将这些资源注册为 应用组件,在 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 applyTerraform 会将资源部署到您的项目。
在 App Hub 中定义应用
将资源部署为转发规则和 Cloud Run 服务后,请按照以下步骤将它们分组到 App Hub 应用中,方法是将它们注册为应用'的 服务: