使用環境變數
學習如何在 Code Engine 中使用環境變數 (env variables)。 您可以將環境變數設定為可由應用程式、工作或函式使用的鍵值對。
建立和更新環境變數
使用 Code Engine 建立和管理環境變數。
您可以將環境變數定義為字面值,也可以引用現有的機密或設定映射。Code Engine 使用環境變數,讓您的工作、應用程式或函式可以使用 機密 或 設定映射。
從控制台建立環境變數
使用 Code Engine 主控台建立和更新環境變數。
您可以在控制台建立或更新應用程式、工作或函式時定義環境變數。
開始之前
- 您必須 建立專案,且 專案必須處於
active狀態。 - 確定您是否要建立字面上的環境變數,或是建立引用現有 secret 或 configmap 的環境變數。 如果您希望您的環境變數完全引用現有的秘訣或配置表,或引用現有秘訣或配置表中的個別金鑰,則該秘訣或配置表必須存在。 請參閱 建立機密 或 建立配置表,在繼續之前定義您的機密或配置表。
-
要在新增環境變數頁面中開啟對話框定義環境變數,請完成下列其中一項選擇。
-
從新增環境變數頁面,以下列其中一種方式建立環境變數、
- 若要建立_字面_環境變數,請選擇
Literal value,指定字面環境變數的名稱,並提供值。 注意Resulting definition部分顯示環境變數的名稱及其值。 - 若要建立_完全引用 configmap 的_環境變數,請選擇
Reference full configmap,然後選擇現有的 configmap。 在這種情況下,所選 configmap 的所有按鍵都會作為環境變數的一部分被引用。 請注意Resulting definition區段會顯示 configmap 中鍵的名稱,但不會顯示 configmap 中引用的鍵的實際值。 - 若要建立一個_引用已定義的 configmap 的個別 key_ 的環境變數,請選擇
Reference key in configmap,選擇您想要的現有 configmap,然後選擇要引用作為環境變數一部分的 key。 在您選取您要參考的 configmap 中的個別關鍵後,請注意Resulting definition區段會顯示在 configmap 中選取的關鍵名稱,但不會顯示在 configmap 中被參考的關鍵的實際值。 - 若要建立_完全引用秘密的_環境變數,請選擇
Reference full secret,然後選擇現有的秘密。 在這種情況下,所選密碼的所有金鑰都會作為環境變數的一部分被引用。 請注意Resulting definition部分會顯示秘訣中金鑰的名稱,但不會顯示秘訣中引用的金鑰實際值。 - 若要建立_引用已定義密碼的個別金鑰的_環境變數,請選擇
Reference key in secret,選取您想要的現有密碼,然後選擇要引用為環境變數一部分的金鑰。 在您選取秘密中要參考的個別金鑰後,請注意Resulting definition區段會顯示秘密中選取金鑰的名稱,但不會顯示秘密中參考的金鑰實際值。
從控制台,每個環境變數只能引用一個已定義的 configmap 或 secret 的個別金鑰。 如果需要引用多個 configmap 或 secret 的 key,則重複步驟,定義另一個引用不同 key 的環境變數。
- 若要建立_字面_環境變數,請選擇
-
按一下「完成」儲存您的變更。 此動作可將您的環境變數新增到環境變數索引標籤的表格中。 若要繼續新增環境變數,請按一下新增。
-
使用已定義的環境變數完成應用程式、工作或函式的建立或更新。
- 如果您正在建立工作負載,當您按一下建立時,應用程式、工作或函式會與您的環境變數一起部署。
- 如果您要更新現有的應用程式、工作或函式以新增環境變數,請按一下儲存並部署以更新應用程式,或按一下儲存以使用新環境變數更新工作或函式。
-
當您的應用程式、工作或函式處於
Ready狀態時,它會更新您的環境變數。
下表說明您的環境變數資訊。
| 標頭 | 說明 |
|---|---|
Name |
環境變數的名稱。 |
Defined by |
指定環境變數是否為 literal 類型,或環境變數是否為完全引用的 configmap 或 secret,或是否引用 secret 或 configmap 的特定金鑰。 |
Value or reference |
顯示字面值、完全引用的 configmap 或 secret,或 configmap 或 secret 的引用金鑰。 |
例如,讓我們建立一個應用程式,並為應用程式設定環境變數。
- 建立應用程式 命名為
myapp,它使用icr.io/codeengine/codeengine影像。 這個hello-world應用程式包含TARGET環境變數,應用程式會列印Hello ${TARGET} from Code Engine並列印環境變數清單。 如果TARGET環境變數為空,則會返回Hello World from Code Engine。 - 前往主控台中的此應用程式。
- 當應用程式處於
Ready狀態時,您就可以測試您的應用程式。 按一下測試應用程式,然後按一下測試應用程式窗格中的傳送請求。 若要在網頁中開啟應用程式,請按一下應用程式 URL。myapp應用程式會傳回Hello World from Code Engine回應,並列印此應用程式所包含的環境變數。 - 按一下環境變數標籤。
- 建立下列環境變數。
- 按一下新增,開啟新增環境變數頁面,並建立_字面上的_環境變數。 例如,建立一個字面上的環境變數,名稱為
literalenvvar,值為This is my literal。 按一下「完成」儲存您的變更。 - 按一下 [ 新增 ],開啟 [新增環境變數] 頁面,並建立_完全引用 configmap_ 的環境變數。 在引用 configmap 之前,它必須存在。 在這個範例中,存在一個名為
mycolorconfigmap的 configmap,其中包含以下的 key-value 對:key1=blue,key2=green,和key3=yellow。 建立一個完全引用mycolorconfigmapconfigmap 的環境變數,包括其所有的 key-value 對。 請注意Resulting definition區段會顯示 configmap 中鍵的名稱,但不會顯示 configmap 中引用的鍵的實際值。 按一下「完成」儲存您的變更。 - 按一下新增,開啟新增環境變數頁面,並建立另一個環境變數,以_引用已定義秘 密的個別金鑰_。 在您引用秘密之前,它必須存在。 在這個範例中,存在一個名稱為
mynewsecret的秘密,它包含以下的鍵值對:newsec1=mynewsecret1,newsec2=mynewsecret2,和newsec3=mynewsecret3。 建立一個環境變數,引用mynewsecretsecret 的newsec2金鑰。 注意Resulting definition部分會顯示秘密中選擇的金鑰名稱,但不會顯示秘密中引用的金鑰實際值。 按一下「完成」儲存您的變更。
- 按一下新增,開啟新增環境變數頁面,並建立_字面上的_環境變數。 例如,建立一個字面上的環境變數,名稱為
- 按一下「儲存並建立」,以新的環境變數更新應用程式。
- 當應用程式處於
Ready狀態時,您的應用程式會更新環境變數。 - 若要測試您的應用程式,請按一下測試應用程式,然後按一下測試應用程式窗格中的傳送請求。 若要在網頁中開啟應用程式,請按一下應用程式 URL。 經此應用程式改版後,此應用程式會輸出
Hello World from Code Engine,輸出內容包括環境變數的名稱,這些變數是在之前的步驟中新增的。
當您在工作負載中設定環境變數時,此動作可新增環境變數或覆寫現有的環境變數。 如果您有相同_名稱_的環境變數,但指定的_值_與先前定義的環境變數不同,則更新後的環境變數會取代現有的值。 例如,如果您定義了一個名為 envvar1 且其值為 myenvar1 的環境變數,並且定義了另一個名為 envvar1 且指定其值為 mynewenvvar1 的環境變數,那麼在您儲存並部署更新的應用程式或儲存更新的工作後,您正在執行的應用程式或工作會使用
envvar1 且其值為 mynewenvvar1 的環境變數。
從控制台更新環境變數
- 若要更新現有的環境變數,請移至包含您要變更的環境變數的應用程式、工作或函式,然後按一下環境變數索引標籤以顯示環境變數表。
- 從環境變數表中,按一下要更新的環境變數。
- 從「編輯環境變數」頁面進行更新,然後按一下「完成」儲存變更。 編輯環境變數時,您可以變更 Defined by 值及其對應的必填欄位。
- 按一下「儲存並部署」,以根據變更部署應用程式;或按一下「儲存」,以根據變更執行工作。 當您的應用程式或工作處於
Ready狀態時,您的應用程式或工作會根據您的環境變數進行更新。
使用 CLI 建立和更新環境變數
使用 Code Engine CLI 建立和管理環境變數。
您可以在使用 CLI 建立或更新應用程式、工作或函式時定義環境變數。
使用 CLI 建立環境變數時,可以參考 configmaps 或 secrets,也可以建立字面上的環境變數。 這些說明描述使用 CLI 建立和更新字面意義環境變數。
有關在 CLI 中以環境變數引用完整機密和設定映射、覆寫引用和移除引用的詳細情形,請參閱引用 機密和設定 映射。
開始之前
- 設定您的 Code Engine CLI 環境。
- 建立並使用專案。
為您的應用程式建立和更新環境變數
為您的應用程式建立並更新環境變數,如下所示、
-
若要為您的應用程式建立並設定環境變數,請使用
--env選項與app create或app update指令使用 選項。 以下範例建立使用icr.io/codeengine/codeengine映像的myapp應用程式,並定義envA和envB環境變數。ibmcloud ce application create --name myapp --image icr.io/codeengine/codeengine --env envA=A --env envB=B -
若要更新現有應用程式的環境變數,請使用
--env選項與app update指令來更新現有應用程式的環境變數。 以下範例更新myapp應用程式,以覆寫envA的值,並新增envC環境變數。ibmcloud ce application update --name myapp --env envA=AA --env envC=C
為您的工作建立和更新環境變數
為您的工作設定和更新環境變數,如下所示、
-
若要為您的工作建立並設定環境變數,請使用
--env選項與job create,job update,jobrun submit或jobrun resubmit指令。 以下範例建立使用icr.io/codeengine/codeengine映像的myjob作業,並定義envA環境變數。ibmcloud ce job create --name myjob --image icr.io/codeengine/codeengine --env envA=A -
若要更新現有工作的環境變數,請使用
--env選項與job update,jobrun submit或jobrun resubmit指令來更新現有工作的環境變數。
範例 1
以下範例更新 myjob 作業,以覆寫 envA 的值,並新增 envB 環境變數。
ibmcloud ce job update --name myjob --env envA=AA --env envB=B
執行 job get 指令來顯示工作的詳細資訊,包括其環境變數。
ibmcloud ce job get --name myjob
輸出範例
Getting job 'myjob'...
OK
Name: myjob
[...]
Environment Variables:
Type Name Value
Literal envA AA
Literal envB B
Image: icr.io/codeengine/codeengine
[...]
範例 2
以下範例執行 myjob 作業,覆寫 envA 的值,並為此作業執行新增 envD 環境變數。
ibmcloud ce jobrun submit --job myjob --name myjobrun1 --env envB=BB --env envC=C
執行 jobrun get 指令來顯示工作執行的詳細資訊,包括其環境變數。
ibmcloud ce jobrun get --name myjobrun1
輸出範例
[...]
Name: myjobrun1
[...]
Job Ref: myjob
Environment Variables:
Type Name Value
Literal envA AA
Literal envB BB
Literal envC C
Image: icr.io/codeengine/codeengine
[...]
Instances:
Name Running Status Restarts Age
myjobrun1-0-0 0/1 Succeeded 0 17s
為您的功能建立和更新環境變數
為您的函式設定和更新環境變數如下。
-
要為您的函數建立並設定環境變數,請使用
--env選項與function create或function update指令使用。 以下範例建立使用https://github.com/IBM/CodeEngine原始碼的myfunction函式,並定義envA環境變數。ibmcloud ce function create --name myfunction --runtime nodejs --build-source https://github.com/IBM/CodeEngine --build-context-dir /helloworld-samples/function-codebundle-nodejs --env envA=A命令的輸出範例
fn get命令的輸出範例。Environment Variables: Type Name Value Literal envA A -
若要更新現有函式的環境變數,請使用
--env選項與function update指令來更新現有函式的環境變數。 以下範例更新myfunction函式,以覆寫envA的值,並新增envC環境變數。ibmcloud ce fn update --name myfunction --env envA=AA --env envC=C命令的輸出範例
fn get命令的輸出範例。Environment Variables: Type Name Value Literal envA AA Literal envC C
使用環境變數更新工作負載的注意事項
當您更新具有引用 configmaps 或 secrets 的環境變數的應用程式、工作或函式時,請考慮下列資訊。
當您更新具有完全引用配置表 (或機密) 的環境變數的應用程式、工作或函式,使其完全引用不同的配置表 (或機密) 時,完全引用會以設定的順序覆寫其他完全引用 (最後一個引用的設定會覆寫第一個設定)。
當您更新一個應用程式、工作或函式,而該應用程式、工作或函式的環境變數引用一個 configmap (或 secret) 中的金鑰,以引用不同 configmap (或 secret) 中的相同金鑰時,則會使用最後一個引用的金鑰。
當您更新一個應用程式、工作或函式,而該應用程式、工作或函式的環境變數完全參照 configmap (或 secret) 以加入對特定金鑰的參照時,則特定金鑰參照會覆寫完整的 configmap (或 secret) 參照。
刪除環境變數
當您不再需要環境變數時,可以將它刪除。
從控制台刪除環境變數
- 從控制台,移至具有您要刪除的環境變數的應用程式、工作或函式。 按一下環境變數標籤。
- 從環境變數表中,刪除要從應用程式、工作或函式中移除的環境變數。
- 按一下「儲存並部署」以更新應用程式,或按一下「儲存」以使用新環境變數更新工作或函式。 當您的應用程式、工作或函式處於
Ready狀態時,它會根據您目前的環境變數進行更新。
使用 CLI 刪除環境變數
當您使用 CLI 處理環境變數時,您可以參考現有的 configmaps 或 secrets,也可以處理字面上的環境變數。 這些指示說明如何使用 CLI 刪除字面意義上的環境變數。
如需移除 CLI 中對完整機密和配置表的引用的詳細方案,請參閱 引用機密和配置表。
刪除應用程式的環境變數
若要移除應用程式的環境變數,請使用 --env-rm 選項與 app update 指令來移除環境變數。 以下範例更新 myapp 應用程式,刪除 envA 環境變數。
ibmcloud ce application update --name myapp --env-rm envA
刪除工作的環境變數
若要移除工作的環境變數,請使用 --env-rm 選項與 job update 或 jobrun resubmit 指令來移除環境變數。
使用 --env-rm 選項與 job update 指令來移除工作上設定的環境變數。 使用 --env-rm 選項和 jobrun resubmit 指令來移除指定工作執行時所設定的環境變數。
-
以下範例更新
myjob作業,刪除envA環境變數。ibmcloud ce job update --name myjob --env-rm envA使用
job get命令顯示工作的詳細資訊,包括其環境變數。 -
以下範例重新提交
myjobrun1作業執行,並刪除envC環境變數。ibmcloud ce jobrun resubmit --jobrun myjobrun1 --name jobrun2resuba--env-rm envC執行
jobrun get指令來顯示工作執行的詳細資訊,包括其環境變數。ibmcloud ce jobrun get --name jobrun2resuba輸出範例
Getting jobrun 'jobrun2resuba'... Getting instances of jobrun 'jobrun2resuba'... Getting events of jobrun 'jobrun2resuba'... [...] Name: jobrun2resuba [...] Job Ref: myjob Environment Variables: Type Name Value Literal envB BB Image: icr.io/codeengine/codeengine [...] Instances: Name Running Status Restarts Age jobrun2resuba-0-0 0/1 Succeeded 0 21s
刪除功能的環境變數
若要移除函數的環境變數,請使用 --env-rm 選項與 function update 指令來移除環境變數。 以下範例更新 myfunction 函式,刪除 envA 環境變數。
ibmcloud ce function update --name myfunction --env-rm envA