Recibe eventos personalizados

Obtén información para generar eventos personalizados mediante la herramienta de línea de comandos de curl y, luego, enviar esos eventos a un servicio en Cloud Run for Anthos en Google Cloud.

Antes de comenzar

Para completar esta tarea, debes tener un agente de eventos y saber en qué espacio de nombres se ejecuta. Obtén más información sobre cómo configurar eventos para Cloud Run for Anthos y crear un agente de eventos.

Si tienes un agente de eventos en ejecución, puedes ver el espacio de nombres de Kubernetes si ejecutas este comando:

kubectl get brokers -n NAMESPACE

Implementa un servicio receptor de eventos de Cloud Run for Anthos en Google Cloud

Implementa un servicio de Cloud Run for Anthos en Google Cloud que reciba eventos del agente de eventos.

Para implementar el servicio de Cloud Run for Anthos en Google Cloud, haz lo siguiente:

  1. Clona el repositorio:

    Python

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    cd python-docs-samples/eventarc/audit-storage
    

    Java

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    cd java-docs-samples/eventarc/audit-storage
    

    Go

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git
    cd golang-samples/eventarc/audit_storage
    

    Node.js

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
    cd nodejs-docs-samples/eventarc/audit-storage
    

    C#

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
    cd dotnet-docs-samples/eventarc/audit-storage
    
  2. Compila el contenedor y súbelo a Cloud Build:

    gcloud builds submit \
      --tag gcr.io/$(gcloud config get-value project)/CLOUD_RUN_CONTAINER_NAME
    
  3. Implementa la imagen de contenedor en Cloud Run for Anthos en Google Cloud:

    gcloud run deploy CLOUD_RUN_SERVICE_NAME \
        --namespace=NAMESPACE \
        --image gcr.io/$(gcloud config get-value project)/CLOUD_RUN_CONTAINER_NAME
    

Si ves la URL del servicio, este se implementó de forma correcta.

Genera eventos mediante cURL

Puedes usar curl en ejecución en un Pod de Google Kubernetes Engine para generar eventos:

  1. Crea un Pod de Google Kubernetes Engine en el espacio de nombres de tu agente de eventos:

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        run: curl
      name: curl
      namespace: NAMESPACE
    spec:
      containers:
      - image: radial/busyboxplus:curl
        imagePullPolicy: IfNotPresent
        name: curl
        stdin: true
        tty: true
    EOF
    

    En el ejemplo anterior, NAMESPACE es el mismo espacio de nombres que el agente de eventos.

  2. Ejecuta el siguiente comando para verificar que el Pod funcione de forma correcta:

    kubectl get pod curl -n NAMESPACE
    

    En el ejemplo anterior, NAMESPACE es el mismo espacio de nombres que el agente de eventos.

    Verás un Pod llamado “curl” en funcionamiento (Estado=En ejecución).

Crea un activador para tu agente de eventos

  1. Crea un activador con filtro de eventos alpha-type:

    gcloud beta events triggers create TRIGGER_NAME \
        --namespace NAMESPACE \
        --target-service=CLOUD_RUN_SERVICE_NAME \
        --type=alpha-type \
        --custom-type
    

    En el ejemplo anterior, NAMESPACE es el mismo espacio de nombres que el agente de eventos.

    Si no especificas un filtro, todos los eventos se envían al servicio de Cloud Run for Anthos en Google Cloud. Ten en cuenta que se admite el filtrado de concordancia exacta en cualquier cantidad de atributos y extensiones de CloudEvents. Si el filtro establece varios atributos, un evento debe coincidir con todos ellos.

  2. Verifica que el activador esté configurado:

    gcloud beta events triggers list \
        --target-service 'CLOUD_RUN_SERVICE_NAME' \
        --namespace NAMESPACE
    

    En el ejemplo anterior, NAMESPACE es el mismo espacio de nombres que el agente de eventos.

    El resultado es similar al siguiente:

    TRIGGER                  EVENT TYPE           TARGET
    trigger-name           alpha-type           cloud-run-service
    

Verás que el activador [TRIGGER-NAME] está en funcionamiento.

Crea un evento

Para generar un evento, envía una solicitud HTTP al agente de eventos desde el Pod de Google Kubernetes Engine.

  1. Obtén la URL del agente de eventos al que se realizará la solicitud HTTP:

    kubectl get brokers default \
        --namespace NAMESPACE \
        --output jsonpath="{.status.address.url}"
    

    Toma nota de la URL del agente; la usarás para enviar la solicitud HTTP.

  2. Establece una conexión SSH al Pod:

    kubectl --namespace NAMESPACE attach curl -it
    
  3. Realiza una solicitud HTTP mediante curl con el encabezado HTTP Ce-Type: alpha-type para hacer coincidir el filtro del activador con el agente de eventos. En este ejemplo, el mensaje es send-cloudevents-to-broker:

    curl -v "EVENT_BROKER_URL" \
        -X POST \
        -H "Ce-Id: my-id" \
        -H "Ce-Specversion: 1.0" \
        -H "Ce-Type: alpha-type" \
        -H "Ce-Subject: custom event" \
        -H "Ce-Source: my-source" \
        -H "Content-Type: application/json" \
        -d '{"msg":"send-cloudevents-to-broker"}'
    

    Esto genera un evento, y el agente emite una respuesta HTTP 202.

Visualiza el evento

Visualiza el evento mediante los registros del servicio receptor de Cloud Run for Anthos en Google Cloud:

  1. Para ver los registros, escribe lo siguiente:

    gcloud logging read "resource.type=k8s_container \
        resource.labels.namespace_name=events \
        resource.labels.container_name=user-container"
    

Realiza una limpieza

Borra los recursos que se crearon en este instructivo para evitar cargos recurrentes.

  1. Borra el Pod:

    kubectl delete pod curl --namespace >NAMESPACE
    
  2. Borra el activador:

    gcloud beta events triggers delete TRIGGER_NAME \
        --namespace >NAMESPACE