cron 이벤트 구독

이 튜토리얼에서는 IBM Cloud® Code Engine CLI를 사용하여 cron 이벤트를 구독하는 방법을 학습할 수 있습니다.

분산 환경에서는 다른 컴포넌트(일반적으로 이벤트 생성자라고 함)에서 생성된 메시지(이벤트)에 애플리케이션 또는 작업이 반응하도록 하려는 경우가 많습니다. Code Engine에서는 애플리케이션 또는 작업이 이벤트 생성자를 구독하여 관심있는 이벤트를 수신할 수 있습니다. 이벤트 정보는 애플리케이션의 경우 POST HTTP 요청으로서, 작업의 경우 환경 변수로서 수신합니다.

시작하기 전에

모든 Code Engine 사용자에게는 종량과금제 계정이 있어야 합니다. 튜토리얼은 비용이 부과될 수 있습니다. 비용 추정기를 사용하여 예상 사용량을 기반으로 한 비용 추정을 생성하십시오. 자세한 정보는 Code Engine 가격을 참조하십시오.

cron 간격 판별

cron 이벤트 생성자는 일정한 간격으로 이벤트를 생성합니다. 이 간격은 분, 시간, 일 또는 월별로 스케줄하거나 다른 여러 시간 간격의 조합으로 스케줄할 수 있습니다.

Cron은 표준 crontab을 사용하여 * * * * * 형식(분, 시간, 날짜, 월, 요일을 나타냄)으로 간격 세부사항을 지정합니다. 예를 들어, 자정에 대해 이벤트를 스케줄하려면 0 0 * * *를 지정하십시오. 매주 금요일 자정에 대해 이벤트를 스케줄하려면 0 0 * * FRI를 지정하십시오.

cron 간격은 3단계에 표시된 대로 --schedule 옵션을 subscription cron 명령과 함께 사용하여 설정할 수 있습니다. --schedule 옵션을 지정하지 않으면 기본적으로 cron 이벤트가 매일 1분마다 전송됩니다.

앱(또는 작업) 작성

이벤트를 사용하여 앱 또는 작업을 트리거할 수 있지만 이 튜토리얼에서는 앱을 사용합니다.

ibmcloud ce app create 명령을 사용하여 cron-app이라는 애플리케이션을 작성하십시오. 이 앱은 icr.io/codeengine/cron이라는 이미지를 가져옵니다. 이 앱은 각 이벤트가 도착할 때 이를 로그하며, 이는 HTTP 헤더 및 HTTP 본문 페이로드의 전체 세트를 표시합니다. 이 예제에 사용된 코드에 대한 자세한 내용은 ' cron 을 참조하세요.

ibmcloud ce app create --name cron-app --image icr.io/codeengine/cron

ibmcloud ce application get --name cron-app을 실행하여 앱이 Ready 상태인지 확인하십시오.

이 앱에 대한 자세한 정보는 cron의 readme 파일에서 확인하실 수 있습니다.

구독 작성

앱이 준비되면 cron 이벤트 생성자에 대한 구독을 작성하고 ibmcloud ce sub cron create 명령을 사용하여 앱에 연결하십시오.

다음 예에서는 cron-sub라는 cron 구독을 작성하고 cron-app 애플리케이션을 대상으로 지정합니다. 이 구독은 --data 옵션을 사용하여 cron 이벤트에 JSON 문자열을 포함시킵니다. 또한 --schedule 옵션을 * * * * * 값과 함께 사용하여 매일 매분 cron-app 애플리케이션에 이벤트를 보내도록 cron 스케줄을 지정합니다.

ibmcloud ce sub cron create --name cron-sub --destination cron-app --data '{"mydata":"hello world"}' --schedule '* * * * *'

구독 정보를 찾으려면 ibmcloud ce sub cron get -n cron-sub 명령을 실행하십시오.

출력 예

이 출력에서는 구독 이름, 대상, 스케줄, 데이터가 올바른지 확인할 수 있습니다.

Getting cron event subscription 'cron-sub'...
OK
Name:          cron-sub
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           2m18s
Created:       2021-03-14T13:21:13-05:00
Destination Type:  app
Destination:       cron-app
Schedule:          * * * * *
Time Zone:         UTC
Data:              {"mydata":"hello world"}
Ready:             true
Events:
    Type     Reason                 Age                Source                 Messages
    Normal   FinalizerUpdate        65s                pingsource-controller  Updated "cron-sub" finalizers

구독 테스트

앱을 cron 이벤트에 성공적으로 구독한 후 로그를 보고 작동하는지 확인하십시오.

ibmcloud ce app logs 명령을 사용하여 앱의 로그를 가져오십시오.

ibmcloud ce app logs --name cron-app

출력 예

다음 출력에서는 구독이 작성될 때 전달된 HTTP 헤더 및 HTTP 본문 JSON과 이벤트가 수신된 날짜 및 시간을 확인할 수 있습니다.

2021-01-21 20:15:00 - Received:
Header: Accept-Encoding=[gzip]
Header: Ce-Id=[7de01e8e-84dc-4409-ad56-90d6e391397c]
Header: Ce-Source=[/apis/v1/namespaces/50d38123af5/pingsources/cron-sub]
Header: Ce-Specversion=[1.0]
Header: Ce-Time=[2021-01-21T20:15:00.392503458Z]
Header: Ce-Type=[dev.knative.sources.ping]
Header: Content-Length=[24]
Header: Content-Type=[application/json]
Header: Forwarded=[for=172.30.118.174;proto=http, for=172.30.95.204]
Header: K-Proxy-Request=[activator]
Header: Traceparent=[00-1bf4b6b1d67f278a4b827e4e00f0cf7c-cbce9df0faedd812-00]
Header: User-Agent=[Go-http-client/1.1]
Header: X-B3-Sampled=[0]
Header: X-B3-Spanid=[fb208eaa6af15ede]
Header: X-B3-Traceid=[6db074fdaf6a6411fb208eaa6af15ede]
Header: X-Envoy-Attempt-Count=[1]
Header: X-Envoy-Decorator-Operation=[cron-app-snva7-1.50d38123af5.svc.cluster.local:80/*]
Header: X-Envoy-Internal=[true]
Header: X-Envoy-Peer-Metadata=[ChoKCkNMVVNURVJfSUQSDBoKS3ViZXJuZXRlcwo5CgxJTlNUQU5DRV9JUFMSKRonMTcyLjMwLjk1LjIwNCxmZTgwOjplODBiOjFkZmY6ZmVmMjo1ZjkxCpQCCgZMQUJFTFMSiQIqhgIKHQoDYXBwEhYaFGlzdGlvLWluZ3Jlc3NnYXRld2F5ChMKBWNoYXJ0EgoaCGdhdGV3YXlzChQKCGhlcml0YWdlEggaBlRpbGxlcgoZCgVpc3RpbxIQGg5pbmdyZXNzZ2F0ZXdheQofChFwb2QtdGVtcGxhdGUtaGFzaBIKGghkNzY1NjljOQoSCgdyZWxlYXNlEgcaBWlzdGlvCjkKH3NlcnZpY2UuaXN0aW8uaW8vY2Fub25pY2FsLW5hbWUSFhoUaXN0aW8taW5ncmVzc2dhdGV3YXkKLwojc2VydmljZS5pc3Rpby5pby9jYW5vbmljYWwtcmV2aXNpb24SCBoGbGF0ZXN0ChoKB01FU0hfSUQSDxoNY2x1c3Rlci5sb2NhbAotCgROQU1FEiUaI2lzdGlvLWluZ3Jlc3NnYXRld2F5LWQ3NjU2OWM5LWw5cHZoChsKCU5BTUVTUEFDRRIOGgxpc3Rpby1zeXN0ZW0KXQoFT1dORVISVBpSa3ViZXJuZXRlczovL2FwaXMvYXBwcy92MS9uYW1lc3BhY2VzL2lzdGlvLXN5c3RlbS9kZXBsb3ltZW50cy9pc3Rpby1pbmdyZXNzZ2F0ZXdheQo5Cg9TRVJWSUNFX0FDQ09VTlQSJhokaXN0aW8taW5ncmVzc2dhdGV3YXktc2VydmljZS1hY2NvdW50CicKDVdPUktMT0FEX05BTUUSFhoUaXN0aW8taW5ncmVzc2dhdGV3YXk=]
Header: X-Envoy-Peer-Metadata-Id=[router~172.30.95.204~istio-ingressgateway-d76569c9-l9pvh.istio-system~istio-system.svc.cluster.local]
Header: X-Forwarded-For=[172.30.118.174, 172.30.95.204, 172.30.163.42]
Header: X-Forwarded-Proto=[http]
Header: X-Request-Id=[ce502e5e-dd89-401e-a4cd-b72a6822f689]
Body: {"mydata":"hello world"}

헤더 및 본문에 대한 자세한 정보는 cron 이벤트에 대한 HTTP 헤더 및 본문 정보를 참조하십시오.

CLI에서 로그 보기에 대한 자세한 정보는 CLI에서 로그 보기를 참조하십시오.

구독은 애플리케이션 스케일링 방식에 영향을 줄 수 있습니다. 자세한 정보는 애플리케이션 스케일링 구성을 참조하십시오.

구독 업데이트

cron 구독이 성공했음을 알았으므로 ibmcloud ce sub cron update 명령을 사용하여 다른 일정으로 실행되도록 cron 이벤트를 업데이트할 수 있습니다. 예를 들어, 매일 자정에 실행하도록 구독을 업데이트하십시오.

ibmcloud ce sub cron update -n cron-sub -d cron-app --data '{"mydata":"hello world again"}' -s '0 0 * * *'

구독 정보를 찾으려면 ibmcloud ce sub cron get -n cron-sub 명령을 실행하십시오.

출력 예

이 출력에서는 스케줄 및 데이터가 업데이트되었는지 확인할 수 있습니다.

Getting cron event subscription 'cron-sub'...
OK
Name:          cron-sub
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           5m7s
Created:       2021-03-14T13:21:13-05:00
Destination:  App:cron-app
Schedule:     0 0 * * *
Data:         {"mydata":"hello world again"}
Ready:        true
Events:
    Type     Reason                 Age                Source                 Messages
    Normal   FinalizerUpdate        65s                pingsource-controller  Updated "cron-sub" finalizers

cron 구독 정리 튜토리얼

cron 구독 및 앱을 삭제할 준비가 되었습니까? ibmcloud ce app deleteibmcloud ce sub cron delete 명령을 사용할 수 있습니다.

구독을 제거하려면 다음을 실행하십시오.

ibmcloud ce sub cron delete --name cron-sub

애플리케이션을 제거하려면 다음을 실행하십시오.

ibmcloud ce app delete --name cron-app

더 많은 코드 예를 찾고 계십니까? IBM Cloud Code Engine GitHub 저장소의 예제를 확인해 보세요.