구독 시작하기
분산 환경에서는 다른 컴포넌트(일반적으로 이벤트 생성자라고 함)에서 생성된 메시지(이벤트)에 애플리케이션 또는 작업이 반응하도록 하려는 경우가 많습니다. Code Engine에서는 애플리케이션 또는 작업이 이벤트 생성자를 구독하여 관심있는 이벤트를 수신할 수 있습니다. 이벤트 정보는 애플리케이션의 경우 POST HTTP 요청으로서, 작업의 경우 환경 변수로서 수신합니다.
Code Engine은 다음 유형의 이벤트 생성자를 지원합니다.
- Cron
- cron 이벤트 생성자는 cron을 기반으로 하며 정기적으로 이벤트를 생성합니다. 잘 정의된 간격 또는 특정 시간에 조치를 수행해야 하는 경우 Cron 이벤트 생성자를 사용하십시오.
- IBM Cloud Object Storage
- Object Storage 이벤트 생성자는 오브젝트 스토리지 버킷의 오브젝트가 변경될 때 이벤트를 생성합니다. 예를 들어, 오브젝트가 버킷에 추가될 때 애플리케이션이 이벤트를 수신한 후 해당 변경사항을 기준으로 조치를 수행할 수 있으며, 이때 새 오브젝트를 이용할 수도 있습니다.
- Kafka
- Kafka 이벤트 생성자는 Kafka 인스턴스에 표시될 새 메시지를 감시합니다. 주제 세트에 대해 Code Engine Kafka 구독을 작성하면 앱 또는 작업이 주제 중 하나에 표시되는 각 새 메시지에 대해 별도의 이벤트를 수신합니다.
- 웹훅
- GitHub 웹훅을 사용하여 GitHub 저장소에서 Code Engine 워크로드로 이벤트를 전송할 수 있습니다. 이벤트는 지원되는 컨텐츠 유형중 하나에서 POST 요청으로 전송됩니다. GitHub 이벤트를 수신하려면 공용 엔드포인트가 있는 애플리케이션을 사용해야 합니다. 작업은 지원되지 않습니다. 자세한 정보는 애플리케이션에 GitHub 이벤트 전송 을 참조하십시오.
구독 API에 대한 자세한 정보는 구독 CRD 메소드 를 참조하십시오.
앱 및 앱 스케일링에 대한 구독
애플리케이션은 여러 이벤트 제작자를 구독할 수 있지만 각 구독에서 하나의 앱만 이벤트를 수신할 수 있습니다. 구독은 애플리케이션 스케일링 방식에 영향을 줄 수 있습니다. 예를 들어 앱에서 동시에 많은 이벤트를 수신하고 각 이벤트를 처리하는 데 몇 분이 걸릴 것으로 예상되는 경우 각 이벤트를 빠르게 처리할 수 있는 경우보다 더 높은 최대 스케일 값이 필요할 수 있습니다. 자세한 정보는 애플리케이션 스케일링 구성을 참조하십시오.
애플리케이션에 제공되는 모든 이벤트는 HTTP 메시지로 수신됩니다. 이벤트에는 이벤트 본문(비즈니스 논리)을 보지 않고 이벤트에 대한 정보의 키 비트를 신속하게 결정하는 데 도움이 되는 특정 HTTP 헤더가 포함되어 있습니다. 자세한 내용은 애플리케이션으로 전송되는 IBM Cloud Object Storage 이벤트의 HTTP 헤더 예시를 참조하세요.
작업 및 작업 실행 제한사항에 대한 등록
구독은 시작되는 작업 수에 영향을 줄 수 있습니다. 예를 들어, 작업이 Object Storage 버킷의 변경사항을 삭제하도록 구독하고 해당 버킷이 삭제되는 경우 해당 버킷에 있는 각 오브젝트에 대해 작업이 실행되며 100개의 작업 실행 제한에 빠르게 도달할 수 있습니다. 또한 이벤트에 의해 트리거되는 각 작업 실행에 대한 런타임을 고려해야 합니다. 예를 들어, 이벤트 생성자가 초당 10개이상의 이벤트를 트리거하고 각 작업이 약 20초동안 실행되는 경우, 작업 실행 한계 100에 약 10초가 지나면 이전에 시작된 작업 실행이 완료될 때까지 후속 작업 실행이 유실됩니다. 수신 이벤트 수가 일반적으로 적고 특정 시간대에 예상되는 최대 이벤트 수가 실행 중인 작업의 수를 할당량 제한 이하로 유지할 수 있을 정도로 낮은 경우에만 작업을 이벤트 가입자 대상으로 선택합니다. 자세한 정보는 Code Engine의 한계 및 할당량을 참조하십시오.
10분 후에는 등록으로 작성된 작업 실행이 삭제됩니다. 자세한 정보는 내 작업 실행 위치 를 참조하십시오.
작업으로 전달되는 모든 이벤트는 환경 변수로 수신됩니다. 자세한 정보는 작업으로 전송되는 IBM Cloud Object Storage 이벤트에 대한 예제 환경 변수 를 참조하십시오.
이벤트 메타데이터
구독을 만들 때 Code Engine 에서 관리하는 이벤트는 다음을 준수하도록 수정됩니다
CloudEvents 스펙. 이 스펙은 공통 메타데이터 세트를 제공하기 위해 각 이벤트에 포함될 수 있는 공통 속성 세트를 정의합니다. 메타데이터를 살펴보면 이벤트 페이로드 전체를 구문 분석하고 이해하지 않고도 메시지의 핵심 부분을 빠르게 이해할 수 있습니다. 예를 들어 애플리케이션에
전달되는 각 이벤트에는 이벤트의 의미론적 의미(또는 "이유")를 나타내는 ce-type 이라는 HTTP 헤더가 포함되어 있습니다. 데이터베이스의 이벤트에는 ce-type의 com.example.row.deleted 값이 포함될 수 있으며, 이는 데이터베이스에서 행이 삭제되었기 때문에 이벤트가 생성되었음을 나타냅니다.
다음 표에는 몇 가지 주요 공통 속성이 나열되어 있습니다. 각 속성은 수신 이벤트의 필수 속성인지 또는 선택적 속성인지 여부를 나타냅니다.
| 헤더 | 설명 |
|---|---|
| ID | 이 필수 속성은 이벤트의 고유 ID입니다. 동일한 이벤트 생성자의 두 이벤트에 동일한 값이 지정되지 않습니다. |
| 소스 | 이 필수 속성은 이벤트가 발생한 컨텍스트를 지정합니다. 예를 들어, 오브젝트 스토리지 시스템의 경우 이 값은 해당 오브젝트가 있는 버킷일 수 있습니다. |
| Specversion | 이 필수 속성은 이벤트에서 사용하는 CloudEvents 스펙의 버전을 나타냅니다. |
| 유형 | 이 필수 속성은 이벤트의 유형을 설명합니다. 예를 들어, 이벤트 유형은 리소스가 생성되거나 삭제된 것일 수 있습니다. |
| 제목 | 이 선택적 속성은 이벤트와 관련된 리소스를 나타냅니다. 예를 들어, 오브젝트 스토리지 시스템에서 이 값은 수정된 버킷의 오브젝트일 수 있습니다. |
| 시간 | 이 선택적 속성은 발생 시점의 시간소인입니다. |
전체 속성 목록에 대한 자세한 내용은 CloudEvents 사양을 참조하세요.
Code Engine에서 이벤트가 애플리케이션에 전달되면 CloudEvent 속성이 ce- 접두부가 붙은 HTTP 헤더로 표시됩니다. 이벤트가 일괄처리 작업에 전달되면 속성은 CE_ 접두부가 붙은 환경 변수로 표시되며 전체 변수 이름은 대문자입니다.
애플리케이션으로 전송되는 IBM Cloud Object Storage 이벤트의 HTTP 헤더 예
ce-id: 3fb2c04e-a660-4640-8899-b82efb8169b6
ce-source: https://cloud.ibm.com/catalog/services/cloud-object-storage/mybucket
ce-specversion: 1.0
ce-subject: object-69-144
ce-time: 2021-08-17T20:22:02.917Z
ce-type: com.ibm.cloud.cos.document.delete
작업에 전송되는 IBM Cloud Object Storage 이벤트의 환경 변수 예
CE_DATA={"bucket":"mybucket","endpoint":"","key":"Notes.rtf","notification":{"bucket_name":"mybucket","content_type":"text/rtf","event_type":"Object:Delete","format":"2.0","object_length":"4642","object_name":"Notes.rtf","request_id":"b59727ee-9c4e-446a-9261-5616f6d1283b","request_time":"2021-04-13T20:10:37.631Z"},"operation":"Object:Delete"}
CE_ID=b59727ee-9c4e-446a-9261-5616f6d1283b
CE_SOURCE=https://cloud.ibm.com/catalog/services/cloud-object-storage/mybucket
CE_SPECVERSION=1.0
CE_TIME=2021-08-17T20:22:02.917Z
CE_TYPE=com.ibm.cloud.cos.document.delete
구독을 작성하면 어떻게 됩니까?
기본적으로 subscription cron create, subscription cos create 및 subscription kafka create 명령은 먼저 목적지 애플리케이션 또는 작업이 존재하는지 여부를 확인합니다. 프로젝트에 애플리케이션 또는 작업이 없기 때문에 대상 검사에 실패하면 구독 작성 명령이 오류를 리턴합니다.
먼저 애플리케이션을 작성하지 않고 구독을 작성하려면 --force 옵션을 사용하십시오. --force 옵션을 사용하면 이 명령이 대상 검사를 생략합니다. 구독의 Ready 필드는 대상 애플리케이션 또는 작업이 작성될 때까지 false로 표시됩니다. 그런 다음, 구독이 Ready: true 상태로 자동으로 이동됩니다.
구독이 작성된 후 구독은 준비 상태를 확인하기 위해 반복적으로 폴링됩니다. 폴링은 기본적으로 제한시간이 초과되기 전까지 15초 동안 유지됩니다. --wait-timeout 옵션을 사용하여 명령 시간 초과까지의 시간을 변경할 수 있습니다. --no-wait 옵션을 false로 설정하여 상태 폴링을 생략할 수도 있습니다.
subscription cron get, subscription cos get 또는 subscription kafka get CLI 명령을 사용하여 등록 상태를 표시할 수 있습니다.