從現有程式碼組合建立函數工作量
請透過 IBM Cloud® Container Registry 中的程式碼套件,建立您的 Code Engine 函式。 您可以透過控制台或使用 CLI 建立函式。
程式碼組合是代表函數碼的檔案集合。 這個程式碼組合會注入執行時期儲存器中。 您的程式碼組合由 Code Engine 建立,並儲存在儲存器登錄中或與函數一起列入。 程式碼組合不是 Open Container Initiative (OCI) 標準儲存器映像檔。
您無法從 Container Registry 以外的位置提取程式碼套件。
開始之前
-
您必須在 IBM Cloud® Container Registry中具有程式碼組合。 如需相關資訊,請參閱開始使用 Container Registry。 或者,您可以從 儲存庫來源 或從 本端來源 建置映像檔。
-
請確認您能否存取登錄檔。 請參閱 設定容器登錄的權限。
您是否想將專案設定為讓所有專案使用者都能在 Container Registry 中儲存和存取圖片,而無需手動建立註冊表機密? 如果具備足夠的許可權,您可以根據每個位置 (地區) 來配置這個預設登錄存取權。 如果您沒有足夠的許可權來執行這些動作,您可以利用這個頁面來協助您瞭解必要的許可權。 請參閱 配置專案層面的設定。
使用主控台在 Container Registry 中建立參照程式碼組合的函數
使用 Code Engine 控制台,建立一個使用現有程式碼套件的功能。
Code Engine 可以自動從 Container Registry取回程式碼組合。
- 開啟 Code Engine 主控台。
- 選擇「開始建立」。
- 請從「可用專案」清單中選取一個專案。 您也可以 建立新的。 您必須選取專案才能建立函數。
- 選擇功能。
- 輸入函數名稱;例如,
myfunction。 請為您的函式取一個在該專案中具有唯一性的名稱。 - 選取函數碼的 執行時期映像檔。 如需相關資訊,請參閱 執行時期。
- 選取以 使用現有的程式碼組合。
- 以
registry/namespace/repository:tag格式指定程式碼組合的位置。 - 如果您的程式碼組合位於帳戶或公用登錄中,則不需要指定登錄密碼。 如果程式碼組合位於專用登錄中,您必須新增登錄密碼。 如需其他說明,請按一下 協助我指定程式碼組合。 如需相關資訊,請參閱 存取容器登錄。
- 指定資源資訊,包括 CPU 和記憶體組合 及 縮減延遲。
- 選擇性地指定 自訂網域 或 環境變數。
- 按一下建立。
- 在功能狀態變更為 備妥之後,您可以測試功能。 按一下 測試功能,然後按一下 傳送要求。 若要在網頁中開啟此函式,請點擊「函式」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 指令時提供該密鑰。
-
若要新增對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 金鑰。 此後無法擷取它。
-
建立 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 -
在 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,其中REGISTRY和TAG是選用項目。 若未指定REGISTRY,預設值為icr.io。 若未指定TAG,預設值為latest。 -
在您的函數建立之後,您可以呼叫它。 若要找出您函式的 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 儲存庫中的範例。