使用定期計時器 (cron) 事件生產者
定期計時器 (cron) 事件生產者會定期產生事件。 此間隔可以依分鐘、小時、日或月或數個不同時間間隔的組合來排程。 您可以訂閱 Code Engine 應用程式、函數及工作,以接收 cron 事件。
定期計時器事件訂閱使用標準 crontab 語法來指定間隔詳細資料,格式為 * * * * *,其中欄位為分鐘、小時、當月日期、一年中的月份及星期幾。 例如,若要排定午夜的事件,請指定 0 0 * * *。 若要排定每個星期五午夜的事件,請指定 0 0 * * 5。 如需 crontab 的相關資訊,請參閱 Crontab。
當您訂閱定期計時器事件生產者時,必須提供訂閱的目的地 (應用程式、函數或工作) 及目的地類型。 如果您未提供排程,則會使用預設值 * * * * * (每分鐘)。
Code Engine 具有專案及訂閱限制內定期計時器訂閱的配額。 如需 Code Engine 限制的相關資訊,請參閱 Code Engine的限制和配額。
訂閱應用程式的定期計時器 (cron) 事件
您可以從主控台或 CLI 使用定期計時器訂閱。
事件會以 HTTP POST 請求的方式傳送給應用程式。 有關事件所包含資訊的詳細資訊,請參閱 HTTP 事件的標頭和正文資訊。
從主控台訂閱應用程式的定期計時器 (cron) 事件
您可以從主控台建立及更新應用程式的定期計時器事件訂閱。
開始之前
- 建立專案。
- 建立應用程式。 例如,建立一個稱為
myapp的應用程式,以使用icr.io/codeengine/cron映像檔。 此映像檔是從cron.go建置,可從 Samples for IBM Cloud Code Engine GitHub repo取得。
請完成下列步驟,從主控台建立及更新應用程式的定期計時器事件訂閱。
-
從 Code Engine 專案頁面,移至您的專案。
-
從「概觀」頁面中,按一下 事件訂閱。
-
從「事件訂閱」頁面中,按一下 建立 以建立訂閱。
-
從「建立事件訂閱」頁面,完成下列步驟:
- 針對 事件類型,選取定期計時器磚。 按下一步。
- 對於 一般,提供定期計時器訂閱的名稱,例如
myptimer。 您可以選擇性地提供事件屬性。 請注意,如果週期性計時器事件消費者是應用程式,則事件屬性可作為 HTTP 標頭。 如果事件消費者是工作,則事件屬性可作為環境變數使用。 按一下下一步繼續。 - 在 排程中,提供事件計時的相關資訊。 定期計時器事件生產者使用標準 crontab 語法來指定間隔詳細資料。 從提供的型樣中選擇您的間隔,或提供您自己的自訂 Cron 表示式 (例如
0 0 * * *),其指定事件在每天午夜發生。 在此範例中,選取每日、每小時、每分鐘的排程型樣。 請注意,會為您產生 cron 表示式。 日、小時和分鐘型樣及 Cron 表示式 採用世界標準時間 (UTC)。 如果您未指定排程,則此事件訂閱會每分鐘傳送一次事件。 即會顯示即將發生的排程事件清單。 請注意,這些即將發生的排程事件會以您的時區顯示。 按一下下一步繼續。 - 對於 自訂事件資料,提供要包含在事件訊息內文中的資料。 您可以將訊息指定為純文字或 Base64 格式。 在此範例中,請指定文字
hello stranger作為事件訊息的內文。 如果訊息採用 Base64 格式,您可以選擇在傳送事件時將訊息解碼。 您也可以指定自訂事件資料的內容類型。 按一下下一步繼續。 - 對於 事件消費者,指定要接收事件的應用程式或工作。 請注意,您可以從已定義的應用程式及工作清單中選擇。 在此範例中,請使用參照
icr.io/codeengine/cron影像的myapp應用程式。 如果您尚未建立應用程式或工作,則可以在建立定期計時器訂閱之後指定應用程式或工作的名稱,並 建立應用程式 或 建立工作。 僅限應用程式,您可以選擇性地指定路徑。 預設情況下,事件會路由到目的地應用程式的根 URL。 您可以透過指定路徑,將事件傳送至應用程式內的不同目的地。 例如,如果訂閱路徑指定/events,則事件會傳送至https://<base application URL>/events。 按一下下一步繼續。 - 對於 摘要,請檢閱定期計時器事件訂閱的設定,並在必要時進行變更。 備妥時,請按一下 建立,以建立定期計時器訂閱。
-
現在您的定期計時器訂閱已創建,請前往事件訂閱頁面以 查看已定義訂閱的清單。
-
若要更新訂閱,請導覽至定期計時器訂閱頁面。 從「事件訂閱」頁面中,按一下您要更新的訂閱名稱。
-
從定期計時器訂閱頁面中,變更事件訊息中的資料。 從 自訂事件資料 標籤中,將事件資料變更為
hello sunshine。 按一下儲存,以儲存您的變更。 -
因為
myapp應用程式會參照範例cron應用程式 (將資訊列印至日誌檔),所以您可以檢視日誌。 檢視myapp事件消費者應用程式的應用程式日誌,並查看事件訊息是否為hello sunshine。 請參閱 從主控台檢視應用程式日誌。
使用 CLI 訂閱應用程式的定期計時器 (cron) 事件
開始之前
- 設定 Code Engine CLI 環境。
- 建立專案。
- 建立應用程式。 例如,建立一個稱為
myapp的應用程式,以使用icr.io/codeengine/cron映像檔。 此映像檔是從cron.go建置,可從 Samples for IBM Cloud Code Engine GitHub repo 取得
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
例如,若要建立 Cron 訂閱,以在每天午夜將事件傳送至稱為 myapp 的應用程式:
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 事件,並設為 UTC 時區。 若要修改時區,請使用 --time-zone 選項。 這是選用值。 |
- 使用
sub cron指令的提示 -
- 預設情況下,事件會路由到目的地應用程式的根 URL。 您可以使用
--path選項,將事件傳送至應用程式內的不同目的地。 例如,如果您的訂閱指定--path /events,則事件會傳送至https://<base application URL>/events。 - 定期計時器事件的資料大小限制為最多 4096 個位元組。 因此,如果您使用
--data選項或--data-base64選項,則最多可以傳送 4096 個位元組。 如需相關資訊,請參閱 Code Engine的限制和配額。 - 依預設,Cron 訂閱會使用
UTC時區。 您可以在sub cron create或sub cron update指令中指定--time-zone選項來變更時區。 如需有效的時區值,請參閱 TZ 資料庫。 請注意,如果您使用kubectl建立訂閱,且未指定時區,則會指派UTC時區。 - 如果您尚未建立應用程式或工作事件消費者,請搭配使用
--force選項與sub cron create指令,以強制建立 Cron 事件訂閱。 您可以指定應用程式或工作的名稱,並在建立 cron 訂閱之後 建立應用程式 或 建立工作。
- 預設情況下,事件會路由到目的地應用程式的根 URL。 您可以使用
若要驗證已順利建立 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 * * * (每天午夜),「備妥」狀態是 true。
使用 CLI 更新 cron 訂閱
若要使用 CLI 更新 cron 訂閱,請使用 ibmcloud ce subscription cron update 指令。 例如,更新 mycronevent 訂閱以變更排程,以每 2 分鐘將事件傳送至稱為 myapp 的應用程式。
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 儲存庫。
從主控台檢視應用程式的事件資訊
若要檢視事件訂閱的相關資訊,請執行下列動作:
- 從 Code Engine 專案頁面,移至您的專案。
- 從「概觀」頁面中,按一下 事件訂閱 以檢視已定義訂閱的清單。
如果您的應用程式像範例 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 儲存庫。
遞送至應用程式之事件的 Cron 標頭及內文資訊
所有傳送至應用程式的事件都是以 HTTP POST 訊息的方式接收。 事件包含某些 HTTP 標頭,可協助您快速判斷事件的關鍵資訊,而無需查看事件的正文(業務邏輯)。 如需相關資訊,請參閱 CloudEvents 規格。
Headers
下表說明定期計時器 (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
}
請完成下列步驟,以從主控台建立及更新功能的定期計時器事件訂閱。
-
從 Code Engine 專案頁面,移至您的專案。
-
從「概觀」頁面中,按一下 事件訂閱。
-
從「事件訂閱」頁面中,按一下 建立 以建立訂閱。
-
從「建立事件訂閱」頁面,完成下列步驟:
- 針對 事件類型,選取定期計時器磚。 按下一步。
- 對於 一般,提供定期計時器訂閱的名稱,例如
myptimer。 您可以選擇性地提供事件屬性。 請注意,如果週期性計時器事件消費者是應用程式,則事件屬性可作為 HTTP 標頭。 如果事件消費者是函數,則可在params物件的__ce_headers內容中以鍵值組形式提供事件屬性。 按一下下一步繼續。 - 在 排程中,提供事件計時的相關資訊。 定期計時器事件生產者使用標準 crontab 語法來指定間隔詳細資料。 從提供的型樣中選擇您的間隔,或提供您自己的自訂 Cron 表示式 (例如
0 0 * * *),其指定事件在每天午夜發生。 在此範例中,選取每日、每小時、每分鐘的排程型樣。 請注意,會為您產生 cron 表示式。 日、小時和分鐘型樣及 Cron 表示式 採用世界標準時間 (UTC)。 如果您未指定排程,則此事件訂閱會每分鐘傳送一次事件。 即會顯示即將發生的排程事件清單。 請注意,這些即將發生的排程事件會以您的時區顯示。 按一下下一步繼續。 - 對於 自訂事件資料,提供要包含在事件訊息內文中的資料。 您可以將訊息指定為純文字或 Base64 格式。 在此範例中,請指定文字
hello stranger作為事件訊息的內文。 如果訊息採用 Base64 格式,您可以選擇在傳送事件時將訊息解碼。 您也可以指定自訂事件資料的內容類型。 按一下下一步繼續。 - 對於 事件消費者,請選擇元件類型
Function,並指定接收事件的功能。 請注意,您可以從已定義的函數清單中選擇。 在此範例中,請使用使用範例行內程式碼的myfun函數。 如果您尚未建立函數,則可以在建立定期計時器訂閱之後指定函數的名稱及 使用行內程式碼建立函數工作量。 按一下下一步繼續。 - 對於 摘要,請檢閱定期計時器事件訂閱的設定,並在必要時進行變更。 備妥時,請按一下 建立,以建立定期計時器訂閱。
-
現在您的定期計時器訂閱已創建,請前往事件訂閱頁面以 查看已定義訂閱的清單。
-
若要更新訂閱,請導覽至定期計時器訂閱頁面。 從「事件訂閱」頁面中,按一下您要更新的訂閱名稱。
-
從定期計時器訂閱頁面中,變更事件訊息中的資料。 從 自訂事件資料 標籤中,將事件資料變更為
{ "hello": "world" },並選擇application/json作為 自訂事件資料的內容類型。 按一下儲存,以儲存您的變更。 -
因為
myfun函數使用範例行內程式碼 (將完整params物件列印至日誌檔),所以您可以檢視日誌以驗證是否已呼叫該函數。 檢視myfun事件消費者函數的函數日誌,並查看params物件是否包含鍵值組hello: world。 您也可以看到params物件的body欄位包含 Base64 編碼值{ "hello": "world" }請參閱 從主控台檢視函數日誌。
使用 CLI 訂閱功能的定期計時器 (cron) 事件
開始之前
- 設定 Code Engine CLI 環境。
- 建立專案。
- 建立函數。 例如,建立稱為
myfun的函數,其使用下列範例行內程式碼:
/**
* 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
例如,若要建立 Cron 訂閱,以在每天午夜將事件傳送至稱為 myfun 的應用程式:
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 事件,並設為 UTC 時區。 若要修改時區,請使用 --time-zone 選項。 這是選用值。 |
- 使用
sub cron指令的提示 -
- 定期計時器事件的資料大小限制為最多 4096 個位元組。 因此,如果您使用
--data選項或--data-base64選項,則最多可以傳送 4096 個位元組。 如需相關資訊,請參閱 Code Engine的限制和配額。 - 依預設,Cron 訂閱會使用
UTC時區。 您可以在sub cron create或sub cron update指令中指定--time-zone選項來變更時區。 如需有效的時區值,請參閱 TZ 資料庫。 請注意,如果您使用kubectl建立訂閱,且未指定時區,則會指派UTC時區。 - 如果您尚未建立應用程式或工作事件消費者,請搭配使用
--force選項與sub cron create指令,以強制建立 Cron 事件訂閱。 在建立 cron 訂閱之後,您可以指定函數 建立函數 的名稱。
- 定期計時器事件的資料大小限制為最多 4096 個位元組。 因此,如果您使用
若要驗證已順利建立 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 * * * (每天午夜),且「備妥」狀態為 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 儲存庫。
從控制台查看函數的事件訊息
要查看有關您的事件訂閱的資訊:
- 從 Code Engine 專案頁面,移至您的專案。
- 從「概觀」頁面中,按一下 事件訂閱 以檢視已定義訂閱的清單。
如果您的函數將資訊列印到日誌檔案(如範例 codeengine 作業所示),請查看您的函數的日誌檔案。 請參閱 從主控台檢視工作日誌。
遞送至函數之事件的 Cron 標頭及內文資訊
所有傳遞到函式的事件都會以 HTTP POST 訊息的方式接收。 事件包含某些 HTTP 標頭,可協助您快速判斷事件的關鍵資訊。 HTTP 標頭存放在函式被呼叫的 params 物件的 __ce_headers 屬性中。 如需相關資訊,請參閱 CloudEvents 規格。
Headers
下表說明 __ce_headers 中定期計時器 (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_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) 事件
您可以從主控台建立及更新工作的定期計時器事件訂閱。
開始之前
- 建立專案。
- 建立工作。 例如,建立稱為
myjob且使用codeengine映像檔的工作。 此映像檔是從codeengine.go建置,可從 Samples for IBM Cloud Code Engine GitHub repo取得。
請完成下列步驟,以從主控台建立及更新工作的定期計時器事件訂閱。
-
從 Code Engine 專案頁面,移至您的專案。
-
從「概觀」頁面中,按一下 事件訂閱。
-
從「事件訂閱」頁面中,按一下 建立 以建立訂閱。
-
從「建立事件訂閱」頁面,完成下列步驟:
- 對於 一般,提供定期計時器訂閱的名稱,例如
myptimer2。 您可以選擇性地提供事件屬性。 請注意,如果週期性計時器事件消費者是應用程式,則事件屬性可作為 HTTP 標頭。 如果事件消費者是工作,則事件屬性可作為環境變數使用。 按一下下一步繼續。 - 在 排程中,提供事件計時的相關資訊。 定期計時器事件生產者使用標準 crontab 語法來指定間隔詳細資料。 從提供的型樣中選擇您的間隔,或提供您自己的自訂 Cron 表示式 (例如
0 0 * * *),其指定事件在每天午夜發生。 在此範例中,選取每日、每小時、每分鐘的排程型樣。 請注意,會為您產生 cron 表示式。 日、小時和分鐘型樣及 Cron 表示式 採用世界標準時間 (UTC)。 如果您未指定排程,則此事件訂閱會每分鐘傳送一次事件。 即會顯示即將發生的排程事件清單。 請注意,這些即將發生的排程事件會以您的時區顯示。 按一下下一步繼續。 - 對於 自訂事件資料,提供要包含在事件訊息內文中的資料。 您可以將訊息指定為純文字或 Base64 格式。 在此範例中,請指定文字
hello stranger作為事件訊息的內文。 如果訊息採用 Base64 格式,您可以選擇在傳送事件時將訊息解碼。 您也可以指定自訂事件資料的內容類型。 按一下下一步繼續。 - 對於 事件消費者,指定要接收事件的應用程式或工作。 請注意,您可以從已定義的應用程式及工作清單中選擇。 在此範例中,請使用參照
icr.io/codeengine/codeengine映像檔的myjob工作。 如果您尚未建立工作,則可以在建立定期計時器訂閱之後,指定工作的名稱並 建立工作。 按一下下一步繼續。 - 對於 摘要,請檢閱定期計時器事件訂閱的設定,並在必要時進行變更。 備妥時,請按一下 建立,以建立定期計時器訂閱。
- 對於 一般,提供定期計時器訂閱的名稱,例如
-
現在您的定期計時器訂閱已創建,請前往事件訂閱頁面以 查看已定義訂閱的清單。
-
若要更新訂閱,請導覽至定期計時器訂閱頁面。 從「事件訂閱」頁面中,按一下您要更新的訂閱名稱。
-
從定期計時器訂閱頁面中,變更事件訊息中的資料。 從 自訂事件資料 標籤中,將事件資料變更為
hello sunshine。 按一下儲存,以儲存您的變更。 -
因為
myjob工作參照範例codeengine應用程式 (將資訊列印至日誌檔),所以您可以檢視日誌。 檢視myjob事件消費者工作的工作日誌,並查看事件訊息是否為hello sunshine。 請參閱 從主控台檢視工作日誌。
使用 CLI 訂閱工作的定期計時器 (cron) 事件
開始之前
- 設定 Code Engine CLI 環境。
- 建立專案。
- 建立工作。 例如,建立稱為
myjob且使用icr.io/codeengine/codeengine映像檔的工作。 此映像檔是從codeengine.go建置,可從 Samples for IBM Cloud Code Engine GitHub repo取得。
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
例如,若要建立 Cron 訂閱,以每 5 分鐘將事件傳送至名為 myjob 的工作,
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 事件,並設為 UTC 時區。 若要修改時區,請使用 --time-zone 選項。 這是選用值。 |
- 使用
sub cron指令的提示 -
- 定期計時器事件的資料大小限制為最多 4096 個位元組。 因此,如果您使用
--data選項或--data-base64選項,則最多可以傳送 4096 個位元組。 如需相關資訊,請參閱 Code Engine的限制和配額。 - 依預設,Cron 訂閱會使用
UTC時區。 您可以在sub cron create或sub cron update指令中指定--time-zone選項來變更時區。 如需有效的時區值,請參閱 TZ 資料庫。 請注意,如果您使用kubectl建立訂閱,且未指定時區,則會指派UTC時區。 - 如果您尚未建立應用程式或工作事件消費者,請搭配使用
--force選項與sub cron create指令,以強制建立 Cron 事件訂閱。 您可以指定應用程式或工作的名稱,並在建立 cron 訂閱之後 建立應用程式 或 建立工作。
- 定期計時器事件的資料大小限制為最多 4096 個位元組。 因此,如果您使用
若要驗證已順利建立 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 分鐘),且「備妥」狀態是 true。
訂閱所建立的工作執行會在 10 分鐘之後刪除。
使用 CLI 更新 Cron 訂閱 (工作)
若要使用 CLI 更新 cron 訂閱,請使用 ibmcloud ce subscription cron update 指令。 例如,更新 mycronevent 訂閱以變更排程,以每 2 分鐘將事件傳送至稱為 myapp 的應用程式。
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
從主控台檢視工作的事件資訊
若要檢視事件訂閱的相關資訊,請執行下列動作:
- 從 Code Engine 專案頁面,移至您的專案。
- 從「概觀」頁面中,按一下 事件訂閱 以檢視已定義訂閱的清單。
如果您的工作像範例 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
請注意,工作執行的日誌資訊只會持續一小時。 如需記載的相關資訊,請參閱 檢視日誌。
如需 cron 所傳送環境變數的相關資訊,請參閱 事件的環境變數。
尋找更多程式碼範例? 請參閱 IBM Cloud Code Engine GitHub 儲存庫。
遞送至工作之事件的環境變數
遞送至工作的所有事件都會作為環境變數接收。 這些環境變數包含 CE_ 字首,並以 CloudEvents spec為基礎。
每一個事件都包含一些一般環境變數,每次將事件遞送至工作時都會出現這些變數。 每一個事件中的實際變數集可以包括更多選項。 如需相關資訊,請參閱 CloudEvent 屬性。
下表說明 Cron 事件特定的環境變數。
| 變數 | 說明 |
|---|---|
CE_DATA |
事件的資料 (內文)。 請參閱 CE_DATA,以取得 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_DATA 環境變數 (environment variable)
對於定期計時器事件,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,若要定義其他屬性,請搭配使用 --extension 選項與 ibmcloud ce sub cron create CLI 指令。
刪除訂閱
當您不再需要定期計時器 (cron) 訂閱時,可以刪除它。
從主控台刪除訂閱
- 從 Code Engine 專案頁面,移至您的專案。
- 從「概觀」頁面中,按一下 事件訂閱 以檢視已定義訂閱的清單。
- 從訂閱清單中,刪除您要從應用程式或工作中移除的訂閱。
如果您刪除應用程式或工作,則不會刪除訂閱。
使用 CLI 刪除訂閱
您可以執行 ibmcloud ce sub cron delete 或 ibmcloud ce sub cos delete 指令來刪除訂閱。
例如,刪除稱為 mycronevent2 的 cron 訂閱,
ibmcloud ce subscription cron delete --name mycronevent2
如果您刪除應用程式或工作,則不會刪除訂閱。 相反地,在 CLI 中,訂閱會移至 false 的備妥狀態,因為訂閱取決於應用程式或工作的可用性。 如果您重建應用程式或工作 (或另一個同名應用程式或工作),則您的訂閱會重新連接,且「備妥」狀態為 true。