從本端來源執行函數

使用本教學,從本機系統上的程式碼使用 Code Engine CLI 執行函式

函數是一種無狀態的程式碼片段,當 HTTP 請求呼叫它時,它就會執行任務。 透過 IBM Code Engine 函式,您可以以可擴充和無伺服器的方式執行業務邏輯。 IBM Code Engine 功能提供最佳化的執行環境,以支援低延遲和快速擴充方案。 您的函式代碼可以在包含特定 Node.js 或 Python 版本的受管運行時中寫入。

程式碼組合是代表函數碼的檔案集合。 這個程式碼組合會注入執行時期儲存器中。 您的程式碼組合由 Code Engine 建立,並儲存在儲存器登錄中或與函數一起列入。 程式碼組合不是 Open Container Initiative (OCI) 標準儲存器映像檔。

開始之前

所有 Code Engine 使用者都必須具有「隨收隨付制」帳戶。 指導教學可能會產生成本。 使用「成本估算器」根據您的預計用量生成成本估算。 如需相關資訊,請參閱 Code Engine 定價

設定環境

  1. 登入 IBM Cloud CLI。

    ibmcloud login -r us-south
    
  2. 執行下列指令將資源群組設為目標。 若要查看資源群組清單,請執行 ibmcloud resource groups

    ibmcloud target -g <resource_group>
    

    輸出範例

    Targeted resource group default
    
  3. 在稱為 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 專案的範圍內。

  4. 透過檢視指令選項來熟悉函數指令。

    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 指令的輸出提供在建立及部署函數之前建置執行進度的相關資訊。

  1. Code Engine 收到從原始碼建立函數的要求。
  2. Code Engine 會檢查與所選取專案相關聯的 IAM 服務 ID 及 API 金鑰。 必須授權此服務 ID 讀取及寫入 IBM Cloud Container Registry。 如果沒有服務 ID,Code Engine 會為您建立一個服務 ID。 請注意,此服務 ID 用於從相同專案執行的後續 Code Engine 建置要求。
  3. 此範例會從本端來源 (--build-source) 建置程式碼。原始碼 (hello.js) 會壓縮至程式碼組合檔案,並上傳至帳戶中 IBM Cloud Container Registry 實例內的受管理名稱空間。 請注意,您只能將 IBM Cloud Container Registry 作為本端建置的目標。 如需 IBM Container Registry 的詳細資訊,包括有關配額限制和存取的資訊,請參閱 開始使用 IBM Cloud Container Registry
  4. Code Engine 會將原始碼建置在程式碼組合中。 原始碼軟體組會建立在與來源保存檔相同的名稱空間中。
  5. 建置完成之後,即會部署您的函數。 您可以從提供的 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建立的程式碼組合。

  1. 導航 Container Registry>圖片在裡面IBM Cloud安慰。
  2. 選擇區域中的地點您登入時選擇的下拉式選單IBM Cloud。
  3. 透過搜尋函數名稱(例如,funhello )。
  4. 選擇圖像(例如,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 儲存庫