Argo Events
Argo Events란?
쿠버네티스에서 이벤트 기반 트리거를 관리하는 프레임워크다. 외부 이벤트(Webhook, S3 업로드, Kafka 메시지, 크론 등)를 감지하고, 그에 반응해 Argo Workflows나 다른 쿠버네티스 리소스를 실행시킨다.
이벤트 소스 → EventSource → Sensor → Trigger → Argo Workflow 실행
핵심 리소스
EventSource
어디서 이벤트를 받을지 정의한다. 이벤트를 수신해서 내부 메시지 버스로 전달한다.
apiVersion: argoproj.io/v1alpha1
kind: EventSource
metadata:
name: webhook-source
spec:
webhook:
my-endpoint:
port: "12000"
endpoint: /trigger
method: POST지원하는 이벤트 소스:
- Webhook: HTTP 요청
- S3: 파일 업로드/삭제
- Kafka / NATS / SQS / SNS: 메시지 큐
- GitHub / GitLab: Push, PR 이벤트
- Calendar: cron 스케줄
- Redis: 키 변경 이벤트
EventBus
EventSource와 Sensor 사이의 메시지 브로커 역할. 기본적으로 NATS를 사용한다.
apiVersion: argoproj.io/v1alpha1
kind: EventBus
metadata:
name: default
spec:
nats:
native:
replicas: 3Sensor
EventBus에서 이벤트를 구독하고, 조건이 충족되면 Trigger를 실행한다.
apiVersion: argoproj.io/v1alpha1
kind: Sensor
metadata:
name: my-sensor
spec:
dependencies:
- name: webhook-dep
eventSourceName: webhook-source
eventName: my-endpoint
triggers:
- template:
name: trigger-workflow
argoWorkflow:
operation: submit
source:
resource:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: triggered-workflow-
spec:
workflowTemplateRef:
name: my-workflow-template전체 흐름 예시
S3에 파일이 업로드되면 Argo Workflow 실행:
S3 버킷에 파일 업로드
↓
EventSource (S3 이벤트 감지)
↓
EventBus로 이벤트 전달
↓
Sensor가 이벤트 수신
↓
Argo Workflow 트리거 (파일 처리 잡 실행)
이벤트 필터링
모든 이벤트가 아니라 특정 조건의 이벤트만 처리하도록 필터를 걸 수 있다.
dependencies:
- name: s3-dep
eventSourceName: s3-source
eventName: upload
filters:
data:
- path: s3.object.key
type: string
value:
- "uploads/.*\\.csv" # CSV 파일 업로드만 처리Argo Workflows와의 차이
| Argo Workflows | Argo Events | |
|---|---|---|
| 역할 | 워크플로우 실행 엔진 | 이벤트 감지 및 트리거 |
| 언제 쓰나 | 배치 잡, 데이터 파이프라인 | 외부 이벤트에 반응해 워크플로우 실행 |
| 단독 사용 | 가능 (수동 실행 또는 Cron) | Argo Workflows와 함께 쓰는 경우가 많음 |
보통 Argo Events + Argo Workflows 조합으로 이벤트 드리븐 파이프라인을 구성한다.
주의사항
- EventBus(NATS)가 정상 동작해야 EventSource → Sensor 간 이벤트가 전달됨. EventBus 파드 상태를 먼저 확인할 것.
- EventSource와 Sensor는 같은 네임스페이스에 있어야 이벤트 버스를 공유할 수 있음
- Webhook EventSource는 외부에서 접근 가능하도록 Ingress 설정이 필요함
댓글 (0)