Crear una aplicación a partir de recursos que ya tienes
En esta guía de inicio rápido se muestra cómo organizar los servicios de Google Cloud en una aplicación de App Hub. Primero, despliega una configuración de ejemplo que usarás para definir una aplicación web global registrando sus componentes como una aplicación en App Hub.
Este enfoque está dirigido a los usuarios que quieren usar su infraestructura para obtener visibilidad y control operativo agrupando los recursos en aplicaciones lógicas.
Antes de empezar
Antes de empezar esta guía de inicio rápido, haz lo siguiente:
Configura el menú de aplicaciones con una carpeta habilitada para aplicaciones.
Google CloudAnota el ID del proyecto de gestión que vas a usar en este documento.
Comprueba que las siguientes APIs estén habilitadas en el proyecto de gestión. Cuando configuras una carpeta habilitada para aplicaciones, la mayoría de las APIs que necesitas para esta guía de inicio rápido se habilitan automáticamente.
- API de Compute Engine (
compute.googleapis.com
) - API Infrastructure Manager (
config.googleapis.com
)
- API de Compute Engine (
Roles obligatorios
Para obtener los permisos que necesitas para habilitar las APIs obligatorias y crear una aplicación de ejemplo a partir de recursos ya creados, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en el proyecto de gestión:
-
Para habilitar las APIs necesarias, sigue estos pasos:
Administrador de Uso de Servicio (
roles/serviceusage.serviceUsageAdmin
) -
Para obtener acceso completo a los servicios necesarios, sigue estos pasos:
-
Administrador de App Hub (
roles/apphub.admin
) -
Administrador de Cloud Run (
roles/run.admin
) -
Administrador de Compute (
roles/compute.admin
) -
Administrador de Cloud Infrastructure Manager (
roles/config.admin
)
-
Administrador de App Hub (
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Desplegar recursos para la aplicación
Primero debes implementar un conjunto de recursos de ejemplo que usarás más adelante para definir una aplicación global en App Hub:
- Un servicio de Cloud Run que actúa como backend de la aplicación.
- Un balanceador de carga de aplicación externo global que dirige el tráfico al servicio de Cloud Run como regla de reenvío.
Para implementar estos recursos, sigue estos pasos:
gcloud
Define las variables de entorno necesarias:
export PROJECT_ID="PROJECT_ID" export REGION="REGION"
Haz los cambios siguientes:
PROJECT_ID
: el ID de tu proyecto de gestión.REGION
: la región que hayas elegido para los recursos (por ejemplo,us-central1
).
Despliega un servicio de Cloud Run de ejemplo llamado
hello-run
:gcloud run deploy hello-run \ --image=us-docker.pkg.dev/cloudrun/container/hello \ --allow-unauthenticated \ --region=${REGION} \ --project=${PROJECT_ID}
Crea el balanceador de carga de aplicación externo global. Este proceso implica los siguientes pasos:
Crea un grupo de endpoints de red (NEG) sin servidor llamado
hello-run-neg
:gcloud compute network-endpoint-groups create hello-run-neg \ --region=${REGION} \ --network-endpoint-type=serverless \ --cloud-run-service=hello-run \ --project=${PROJECT_ID}
La NEG actúa como backend del balanceador de carga y apunta a tu servicio
hello-run
.Crea un servicio de backend para gestionar cómo se distribuye el tráfico a la NEG:
gcloud compute backend-services create hello-backend-service \ --global \ --load-balancing-scheme=EXTERNAL_MANAGED \ --project=${PROJECT_ID}
Añade el NEG sin servidor como backend al servicio de backend:
gcloud compute backend-services add-backend hello-backend-service \ --global \ --network-endpoint-group=hello-run-neg \ --network-endpoint-group-region=${REGION} \ --project=${PROJECT_ID}
Crea un mapa de URLs para enrutar las solicitudes entrantes al servicio de backend:
gcloud compute url-maps create hello-url-map \ --default-service=hello-backend-service \ --project=${PROJECT_ID}
Crea un proxy HTTP para recibir solicitudes y enrutarlas mediante el mapa de URLs:
gcloud compute target-http-proxies create hello-http-proxy \ --url-map=hello-url-map \ --project=${PROJECT_ID}
Crea una regla de reenvío global:
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}
Esta regla de reenvío proporciona una dirección IP pública y un puerto para gestionar las solicitudes de los usuarios entrantes y las dirige al proxy.
Terraform
Crea un archivo
main.tf
y añade el siguiente código:# 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" }
Haz los cambios siguientes:
PROJECT_ID
: el ID de tu proyecto de gestión.REGION
: la región que hayas elegido para los recursos (por ejemplo,us-central1
).
Este bloque define el Google Cloud proveedor y configura un servicio de Cloud Run público mediante una imagen de contenedor
hello-world
de ejemplo. También incluye un enlace de política de gestión de identidades y accesos para permitir las invocaciones sin autenticar, lo que hace que el servicio sea accesible públicamente.Añade el siguiente código a tu archivo
main.tf
para crear el balanceador de carga de aplicación externo global:# 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" }
Este bloque define los siguientes componentes:
- Un grupo de endpoints de red (NEG) sin servidor, que actúa como backend del balanceador de carga y apunta al servicio de Cloud Run.
- Un servicio de backend que dirige el tráfico al NEG sin servidor.
- Un mapa de URLs para enrutar las solicitudes entrantes al servicio de backend.
- Un proxy HTTP para recibir solicitudes y enrutarlas mediante el mapa de URLs.
- Una regla de reenvío global, que proporciona una dirección IP pública y un puerto para gestionar las solicitudes de los usuarios entrantes y dirigirlas al proxy.
Inicializa y aplica la configuración de Terraform:
terraform init terraform apply
Terraform desplegará los recursos en tu proyecto.
Definir la aplicación en App Hub
Después de desplegar los recursos como una regla de reenvío y un servicio de Cloud Run, sigue estos pasos para agruparlos en una aplicación en App Hub:
Consola
Ve a la página Aplicaciones desde el Centro de aplicaciones:
Haz clic en Crear aplicación.
Selecciona Global como ubicación de la aplicación.
Introduce
my-global-app
en el campo Nombre de la aplicación y haz clic en Continuar.También puedes añadir un nombre visible, una criticidad, un entorno y propietarios.
Haz clic en Crear.
En la pestaña Servicios y cargas de trabajo, haga clic en Registrar servicio o carga de trabajo.
Selecciona la regla de reenvío, asígnale el nombre
frontend-service
y haz clic en Registrar.Selecciona el servicio de Cloud Run, asígnale el nombre
backend-service
y haz clic en Registrar.
gcloud
Crea la aplicación:
gcloud apphub applications create my-global-app \ --location=global \ --display-name="My Global Application" \ --project=${PROJECT_ID}
Descubre los IDs de la regla de reenvío y del servicio de Cloud Run en la región correspondiente:
gcloud apphub discovered-services list \ --location=global \ --project=${PROJECT_ID} gcloud apphub discovered-services list \ --location=${REGION} \ --project=${PROJECT_ID}
Anota el ID de la regla de reenvío y del servicio de Cloud Run.
Registra la regla de reenvío en la aplicación global:
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}
Sustituye
FRONTEND_ID
por el ID de la regla de reenvío.Registra el servicio de Cloud Run en la aplicación global:
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}
Sustituye
BACKEND_ID
por el ID del servicio de Cloud Run.
Terraform
Crea un archivo
application.tf
y añade el siguiente código:# 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" } } }
Este bloque usa el recurso
google_apphub_application
para crear una agrupación lógica de tus servicios y cargas de trabajo.En este ejemplo, se crea una aplicación global y se definen atributos de gobernanza y visibilidad, como la importancia, el entorno y los propietarios. Puede modificar esos valores en su configuración de ejemplo.
Añade el siguiente código a
application.tf
para descubrir los recursos que has implementado:# 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}" }
Las fuentes de datos
google_apphub_discovered_service
buscan los nombres de recursos de tu infraestructura en función de sus URIs. Este paso permite que App Hub identifique los recursos específicos que quieres registrar.Añade el siguiente código a
application.tf
para registrar los recursos descubiertos:# 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 }
Los recursos de
google_apphub_service
registran formalmente los recursos descubiertos en tu aplicación. En este paso se crea el enlace entre tu infraestructura y la aplicación que has definido en App Hub.Inicializa y aplica la configuración de Terraform:
terraform init terraform apply
Terraform registra los recursos en tu aplicación
my-global-app
en App Hub.
Opcional: Monitorizar la nueva aplicación
Después de definir tu aplicación en App Hub, puedes usar los servicios integrados deGoogle Cloud para monitorizar su estado y rendimiento:
Ver datos operativos en Cloud Hub:
En la Google Cloud consola, ve a la página Inicio de Cloud Hub.
En el selector de aplicaciones, elige tu aplicación
my-global-app
. En la página se muestra un resumen del estado de tu aplicación. Para obtener más información, consulta la descripción general de Cloud Hub.
Ver paneles detallados en Monitorización de aplicaciones:
Configura Google Cloud Observability para monitorizar aplicaciones.
-
En la consola, ve a la página Monitorización de aplicaciones: Google Cloud
Ir a Monitorización de aplicaciones
Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuya sección sea Monitorización.
En el selector de proyectos de la Google Cloud consola, selecciona el proyecto de gestión.
En la página Monitorización de aplicaciones se muestran los paneles predefinidos de tu aplicación. Para obtener más información, consulta el artículo Monitorizar el estado y el rendimiento de las aplicaciones.
Para obtener instrucciones detalladas sobre cómo usar los paneles predefinidos y explorar los datos de telemetría, consulta Ver telemetría de aplicaciones.
Limpieza
Para evitar que se apliquen cargos en tu cuenta de Google Cloud por los recursos utilizados en esta página, sigue estos pasos.
- Anular el registro de servicios y cargas de trabajo.
- Elimina la aplicación global.
- Si has usado Terraform para implementar tu aplicación, ejecuta
terraform destroy
en el directorio que contiene tus archivos de Terraform para desaprovisionar todos los recursos que hayas creado. - Opcional: Si has creado un proyecto para esta guía de inicio rápido, elimínalo.