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レポのサンプルをチェックする。