En este tutorial se explica cómo crear un endpoint HTTP interno en una red de nube privada virtual (VPC) que recibe eventos de mensajes de Pub/Sub mediante Eventarc. Para obtener más información sobre este destino de eventos, consulta Dirigir eventos a un endpoint HTTP interno en una red de VPC.
Puedes ejecutar los siguientes comandos con la CLI de Google Cloud en tu terminal o en Cloud Shell.
Objetivos
En este tutorial, aprenderás a hacer lo siguiente:
- Crea una red VPC para proporcionar redes a tus recursos y servicios basados en la nube. Una red de VPC está aislada lógicamente de otras redes en Google Cloud.
- Crea una subred. Cada red de VPC consta de uno o varios intervalos de direcciones IP denominados subredes. Las subredes son recursos regionales y tienen intervalos de direcciones IP asociados.
- Crea reglas de cortafuegos de VPC para permitir o denegar el tráfico hacia o desde las instancias de máquina virtual de tu red de VPC.
- Crea un acoplamiento de red que permita que una red de VPC de productor inicie conexiones con una red de VPC de consumidor.
- Crea una instancia de VM de Compute Engine en la red VPC.
- Despliega un servidor web como servicio de receptor de eventos en tu instancia de VM.
- Crea un activador de Eventarc que enrute eventos de Pub/Sub al receptor de eventos de tu instancia de VM.
- Establece una conexión SSH con la instancia de VM.
- Publica un mensaje en un tema de Pub/Sub para generar un evento y consulta el cuerpo del evento en la herramienta SSH en el navegador.
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que has creado. Para obtener más información, consulta la sección Limpiar.
Antes de empezar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, Eventarc, and Pub/Sub APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.gcloud services enable compute.googleapis.com
eventarc.googleapis.com pubsub.googleapis.com -
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, Eventarc, and Pub/Sub APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.gcloud services enable compute.googleapis.com
eventarc.googleapis.com pubsub.googleapis.com - Actualiza los componentes de Google Cloud CLI:
gcloud components update
- Inicia sesión con tu cuenta:
gcloud auth login
- Define las variables de configuración que se usan en esta guía de inicio rápido:
REGION=us-central1 ZONE=us-central1-a
-
Si has creado el proyecto, se te asignará el rol básico Propietario (
roles/owner
). De forma predeterminada, este rol de gestión de identidades y accesos (IAM) incluye los permisos necesarios para acceder por completo a la mayoría de los recursos Google Cloud, por lo que puedes saltarte este paso.Si no eres el creador del proyecto, debes conceder los permisos necesarios al principal correspondiente. Por ejemplo, una entidad principal puede ser una cuenta de Google (para usuarios finales) o una cuenta de servicio (para aplicaciones y cargas de trabajo de computación). Para obtener más información, consulta la página Roles y permisos de tu destino de evento.
Permisos obligatorios
Para obtener los permisos que necesitas para completar esta guía de inicio rápido, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en tu proyecto:
-
Administrador de red de Compute (
roles/compute.networkAdmin
) -
Administrador de seguridad de Compute (
roles/compute.securityAdmin
) -
Administrador de Eventarc (
roles/eventarc.admin
) -
Usuario con permiso para ver registros (
roles/logging.viewAccessor
) -
Administrador de gestión de identidades y accesos del proyecto (
roles/resourcemanager.projectIamAdmin
) -
Editor de Pub/Sub (
roles/pubsub.publisher
) -
Administrador de cuentas de servicio (
roles/iam.serviceAccountAdmin
) -
Usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) -
Administrador de Uso de Servicio (
roles/serviceusage.serviceUsageAdmin
)
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
-
Administrador de red de Compute (
- Si habilitaste el agente de servicio de Cloud Pub/Sub el 8 de abril del 2021 o antes para admitir solicitudes push de Pub/Sub autenticadas, asigna el rol Creador de tokens de cuenta de servicio (
roles/iam.serviceAccountTokenCreator
) al agente de servicio. De lo contrario, este rol se asigna de forma predeterminada: Sustituye lo siguiente:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
PROJECT_ID
: tu ID de proyecto Google CloudPROJECT_NUMBER
: el número de tu proyecto Google Cloud . Puedes encontrar el número de tu proyecto en la página Bienvenido de la consola Google Cloud o ejecutando el siguiente comando:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
- Cada red que cree debe tener un nombre único en el mismo proyecto.
- El modo de enrutamiento
Border Gateway Protocol (BGP) controla el comportamiento de los routers de Cloud Router en la red y puede ser
global
oregional
. El valor predeterminado esregional
. - La unidad máxima de transmisión (MTU) es el tamaño de paquete más grande de la red.
El valor de MTU puede ser cualquiera entre
1300
y8896
. El valor predeterminado es1460
. Antes de definir la MTU con un valor superior a1460
, consulta Unidad máxima de transmisión. Crea una regla de cortafuegos para tu red de VPC que permita el tráfico entrante de cualquier dirección IPv4 (
0.0.0.0/0
) a cualquier instancia de la red mediante el puerto 22. Esta regla no es obligatoria para la entrega de eventos. Sin embargo, para este tutorial, crea la regla de forma que puedas conectarte a la VM mediante SSH y confirmar la entrega del evento:gcloud compute firewall-rules create RULE_NAME_ONE \ --network=projects/PROJECT_ID/global/networks/NETWORK_NAME \ --direction=INGRESS \ --priority=65534 \ --action=ALLOW \ --source-ranges=0.0.0.0/0 \ --rules=tcp:22
Crea una regla de cortafuegos para tu red de VPC que permita el tráfico entrante desde un intervalo de direcciones IP específico a cualquier instancia de la red mediante el puerto 80 (ya que vas a implementar un servidor web en tu VM que escucha en el puerto 80):
gcloud compute firewall-rules create RULE_NAME_TWO \ --network=projects/PROJECT_ID/global/networks/NETWORK_NAME \ --direction=INGRESS \ --priority=1000 \ --action=ALLOW \ --source-ranges=10.10.10.0/24 \ --rules=tcp:80
Sustituye
RULE_NAME_ONE
yRULE_NAME_TWO
por nombres únicos para tus reglas de firewall.Ten en cuenta que el uso de
--source-ranges
es opcional e indica una lista de bloques de direcciones IP que pueden establecer conexiones entrantes que coincidan con la regla de cortafuegos a las instancias de la red. En este caso, el intervalo coincide con el intervalo usado en la subred que has creado anteriormente.Te recomendamos que uses la marca para aplicar la regla de firewall específicamente al tráfico de Eventarc. Si no se especifica ni
--source-ranges
ni--source-tags
,--source-ranges
tiene el valor predeterminado0.0.0.0/0
, lo que significa que la regla se aplica a todas las conexiones IPv4 entrantes desde dentro o fuera de la red.Establece una conexión SSH con tu instancia de VM mediante el botón SSH de la consola Google Cloud para conectarte a tu VM.
Una vez que se haya establecido una conexión con el servidor SSH, usa la terminal SSH en el navegador para ejecutar comandos en tu instancia de VM.
En el terminal SSH en el navegador, crea un archivo de texto con el nombre
server.py
que contenga el siguiente código de Python:Inicia el servidor y mantenlo en funcionamiento durante los pasos restantes de este tutorial:
sudo python3 server.py
Busca y define el tema de Pub/Sub como variable de entorno:
export MY_TOPIC=$(gcloud eventarc triggers describe TRIGGER_NAME \ --location=$REGION \ --format='value(transport.pubsub.topic)')
Publica un mensaje en el tema de Pub/Sub para generar un evento:
gcloud pubsub topics publish $MY_TOPIC --message "Hello World"
El activador de Eventarc enruta el evento al endpoint HTTP interno de tu red VPC. En la terminal SSH en el navegador, se muestra el cuerpo del evento. Debería ser similar a lo siguiente:
Body: { "message": { "data": "SGVsbG8gV29ybGQ=", "messageId": "8795720366614192", "publishTime": "2023-08-26T13:09:48Z" } } 10.10.10.3 - - [26/Aug/2023 13:09:49] "POST / HTTP/1.1" 200 -
Ten en cuenta que, si decodificas el valor
data
deSGVsbG8gV29ybGQ=
de su formato Base64, se devuelve "Hello World".- Elimina el activador de Eventarc:
gcloud eventarc triggers delete TRIGGER_NAME --location=$REGION
-
Elimina la instancia:
gcloud compute instances delete INSTANCE_NAME
- Elimina el archivo adjunto de la red:
gcloud compute network-attachments delete ATTACHMENT_NAME --region=$REGION
- Elimina las reglas de cortafuegos:
gcloud compute firewall-rules delete RULE_NAME_ONE gcloud compute firewall-rules delete RULE_NAME_TWO
- Elimina la subred:
gcloud compute networks subnets delete SUBNET_NAME --region=$REGION
- Elimina la red de VPC:
gcloud compute networks delete NETWORK_NAME
Crear una red VPC en modo personalizado
Una red de VPC es una versión virtual de una red física que se implementa en la red de producción de Google. Proporciona conectividad a las instancias de máquina virtual de Compute Engine.
Cuando se crea una red VPC en modo personalizado, no se crea ninguna subred automáticamente. Este tipo de red te ofrece un control total sobre sus subredes e intervalos de IP.
gcloud compute networks create NETWORK_NAME \ --subnet-mode=custom \ --bgp-routing-mode=regional \ --mtu=1460
Sustituye NETWORK_NAME
por el nombre de la red VPC.
Ten en cuenta lo siguiente:
Para obtener más información, consulta Crear y gestionar redes de VPC.
Crear una subred solo IPv4
Una red debe tener al menos una subred para poder usarla.
Cuando creas una subred, le asignas un nombre, una región y al menos un intervalo de direcciones IPv4 principal de acuerdo con las reglas de las subredes. Ten en cuenta que no puedes crear instancias en una región que no tenga ninguna subred definida.
gcloud compute networks subnets create SUBNET_NAME \ --region=$REGION \ --network=NETWORK_NAME \ --range=10.10.10.0/24
Sustituye SUBNET_NAME
por el nombre de la nueva subred.
Para obtener más información, consulta Subredes.
Crear reglas de cortafuegos de VPC
Las reglas de cortafuegos de VPC te permiten permitir o denegar el tráfico entre recursos de una red de VPC en función del número de puerto, la etiqueta o el protocolo.
Las reglas de cortafuegos de VPC se definen a nivel de red y solo se aplican a la red en la que se crean. Sin embargo, el nombre que elijas para una regla debe ser único en el proyecto.
Para obtener más información, consulta Usar reglas de cortafuegos de VPC.
Crear un archivo adjunto de red
Una vinculación de red es un recurso que permite que una red de VPC de un productor inicie conexiones con una red de VPC de un consumidor a través de una interfaz de Private Service Connect.
Para publicar eventos, Eventarc usa el archivo adjunto de red para establecer una conexión con el endpoint HTTP interno alojado en una red VPC.
Puedes crear una vinculación de red que acepte automáticamente las conexiones de cualquier interfaz de Private Service Connect que haga referencia a la vinculación de red. Crea el adjunto de red en la misma red y región que contenga el servicio de destino HTTP.
gcloud compute network-attachments create ATTACHMENT_NAME \ --region=$REGION \ --subnets=SUBNET_NAME \ --connection-preference=ACCEPT_AUTOMATIC
Sustituye ATTACHMENT_NAME
por el nombre de la conexión de red.
Para obtener más información, consulta Acerca de los archivos adjuntos de red.
Crear una instancia de VM en una subred específica
Una instancia de VM de Compute Engine es una máquina virtual alojada en la infraestructura de Google. Los términos instancia de Compute Engine, instancia de VM y VM son sinónimos y se usan indistintamente. Las instancias de máquina virtual incluyen clústeres de Google Kubernetes Engine (GKE), instancias del entorno flexible de App Engine y otros Google Cloud productos creados en máquinas virtuales de Compute Engine.
Crea una instancia de VM de Compute Engine en la red de VPC en la que puedas desplegar un servicio de receptor de eventos.
gcloud compute instances create INSTANCE_NAME \ --zone=$ZONE \ --machine-type=e2-medium \ --subnet=SUBNET_NAME
Sustituye INSTANCE_NAME
por el nombre de la VM.
Para obtener más información, consulta Crear e iniciar una instancia de VM.
Desplegar un receptor de eventos en la VM
Implementa un servidor web en tu VM que escuche en el puerto 80 y reciba y registre eventos.
Crear un activador de Eventarc
Crea un activador de Eventarc que cree un tema de Pub/Sub y enrute los eventos al receptor de eventos desplegado en la VM cuando se publique un mensaje en el tema de Pub/Sub.
Después de habilitar la API Compute Engine, la cuenta de servicio predeterminada es la cuenta de servicio predeterminada de Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com
).
Para hacer pruebas, el activador usa esta cuenta de servicio predeterminada para su identidad.
gcloud eventarc triggers create TRIGGER_NAME \ --location=$REGION \ --destination-http-endpoint-uri=http://INSTANCE_NAME.$ZONE.c.PROJECT_ID.internal \ --network-attachment="projects/PROJECT_ID/regions/$REGION/networkAttachments/ATTACHMENT_NAME" \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Sustituye PROJECT_NUMBER
por el número de tu proyecto. Google Cloud
Puedes encontrar el número de tu proyecto en la página Bienvenido de la consola Google Cloud o ejecutando el siguiente comando:
gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Para obtener más información sobre cómo configurar el activador, consulta Dirigir eventos a un endpoint HTTP interno en una red de VPC.
Generar y ver un evento de tema de Pub/Sub
Puedes generar un evento publicando un mensaje en un tema de Pub/Sub.
Has desplegado correctamente un servicio de receptor de eventos en un endpoint HTTP interno de una red VPC, has creado un activador de Eventarc, has generado un evento desde Pub/Sub y has confirmado que el activador ha dirigido el evento al endpoint de destino según lo previsto.
Limpieza
Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.
Eliminar el proyecto
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID