curl
명령줄 도구를 사용하여 커스텀 이벤트를 생성한 후 Google Cloud에서 해당 이벤트를 Cloud Run for Anthos의 서비스로 전송하는 방법을 알아봅니다.
시작하기 전에
이 작업을 완료하려면 이벤트 브로커가 있어야 하고 실행 중인 네임스페이스를 알고 있어야 합니다. Cloud Run for Anthos에 대해 이벤트를 구성하고 이벤트 브로커를 만드는 방법을 알아봅니다.
실행 중인 이벤트 브로커가 있으면 다음을 실행하여 Kubernetes 네임스페이스를 볼 수 있습니다.
kubectl get brokers -n NAMESPACE
Cloud Run for Anthos 이벤트 수신자 서비스 배포
이벤트 브로커에서 이벤트를 수신하는 Cloud Run for Anthos를 배포합니다.
Cloud Run for Anthos 서비스를 배포하려면 다음 안내를 따르세요.
저장소를 클론합니다.
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
컨테이너를 빌드하고 Cloud Build에 업로드합니다.
gcloud builds submit \ --tag gcr.io/$(gcloud config get-value project)/CLOUD_RUN_CONTAINER_NAME
컨테이너 이미지를 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
을 사용하여 이벤트를 생성할 수 있습니다.
이벤트 브로커의 네임스페이스에 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는 이벤트 브로커와 동일한 네임스페이스입니다.
다음 명령어를 실행하여 Pod가 올바르게 작동하는지 확인합니다.
kubectl get pod curl -n NAMESPACE
여기서 NAMESPACE는 이벤트 브로커와 동일한 네임스페이스입니다.
curl 작동 및 실행이라고 부르는 Pod가 표시됩니다(상태=실행 중).
이벤트 브로커에 대해 트리거 만들기
필터
alpha-type
이벤트로 트리거를 만듭니다.gcloud beta events triggers create TRIGGER_NAME \ --namespace NAMESPACE \ --target-service=CLOUD_RUN_SERVICE_NAME \ --type=alpha-type \ --custom-type
여기서 NAMESPACE는 이벤트 브로커와 동일한 네임스페이스입니다.
필터를 지정하지 않으면 모든 이벤트가 Cloud Run for Anthos 서비스로 전송됩니다. 수많은 CloudEvents 속성 및 확장에 대한 일치검색 필터링이 지원됩니다. 필터가 여러 속성을 설정할 경우 이벤트가 모든 속성과 일치해야 합니다.
트리거가 설정되었는지 확인합니다.
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 요청을 전송합니다.
HTTP 요청을 수행할 이벤트 브로커의 URL을 가져옵니다.
kubectl get brokers default \ --namespace NAMESPACE \ --output jsonpath="{.status.address.url}"
브로커의 URL을 확인하고, 이를 사용하여 HTTP 요청을 전송합니다.
Pod에 SSH로 연결합니다.
kubectl --namespace NAMESPACE attach curl -it
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 응답으로 응답합니다.
이벤트 보기
Cloud Run for Anthos 수신자 서비스의 로그에서 이벤트를 확인합니다.
로그를 보려면 다음을 입력합니다.
gcloud logging read "resource.type=k8s_container \ resource.labels.namespace_name=events \ resource.labels.container_name=user-container"
삭제
요금이 반복해서 청구되지 않도록 이 가이드에서 만든 리소스를 삭제합니다.
Pod 삭제
kubectl delete pod curl --namespace >NAMESPACE
트리거를 삭제합니다.
gcloud beta events triggers delete TRIGGER_NAME \ --namespace >NAMESPACE