從本端來源執行函數
使用本教學,從本機系統上的程式碼使用 Code Engine CLI 執行函式
函數是一種無狀態的程式碼片段,當 HTTP 請求呼叫它時,它就會執行任務。 透過 IBM Code Engine 函式,您可以以可擴充和無伺服器的方式執行業務邏輯。 IBM Code Engine 功能提供最佳化的執行環境,以支援低延遲和快速擴充方案。 您的函式代碼可以在包含特定 Node.js 或 Python 版本的受管運行時中寫入。
程式碼組合是代表函數碼的檔案集合。 這個程式碼組合會注入執行時期儲存器中。 您的程式碼組合由 Code Engine 建立,並儲存在儲存器登錄中或與函數一起列入。 程式碼組合不是 Open Container Initiative (OCI) 標準儲存器映像檔。
開始之前
所有 Code Engine 使用者都必須具有「隨收隨付制」帳戶。 指導教學可能會產生成本。 使用「成本估算器」根據您的預計用量生成成本估算。 如需相關資訊,請參閱 Code Engine 定價。
設定環境
-
登入 IBM Cloud CLI。
ibmcloud login -r us-south -
執行下列指令將資源群組設為目標。 若要查看資源群組清單,請執行
ibmcloud resource groups。ibmcloud target -g <resource_group>輸出範例
Targeted resource group default -
在稱為
sample的 Code Engine 中建立專案。ibmcloud ce project create --name sample輸出範例
Creating project 'sample'... ID for project 'sample' is 'abcdabcd-abcd-abcd-abcd-abcd12e3456f7'. Waiting for project 'sample' to be active... Now selecting project 'sample'. OK請注意,您也會針對環境定義選取您的專案,因此所有後續的應用程式相關指令都在這個新的
sample專案的範圍內。 -
透過檢視指令選項來熟悉函數指令。
ibmcloud ce fn --help
建立原始碼
使用下列範例程式碼建立稱為 funhello.js 的 Node.js 原始檔。
function main(params) {
var msg = 'You did not tell me who you are.';
if (params.name) {
msg = `Hello, ${params.name}!`
} else {
msg = `Hello, Functions on CodeEngine!`
}
return {
headers: { 'Content-Type': 'text/html; charset=utf-8' },
body: `<html><body><h3>${msg}</h3></body></html>`
}
}
module.exports.main = main;
建立您的函數
從 funhello.js 檔案建立函數。
ibmcloud ce fn create --name funhello --runtime nodejs --build-source funhello.js
指令輸出
Preparing function 'funhello' for build push...
Creating function 'funhello'...
Packaging files to upload from source path 'hello.js'...
Submitting build run 'funhello-run-230623-090738611'...
Creating image 'private.stg.icr.io/ce--8a6a0-13c66hbi3rhz/function-funhello:230623-1407-s8kzr'...
Waiting for build run to complete...
Build run status: 'Running'
Build run completed successfully.
Run 'ibmcloud ce buildrun get -n funhello-run-230623-090738611' to check the build run status.
Waiting for function 'funhello' to become ready...
Function 'funhello' is ready.
OK
Run 'ibmcloud ce function get -n funhello' to see more details.
https://funhello.13c66hbi3rhz.us-south.codeengine.appdomain.cloud
在函式調用 URL 變得可用後,使用下列指令尋找該函式的相關資訊。
ibmcloud ce fn get -n funhello
讓我們更深入瞭解前一個 function create 指令。 請注意,function create 指令的輸出提供在建立及部署函數之前建置執行進度的相關資訊。
- Code Engine 收到從原始碼建立函數的要求。
- Code Engine 會檢查與所選取專案相關聯的 IAM 服務 ID 及 API 金鑰。 必須授權此服務 ID 讀取及寫入 IBM Cloud Container Registry。 如果沒有服務 ID,Code Engine 會為您建立一個服務 ID。 請注意,此服務 ID 用於從相同專案執行的後續 Code Engine 建置要求。
- 此範例會從本端來源 (
--build-source) 建置程式碼。原始碼 (hello.js) 會壓縮至程式碼組合檔案,並上傳至帳戶中 IBM Cloud Container Registry 實例內的受管理名稱空間。 請注意,您只能將 IBM Cloud Container Registry 作為本端建置的目標。 如需 IBM Container Registry 的詳細資訊,包括有關配額限制和存取的資訊,請參閱 開始使用 IBM Cloud Container Registry。 - Code Engine 會將原始碼建置在程式碼組合中。 原始碼軟體組會建立在與來源保存檔相同的名稱空間中。
- 建置完成之後,即會部署您的函數。 您可以從提供的 URL 存取您的功能。
呼叫您的函數
將函式 URL 貼入瀏覽器視窗,即可啟動函式。 您也可以在指令行中使用 curl 指令。
Hello, Functions on CodeEngine!
您已順利建立並呼叫 Code Engine 函數!
提供函數的參數
在 URL 的末尾加入 ?name=Sunshine,並將其貼入瀏覽器視窗,即可使用參數來呼叫函式 URL。
https://funhello.13c66hbi3rhz.us-south.codeengine.appdomain.cloud?name=Sunshine
Hello, Sunshine!
清除
您可以使用下列指令來刪除您的函數。
ibmcloud ce fn delete -n funhello
當您刪除函數時,也會刪除相關聯的建置檔。
最後,刪除建置從 IBM Cloud Container Registry建立的程式碼組合。
- 導航 Container Registry>圖片在裡面IBM Cloud安慰。
- 選擇區域中的地點您登入時選擇的下拉式選單IBM Cloud。
- 透過搜尋函數名稱(例如,
funhello)。 - 選擇圖像(例如,
au.icr.io/ce--27b98-1jp42v8n9n3o/function-funhello@sha256:b53683f47e0e548b4fa1d3fc93404399fdc4008b54ccecc0852794ea88d01538)並選擇刪除從省略號 (...) 選單中。
下一步
-
URL 函數建立後,您可以按一下控制台中的 Test function,或使用
function get指令來存取您的函式。 -
您可以建立 自訂網域對映,並將它指派給您的函數。
-
建立並部署函數之後,您可以從主控台或使用
ibmcloud ce function update指令來更新函數,以符合您的需求。 如果您要更新來源以與函數搭配使用,則必須在function update指令上提供--build-source選項。
建立函數之後,您可以使用下列 任何 方法來更新函數及其參照的程式碼,與您建立或先前更新函數的方式無關:
-
如果您有現有的程式碼組合,則只需要提供映像檔的參照,這會在您部署應用程式時指向容器登錄的位置。 如需相關資訊,請參閱 從現有程式碼組合建立函數工作量。
如果您已使用
function create指令建立函數,並指定--build-source選項以從本端或儲存庫來源建置程式碼組合,且您想要將函數變更為指向不同的程式碼組合,則必須先從函數中移除建置的關聯。 例如,執行ibmcloud ce function update -n FUN_NAME --build-clear。 從函數中移除建置的關聯之後,您可以更新函數以參照不同的映像檔。 -
如果您是從位於 Git 儲存庫中的原始碼開始,則可以選擇讓 Code Engine 從來源建置程式碼組合,並使用 單一 作業來建立函數。 在此實務範例中,Code Engine 會將您的程式碼組合上傳至 IBM Cloud® Container Registry。 若要進一步瞭解,請參閱 從儲存庫原始碼建立函數。
-
如果您是從位於本端工作站上的原始碼開始,您可以選擇 Code Engine,以從您的原始碼建置程式碼組合,並使用 單一 CLI 指令來建立函數。 在此實務範例中,Code Engine 會將原始碼及程式碼組合上傳至 IBM Cloud® Container Registry。
例如,您可以選擇 Code Engine 來建置本端來源,同時發展函數的來源開發。 然後,在程式碼組合成熟之後,您可以更新函數以參照您想要的特定程式碼組合。 您可以視需要重複此程序。
尋找更多程式碼範例? 請參閱 IBM Cloud Code Engine GitHub 儲存庫。