使用 Code Engine 進行文字分析
本指導教學可能會產生成本。 使用「成本估算器」根據您的預計用量生成成本估算。
在本指導教學中,您將透過使用 Natural Language Understanding 應用程式部署文字分析,來瞭解 IBM Cloud® Code Engine。 您將建立 Code Engine 專案,選取專案並將 Code Engine 實體 (應用程式和工作) 部署至專案。 您將瞭解如何將 IBM Cloud 服務連結至 Code Engine 實體。 此外,您也將瞭解 Code Engine 的自動調整功能,其中實例會根據送入的工作量擴增或縮減 (至零)。
IBM Cloud Code Engine 是執行容器化工作負載 (包括 Web 應用程式、微服務、事件驅動功能或批次工作) 的完全受管理無伺服器平台。Code Engine 甚至會從原始碼為您建置容器映像檔。 因為這些工作負載全都在相同的 Kubernetes 基礎架構內管理,所以它們可以緊密合作。 Code Engine 體驗的設計,讓您可以專注於編寫程式碼,而無需考慮託管程式碼所需的基礎架構。
平台專門設計用來滿足開發人員的需求,他們只想要執行他們的程式碼。Code Engine 將 Kubernetes 中建置、部署及管理工作負載的作業負擔抽象化,讓開發人員可以聚焦於最重要的內容: 原始碼。
目標
- 瞭解 IBM Cloud® Code Engine 以及它如何簡化開發人員體驗。
- 瞭解使用 Code Engine部署及調整應用程式有多容易。
- 瞭解如何使用工作來執行執行至完成工作量。
- 開發人員建立 Code Engine 專案,並部署前端和後端 Code Engine 應用程式。
- 開發人員透過修改前端應用程式來設定環境變數值以指向後端應用程式的端點,將前端 (UI) 應用程式連接至後端。
- 開發人員佈建必要的雲端服務,並透過建立密鑰及 configmap,將它們連結至後端應用程式及工作。
- 使用者透過後端應用程式,透過儲存在 Object Storage 中的前端應用程式來上傳文字檔。
- 使用者透過後端執行 Code Engine 工作,以透過將文字推送至 Natural Language Understanding來分析文字。 然後,結果會儲存至 Object Storage,並在使用者按一下重新整理按鈕時顯示在前端應用程式中。
在完成本指導教學期間,您可以使用 Code Engine 主控台 來檢視進度。
開始之前
本指導教學需要:
- IBM Cloud CLI-此 CLI 工具可讓您與 IBM Cloud互動。
- code-engine/ce 外掛程式 (
code-engine/ce)-外掛程式使用服務特定的指令來延伸 IBM Cloud CLI 的功能。 Code Engine 外掛程式將為您提供 IBM Cloud上 Code Engine 指令的存取權。 - 選用 Container Registry 外掛程式 (
container-registry)
- code-engine/ce 外掛程式 (
您可以在 指導教學入門 手冊中找到針對您的作業環境下載及安裝這些工具的指示。 為了避免安裝這些工具,本指導教學將從 IBM Cloud 主控台使用 Cloud Shell。
開始一個新的 IBM Cloud Shell
從瀏覽器中的 IBM Cloud 主控台按一下右上角的按鈕,以建立新的 Cloud Shell。
建立一個 IBM Cloud Code Engine 專案
在本節中,您將建立一個 Code Engine 專案。 專案是 Code Engine 實體 (例如應用程式、工作及建置) 的分組。 專案用來管理資源,並提供對其實體的存取權。
將實體放入單一專案可讓您更輕鬆地管理存取控制。 專案內的實體會共用相同的專用網路,讓它們能夠安全地彼此交談。 如需詳細資料,請閱讀 Code Engine 專案的說明文件。
-
導覽至 IBM Cloud Code Engine 概觀 頁面。
-
在左側窗格中,按一下專案,然後按一下建立。
- 選取位置。
- 提供專案名稱。
- 選取您將在其中建立專案的資源群組,以及後續步驟中所需的雲端服務。 資源群組是讓您將帳戶資源組織成自訂群組的一種方式。
- 按一下建立。
- 等待專案
status變更為 作用中。
-
切換至先前啟動的 Cloud Shell 階段作業,當系統要求您執行 CLI 指令時,請在本指導教學中使用它。
-
建立具有專案名稱和資源群組名稱的 Shell 變數
PROJECT_NAME=YourProjectName RESOURCE_GROUP_NAME=YourResourceGroupName -
以您在其中建立專案的資源群組為目標。
ibmcloud target -g $RESOURCE_GROUP_NAME -
選取 您的專案,讓指令行工具指向您的專案。
ibmcloud code-engine project select --name $PROJECT_NAME
將前端及後端應用程式部署為 Code Engine 應用程式
Code Engine 應用 程式會執行您的程式碼以提供 HTTP 請求,自動擴充並回復為零,並提供流量路由至多個修改。 在本節中,您將部署前端與後端應用程式到 Code Engine 專案。 前端 Web 應用程式將允許使用者上傳文字檔,而後端應用程式則會將檔案寫入 IBM Cloud Object Storage 中。
我們已建置兩個應用程式的映像檔,並將它們推送至公用 Container Registry。 您將使用這些預先建置的容器映像檔來部署個別應用程式。 後續步驟將涵蓋建立您自己的應用程式。
部署前端應用程式
-
若要部署新的 Code Engine 應用程式,請執行下列指令; 提供服務名稱
frontend及預先建置的儲存器映像檔作為--image旗標的參數。ibmcloud code-engine application create --name frontend --image icr.io/solution-tutorials/tutorial-text-analysis-code-engine-frontend執行此指令後,您應該會看到一些輸出,其中包含您應用程式的 URL。 它應該看起來如下:
https://frontend.305atabsd0w.us-south.codeengine.appdomain.cloud。 複製或記下此應用程式 URL,以便進行下一步。 只需這兩項資料(應用程式名稱和影像名稱),Code Engine 就已部署您的應用程式,並會為您處理複雜的設定和管理。GitHub 儲存庫 中提供用來建置容器映像檔的應用程式原始碼,供您參考。 如果您想要從原始碼建置容器映像檔,並將映像檔推送至專用 Container Registry,請遵循 這裡的指示。
-
在瀏覽器中開啟上一步的應用程式 URL,即可看到類似此處的輸出:
前端在執行中 執行
ibmcloud code-engine application get -n frontend指令,以查看應用程式的詳細資料。 您應該會看到一些詳細資訊,例如 ID、專案資訊、應用程式的年齡、存取應用程式的 URL、存取應用程式組態的 Console URL、影像、資源分配,以及應用程式的各種修訂、條件和執行時間。 由於您只有一個修訂,您應該會看到 100% 的資料流量會進入最新修訂。 您也可以檢查實例數及其狀態。 -
如需疑難排解及 檢查應用程式的日誌,請執行下列指令,將
<INSTANCE_NAME>取代為ibmcloud code-engine application get -n frontend指令中其中一個實例的 名稱。如果您沒有看到任何正在執行的實體,請確定再次開啟步驟 2 中的應用程式 URL。
ibmcloud code-engine application logs --instance <INSTANCE_NAME>如果應用程式在執行中,您應該會看到
backend URL: undefined和應用程式在埠 8080 上接聽。 稍後在指導教學中,您將將此前端應用程式連接至我們的後端應用程式
恭喜!! 您剛剛使用簡式指令將 Web 應用程式部署至 Code Engine,而且不需要瞭解 Kubernetes 的複雜性 (例如 Pod、部署、服務及入口)。
調整應用程式
當您使用 application create 指令建立應用程式時,您只會傳入要使用的映像檔及應用程式名稱。 雖然這是要部署應用程式的最小資訊量,但您可以控制 許多其他旋鈕。 此外,您可以設定每個實例可以同時處理的要求數目、應用程式實例的 CPU 數量、應用程式實例的記憶體數量、應用程式的環境變數、可用於此應用程式的實例數目上限及下限,以及應用程式接聽要求的埠。
如果在建立應用程式時未提供任何選項,則大部分這些值都已設定預設值。 因為我們未提供值,所以 Code Engine 已部署我們的應用程式,預設小數位數上限為 10,這表示它只會將我們的應用程式調整為最多 10 個實例。 預設最小比例是零,因此當我們的應用程式不再使用時,它會將自己縮減回零。
-
若要檢查 Code Engine的自動調整功能,我們可以使用負載產生器對我們的服務執行要求。 下列 Shell Script 會模擬 3000 個要求的基本負載。
-
開啟本端終端機視窗 (Shell)。
-
為上述步驟中的前端應用程式 URL 建立 shell 變數。
export APPURL=<frontend-application-url> -
執行下列 Script 以產生部分負載。 您可以重複它來建立更多資料流量。
seq 1 3000 | xargs -n1 -P300 curl -s $APPURL -o /dev/null
-
-
在前幾節的 Cloud Shell 階段作業中,執行下列指令以查看實例 (Pod) 計數作為自動調整的一部分增量。
ibmcloud code-engine application get -n frontend依預設,每個實例可以同時處理的要求數上限
10會導致自動調整,且可以搭配使用--concurrency or -cn旗標與application update指令來變更此值。 -
如果您不想要容許建立多達 10 個實例,則可以將最大小數位數調整為較低的數字。 雖然您的無伺服器應用程式可以輕鬆擴增,但您可能依賴下游服務 (例如只能處理有限數目連線的 SQL DB 或另一個速率受限 API)。 讓我們嘗試限制此前端應用程式的實例數。
ibmcloud code-engine application update --name frontend --max-scale 5 -
一旦停止產生負載,請等待幾分鐘,以看到實例終止,最後縮減到零個實例。
-
在具有負載產生器指令的本端視窗中,重新執行 Script 以針對應用程式建立要求。 在 Cloud Shell 階段作業中,執行
ibmcloud code-engine application get -n frontend指令以查看實例計數增加至 5。預期輸出:
Name Revision Running Status Restarts Age frontend-00002-deployment-77d5fbfb5d-7zpfl frontend-00002 3/3 Running 0 70s frontend-00002-deployment-77d5fbfb5d-kv6rn frontend-00002 3/3 Running 0 69s frontend-00002-deployment-77d5fbfb5d-mhlwn frontend-00002 3/3 Running 0 68s frontend-00002-deployment-77d5fbfb5d-qkjmd frontend-00002 3/3 Running 0 67s frontend-00002-deployment-77d5fbfb5d-zpr9n frontend-00002 3/3 Running 0 85s
部署後端應用程式並測試連線
-
若要部署新的後端應用程式以將文字檔儲存至 IBM Cloud Object Storage,請執行下列指令:
ibmcloud code-engine application create --name backend --image icr.io/solution-tutorials/tutorial-text-analysis-code-engine-backend --cluster-local--cluster-local旗標會指示 Code Engine 將此應用程式的端點保持為專用,這表示它只能從專案內使用。 這通常用於安全目的。 在此情況下,沒有理由公開具有公用端點的後端應用程式,因為不會從叢集外部存取它。 -
複製並儲存輸出中的內部端點 URL ),以便在下一個指令中使用。 它看起來像這樣:
BACKEND_PRIVATE_URL=http://backend.xxxxxx您可以執行
ibmcloud code-engine application get -n backend指令來檢查後端應用程式的狀態和詳細資訊,其中包括 URL。 -
前端應用程式使用環境變數 (BACKEND_URL) 來瞭解後端應用程式的管理位置。 您現在需要更新前端應用程式,以將此值設為指向後端應用程式的端點。
ibmcloud code-engine application update --name frontend --env BACKEND_URL=$BACKEND_PRIVATE_URL如果您需要設定多個環境變數,
--env旗標可以顯示任意次數。 如果您當時知道前端應用程式的值,也可以在ibmcloud code-engine application create指令上使用此選項。 請閱讀 使用環境變數 文件主題,以進一步瞭解。 -
在瀏覽器上硬刷新前端 URL,以測試與後端應用程式的連線。 您應該會看到一個頁面,其中有上傳文字檔案(.txt)的選項,同時也會看到後端應用程式的錯誤訊息,因為後端仍未連接所需的 IBM Cloud 服務來儲存和處理文字檔案。 按一下 上傳文字檔 也應該會顯示類似的錯誤訊息。
將後端應用程式連接至 Object Storage 服務
在此區段中,您將佈建必要的 Object Storage 及 Natural Language Understanding 服務,並將 Object Storage 服務連結至後端應用程式。 後端應用程式會將文字檔儲存至 Object Storage,而 Natural Language Understanding 稍後在指導教學中用來對上傳的文字檔執行文字分析。
使用 IBM Watson® Natural Language Understanding,開發人員可以分析文字輸入的語意特性,包括種類、概念、情緒、實體、關鍵字、meta 資料、關係、語意角色及觀感。
佈建 Object Storage 及 Natural Language Understanding 服務
-
建立 Object Storage 的實例
- 如果帳戶中已有 Object Storage 服務實例,請選取精簡方案或標準方案。
- 將 服務名稱 設為 your-initials-code-engine-cos。
- 選取您在其中建立 Code Engine 專案的資源群組。
- 按一下建立。
- 擷取 Shell 變數中的服務名稱:
COS_INSTANCE_NAME=your-initials-code-engine-cos
-
在 建立儲存區 下按一下 建立儲存區,然後在 建立自訂儲存區 下選取 建立。
當您建立儲存區或新增物件時,請務必避免使用「個人識別資訊 (PII)」。附註 :PII 是可依名稱、位置或任何其他方法識別任何使用者 (自然人) 的資訊。
- 輸入 唯一儲存區名稱,例如
<your-initials>-bucket-code-engine。 - 選取您在其中建立 Code Engine 專案的 位置。
- 選取 智慧型層級 儲存類別。
- 按一下建立儲存區。
- 擷取 Shell 變數中的儲存區名稱:
COS_BUCKETNAME=your-initials-bucket-code-engine
- 輸入 唯一儲存區名稱,例如
-
在儲存區頁面上。
- 按一下組態索引標籤
- Direct 端點將保留 IBM Cloud內的資料。 擷取 Shell 變數中的直接端點。 在美國南部達拉斯地區,可能是:
COS_ENDPOINT=s3.direct.us-south.cloud-object-storage.appdomain.cloud
-
建立 Natural Language Understanding 的實例
- 選取位置並選取 精簡 方案。
- 將 服務名稱 設為 code-engine-nlu,並選取您在其中建立 Code Engine 專案的資源群組。
- 閱讀授權合約,然後勾選 我已閱讀並同意下列授權合約:。
- 按一下建立。
- 擷取 Shell 變數中的服務名稱:
NLU_INSTANCE_NAME=YourServiceName
將 Object Storage 服務綁定至後端應用程式
現在,您需要將您剛建立之 IBM Cloud Object Storage 實例的認證傳入後端應用程式。 作法是將 Object Storage 服務 連結 至應用程式,這會自動將服務的認證新增至應用程式或工作的環境變數。
-
使用字首
COS建立 Object Storage 服務的連結,以方便在應用程式中使用。 bind 指令會在服務實例中建立服務認證,並使用認證來起始設定應用程式的環境變數。 您可以使用--prefix旗標,將每一個服務連結配置成使用自訂環境變數字首。ibmcloud code-engine application bind --name backend --service-instance $COS_INSTANCE_NAME --role Writer --prefix COS -
您還需要為應用程式提供您要在其中儲存文字檔的儲存區名稱,以及 COS 端點。 這兩個都在先前的步驟中定義。 us-south 的 智慧型層級 端點為 s3.direct.us-south.cloud-object-storage.appdomain.cloud。
定義配置對映 以保留儲存區名稱及端點,因為資訊不敏感。 ConfigMaps 是一個 Kubernetes 物件,可讓您取消配置構件與映像檔內容的連結,以保持儲存器化應用程式的可攜性。 您可以從檔案或鍵值組建立此 configmap -- 目前我們將使用具有
--from-literal旗標的鍵值組。 驗證您先前已擷取這些,並建立 configmap:echo bucket $COS_BUCKETNAME endpoint $COS_ENDPOINTibmcloud code-engine configmap create --name backend-configuration --from-literal=COS_BUCKETNAME=$COS_BUCKETNAME --from-literal=COS_ENDPOINT=$COS_ENDPOINT -
定義了 configmap 之後,您現在可以透過要求 Code Engine 在應用程式執行時期根據 configmap 中的值設定環境變數,來更新後端應用程式。 使用下列指令更新後端應用程式
ibmcloud code-engine application update --name backend --env-from-configmap backend-configuration若要建立密鑰,您需要使用
--env-from-secret旗標。 密鑰和 configmap 都是 "maps"; 因此環境變數集將具有與那些對映中每一個項目的 "key" 相對應的名稱,且環境變數值將是該 "key" 的值。 -
驗證是否已使用連結及 configmap 來更新後端應用程式。 您可以執行下列指令,並在輸出中尋找
Service Bindings和Environment Variables區段ibmcloud code-engine application get --name backend -
跳至前端使用者介面及 上傳文字檔 以進行文字分析。 您應該會看到上傳的檔案,其中含有
Not analyzed標籤。
使用自動化工作處理文字檔
現在,您已將後端應用程式連接至前端應用程式。 您已透過服務連結及上傳檔案提供所有必要的認證,以進行文字分析。 若要完成測試,您將建立工作以指定每次執行工作以使用 Natural Language Understanding 服務分析文字時所使用的工作量配置資訊。
建立工作
工作 與回應傳入 HTTP 請求的應用程式不同,它是用來執行容器映像的,這些映像包含一個可執行檔,目的是執行一次後就退出。 建立 job 時,您可以指定每次執行工作時使用的工作量配置資訊。 您可以從主控台或 CLI 建立工作。
此工作會從 IBM Cloud Object Storage讀取文字檔,然後使用 Natural Language Understanding 服務來分析它們。 它將需要存取這兩個服務的服務認證。
- 執行下列指令以建立工作、
您可以使用ibmcloud code-engine job create --name backend-job --image icr.io/solution-tutorials/tutorial-text-analysis-code-engine-backend-job --env-from-configmap backend-configuration--env旗標來設定 Natural Language Understanding 服務的版本。 對於版本化,請勾選此 鏈結
將 IBM Cloud 服務連結至工作
- 讓我們為 Object Storage 服務建立一個字首為
COS_JOB的連結,以與工作搭配使用來讀取上傳的檔案並儲存結果,ibmcloud code-engine job bind --name backend-job --service-instance $COS_INSTANCE_NAME --role Writer --prefix COS_JOB - 同樣地,讓我們以字首
NLU_JOB來連結 Natural Language Understanding 服務,以分析上傳的文字檔,ibmcloud code-engine job bind --name backend-job --service-instance $NLU_INSTANCE_NAME --role Writer --prefix NLU_JOB - 驗證是否使用連結及 configmap 來更新工作。 您可以執行下列指令,並在輸出中尋找
Service Bindings和Environment Variables區段ibmcloud code-engine job get --name backend-job
執行工作
-
若要使用上述建立的配置來 執行工作,請使用
jobrun submit指令,ibmcloud code-engine jobrun submit --name backend-jobrun --job backend-job當您執行工作時,可以置換您在工作配置中設定的許多變數。 若要檢查變數,請執行
ibmcloud code-engine jobrun submit --help。 -
若要檢查
jobrun的狀態,請執行下列指令ibmcloud code-engine jobrun get --name backend-jobrun -
可以顯示日誌:
ibmcloud code-engine jobrun logs --follow --name backend -
在前端使用者介面中,按一下 重新整理 按鈕 (在上傳文字檔旁邊),以查看每一個已上傳文字檔的 關鍵字 及 JSON。 每一個檔案上的標籤現在應該會變更為
Analyzed。 -
按一下 刪除 圖示,以上傳新檔案或刪除個別檔案,然後使用下列指令重新提交 jobrun,並按 重新整理 按鈕以查看結果。
ibmcloud code-engine jobrun resubmit --jobrun backend-jobrun
自動化工作執行
您可以建立 IBM Cloud Object Storage 訂閱來接聽 Object Storage 儲存區的變更,以自動執行工作,而不是手動執行工作。 當您建立儲存區的 訂閱 時,您的工作會收到該儲存區每一個成功變更的個別事件。
- 您必須先將
Notifications Manager角色指派給 Code Engine,才能建立 Object Storage 訂閱。 作為通知管理程式,Code Engine 可以檢視、修改及刪除 Object Storage 儲存區的通知。 遵循這裡的指示,將通知管理員角色指派給 Code Engine 專案。 - 執行下列指令,以將
backend-job連接至 IBM Cloud Object Storage 事件生產者。 執行指令之前,請先檢查並更新bucket nameibmcloud code-engine subscription cos create --name backend-job-cos-event --destination-type job --destination backend-job --bucket $COS_BUCKETNAME --prefix files --event-type write - 現在,只要上傳新檔案並按 重新整理 按鈕即可查看結果。 展望未來,您不需要重新提交 jobrun,因為訂閱會照顧它。
選用項目: 建置容器映像檔並將其推送至 IBM Cloud Container Registry
使用獨立式建置指令來建置容器映像檔 有一些選項。 執行從本端目錄取回原始檔的單一建置 是用來建立新的前端應用程式:
git clone https://github.com/IBM-Cloud/code-engine-text-analysis
cd code-engine-text-analysis/frontend
echo $BACKEND_PRIVATE_URL
您可以變更要驗證的部分原始碼。 在 public/index.html 及 public/501.html 的 body 中第二個出現的 Text analysis with Code Engine,可以變更為在您的名稱中新增。 在程式碼引擎名稱空間中建立容器映像檔,並在一個指令中建立應用程式:
ibmcloud ce application create --name frontend-fromsource --build-source . --env BACKEND_URL=$BACKEND_PRIVATE_URL
移除資源
- 使用下列指令,刪除專案以刪除其所有元件 (應用程式、工作等)。
ibmcloud code-engine project delete --name $PROJECT_NAME - 導覽至 資源清單,然後刪除您建立的服務:
- IBM Cloud® Object Storage
- IBM Watson® Natural Language Understanding
視資源而定,它可能不會立即刪除,但會保留 (依預設會保留 7 天)。 您可以透過永久刪除資源或在保留期間內還原資源來收回資源。 請參閱本文件,以瞭解如何 使用資源收回。