IBM Cloud Docs
定期タイマー (cron) イベント・プロデューサーの使用

定期タイマー (cron) イベント・プロデューサーの使用

定期タイマー (cron) イベント・プロデューサーは、一定間隔でイベントを生成します。 この間隔は、分、時、日、月の単位で、または複数の異なる時間間隔の組み合わせでスケジュールできます。 cronイベントを受け取るためにCode Engineアプリ、関数、ジョブをサブスクライブすることができます。

定期タイマーイベントの購読は、標準的なcrontab構文を使用して、分、時、月、年、曜日のフィールドである'* * * * * のフォーマットで間隔の詳細を指定する。 例えば、午前 0 時のイベントをスケジュールするには、0 0 * * * と指定します。 毎週金曜日の午前 0 時のイベントをスケジュールするには、0 0 * * 5 と指定します。 crontabの詳細については、CRONTABを参照のこと。

周期タイマーイベントプロデューサーをサブスクライブする場合、サブスクリプションのデスティネーション(アプリ、ファンクション、またはジョブ)とデスティネーションタイプを指定する必要があります。 スケジュールを指定しない場合は、デフォルトの * * * * * (1 分ごと) が使用されます。

Code Engineには、プロジェクト内の定期タイマーサブスクリプションのクォータと、サブスクリプションの上限があります。 Code Engine の制限について詳しくは、Code Engine の制限と割り当て量を参照してください。

アプリケーションの定期タイマー (cron) イベントのサブスクライブ

コンソールまたはCLIから定期タイマー購読を操作できます。

イベントは、HTTP POST 要求としてアプリケーションに送信されます。 イベントに含まれる情報について詳しくは、イベントの HTTP ヘッダーおよび本文の情報を参照してください。

コンソールでのアプリケーションの定期タイマー (cron) イベントのサブスクライブ

コンソールから、アプリケーションの周期タイマーイベントサブスクリプションを作成および更新できます。

開始前に

コンソールからアプリケーションの周期タイマーイベントサブスクリプションを作成および更新するには、以下の手順を実行します。

  1. Code EngineからProjectsページから、プロジェクトに移動します。

  2. 「概要」ページで、**「イベント・サブスクリプション (Event subscriptions)」**をクリックします。

  3. 「イベント・サブスクリプション (Event subscriptions)」ページで**「作成」**をクリックして、サブスクリプションを作成します。

  4. イベントサブスクリプションの作成ページから、以下のステップを完了します:

    1. イベント・タイプの場合は、「定期的タイマー」タイルを選択します。 **「次へ」**をクリックします。
    2. **「一般」**に、定期タイマー・サブスクリプションの名前 (例えば myptimer) を入力します。 オプションで、イベント属性を指定できます。 定期タイマー・イベントのコンシューマーがアプリケーションの場合、使用できるイベント属性は HTTP ヘッダーとなることに注意してください。 イベントのコンシューマーがジョブの場合は、使用できるイベント属性は環境変数になります。 **「次へ」**をクリックして、先に進みます。
    3. **「スケジュール」**に、イベントのタイミングに関する情報を指定します。 定期タイマーイベントプロデューサーは、インターバルの詳細を指定するために、標準的なcrontab構文を使用する。 提供されているパターンから間隔を選択するか、0 0 * * * (これは、毎日午前 0 時にイベントを発生させることを指定している) などの独自のカスタム cron 式を入力します。 この例では、毎日、毎時、毎分のスケジュール・パターンを選択します。 cron 式が自動的に生成されることに注意してください。 日、時、分のパターンと cron 式は協定世界時 (UTC) で表されます。 スケジュールを指定しない場合、このイベント・サブスクリプションは 1 分ごとにイベントを送信します。 予定されているスケジュール済みのイベントのリストが表示されます。 これらのスケジュール済みイベントは、ご使用のタイム・ゾーンの形式で表示されることに注意してください。 **「次へ」**をクリックして、先に進みます。
    4. **「カスタム・イベント・データ (Custom event data)」**に、イベント・メッセージの本文に含めるデータを入力します。 メッセージは、プレーン・テキストまたは base64 形式で指定できます。 この例では、イベント・メッセージの本文として hello stranger というテキストを指定します。 メッセージが base64 形式の場合、イベントの送信時にメッセージをデコードすることを選択できます。 カスタム・イベント・データのコンテンツ・タイプを指定することもできます。 **「次へ」**をクリックして、先に進みます。
    5. **「イベント・コンシューマー (Event consumer)」**に、イベントを受信するアプリケーションまたはジョブを指定します。 定義済みのアプリケーションとジョブのリストから選択できることに注意してください。 この例では、icr.io/codeengine/cronイメージを参照するmyappアプリケーションを使用します。 アプリまたはジョブをまだ作成していない場合は、アプリケーションまたはジョブの名前を指定し、定期タイマーサブスクリプションを作成した後に アプリケーションを作成 するか、ジョブを作成 することができます。 アプリケーションの場合のみ、オプションでパスを指定できます。 デフォルトでは、イベントは、宛先アプリケーションのルート URL にルーティングされます。 パスを指定すると、アプリ内の別の宛先にイベントを送信できます。 例えば、サブスクリプション・パスに/eventsが指定されている場合、イベントはhttps://<base application URL>/eventsに送信されます。 **「次へ」**をクリックして、先に進みます。
    6. **「サマリー」**で、定期タイマー・イベント・サブスクリプションの設定を確認し、必要に応じて変更を加えます。 準備ができたら、Create(作成)をクリックし、Periodic timer(定期タイマー)サブスクリプションを作成します。
  5. 定期タイマーのサブスクリプションが作成されたので、イベントサブスクリプションページに移動し、定義されたサブスクリプションのリストを表示します

  6. サブスクリプションを更新するには、定期タイマーのサブスクリプションページに移動します。 イベント・サブスクリプションのページで、更新するサブスクリプションの名前をクリックします。

  7. 定期タイマーの購読ページから、イベントメッセージのデータを変更します。 **「カスタム・イベント・データ (Custom event data)」**タブで、イベント・データを hello sunshine に変更します。 **「保存」**をクリックして変更を保存します。

  8. myappアプリケーションは、ログ・ファイルに情報を出力するサンプルcronアプリケーションを参照するため、ログを表示できます。 myapp イベント・コンシューマー・アプリケーションのアプリケーション・ログを表示し、イベント・メッセージが hello sunshine であることを確認します。 コンソールでのアプリのログの表示を参照してください。

CLI でのアプリケーションの定期タイマー (cron) イベントのサブスクライブ

開始前に

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

CLIを使用してアプリケーションを定期タイマー購読に接続するには、「ibmcloud ce sub cron create コマンドを使用します。

ibmcloud ce sub cron create --name NAME --destination-type APP --destination APPLICATION_NAME --schedule CRON

例えば、毎日午前0時に'myapp というアプリにイベントを送信するcronサブスクリプションを作成する:

ibmcloud ce sub cron create --name mycronevent --destination-type app --destination myapp --schedule '0 0 * * *'

スケジュール値は、単一ストリングとして処理されるように、引用符で囲む必要があります。

以下の表は、前述の例の sub cron create コマンドで使用されるオプションの要約です。 コマンドとそのオプションについて詳しくは、ibmcloud ce subscription cron create コマンドを参照してください。

コマンド・オプション
オプション 説明
--name cron イベント・ソースの名前。 この値は必須です。
--destination イベント・プロデューサーからイベントを受信する、現行プロジェクトの Code Engine アプリケーションまたはジョブの名前。 この値は必須です。
--destination-type destination のタイプ (この場合は app)。 デフォルト値はappです。
--schedule イベントをトリガーする頻度を、crontab 形式でスケジュールします。 例えば、2 分間隔は */2 * * * * (文字列形式) と指定します。 デフォルトでは、cron イベントは 1 分間隔でトリガーされ、UTC タイム・ゾーンに設定されます。 タイム・ゾーンを変更するには、--time-zone オプションを使用します。 この値はオプションです。
**sub cron**コマンドを使用するためのヒント
  • デフォルトでは、イベントは、宛先アプリケーションのルート URL にルーティングされます。 --path オプションを使用すると、アプリ内の異なる宛先にイベントを送信できます。 例えば、サブスクリプションで--path /eventsが指定されている場合、イベントはhttps://<base application URL>/eventsに送信されます。
  • 周期タイマーイベントのデータサイズは最大4096バイトに制限される。 したがって、--data オプションまたは --data-base64 オプションを使用する場合は、最大 4096 バイト送信できます。 詳しくは、Code Engine の制限と割り当て量を参照してください。
  • cron サブスクリプションでは、デフォルトでは UTC タイム・ゾーンが使用されます。 タイム・ゾーンを変更するには、--time-zone コマンドまたは sub cron create コマンドで sub cron update オプションを指定します。 有効なタイムゾーン値については、 TZデータベースを参照してください。 kubectl を使用してサブスクリプションを作成する場合は、タイム・ゾーンを指定しないと、UTC タイム・ゾーンが割り当てられるので注意してください。
  • アプリまたはジョブ・イベント・コンシューマーをまだ作成していない場合は、**sub cron create**コマンドで--forceオプションを使用して、cron イベント・サブスクリプションを強制的に作成します。 アプリケーションまたはジョブの名前を指定し、cron サブスクリプションの作成後に、アプリケーションの作成または ジョブの作成を行うことができます。

cron サブスクリプションが正常に作成されたことを確認するには、ibmcloud ce sub cron get --name mycronevent コマンドを実行します。

出力例

Getting cron source 'mycronevent'...
OK

Name:          mycronevent
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           2m21s
Created:       2021-03-14T13:37:51-05:00

Destination Type:  app
Destination:       myapp
Schedule:          0 0 * * *
Time Zone:         UTC
Ready:             true

Events:
    Type     Reason            Age        Source                 Messages
    Normal   FinalizerUpdate   12s        pingsource-controller  Updated "mycronevent" finalizers

この出力から、宛先アプリケーションが myapp、スケジュールが 0 0 * * * (毎日午前 0 時)、Ready 状態が true であることがわかります。

CLI を使用したcron サブスクリプションの更新

CLI を使用して cron サブスクリプションを更新するには、ibmcloud ce subscription cron update コマンドを使用します。 例えば、mycronevent サブスクリプションを更新して、myapp というアプリにイベントを 2 分ごとに送信するようにスケジュールを変更するには、次のようにします。

ibmcloud ce sub cron update --name mycronevent --schedule '*/2 * * * *'

cron サブスクリプションが正常に更新されたことを確認するには、ibmcloud ce sub cron get --name mycronevent コマンドを実行します。 サブスクリプションのスケジュールは更新されています。

出力例

Getting cron source 'mycronevent'...
OK

Name:          mycronevent
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           2m21s
Created:       2021-08-31T16:00:49-04:00

Destination Type:  app
Destination:       myapp
Schedule:          */2 * * * *
Time Zone:         UTC
Ready:             true

Events:
  Type    Reason                       Age               Source                 Messages
  Normal  PingSourceSynchronized       7s (x3 over 13m)  pingsource-controller  PingSource adapter is synchronized

チュートリアルを試すには、 定期タイマー (cron) イベントのサブスクライブを参照してください。 コード・サンプルがさらに必要ですか? IBM Cloud Code Engine GitHub repoをチェックアウトします。

コンソールでのアプリケーションのイベント情報の表示

イベント・サブスクリプションに関する情報を表示するには、次のようにします。

  1. Code EngineからProjectsページから、プロジェクトに移動します。
  2. 「概要」ページで、**「イベント・サブスクリプション (Event subscriptions)」**をクリックし、定義済みのサブスクリプションのリストを表示します。

アプリケーションがサンプル cron アプリケーションのように情報をログ・ファイルに出力する場合は、イベント・コンシューマー・アプリケーションのログ・ファイルを表示します。 コンソールでのアプリのログの表示を参照してください。

CLI でのアプリケーションのイベント情報の表示

サンプル cron アプリケーションのように、アプリケーションが情報をログ・ファイルに出力する場合は、ibmcloud ce app logs CLI コマンドを使用してイベント・コンシューマー・アプリケーションのログ・ファイルを表示します。 例えば、前の例で作成したアプリケーションのログを表示するには、以下のようにします。

ibmcloud ce application logs --application myapp

出力例

Getting logs for all instances of application 'myapp'...
OK

myapp-mw25y-1-deployment-8579d868f4-ssfnr/user-container:
Listening on port 8080
2021-04-13 17:22:08 - Received:
URL: /
Header: Accept-Encoding=[gzip]
Header: Ce-Id=[d2faa29c-8088-410f-bb30-416085c52a0b]
Header: Ce-Source=[/apis/v1/namespaces/81fvkfqi3n6/pingsources/mycronevent]
Header: Ce-Specversion=[1.0]
Header: Ce-Time=[2021-04-13T17:22:00.059682656Z]
Header: Ce-Type=[dev.knative.sources.ping]
Header: Content-Length=[0]
Header: Forwarded=[for=172.30.136.209;proto=http, for=172.30.48.203]
Header: K-Proxy-Request=[activator]
Header: Traceparent=[00-b13196fe439b6d7d67f3205b2f655788-e9fee441cd41158c-00]
Header: User-Agent=[Go-http-client/1.1]
Header: X-B3-Sampled=[0]
Header: X-B3-Spanid=[1dd2d76079811204]
Header: X-B3-Traceid=[710b7c383682d0cd1dd2d76079811204]
Header: X-Envoy-Attempt-Count=[1]
Header: X-Envoy-Decorator-Operation=[myapp-mw25y-1.81fvkfqi3n6.svc.cluster.local:80/*]
Header: X-Envoy-Internal=[true]
Header: X-Envoy-Peer-Metadata=[ChQKDkFQUF9DT05UQUlORVJTEgIaAAoaCgpDTFVTVEVSX0lEEgwaCkt1YmVybmV0ZXMKGAoNSVNUSU9fVkVSU0lPThIHGgUxLjkuMQq+AwoGTEFCRUxTErMDKrADCh0KA2FwcBIWGhRpc3Rpby1pbmdyZXNzZ2F0ZXdheQoTCgVjaGFydBIKGghnYXRld2F5cwoUCghoZXJpdGFnZRIIGgZUaWxsZXIKNgopaW5zdGFsbC5vcGVyYXRvci5pc3Rpby5pby9vd25pbmctcmVzb3VyY2USCRoHdW5rbm93bgoZCgVpc3RpbxIQGg5pbmdyZXNzZ2F0ZXdheQoZCgxpc3Rpby5pby9yZXYSCRoHZGVmYXVsdAowChtvcGVyYXRvci5pc3Rpby5pby9jb21wb25lbnQSERoPSW5ncmVzc0dhdGV3YXlzCiAKEXBvZC10ZW1wbGF0ZS1oYXNoEgsaCTU1YjU0N2Y0ZgoSCgdyZWxlYXNlEgcaBWlzdGlvCjkKH3NlcnZpY2UuaXN0aW8uaW8vY2Fub25pY2FsLW5hbWUSFhoUaXN0aW8taW5ncmVzc2dhdGV3YXkKLwojc2VydmljZS5pc3Rpby5pby9jYW5vbmljYWwtcmV2aXNpb24SCBoGbGF0ZXN0CiIKF3NpZGVjYXIuaXN0aW8uaW8vaW5qZWN0EgcaBWZhbHNlChoKB01FU0hfSUQSDxoNY2x1c3Rlci5sb2NhbAouCgROQU1FEiYaJGlzdGlvLWluZ3Jlc3NnYXRld2F5LTU1YjU0N2Y0Zi10aHN4cAobCglOQU1FU1BBQ0USDhoMaXN0aW8tc3lzdGVtCl0KBU9XTkVSElQaUmt1YmVybmV0ZXM6Ly9hcGlzL2FwcHMvdjEvbmFtZXNwYWNlcy9pc3Rpby1zeXN0ZW0vZGVwbG95bWVudHMvaXN0aW8taW5ncmVzc2dhdGV3YXkKFwoRUExBVEZPUk1fTUVUQURBVEESAioACicKDVdPUktMT0FEX05BTUUSFhoUaXN0aW8taW5ncmVzc2dhdGV3YXk=]
Header: X-Envoy-Peer-Metadata-Id=[router~172.30.48.203~istio-ingressgateway-55b547f4f-thsxp.istio-system~istio-system.svc.cluster.local]
Header: X-Forwarded-For=[172.30.136.209, 172.30.48.203, 172.30.167.171]
Header: X-Forwarded-Proto=[http]
Header: X-Request-Id=[fe8d6cec-f0e4-47c2-b9ae-81764cb377bc]

ロギングについて詳しくは、ログの表示を参照してください。

コード・サンプルがさらに必要ですか? IBM Cloud Code Engine GitHub repoをチェックアウトします。

アプリケーションに配信されるイベントの cron ヘッダーと本文の情報

アプリケーションに配信されるすべてのイベントは、HTTP POST メッセージとして受信されます。 イベントには特定の HTTP ヘッダーが含まれており、イベントの本文 (ビジネス・ロジック) を確認しなくても、イベントに関する重要な情報を素早く判別することができます。 詳しくは「CloudEvents スペックを参照のこと。

ヘッダー

以下の表は、定期タイマー(cron)イベントのヘッダーについて説明したものである:

イベントのヘッダーフィールド
ヘッダー 説明
ce-id イベントの固有 ID。ただし、イベントが再生された場合は、同じ ID が割り当てられます。
ce-source このイベントがイベント・プロデューサーから生成された場所を示す URI 参照。 cron イベントの場合、このヘッダーは、プロジェクトのサブドメインと cron サブスクリプションの名前が含まれた URI 参照で、/apis/v1/namespaces/[PROJECT_SUBDOMAIN]/pingsources/[SUBSCRIPTION_NAME] という形式になります。
ce-specversion CloudEvents 仕様のバージョン。 この値は常に 1.0 です。
ce-time イベントが生成された時刻。
ce-type イベントのタイプ。 cron イベントの場合、これは dev.knative.sources.ping です。

出力例

ce-id: c329ed76-5004-4383-a3cc-c7a9b82e3ac6
ce-source: /apis/v1/namespaces/6b0v3x9xek5/pingsources/mycronevent
ce-specversion: 1.0
ce-time: 2021-02-26T19:19:00.497637287Z
ce-type: dev.knative.sources.ping

HTTP 本文

HTTP 本文は、イベントそのものが入っており、サブスクリプションの作成時または更新時に指定した形式になります。

関数の定期タイマー(cron)イベントの購読

コンソールまたはCLIから定期タイマー購読を操作できます。

イベントはHTTP POSTリクエストとして関数に送信される。 イベントに含まれる情報について詳しくは、イベントの HTTP ヘッダーおよび本文の情報を参照してください。

コンソールから機能の定期タイマー(cron)イベントを購読する

コンソールから関数の周期タイマーイベントサブスクリプションを作成および更新できます。

開始前に

/**
 * The `main` function is the entry-point into the function.
 * It has one optional argument 'params', which carries all the
 * parameters the function was invoked with.
*/
async function main(params) {

  // add process environment variables
  params.env = process.env

  // print recognizable string to the log
  console.log('Function invocation via cron subscription');

  // log params object, so invocation can be observed in the logs
  console.dir(params);

  // craft a simple HTTP RC 200 response,
  // which also echos the params object
  response = {
    statusCode: 200,
    headers: {
      'Content-Type': 'application/json;charset=utf-8'
    },
    body: params
  };
  return response
}

コンソールからファンクションの周期タイマーイベントサブスクリプションを作成および更新するには、以下の手順を実行します。

  1. Code EngineからProjectsページから、プロジェクトに移動します。

  2. 「概要」ページで、**「イベント・サブスクリプション (Event subscriptions)」**をクリックします。

  3. 「イベント・サブスクリプション (Event subscriptions)」ページで**「作成」**をクリックして、サブスクリプションを作成します。

  4. イベントサブスクリプションの作成ページから、以下のステップを完了します:

    1. イベント・タイプの場合は、「定期的タイマー」タイルを選択します。 **「次へ」**をクリックします。
    2. **「一般」**に、定期タイマー・サブスクリプションの名前 (例えば myptimer) を入力します。 オプションで、イベント属性を指定できます。 定期タイマー・イベントのコンシューマーがアプリケーションの場合、使用できるイベント属性は HTTP ヘッダーとなることに注意してください。 イベント・コンシューマーが関数の場合、イベント属性は、 params オブジェクトの __ce_headers プロパティーでキーと値のペアとして使用できます。 **「次へ」**をクリックして、先に進みます。
    3. **「スケジュール」**に、イベントのタイミングに関する情報を指定します。 定期タイマーイベントプロデューサーは、インターバルの詳細を指定するために、標準的なcrontab構文を使用する。 提供されているパターンから間隔を選択するか、0 0 * * * (これは、毎日午前 0 時にイベントを発生させることを指定している) などの独自のカスタム cron 式を入力します。 この例では、毎日、毎時、毎分のスケジュール・パターンを選択します。 cron 式が自動的に生成されることに注意してください。 日、時、分のパターンと cron 式は協定世界時 (UTC) で表されます。 スケジュールを指定しない場合、このイベント・サブスクリプションは 1 分ごとにイベントを送信します。 予定されているスケジュール済みのイベントのリストが表示されます。 これらのスケジュール済みイベントは、ご使用のタイム・ゾーンの形式で表示されることに注意してください。 **「次へ」**をクリックして、先に進みます。
    4. **「カスタム・イベント・データ (Custom event data)」**に、イベント・メッセージの本文に含めるデータを入力します。 メッセージは、プレーン・テキストまたは base64 形式で指定できます。 この例では、イベント・メッセージの本文として hello stranger というテキストを指定します。 メッセージが base64 形式の場合、イベントの送信時にメッセージをデコードすることを選択できます。 カスタム・イベント・データのコンテンツ・タイプを指定することもできます。 **「次へ」**をクリックして、先に進みます。
    5. 「イベント・コンシューマー」 で、コンポーネント・タイプ Function を選択し、イベントを受信する関数を指定します。 定義された関数のリストから選択できることに注目してほしい。 この例では、サンプル・インライン・コードを使用する myfun 関数を使用します。 関数をまだ作成していない場合は、定期タイマー・サブスクリプションの作成後に、関数の名前と インライン・コードを使用した関数ワークロードの作成 を指定できます。 **「次へ」**をクリックして、先に進みます。
    6. **「サマリー」**で、定期タイマー・イベント・サブスクリプションの設定を確認し、必要に応じて変更を加えます。 準備ができたら、Create(作成)をクリックし、Periodic timer(定期タイマー)サブスクリプションを作成します。
  5. 定期タイマーのサブスクリプションが作成されたので、イベントサブスクリプションページに移動し、定義されたサブスクリプションのリストを表示します

  6. サブスクリプションを更新するには、定期タイマーのサブスクリプションページに移動します。 イベント・サブスクリプションのページで、更新するサブスクリプションの名前をクリックします。

  7. 定期タイマーの購読ページから、イベントメッセージのデータを変更します。 「カスタム・イベント・データ」 タブで、イベント・データを { "hello": "world" } に変更し、 「カスタム・イベント・データのコンテンツ・タイプ」 として application/json を選択します。 **「保存」**をクリックして変更を保存します。

  8. myfun 関数は、 params オブジェクト全体をログ・ファイルに出力するサンプル・インライン・コードを使用するため、ログを表示して、関数が呼び出されたことを確認できます。 myfun イベント・コンシューマー関数の関数ログを表示し、 params オブジェクトにキーと値のペア hello: world が含まれていることを確認します。 params オブジェクトの body フィールドに Base64 エンコード値が含まれていることも確認できます。 { "hello": "world" } コンソールからの機能ログの表示 を参照してください。

CLIで機能の定期タイマー(cron)イベントを購読する

開始前に

/**
 * The `main` function is the entry-point into the function.
 * It has one optional argument 'params', which carries all the
 * parameters the function was invoked with.
*/
async function main(params) {

  // add process environment variables
  params.env = process.env

  // print recognizable string to the log
  console.log('Function invocation via cron subscription');

  // log params object, so invocation can be observed in the logs
  console.dir(params);

  // craft a simple HTTP RC 200 response,
  // which also echos the params object
  response = {
    statusCode: 200,
    headers: {
      'Content-Type': 'application/json;charset=utf-8'
    },
    body: params
  };
  return response
}

コードを sample_inline_code.js というファイルに保存し、以下のコマンドを使用して関数を作成します。

ibmcloud ce function create --name myfun --runtime nodejs --inline-code ./sample_inline_code.js

CLIを使用して機能を周期タイマー契約に接続するには、「ibmcloud ce sub cron create コマンドを使用する:

ibmcloud ce sub cron create --name NAME --destination-type function --destination FUNCTION_NAME --schedule CRON

例えば、毎日午前0時に'myfun というアプリにイベントを送信するcronサブスクリプションを作成する:

ibmcloud ce sub cron create --name mycronevent --destination-type function --destination myfun --schedule '0 0 * * *'

スケジュール値は、単一ストリングとして処理されるように、引用符で囲む必要があります。

以下の表は、前述の例の sub cron create コマンドで使用されるオプションの要約です。 コマンドとそのオプションについて詳しくは、ibmcloud ce subscription cron create コマンドを参照してください。

コマンド・オプション
オプション 説明
--name cron イベント・ソースの名前。 この値は必須です。
--destination イベント・プロデューサーからイベントを受け取る、現在のプロジェクト内のCode Engineアプリケーション、関数、またはジョブの名前。 この値は必須です。
--destination-type destination のタイプ (この場合は function)。 デフォルト値はappです。
--schedule イベントをトリガーする頻度を、crontab 形式でスケジュールします。 例えば、2 分間隔は */2 * * * * (文字列形式) と指定します。 デフォルトでは、cron イベントは 1 分間隔でトリガーされ、UTC タイム・ゾーンに設定されます。 タイム・ゾーンを変更するには、--time-zone オプションを使用します。 この値はオプションです。
**sub cron**コマンドを使用するためのヒント
  • 周期タイマーイベントのデータサイズは最大4096バイトに制限される。 したがって、--data オプションまたは --data-base64 オプションを使用する場合は、最大 4096 バイト送信できます。 詳しくは、Code Engine の制限と割り当て量を参照してください。
  • cron サブスクリプションでは、デフォルトでは UTC タイム・ゾーンが使用されます。 タイム・ゾーンを変更するには、--time-zone コマンドまたは sub cron create コマンドで sub cron update オプションを指定します。 有効なタイムゾーン値については、 TZデータベースを参照してください。 kubectl を使用してサブスクリプションを作成する場合は、タイム・ゾーンを指定しないと、UTC タイム・ゾーンが割り当てられるので注意してください。
  • アプリまたはジョブ・イベント・コンシューマーをまだ作成していない場合は、**sub cron create**コマンドで--forceオプションを使用して、cron イベント・サブスクリプションを強制的に作成します。 クーロン・サブスクリプションの作成後に、関数の名前を指定できます。 関数の作成

cron サブスクリプションが正常に作成されたことを確認するには、ibmcloud ce sub cron get --name mycronevent コマンドを実行します。

出力例

Getting cron event subscription 'mycronevent'...
OK

Name:          mycronevent
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           2m21s
Created:       2024-03-14T13:37:51-05:00

Destination Type:  function
Destination:       myfun
Schedule:          0 0 * * *
Time Zone:         UTC
Ready:             true

Events:
  Type    Reason                  Age                Source                 Messages
  Normal  FinalizerUpdate         20s                pingsource-controller  Updated "mycronevent" finalizers
  Normal  PingSourceSynchronized  20s                pingsource-controller  PingSource adapter is synchronized

この出力から、デスティネーション関数は「myfun、スケジュールは「0 0 * * *(毎日午前0時)、レディ状態は「true であることがわかる。

CLI を使用したcron サブスクリプションの更新

CLI を使用して cron サブスクリプションを更新するには、ibmcloud ce subscription cron update コマンドを使用します。 例えば、'mycronevent サブスクリプションを更新して、2分ごとに'myfun という関数にイベントを送信するようにスケジュールを変更します:

ibmcloud ce sub cron update --name mycronevent --schedule '*/2 * * * *'

cron サブスクリプションが正常に更新されたことを確認するには、ibmcloud ce sub cron get --name mycronevent コマンドを実行します。 サブスクリプションのスケジュールは更新されています。

出力例

Getting cron event subscription 'mycronevent'...
OK

Name:          mycronevent
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           37m41s
Created:       2024-03-14T14:04:51-05:00

Destination Type:  function
Destination:       myfun
Schedule:          */2 * * * *
Time Zone:         UTC
Ready:             true

Events:
  Type    Reason                  Age                Source                 Messages
  Normal  FinalizerUpdate         20s                pingsource-controller  Updated "mycronevent" finalizers
  Normal  PingSourceSynchronized  20s                pingsource-controller  PingSource adapter is synchronized

チュートリアルを試すには、 定期タイマー (cron) イベントのサブスクライブを参照してください。 コード・サンプルがさらに必要ですか? IBM Cloud Code Engine GitHub repoをチェックアウトします。

コンソールから関数のイベント情報を見る

イベント予約に関する情報を見るには:

  1. Code EngineからProjectsページから、プロジェクトに移動します。
  2. 「概要」ページで、**「イベント・サブスクリプション (Event subscriptions)」**をクリックし、定義済みのサブスクリプションのリストを表示します。

サンプルの'codeengine ジョブのように、関数がログファイルに情報を出力する場合は、その関数のログファイルを表示します。 コンソールでのジョブのログの表示を参照してください。

関数に配信されるイベントのCronヘッダーとボディ情報

関数に配信されるすべてのイベントは、HTTP POSTメッセージとして受信されます。 イベントには、イベントに関する情報のキー・ビットを素早く判別するのに役立つ、特定の HTTP ヘッダーが含まれています。 HTTP ヘッダーは、関数の呼び出しに使用される params オブジェクトの __ce_headers プロパティーに保管されます。 詳しくは「CloudEvents スペックを参照のこと。

ヘッダー

以下の表では、定期タイマー (cron) イベントの __ce_headers のキーと値のペアについて説明します。

イベント用ヘッダーファイル
ヘッダー 説明
Ce-Id イベントの固有 ID。ただし、イベントが再生された場合は、同じ ID が割り当てられます。
Ce-Source このイベントがイベント・プロデューサーから生成された場所を示す URI 参照。 cron イベントの場合、このヘッダーは、プロジェクトのサブドメインと cron サブスクリプションの名前が含まれた URI 参照で、/apis/v1/namespaces/[PROJECT_SUBDOMAIN]/pingsources/[SUBSCRIPTION_NAME] という形式になります。
Ce-Specversion CloudEvents 仕様のバージョン。 この値は常に 1.0 です。
Ce-Time イベントが生成された時刻。
Ce-Type イベントのタイプ。 cron イベントの場合、これは dev.knative.sources.ping です。

出力例

  __ce_headers: {
     "Ce-Id": "b861440f-0e17-44ab-9bab-826da0c9713f",
     "Ce-Source": "/apis/v1/namespaces/7iuw2furi55/pingsources/mycronevent",
     "Ce-Specversion": "1.0",
     "Ce-Time": "2024-06-02T10:56:00.062572905Z",
     "Ce-Type": "dev.knative.sources.ping"
  }

HTTP 本文

HTTPボディはカスタムイベントデータを含み、あなたがサブスクリプションを作成または更新するときに指定したフォーマットである。 カスタム・イベント・データには、 params オブジェクトの body プロパティーからアクセスできます。

カスタム・イベント・データが hello stranger に設定され、 「カスタム・イベント・データのコンテンツ・タイプ」text/plain に設定されたイベント呼び出しの params オブジェクトの例:

  {
    "__ce_headers": {
        "Ce-Id": "b861440f-0e17-44ab-9bab-826da0c9713f",
        "Ce-Source": "/apis/v1/namespaces/7iuw2furi55/pingsources/mycronevent",
        "Ce-Specversion": "1.0",
        "Ce-Time": "2024-06-02T10:56:00.062572905Z",
        "Ce-Type": "dev.knative.sources.ping",
        "Content-Length": "14",
        "Content-Type": "text/plain"
    },
    "body": "hello stranger"
  }

「カスタム・イベント・データのコンテンツ・タイプ」application/json に設定されている場合、 body の値は Base64 エンコードされます。

ジョブの定期タイマー (cron) イベントのサブスクライブ

コンソールまたはCLIから定期タイマー購読を操作できます。

ジョブはイベントを環境変数として受け取ります。 cron によって送信される環境変数について詳しくは、イベントの環境変数を参照してください。

コンソールでのジョブの定期タイマー (cron) イベントのサブスクライブ

コンソールから、ジョブの周期タイマーイベントサブスクリプションを作成および更新できます。

開始前に

コンソールからジョブの定期タイマーイベントサブスクリプションを作成および更新するには、以下の手順を実行します。

  1. Code EngineからProjectsページから、プロジェクトに移動します。

  2. 「概要」ページで、**「イベント・サブスクリプション (Event subscriptions)」**をクリックします。

  3. 「イベント・サブスクリプション (Event subscriptions)」ページで**「作成」**をクリックして、サブスクリプションを作成します。

  4. イベントサブスクリプションの作成ページから、以下のステップを完了します:

    1. **「一般」**に、定期タイマー・サブスクリプションの名前 (例えば myptimer2) を入力します。 オプションで、イベント属性を指定できます。 定期タイマー・イベントのコンシューマーがアプリケーションの場合、使用できるイベント属性は HTTP ヘッダーとなることに注意してください。 イベントのコンシューマーがジョブの場合は、使用できるイベント属性は環境変数になります。 **「次へ」**をクリックして、先に進みます。
    2. **「スケジュール」**に、イベントのタイミングに関する情報を指定します。 定期タイマーイベントプロデューサーは、インターバルの詳細を指定するために、標準的なcrontab構文を使用する。 提供されているパターンから間隔を選択するか、0 0 * * * (これは、毎日午前 0 時にイベントを発生させることを指定している) などの独自のカスタム cron 式を入力します。 この例では、毎日、毎時、毎分のスケジュール・パターンを選択します。 cron 式が自動的に生成されることに注意してください。 日、時、分のパターンと cron 式は協定世界時 (UTC) で表されます。 スケジュールを指定しない場合、このイベント・サブスクリプションは 1 分ごとにイベントを送信します。 予定されているスケジュール済みのイベントのリストが表示されます。 これらのスケジュール済みイベントは、ご使用のタイム・ゾーンの形式で表示されることに注意してください。 **「次へ」**をクリックして、先に進みます。
    3. **「カスタム・イベント・データ (Custom event data)」**に、イベント・メッセージの本文に含めるデータを入力します。 メッセージは、プレーン・テキストまたは base64 形式で指定できます。 この例では、イベント・メッセージの本文として hello stranger というテキストを指定します。 メッセージが base64 形式の場合、イベントの送信時にメッセージをデコードすることを選択できます。 カスタム・イベント・データのコンテンツ・タイプを指定することもできます。 **「次へ」**をクリックして、先に進みます。
    4. **「イベント・コンシューマー (Event consumer)」**に、イベントを受信するアプリケーションまたはジョブを指定します。 定義済みのアプリケーションとジョブのリストから選択できることに注意してください。 この例では、icr.io/codeengine/codeengineイメージを参照するmyjobジョブを使用します。 まだジョブを作成していない場合は、ジョブ名を指定し、定期タイマーのサブスクリプションを作成した後に ジョブを作成 することができます。 **「次へ」**をクリックして、先に進みます。
    5. **「サマリー」**で、定期タイマー・イベント・サブスクリプションの設定を確認し、必要に応じて変更を加えます。 準備ができたら、Create(作成)をクリックし、Periodic timer(定期タイマー)サブスクリプションを作成します。
  5. 定期タイマーのサブスクリプションが作成されたので、イベントサブスクリプションページに移動し、定義されたサブスクリプションのリストを表示します

  6. サブスクリプションを更新するには、定期タイマーのサブスクリプションページに移動します。 イベント・サブスクリプションのページで、更新するサブスクリプションの名前をクリックします。

  7. 定期タイマーの購読ページから、イベントメッセージのデータを変更します。 **「カスタム・イベント・データ (Custom event data)」**タブで、イベント・データを hello sunshine に変更します。 **「保存」**をクリックして変更を保存します。

  8. myjob ジョブは、ログ・ファイルに情報を出力するサンプル codeengine アプリケーションを参照しているので、そのログを確認します。 myjob イベント・コンシューマー・ジョブのジョブ・ログを表示し、イベント・メッセージが hello sunshine であることを確認します。 コンソールでのジョブのログの表示を参照してください。

CLI でのジョブの定期タイマー (cron) イベントのサブスクライブ

開始前に

ibmcloud ce job create --name myjob --image icr.io/codeengine/codeengine

ibmcloud ce sub cron create コマンドを使用して、CLIでジョブを定期的なタイマー・サブスクリプションに接続する。

ibmcloud ce sub cron create --name NAME --destination-type job --destination JOB_NAME --schedule CRON

例えば、5 分間隔で myjob というジョブにイベントを送信する cron サブスクリプションを作成するには、次のようにします。

ibmcloud ce sub cron create --name mycronevent --destination-type job --destination myjob --schedule '*/5 * * * *' --data '{ "message": "Hello world!" }' --content-type application/json

スケジュール値は、単一ストリングとして処理されるように、引用符で囲む必要があります。

以下の表は、この例の sub cron create コマンドで使用されるオプションの要約です。 コマンドとそのオプションについて詳しくは、ibmcloud ce subscription cron create コマンドを参照してください。

コマンド・オプション
オプション 説明
--name cron イベント・ソースの名前。
--destination-type destination のタイプ (この場合は job)。
--destination イベント・プロデューサーからイベントを受信する、現行プロジェクトの Code Engine ジョブの名前。
--schedule イベントをトリガーする頻度を、crontab 形式でスケジュールします。 例えば、2 分間隔は */2 * * * * (文字列形式) と指定します。 デフォルトでは、cron イベントは 1 分間隔でトリガーされ、UTC タイム・ゾーンに設定されます。 タイム・ゾーンを変更するには、--time-zone オプションを使用します。 この値はオプションです。
**sub cron**コマンドを使用するためのヒント
  • 周期タイマーイベントのデータサイズは最大4096バイトに制限される。 したがって、--data オプションまたは --data-base64 オプションを使用する場合は、最大 4096 バイト送信できます。 詳しくは、Code Engine の制限と割り当て量を参照してください。
  • cron サブスクリプションでは、デフォルトでは UTC タイム・ゾーンが使用されます。 タイム・ゾーンを変更するには、--time-zone コマンドまたは sub cron create コマンドで sub cron update オプションを指定します。 有効なタイムゾーン値については、 TZデータベースを参照してください。 kubectl を使用してサブスクリプションを作成する場合は、タイム・ゾーンを指定しないと、UTC タイム・ゾーンが割り当てられるので注意してください。
  • アプリまたはジョブ・イベント・コンシューマーをまだ作成していない場合は、**sub cron create**コマンドで--forceオプションを使用して、cron イベント・サブスクリプションを強制的に作成します。 アプリケーションまたはジョブの名前を指定し、cron サブスクリプションの作成後に、アプリケーションの作成または ジョブの作成を行うことができます。

cron サブスクリプションが正常に作成されたことを確認するには、ibmcloud ce sub cron get --name mycronevent を実行します。

出力例

Getting cron source 'mycronevent'...
OK

Name:          mycronevent
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           54s
Created:       2021-04-13T11:38:50-05:00

Destination Type:  job
Destination:       myjob
Schedule:          */5 * * * *
Time Zone:         UTC
Content Type:      application/json
Data:              { "message": "Hello world!" }
Ready:             true

Events:
    Type     Reason            Age        Source                 Messages
    Normal   FinalizerUpdate   12s        pingsource-controller  Updated "mycronevent" finalizers

この出力から、宛先ジョブが myjob、スケジュールが */5 * * * * (5 分間隔)、Ready 状態が true であることがわかります。

サブスクリプションで作成されたジョブ実行は 10 分後に削除されます。

CLI (ジョブ) を使用した cron サブスクリプションの更新

CLI を使用して cron サブスクリプションを更新するには、ibmcloud ce subscription cron update コマンドを使用します。 例えば、mycronevent サブスクリプションを更新して、myapp というアプリにイベントを 2 分ごとに送信するようにスケジュールを変更するには、次のようにします。

ibmcloud ce sub cron update --name mycronevent --schedule '*/2 * * * *'

cron サブスクリプションが正常に更新されたことを確認するには、ibmcloud ce sub cron get --name mycronevent コマンドを実行します。 サブスクリプションのスケジュールは更新されています。

出力例

Getting cron source 'mycronevent'...
OK

Name:          mycronevent
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           2m21s
Created:       2021-08-31T16:00:49-04:00

Destination Type:  job
Destination:       myjob
Schedule:          */2 * * * *
Time Zone:         UTC
Content Type:      application/json
Data:              { "message": "Hello world!" }
Ready:             true

Events:
  Type    Reason                       Age               Source                 Messages
  Normal  PingSourceSynchronized       7s (x3 over 13m)  pingsource-controller  PingSource adapter is synchronized

コンソールでのジョブのイベント情報の表示

イベント・サブスクリプションに関する情報を表示するには、次のようにします。

  1. Code EngineからProjectsページから、プロジェクトに移動します。
  2. 「概要」ページで、**「イベント・サブスクリプション (Event subscriptions)」**をクリックし、定義済みのサブスクリプションのリストを表示します。

サンプル codeengine ジョブのように、ジョブが情報をログ・ファイルに出力する場合は、イベント・コンシューマー・ジョブのログ・ファイルを表示します。 コンソールでのジョブのログの表示を参照してください。

CLI でのジョブのイベント情報の表示

サンプル codeengine ジョブのように、ジョブが情報をログ・ファイルに出力する場合は、定期タイマー (cron) イベントから作成されたジョブ実行を見つけ、そのジョブ実行のログを確認することができます。 例えば、前の例のジョブのジョブ実行を見つけるには、以下のようにします。

ibmcloud ce jobrun list

出力例

Listing job runs...
OK

Name         Failed  Pending  Requested  Running  Succeeded  Unknown  Age
myjob-kd829  0       0        0          0        1          0        43s

ジョブ実行名を指定して、ジョブ実行のログを表示します。

ibmcloud ce jobrun logs --jobrun myjob-kd829

出力例

Hello from helloworld! I'm a batch job! Index: 0

Hello World from:
. ___  __  ____  ____
./ __)/  \(    \(  __)
( (__(  O )) D ( ) _)
.\___)\__/(____/(____)
.____  __ _   ___  __  __ _  ____
(  __)(  ( \ / __)(  )(  ( \(  __)
.) _) /    /( (_ \ )( /    / ) _)
(____)\_)__) \___/(__)\_)__)(____)

Some Env Vars:
--------------
CE_DATA={ "message": "Hello world!" }
CE_ID=abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
CE_SOURCE=/apis/v1/namespaces/1234abcd1a2/pingsources/mycroneventjob
CE_SPECVERSION=1.0
CE_TIME=2021-04-13T17:41:00.429658447Z
CE_TYPE=dev.knative.sources.ping
CONTENT_TYPE=application/json
HOME=/root
HOSTNAME=myjob-mpps4-0-0
JOB_INDEX=0
KUBERNETES_PORT=tcp://172.21.0.1:443
KUBERNETES_PORT_443_TCP=tcp://172.21.0.1:443
KUBERNETES_PORT_443_TCP_ADDR=172.21.0.1
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_SERVICE_HOST=172.21.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
SHLVL=1

ジョブ実行のログ情報は1時間しか続かないことに注意してください。 ロギングについて詳しくは、ログの表示を参照してください。

cron によって送信される環境変数について詳しくは、イベントの環境変数を参照してください。

コード・サンプルがさらに必要ですか? IBM Cloud Code Engine GitHub repoをチェックアウトします。

ジョブに配信されるイベントの環境変数

ジョブに配信されるすべてのイベントは、環境変数として受信されます。 これらの環境変数は「CE_」というプレフィックスを含み、「CloudEvents 仕様に基づいている。

各イベントには、イベントがジョブに配信されるたびに表示されるいくつかの共通の環境変数が含まれています。 各イベントの実際の変数のセットには、これより多くのオプションが含まれる可能性があります。 詳しくは'CloudEvent 属性を参照。

cron イベントに固有の環境変数について、以下の表で説明します。

イベントの環境変数
変数 説明
CE_DATA イベントのデータ (本文)。 クーロン・イベントについての CE_DATA を参照してください。
CE_ID イベントの固有 ID。ただし、イベントが再生された場合は、同じ ID が割り当てられます。
CE_SOURCE このイベントがイベント・プロデューサーから生成された場所を示す URI 参照。 cron イベントの場合、これは、プロジェクトのサブドメインと cron サブスクリプションの名前が含まれた URI 参照で、/apis/v1/namespaces/[PROJECT_SUBDOMAIN]/pingsources/[SUBSCRIPTION_NAME] という形式になります。
CE_SPECVERSION CloudEvents 仕様のバージョン。 この値は常に 1.0 です。
CE_TIME イベントが生成された時刻。
CE_TYPE イベントのタイプ。 cron イベントの場合、これは dev.knative.sources.ping です。

CE_DATA環境変数

周期的タイマーイベントの場合、'CE_DATA 環境変数はイベントそのものを含み、サブスクリプションを作成または更新するときに指定したフォーマットである。

出力例

CE_DATA={ "message": "Hello world!" }
CE_ID=abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
CE_SOURCE=/apis/v1/namespaces/1234abcd1a2/pingsources/mycroneventjob
CE_SPECVERSION=1.0
CE_TIME=2021-04-13T17:41:00.429658447Z
CE_TYPE=dev.knative.sources.ping

追加のイベント属性の定義

サブスクリプションを作成するときに、生成されるイベントに含める追加のイベント属性を定義できます。 これらのイベント属性は、イベント配信で他の CloudEvent 属性と同様に表示されます。 既存の CloudEvent 属性の名前を指定することにした場合、イベントに含まれていた元の値がオーバーライドされます。 詳しくは、他の CloudEvents 仕様を使用できますか? を参照してください。

コンソールでは、**「一般」**タブで、定期タイマー (cron) イベント・サブスクリプションに対しイベント属性をキーと値のペアとして指定できます。

CLI で追加の属性を定義するには、ibmcloud ce sub cron create CLI コマンドで--extensionオプションを使用します。

サブスクリプションの削除

不要になった定期タイマー (cron) サブスクリプションは削除できます。

コンソールからのサブスクリプションの削除

  1. Code EngineからProjectsページから、プロジェクトに移動します。
  2. 「概要」ページで、**「イベント・サブスクリプション (Event subscriptions)」**をクリックし、定義済みのサブスクリプションのリストを表示します。
  3. アプリケーションまたはジョブから削除するサブスクリプションを、サブスクリプションのリストから削除します。

アプリまたはジョブを削除しても、サブスクリプションは削除されません。

CLI でのサブスクリプションの削除

ibmcloud ce sub cron delete コマンドまたは ibmcloud ce sub cos delete コマンドを実行してサブスクリプションを削除できます。

例えば、mycronevent2 という cron サブスクリプションを削除します。

ibmcloud ce subscription cron delete --name mycronevent2

アプリまたはジョブを削除しても、サブスクリプションは削除されません。 その代わりに、CLI で、サブスクリプションの Ready 状態が false になります。サブスクリプションは、アプリケーションまたはジョブが使用可能であることに依存しているからです。 そのアプリまたはジョブ (または同じ名前の別のアプリまたはジョブ) を再作成すると、サブスクリプションが再び関連付けられ、Ready 状態が true になります。