在 Code Engine 中使用應用程式

應用程式(或稱 app)會執行您的程式碼,為 HTTP 請求提供服務。 除了傳統的 HTTP 請求外,IBM Cloud® Code Engine 也支援使用 WebSockets 作為通訊協定的應用程式。 應用程式的執行中實例數會根據送入的要求及您的配置設定自動擴增或縮減 (至零)。 應用程式包含一個以上修訂。 修訂代表應用程式配置內容的不可變版本。 應用程式配置內容的每一項更新都會建立應用程式的新修訂。

開始之前

如需 Code Engine所提供的安全特性,請參閱 Code Engine 及安全。

Code Engine 提供自訂資源定義 (CRD) 方法。 如需相關資訊,請參閱 提供 CRD 方法。

不確定要建立何種類型的 Code Engine 工作量? 請參閱 規劃 Code Engine。

如何讓我的程式碼以 Code Engine 應用程式元件身分執行?

無論您的程式碼是作為本端檔案或 Git 儲存庫中的來源存在,還是您的程式碼是存在於公用或專用登錄中的容器映像檔,Code Engine 都為您提供以應用程式形式執行程式碼的簡化方式。

  • 如果您具有容器映像檔,則根據 Open Container Initiative(OCI)標準,您只需要提供映像檔的參照,這會在您建立及部署應用程式時指向容器登錄的位置。 您可以使用 公用登錄 或 專用登錄 中的映像檔來部署應用程式。

  • 如果您是從位於 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 在應用程式修訂版的生命週期中使用此摘要。 如果您使用與原始映像檔相同的標籤來建立較新版本的映像檔,則會改寫容器登錄中的原始映像檔,並變成無標籤。 會標記較新的映像檔,且此較新的映像檔具有不同的摘要。 您的 Code Engine 應用程式不會使用這個更新的影像,因為更新的影像與應用程式修訂版所引用的影像有不同的摘要。只要原本引用的未標記影像仍然存在,Code Engine 仍然可以建立應用程式修訂版的新實體。 如需詳細資訊,請參閱 為何 Code Engine 無法拉取影像?

應用程式的預設 URL 格式為 https://<appname>.<uuid>.<region>.codeengine.appdomain.cloud,其中 appname 是您應用程式的名稱,uuid 是自動產生的唯一識別碼,region 是您 Code Engine 專案所在的區域。 URL 應用程式的 UUID 部分格式為 aaaabbbbccc。 自動產生的應用程式 URL 會在您應用程式的專案生命週期中持續存在。

如需依地區存取應用程式之端點的相關資訊,請參閱 Code Engine 端點。

我需要瞭解 Code Engine中應用程式埠的相關資訊嗎?

依預設,Code Engine 會假設應用程式在埠 8080 上接聽送入的連線。 此外,Code Engine 會將 PORT 環境變數設為應用程式預期要接聽的埠值。 如果您的應用程式需要在埠 8080 以外的埠上接聽,請從主控台部署應用程式並指定正確的埠,或在 app create 指令上使用 --port 選項。 如需 Code Engine所設定環境變數的相關資訊,請參閱 自動注入環境變數。 下列埠由 Code Engine保留: 8022、8008、8012、9090、9091 及 15090。 只有一個埠可以公開為接聽埠。

透過網際網路 HTTP 連線至 Code Engine 時,使用 80 連接埠。 透過網際網路 HTTPS 連線至 Code Engine 的入站連線使用連接埠 443

如果埠掃描顯示更多開啟的埠,請參閱 為何我的埠掃描顯示比預期更多開啟的埠?

HTTP 處理的注意事項

當您使用應用程式(或工作)時,瞭解 Code Engine 中的基本 HTTP 處理方式會很有幫助。

  • 對於使用 HTTP 的傳入應用程式連線,傳輸層安全性 (TLS) 方面由 Code Engine 在應用程式碼之外自動管理。 應用程式的 HTTP Server 只需要關心 HTTP 連線,而不需要 HTTPS 連線。 尤其是,Code Engine 在 IBM Cloud 中使用 Cloud Internet Services (CIS),它是以 CloudFlare, 為基礎,作為第 4 層 DNS 和 DDOS 保護的入侵防禦系統 (IPS)。 在 IPS 上建立的 TCP/IP 連線由 Cloudflare 擁有和管理。 如需相關資訊,請參閱 Cloudflare 說明文件。

  • 與 Code Engine 應用程式綁定的網際網路連線會自動重定向至使用 HTTPS。

  • 從應用程式到其他 Code Engine 應用程式的向外連線會自動受到 TLS 保護。Code Engine 會自動管理此連線,因此使用的通訊協定 (或 URL ) 是 HTTP,而不是 HTTPS。

  • 從應用程式到非 Code Engine 應用程式 (例如網際網路) 的向外連線使用 HTTP 或 HTTPS,視應用程式碼中指定的通訊協定或 URL 而定。

  • 批次作業的向外連線使用作業代碼中指定的 HTTP 或 HTTPS 通訊協定,或 URL。 此行為包括從批次作業到 Code Engine 應用程式的連線。

Code Engine 應用程式的可見性選項

有了 Code Engine,您可以透過定義可接收請求的端點或系統網域對應,來為您的應用程式決定適當的可視性層級。

每個應用程式都有一個內部系統網域映射,同一個 Code Engine 專案內的所有元件都可以看到這個映射,但在專案外則看不到。 除了內部系統網域對映之外,您還選擇讓應用程式對 公用 網際網路或 IBM Cloud 專用 網路可見。

對於公開或私人可見性,應用程式會暴露在 HTTPS 端點上。 有關使用的 TLS 憑證的詳細資訊,請參閱 Code Engine 專案的 TLS 憑證。

您可以使用下列可見性層次來部署應用程式:

應用程式的可見性
設定 說明
內部(專案) 具有此設定的應用程式可以從相同 Code Engine 專案中的元件接收要求。 設定內部 (專案) 端點表示您的應用程式無法從公共網際網路存取,只能從在相同 Code Engine 專案中執行的其他 Code Engine 元件進行網路存取。 一律啟用此端點。
public 具有此設定的應用程式會公開給網際網路及您的 Code Engine 專案。 設定公用端點表示您的應用程式可以接收來自公用網際網路或來自 Code Engine 專案內元件的要求。 這個設定是預設值。
private 具有此設定的應用程式會公開給 IBM Cloud 專用網路及 Code Engine 專案。 設定專用端點表示無法從公用網際網路存取您的應用程式,且只能透過在相同專案中執行的其他 IBM Cloud 服務使用「虛擬專用端點 (VPE)」或 Code Engine 元件進行網路存取。

您可以在建立及部署或更新應用程式時,從主控台或使用 CLI 來設定應用程式可見性的端點設定。

使用公用端點部署應用程式

當您部署應用程式時,依預設會部署應用程式,以便它可以接收來自公用網際網路或來自相同 Code Engine 專案內元件的要求。 在此情況下,會使用公用端點來部署應用程式。

使用專用端點部署應用程式

您可以設定應用程式的端點可見性,讓它使用專用端點進行部署。 設定專用端點表示無法從公用網際網路存取您的應用程式,且只能從其他 IBM Cloud 服務 (來自虛擬專用端點 (VPE) 或 Code Engine 元件在相同專案中執行 (cluster-local)) 進行網路存取。

例如,如果您的解決方案包含在自己虛擬專用端點內的 IBM Cloud Kubernetes Service Kubernetes 叢集上執行的元件,且您想要從 IBM Cloud 專用網路存取 Code Engine 應用程式,則可以將應用程式的可見性設為專用。 當應用程式的可見性設為專用時,無法透過公用網際網路存取應用程式。 應用程式仍可從專案內的其他應用程式存取。

您可以 使用專用端點部署應用程式,以便應用程式僅透過 IBM Cloud 專用網路公開,而不向外部網際網路公開。 應用程式仍可透過內部網路內的共用元件來存取,且應用程式端點需要受到保護。

使用 CLI,透過使用 app create 或 app update 指令上的 --visibility=private 選項,設定應用程式的端點可見性,以便使用專用端點來部署應用程式。 您可以使用 app get 指令,來取得應用程式的可用 URL,以反映您的端點定義。

從主控台中,使用建立應用程式時的 端點 設定來設定應用程式端點的可見性。 部署應用程式之後,您可以在應用程式頁面上的 網域對映 標籤上檢視及修改這些系統網域對映設定。

如需透過專用網路連接的相關資訊,請參閱 Using Virtual Private Endpoints with Code Engine。

使用專案端點部署應用程式

您可以設定應用程式的端點可見性,讓它與內部 (專案) 端點一起部署。 設定專案專用端點表示您的應用程式無法從公共網際網路存取,只能從在相同 Code Engine 專案中執行的其他 Code Engine 元件進行網路存取。 一律啟用此端點。 應用程式仍可透過共用元件存取,因此需要受到保護。

例如,如果您的解決方案包含專案內的數個應用程式,則您可以設定解決方案,以便從網際網路只能看到其中一個應用程式,以便它處理送入的資料流量。 這個面向公用的應用程式可以將工作委派給解決方案中的其他應用程式,這樣就不需要從網際網路中看到它們。

使用 CLI,透過使用 app create 或 app update 指令上的 --visibility=project 選項,設定應用程式的端點可見性,以便隨專案端點一起部署。 您可以使用 app get 指令,來取得應用程式的可用 URL,以反映您的端點定義。

從主控台中,使用建立應用程式時的 端點 設定來設定應用程式端點的可見性。 部署應用程式之後,您可以在應用程式頁面上的 網域對映 標籤上檢視及修改這些系統網域對映設定。

用於部署 Code Engine 應用程式的選項

瞭解部署應用程式時可以指定的選項。 請注意,主控台與 CLI 之間的選項可能有所不同。

記憶體及 CPU

部署應用程式時,您可以指定應用程式可以耗用的記憶體及 CPU 數量。 視您的應用程式是運算密集、記憶體密集或平衡而定,這些數量可能有所不同。

依預設,您的應用程式會獲指派 4 G 記憶體及 1 vCPU。 如需選取記憶體及 CPU 的相關資訊,請參閱 支援的記憶體及 CPU 組合。

使用指令和引數來部署應用程式

您可以定義指令和引數,供應用程式在執行時期使用。

將 --cmd 及 --arg 選項新增至 app create 指令,以定義應用程式的指令及引數。

ibmcloud ce app create --name myapp --image icr.io/codeengine/hello --cmd /myapp --arg --debug

如需使用 cmd 和 arg 的相關資訊,請參閱 定義 Code Engine 工作量的指令和引數。

使用環境變數建立及執行應用程式

您可以將環境變數定義及設定為鍵值組,以供應用程式在執行時期使用。

您可以在建立應用程式時,或在從主控台或使用 CLI 更新現有應用程式時,定義環境變數。

如需定義環境變數的相關資訊,請參閱 使用環境變數。

Code Engine 會自動將特定環境變數注入應用程式。 如需自動注入環境變數的相關資訊,請參閱 自動注入環境變數。

使用密碼及 configmap 時建立及執行應用程式

在 Code Engine 中,您的應用程式可以使用環境變數來使用秘密和 configmaps。

密鑰和 configmap 都是鍵值組。 當對映至環境變數時,會設定 NAME=VALUE 關係,以便環境變數的名稱對應於那些對映中每一個項目的「索引鍵」,且環境變數的值是該索引鍵的「值」。

您的應用程式可以使用環境變數來完整參照 configmap (或密碼),或參照 configmap (或密碼) 中的個別索引鍵。

如需相關資訊,請參閱 使用環境變數來參照密鑰 及 使用環境變數來參照配置對映。

應用程式配額的考量

當您使用應用程式、函數及批次工作時,這些資源會在 Code Engine 專案的環境定義內執行。 資源配額是根據每個專案來定義,且限制適用於應用程式、功能及批次工作。

如需 Code Engine 限制的相關資訊,請參閱 Code Engine的限制和配額。

下一步

現在您已熟悉使用 Code Engine 應用程式的主要概念,您準備好部署並使用應用程式了嗎? 請參閱:

有關使用應用程式的詳細資訊,請參閱