從現有程式碼組合建立函數工作量

請透過 IBM Cloud® Container Registry 中的程式碼套件,建立您的 Code Engine 函式。 您可以透過控制台或使用 CLI 建立函式。

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

您無法從 Container Registry 以外的位置提取程式碼套件。

開始之前

您是否想將專案設定為讓所有專案使用者都能在 Container Registry 中儲存和存取圖片,而無需手動建立註冊表機密? 如果具備足夠的許可權,您可以根據每個位置 (地區) 來配置這個預設登錄存取權。 如果您沒有足夠的許可權來執行這些動作,您可以利用這個頁面來協助您瞭解必要的許可權。 請參閱 配置專案層面的設定

使用主控台在 Container Registry 中建立參照程式碼組合的函數

使用 Code Engine 控制台,建立一個使用現有程式碼套件的功能。

Code Engine 可以自動從 Container Registry取回程式碼組合。

  1. 開啟 Code Engine 主控台。
  2. 選擇「開始建立」。
  3. 請從「可用專案」清單中選取一個專案。 您也可以 建立新的。 您必須選取專案才能建立函數。
  4. 選擇功能
  5. 輸入函數名稱;例如,myfunction。 請為您的函式取一個在該專案中具有唯一性的名稱。
  6. 選取函數碼的 執行時期映像檔。 如需相關資訊,請參閱 執行時期
  7. 選取以 使用現有的程式碼組合
  8. registry/namespace/repository:tag 格式指定程式碼組合的位置。
  9. 如果您的程式碼組合位於帳戶或公用登錄中,則不需要指定登錄密碼。 如果程式碼組合位於專用登錄中,您必須新增登錄密碼。 如需其他說明,請按一下 協助我指定程式碼組合。 如需相關資訊,請參閱 存取容器登錄
  10. 指定資源資訊,包括 CPU 和記憶體組合縮減延遲
  11. 選擇性地指定 自訂網域環境變數
  12. 按一下建立
  13. 在功能狀態變更為 備妥之後,您可以測試功能。 按一下 測試功能,然後按一下 傳送要求。 若要在網頁中開啟此函式,請點擊「函式」URL

使用 CLI 部署具有現有程式碼組合的函數

IBM Cloud® Container Registry 建立一個函式,該函式會透過 CLI 並使用 ibmcloud ce fn create 命令。 如需選項的完整清單,請參閱 ibmcloud ce fn create 指令。

開始之前

  • 設定 Code Engine CLI 環境。
  • 建立並使用專案
  • 在您可以使用參照 Container Registry中程式碼組合的 Code Engine 函數之前,您必須先新增登錄的存取權,以便 Code Engine 可以在建立函數時取回程式碼組合。 如需存取登錄所需之許可權的相關資訊,請參閱 設定映像檔登錄的權限

使用 CLI 從公用登錄部署函數

如果現有的程式碼組合位於您的帳戶或公用登錄中,您可以使用 ibmcloud ce fn create 指令。

例如,執行下列指令,以從公用登錄取回現有的程式碼組合,並建立函數。

ibmcloud ce fn create --name myhellofun --code-bundle icr.io/codeengine/samples/function-nodejs-codebundle --runtime nodejs

執行提供的 fn get 指令,以查找 URL。 接著,您可以使用 curl 指令來呼叫該 URL

現有程式碼組合的輸出範例。

<html><body><h3>Hello, Functions on CodeEngine!</h3></body></html>

使用 CLI 從專用登錄部署函數

若要從專用登錄存取現有的程式碼組合,您必須設定登錄的存取權,建立登錄密鑰,然後在執行 ibmcloud ce fn create 指令時提供該密鑰。

  1. 若要新增對Container Registry的存取權限,請建立 IAM API 金鑰。 若要使用 CLI 建立IBM Cloud IAM API 金鑰,請執行 iam api-key-create 指令。 例如,要建立一個名為 cliapikey 且描述為 My CLI API key 的 API 金鑰並將其儲存到名為 key_file 的檔案中,請執行以下命令:

    ibmcloud iam api-key-create cliapikey -d "My CLI API key" --file key_file
    

    如果您選擇不將金鑰儲存至檔案,則必須記錄建立金鑰時所顯示的 API 金鑰。 此後無法擷取它。

  2. 建立 API 金鑰之後,請建立 Code Engine的登錄密碼。 若要建立登錄密鑰,請使用 ibmcloud ce secret create --format registry 指令。 例如,下列指令會建立 Container Registry 實例 (稱為 myregistry) 的登錄存取權。 請注意,即使在範例指令中指定了 --server--username 選項,--server 選項的預設值是 us.icr.io,當伺服器是 us.icr.io 時,--username 選項會預設為 iamapikey

    ibmcloud ce secret create --format registry --name myregistry --server us.icr.io --username iamapikey --password APIKEY
    

    輸出範例

    Creating registry secret 'myregistry'...
    OK
    
  3. 在 Container Registry中建立函數並參照專用登錄中的程式碼組合。 例如,使用 ibmcloud ce fn create 指令來建立 myhellofun 函數,以使用 myregistry 存取資訊來參照 icr.io/codeengine/samples/function-nodejs-codebundle

    ibmcloud ce fn create --name myhellofun --code-bundle icr.io/NAMESPACE/REGISTRY:TAG --registry-secret myregistry
    

    此函數的程式碼組合名稱格式為 REGISTRY/NAMESPACE/REGISTRY:TAG,其中 REGISTRYTAG 是選用項目。 若未指定 REGISTRY,預設值為 icr.io。 若未指定 TAG,預設值為 latest

  4. 在您的函數建立之後,您可以呼叫它。 若要找出您函式的 URL,請執行提供的 ibmcloud ce fn get 指令。 接著,您可以使用 curl 指令來呼叫該 URL

下一步

  • URL 建立函式後,您可以透過在主控台中點擊「測試函式」,或使用 function get 指令來查找該函式的 xml-ph-0000@deepl.internal。

  • 您可以建立 自訂網域對映,並將它指派給您的函數。

  • 建立並部署函數之後,您可以從主控台或使用 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 儲存庫中的範例