部署和調整應用程式
使用本指導教學,使用 Code Engine CLI 部署應用程式。 應用程式在不使用時會調整為零。
應用程式或應用程式會執行您的程式碼來處理 HTTP 要求。 除了傳統 HTTP 要求之外,IBM Cloud® Code Engine 也支援使用 WebSockets 作為通訊協定的應用程式。 應用程式的執行中實例數會根據送入的要求及您的配置設定自動擴增或縮減 (至零)。 應用程式包含一個以上修訂。 修訂代表應用程式配置內容的不可變版本。 應用程式配置內容的每一項更新都會建立應用程式的新修訂。
開始之前
所有 Code Engine 使用者都必須具有「隨收隨付制」帳戶。 指導教學可能會產生成本。 使用「成本估算器」根據您的預計用量生成成本估算。 如需相關資訊,請參閱 Code Engine 定價。
選取映像檔
本指導教學使用範例映像檔 icr.io/codeengine/hello,這是一個簡式 Hello World 程式。 程式包括環境變數 TARGET,並列印 Hello ${TARGET}。 如果環境變數是空的,則會傳回 Hello World。 如需用於此範例之程式碼的相關資訊,請參閱 hello。
如果您有想要使用的容器映像檔,則可以將下一步中的映像檔參照取代為您自己的 Docker 儲存庫、映像檔名稱及版本。
建立和部署應用程式
-
使用
ibmcloud ce application create指令來建立應用程式。 在下列範例中,使用myapp作為應用程式的名稱,並指定icr.io/codeengine/hello作為要參照的映像檔。ibmcloud ce application create --name myapp --image icr.io/codeengine/hello輸出範例
Creating application 'myapp'... [...] Run 'C:\Program Files\IBM\Cloud\bin\ibmcloud.exe ce application get -n myapp' to check the application status. OK https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud -
執行
ibmcloud ce application get指令,以顯示應用程式的詳細資料,包括myapp應用程式的 URL。ibmcloud ce application get -n myapp輸出範例
Run 'ibmcloud ce application events -n myapp' to get the system events of the application instances. Run 'ibmcloud ce application logs -f -n myapp' to follow the logs of the application instances. OK Name: myapp ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 3m6s Created: 2021-07-11T06:39:41-05:00 URL: https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.4svg40kna19.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal CE_API_BASE_URL https://api.private.us-south.codeengine.cloud.ibm.com Literal CE_APP myapp Literal CE_DOMAIN us-south.codeengine.appdomain.cloud Literal CE_PROJECT_ID abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Literal CE_REGION us-south Literal CE_SUBDOMAIN abcdabcdab Image: icr.io/codeengine/hello Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Revisions: myapp-huv70-1: Age: 3m6s Traffic: 100% Image: icr.io/codeengine/hello (pinned to f0dc03) Running Instances: 1 Runtime: Concurrency: 100 Maximum Scale: 10 Minimum Scale: 0 Timeout: 300 Conditions: Type OK Age Reason ConfigurationsReady true 52s Ready true 26s RoutesReady true 26s Events: Type Reason Age Source Messages Normal Created 3m9s service-controller Created Configuration "myapp" Normal Created 3m9s service-controller Created Route "myapp" Instances: Name Revision Running Status Restarts Age myapp-huv70-1-deployment-6656cfc796-7gl27 myapp-huv70-1 1/2 Terminating 0 3m9s -
從執行
application get指令中取得應用程式的 URL,如前一個步驟中所述。 若要直接擷取應用程式的 URL,您可以使用--output選項,並在application get指令上指定 URL 格式。 此外,您可以執行ibmcloud ce application list指令,以取得應用程式 URL。ibmcloud ce application get -n myapp -output url輸出範例
https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud -
複製前一個輸出中的 URL,並使用
curl來呼叫應用程式。curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud輸出範例
Hello World
您已順利部署並啟動 Code Engine 應用程式!
更新應用程式
-
透過使用
ibmcloud ce application update指令新增環境變數以傳回Hello Stranger,來更新新建立的應用程式。ibmcloud ce application update --name myapp --env TARGET=Stranger輸出範例
Updating application 'myapp' to latest revision. [...] Run 'ibmcloud ce application get -n myapp' to check the application status. OK https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud -
使用
application get指令來顯示應用程式的詳細資料,包括最新修訂資訊。ibmcloud ce application get --name myapp輸出範例
Run 'ibmcloud ce application events -n myapp' to get the system events of the application instances. Run 'ibmcloud ce application logs -f -n myapp' to follow the logs of the application instances. OK Name: myapp ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 3m6s Created: 2021-07-11T06:39:41-05:00 URL: https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.4svg40kna19.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal CE_API_BASE_URL https://api.private.us-south.codeengine.cloud.ibm.com Literal CE_APP myapp Literal CE_DOMAIN us-south.codeengine.appdomain.cloud Literal CE_PROJECT_ID abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Literal CE_REGION us-south Literal CE_SUBDOMAIN abcdabcdab Literal TARGET Stranger Image: icr.io/codeengine/hello Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal TARGET Stranger Image: icr.io/codeengine/hello Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Revisions: myapp-00002: Age: 54m Traffic: 100% Image: icr.io/codeengine/hello (pinned to f0dc03) Running Instances: 1 Runtime: Concurrency: 100 Maximum Scale: 10 Minimum Scale: 0 Timeout: 300 Conditions: Type OK Age Reason ConfigurationsReady true 25s Ready true 11s RoutesReady true 11s Events: Type Reason Age Source Messages Normal Created 4m17s service-controller Created Configuration "myapp" Normal Created 4m17s service-controller Created Route "myapp" Instances: Name Revision Running Status Restarts Age myapp-00001-deployment-bf7559548-mxgvq myapp-00001 2/3 Terminating 0 4m55s myapp-00002-deployment-8495f8ccb9-kmc57 myapp-00002 3/3 Running 0 88s從 修訂 區段中的輸出,您可以查看
myapp服務的最新應用程式修訂。 此外,請注意應用程式的 100% 資料流量正在執行應用程式的最新修訂。 -
呼叫應用程式。
curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud輸出範例
Hello Stranger
從此指令的輸出中,您可以看到更新的應用程式現在會傳回 Hello Stranger。
調整應用程式 (調整為零和從零調整)
應用程式的執行中實例數會根據送入的工作量自動擴增或縮減 (至零)。
下列範例說明如何使用 CLI 來調整應用程式。 您可以使用 application create 或 application update 指令變更 --min-scale 及 --max-scale 選項的值,以控制應用程式執行中實例數目上限及下限。
-
呼叫應用程式。
curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud -
執行
application get指令,以顯示應用程式的狀態。 請注意Running instances的值。 在此範例中,應用程式具有1執行中實例。ibmcloud ce application get --name myapp輸出範例
[...] Name: myapp [...] URL: https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.4svg40kna19.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal CE_API_BASE_URL https://api.private.us-south.codeengine.cloud.ibm.com Literal CE_APP myapp Literal CE_DOMAIN us-south.codeengine.appdomain.cloud Literal CE_PROJECT_ID abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Literal CE_REGION us-south Literal CE_SUBDOMAIN abcdabcdab Literal TARGET Stranger Image: icr.io/codeengine/hello Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Revisions: myapp-00002: Age: 58m Traffic: 100% Image: icr.io/codeengine/hello (pinned to f0dc03) Running Instances: 1 Runtime: Concurrency: 100 Maximum Scale: 10 Minimum Scale: 0 Timeout: 300 Conditions: Type OK Age Reason ConfigurationsReady true 57m Ready true 57m RoutesReady true 57m Events: Type Reason Age Source Messages Normal Created 4m17s service-controller Created Configuration "myapp" Normal Created 4m17s service-controller Created Route "myapp" Instances: Name Revision Running Status Restarts Age myapp-00002-deployment-8495f8ccb9-kmc57 myapp-00002 3/3 Running 0 16m -
重新執行
application get指令,並注意Running instances的值已調整為零。 當應用程式完成執行時,如果--min-scale選項設為0(預設值),則執行中實例數會自動調整為零。ibmcloud ce application get -n myapp輸出範例
[...] URL: https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.4svg40kna19.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal CE_API_BASE_URL https://api.private.us-south.codeengine.cloud.ibm.com Literal CE_APP myapp Literal CE_DOMAIN us-south.codeengine.appdomain.cloud Literal CE_PROJECT_ID abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Literal CE_REGION us-south Literal CE_SUBDOMAIN abcdabcdab Literal TARGET Stranger Image: icr.io/codeengine/hello Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Revisions: myapp-huv70-2 Age: 13m Traffic: 100% Image: icr.io/codeengine/hello (pinned to 548d5c) Running Instances: 0 Runtime: Concurrency: 100 Maximum Scale: 10 Minimum Scale: 0 Timeout: 300 Conditions: Type OK Age Reason ConfigurationsReady true 13m Ready true 13m RoutesReady true 13m Events: Type Reason Age Source Messages Normal Created 4m17s service-controller Created Configuration "myapp" Normal Created 4m17s service-controller Created Route "myapp" Instances: Name Revision Running Status Restarts Age myapp-00002-deployment-8495f8ccb9-kmc57 myapp-00002 3/3 Running 0 16m您的應用程式已縮減為零。
-
重新呼叫應用程式以從零開始調整。
-
重新執行
application get指令,並注意到Running instances的值已從零調整,且會顯示實例的相關資訊。ibmcloud ce application get -n myapp輸出範例
Name: myapp [...] URL: https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.4svg40kna19.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal CE_API_BASE_URL https://api.private.us-south.codeengine.cloud.ibm.com Literal CE_APP myapp Literal CE_DOMAIN us-south.codeengine.appdomain.cloud Literal CE_PROJECT_ID abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Literal CE_REGION us-south Literal CE_SUBDOMAIN abcdabcdab Literal TARGET Stranger Image: icr.io/codeengine/hello Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Revisions: myapp-huv70-2: Age: 3h11m Traffic: 100% Image: icr.io/codeengine/hello (pinned to f0dc03) Running Instances: 1 Runtime: Concurrency: 100 Maximum Scale: 10 Minimum Scale: 0 Timeout: 300 Conditions: Type OK Age Reason ConfigurationsReady true 3h10m Ready true 3h10m RoutesReady true 3h10m Events: Type Reason Age Source Messages Normal Created 4m17s service-controller Created Configuration "myapp" Normal Created 4m17s service-controller Created Route "myapp" Instances: Name Revision Running Status Restarts Age myapp-00002-deployment-8495f8ccb9-kmc57 myapp-00002 3/3 Running 0 16m
您的應用程式會擴增備份。
如需調整應用程式的相關資訊,請參閱 配置應用程式調整。
下一步
-
在應用程式部署之後,請透過 URL 存取您的應用程式。
-
您可以建立 自訂網域對映,並將它指派給應用程式。 如需在多個地區中使用自訂網域名稱部署應用程式的相關資訊,請參閱 配置高可用性應用程式。
-
既然您的應用程式已部署,請考慮讓應用程式以事件驅動。 透過使用事件訂閱,您可以透過 定期排程 來觸發應用程式,或設定應用程式對事件 (例如 檔案上傳 或 Kafka 訊息) 做出反應。
部署應用程式之後,您可以使用下列 任何 方法來 更新已部署的應用程式 及其參照的程式碼,與您建立或先前更新應用程式的方式無關:
-
如果您具有容器映像檔,則根據 Open Container Initiative(OCI)標準,您只需要提供映像檔的參照,這會在您部署應用程式時指向容器登錄的位置。 您可以使用 公用登錄 或 專用登錄 中的映像檔來部署應用程式。
如果您已使用
app create指令建立應用程式,並指定--build-source選項以從本端或儲存庫來源建置容器映像檔,且您想要將應用程式變更為指向不同的容器映像檔,則必須先從應用程式移除建置的關聯。 例如,執行ibmcloud ce application update -n APP_NAME --build-clear。 從應用程式移除建置的關聯之後,您可以更新應用程式以參照不同的映像檔。 -
如果您是從位於 Git 儲存庫中的原始碼開始,則可以選擇讓 Code Engine 負責從您的來源建置映像檔,並使用 單一 作業來部署應用程式。 在此實務範例中,Code Engine 會將映像檔上傳至 IBM Cloud® Container Registry。 若要進一步瞭解,請參閱 從儲存庫原始碼部署應用程式。 如果您想要進一步控制映像檔的建置,則可以選擇在部署應用程式之前使用 Code Engine 建置映像檔。
-
如果您是從位於本端工作站上的原始碼開始,則可以選擇讓 Code Engine 負責從來源建置映像檔,並使用 單一 CLI 指令來部署應用程式。 在此實務範例中,Code Engine 會將映像檔上傳至 IBM Cloud® Container Registry。 若要進一步瞭解,請參閱 使用 CLI 從本端原始碼部署應用程式。 如果您想要進一步控制映像檔的建置,則可以選擇在部署應用程式之前使用 Code Engine 建置映像檔。
例如,您可以選擇讓 Code Engine 處理本端來源的建置,同時發展應用程式的來源開發。 然後,在映像檔成熟之後,您可以更新已部署的應用程式,以參照您想要的特定映像檔。 您可以視需要重複此程序。
當您部署更新的應用程式時,除非為映像檔指定標籤,否則會下載並部署所參照容器映像檔的最新版本。 如果為映像檔指定了標籤,則會將已標記的映像檔用於部署。
尋找更多程式碼範例? 請參閱 IBM Cloud Code Engine GitHub 儲存庫。