IBM Cloud Docs
cron イベントのサブスクライブ

cron イベントのサブスクライブ

このチュートリアルでは、IBM Cloud® Code Engine CLI を使用して cron イベントをサブスクライブする方法を学習します。

分散環境では多くの場合、他のコンポーネント (通常、イベント・プロデューサーと呼ばれる) で生成されたメッセージ (イベント) に対応する処理をアプリケーションまたはジョブに行わせます。 Code Engine では、イベント・プロデューサーをサブスクライブすることで、アプリケーションまたはジョブが関心対象のイベントを受信できるようになります。 イベント情報は、アプリケーションについては POST HTTP 要求、ジョブについては環境変数として受信されます。

開始前に

すべてのCode Engineユーザーは、従量課金 (PAYG) アカウントを持っている必要があります。 チュートリアルでは、費用が発生する場合があります。 コスト見積もりツールを使用して、使用量の見積もりに基づいてコスト見積もりを生成してください。 詳細については、Code Engine価格設定 を参照してください。

cron 間隔の決定

cron イベント・プロデューサーは、一定間隔でイベントを生成します。 この間隔は、分、時、日、月の単位で、または複数の異なる時間間隔の組み合わせでスケジュールできます。

cron では、間隔の詳細を指定するために、分、時、日、月、曜日を表す * * * * * 形式の標準的な crontab を使用します。 例えば、午前 0 時のイベントをスケジュールするには、0 0 * * * と指定します。 毎週金曜日の午前 0 時のイベントをスケジュールするには、0 0 * * FRI と指定します。

crontabの詳細については、CRONTABを参照のこと。

ステップ 3 に示すように、**subscription cron**コマンドで--scheduleオプションを使用して cron 間隔を設定できます。 --scheduleオプションを指定しない場合、デフォルトでは、cron イベントは毎日毎分送信されます。

アプリ (またはジョブ) の作成

イベントを使用してアプリやジョブをトリガーできますが、このチュートリアルではアプリを使用します。

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ファイルをご覧ください。

サブスクリプションの作成

アプリが Ready になったら、ibmcloud ce sub cron create コマンドを使用して、cron イベント・プロデューサーに対するサブスクリプションを作成し、それをアプリに接続します。

以下の例では、cron-sub という cron サブスクリプションを作成し、宛先として cron-app アプリケーションを指定します。 このサブスクリプションは、--data オプションを使用して、cron イベントに JSON ストリングを含めます。 さらに、値を --schedule に設定した * * * * * オプションを使用して、毎日 1 分間隔で 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 イベントを更新します。 例えば、毎日午前 0 時に実行されるようにサブスクリプションを更新します。

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 delete コマンドと ibmcloud ce sub cron delete コマンドを使用することができます。

サブスクリプションを削除するには、以下のようにします。

ibmcloud ce sub cron delete --name cron-sub

アプリケーションを削除するには、以下のようにします。

ibmcloud ce app delete --name cron-app

コード・サンプルがさらに必要ですか? IBM Cloud Code Engine「GitHubレポのサンプルをチェックする。