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 o namespace em que ele está sendo executado. Saiba como configurar eventos no Cloud Run for Anthos e criar um agente de eventos.

Se você tiver um agente de eventos ativo, execute o comando a seguir para ver o namespace do Kubernetes:

kubectl get brokers -n NAMESPACE

Como implantar um serviço receptor de eventos do Cloud Run for Anthos

Implantar um serviço do Cloud Run for Anthos que recebe eventos do agente de eventos.

Para implantar o serviço Cloud Run for Anthos:

  1. Para clonar 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. Para criar o contêiner e fazer o upload dele no Cloud Build:

    gcloud builds submit \
      --tag gcr.io/$(gcloud config get-value project)/CLOUD_RUN_CONTAINER_NAME
    
  3. Para implantar a imagem de contêiner no Cloud Run for Anthos:

    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 do agente de eventos.

    Se você não especificar um filtro, todos os eventos serão enviados para o serviço do Cloud Run for Anthos. 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 observando os registros do serviço receptor do Cloud Run for Anthos:

  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