Como receber eventos personalizados

Saiba como gerar eventos personalizados usando a ferramenta de linha de comando curl e enviá-los para um serviço no Cloud Run para Anthos no Google Cloud.

Antes de começar

Para concluir esta tarefa, você precisa ter um agente de eventos e saber em qual namespace ele está sendo executado. Saiba como configurar eventos para o Cloud Run para Anthos e criar um agente de eventos.

Se você tiver um agente de eventos em execução, poderá visualizar o namespace do Kubernetes. Basta executar:

kubectl get brokers -n NAMESPACE

Como implantar um serviço receptor de eventos do Cloud Run para Anthos no Google Cloud

Implantar um serviço do Cloud Run para Anthos no Google Cloud que recebe eventos do agente de eventos.

Para implantar o serviço Cloud Run para Anthos no Google Cloud:

  1. Clone o repositório:

    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. Crie o contêiner e faça upload dele para o Cloud Build:

    gcloud builds submit \
      --tag gcr.io/$(gcloud config get-value project)/CLOUD_RUN_CONTAINER_NAME
    
  3. Implante a imagem do contêiner no Cloud Run para Anthos no Google Cloud:

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

Quando o URL do serviço aparecer, significa que ele foi implantado corretamente.

Como gerar eventos usando cURL

Use curl em execução em um pod do Google Kubernetes Engine para gerar eventos:

  1. Crie um pod do Google Kubernetes Engine no namespace do 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
    

    em que NAMESPACE é o mesmo namespace que seu agente de eventos.

  2. Verifique se o pod está funcionando corretamente executando o seguinte comando:

    kubectl get pod curl -n NAMESPACE
    

    em que NAMESPACE é o mesmo namespace que seu agente de eventos.

    Você verá um pod chamado "curl" e em execução (Status=Running).

Como criar um gatilho para seu agente de eventos

  1. Crie um gatilho com um evento alpha-type de filtro:

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

    em que NAMESPACE é o mesmo namespace que seu agente de eventos.

    Se você não especificar um filtro, todos os eventos serão enviados para o serviço Cloud Run para Anthos no Google Cloud. A filtragem de correspondência exata para qualquer número de atributos e extensões do CloudEvents é compatível. Se o filtro definir vários atributos, um evento precisará corresponder a todos eles.

  2. Verifique se o gatilho está configurado:

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

    em que NAMESPACE é o mesmo namespace que seu agente de eventos.

    A resposta será semelhante a:

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

Você verá o gatilho [TRIGGER-NAME] em execução.

Como criar um evento

Para gerar um evento, envie uma solicitação HTTP para o agente de eventos do pod do Google Kubernetes Engine.

  1. Encontre o URL do agente de eventos ao qual a solicitação HTTP será feita:

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

    Anote o URL do agente. Você o usará para enviar a solicitação HTTP.

  2. Execute SSH no pod:

    kubectl --namespace NAMESPACE attach curl -it
    
  3. Faça uma solicitação HTTP usando curl com um cabeçalho HTTP de Ce-Type: alpha-type para corresponder o filtro do gatilho ao agente de eventos. Neste exemplo, a mensagem é 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"}'
    

    Isso gera um evento, e o agente responde com uma resposta HTTP 202.

Como visualizar o evento

Visualize o evento analisando os registros do serviço receptor do Cloud Run para Anthos no Google Cloud:

  1. Para ver os registros, digite:

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

Limpeza

Exclua os recursos criados neste tutorial para evitar cobranças recorrentes.

  1. Exclua o pod:

    kubectl delete pod curl --namespace >NAMESPACE
    
  2. Exclua o gatilho:

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