커스텀 이벤트 수신

curl 명령줄 도구를 사용하여 커스텀 이벤트를 생성한 후 Google Cloud에서 해당 이벤트를 Cloud Run for Anthos의 서비스로 전송하는 방법을 알아봅니다.

시작하기 전에

이 작업을 완료하려면 이벤트 브로커가 있어야 하고 실행 중인 네임스페이스를 알고 있어야 합니다. Cloud Run for Anthos에 대해 이벤트를 구성하고 이벤트 브로커를 만드는 방법을 알아봅니다.

실행 중인 이벤트 브로커가 있으면 다음을 실행하여 Kubernetes 네임스페이스를 볼 수 있습니다.

kubectl get brokers -n NAMESPACE

Google Cloud 이벤트 수신자 서비스에 Cloud Run for Anthos 배포

이벤트 브로커에서 이벤트를 수신하는 Google Cloud 서비스에 Cloud Run for Anthos를 배포합니다.

Google Cloud 서비스에 Cloud Run for Anthos를 배포하려면 다음 안내를 따르세요.

  1. 저장소를 클론합니다.

    Python

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

    자바

    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. 컨테이너를 빌드하고 Cloud Build에 업로드합니다.

    gcloud builds submit \
      --tag gcr.io/$(gcloud config get-value project)/CLOUD_RUN_CONTAINER_NAME
    
  3. 컨테이너 이미지를 Google Cloud의 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
    

서비스의 URL이 표시되면 성공적으로 배포된 것입니다.

cURL을 사용하여 이벤트 생성

Google Kubernetes Engine Pod에서 실행되는 curl을 사용하여 이벤트를 생성할 수 있습니다.

  1. 이벤트 브로커의 네임스페이스에 Google Kubernetes Engine Pod를 만듭니다.

    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
    

    여기서 NAMESPACE는 이벤트 브로커와 동일한 네임스페이스입니다.

  2. 다음 명령어를 실행하여 Pod가 올바르게 작동하는지 확인합니다.

    kubectl get pod curl -n NAMESPACE
    

    여기서 NAMESPACE는 이벤트 브로커와 동일한 네임스페이스입니다.

    curl 작동 및 실행이라고 부르는 Pod가 표시됩니다(상태=실행 중).

이벤트 브로커에 대해 트리거 만들기

  1. 필터 alpha-type 이벤트로 트리거를 만듭니다.

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

    여기서 NAMESPACE는 이벤트 브로커와 동일한 네임스페이스입니다.

    필터를 지정하지 않으면 모든 이벤트가 Google Cloud 서비스의 Cloud Run for Anthos로 전송됩니다. 모든 수의 CloudEvents 속성 및 확장에 대한 정확한 일치가 지원됩니다. 필터로 여러 속성이 설정되는 경우 이벤트가 모든 속성과 일치해야 합니다.

  2. 트리거가 설정되었는지 확인합니다.

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

    여기서 NAMESPACE는 이벤트 브로커와 동일한 네임스페이스입니다.

    출력은 다음과 비슷합니다.

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

[TRIGGER-NAME] 트리거가 작동되어 실행되는 것이 표시됩니다.

이벤트 만들기

이벤트를 생성하려면 Google Kubernetes Engine Pod로부터 이벤트 브로커로 HTTP 요청을 전송합니다.

  1. HTTP 요청을 수행할 이벤트 브로커의 URL을 가져옵니다.

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

    브로커의 URL을 확인하고, 이를 사용하여 HTTP 요청을 전송합니다.

  2. Pod에 SSH로 연결합니다.

    kubectl --namespace NAMESPACE attach curl -it
    
  3. Ce-Type: alpha-type의 HTTP 헤더로 curl을 사용하여 HTTP 요청을 수행해서 이벤트 브로커와 일치하는 트리거의 필터를 찾습니다. 이 예시에서 메시지는 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"}'
    

    그러면 이벤트가 생성되고, 브로커가 HTTP 202 응답으로 응답합니다.

이벤트 보기

Google Cloud 수신기 서비스의 Cloud Run for Anthos 로그에서 이벤트를 확인합니다.

  1. 로그를 보려면 다음을 입력합니다.

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

삭제

요금이 반복해서 청구되지 않도록 이 가이드에서 만든 리소스를 삭제합니다.

  1. Pod 삭제

    kubectl delete pod curl --namespace >NAMESPACE
    
  2. 트리거를 삭제합니다.

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