本指南可協助您瞭解、部署及使用「採用無伺服器運算技術的電子商務平台」解決方案。本解決方案示範如何為零售機構建構及執行電子商務應用程式,並提供公開的網路商店網站。本指南說明如何建立應用程式,以便因應用量暴增的情況 (例如在季節性特賣等尖峰規模事件期間),以及根據訪客所在位置管理要求。這項設計可協助網路商店為分散各地的顧客提供一致的服務。
如果您想瞭解如何運用無伺服器功能部署可擴充的電子商務網頁應用程式,這個解決方案是個不錯的起點。如要精細控管作業,請參閱部署於 Kubernetes 的電子商務網頁應用程式解決方案。
本文假設您熟悉基本雲端概念,但並非必要條件 Google Cloud。具備 Terraform 使用經驗會有所幫助。
目標
本解決方案指南可協助您:
- 瞭解如何設計電子商務網站的系統架構。
- 針對成效、規模和回應能力,最佳化電子商務網站。
- 監控並預測負載限制。
- 使用追蹤和錯誤回報功能,瞭解及管理問題。
產品
這項解決方案使用下列 Google Cloud 產品:
- Cloud Run:全代管服務,可讓您建構及部署無伺服器容器化應用程式。 Google Cloud 會處理資源調度和其他基礎架構工作,讓您專注於程式碼的業務邏輯。
- Cloud SQL:以雲端為基礎的 PostgreSQL 資料庫,在 Google Cloud 基礎架構上全代管。
- Secret Manager:這項服務可讓您以二進位 Blob 或文字字串的形式儲存、管理及存取密鑰。您可以使用 Secret Manager 儲存應用程式在執行階段所需的資料庫密碼、API 金鑰或 TLS 憑證。
- Cloud Storage:這項企業級服務適用於多種資料類型,提供低成本且無限制的物件儲存空間。資料可以在 Google Cloud 內部和外部存取,且會以異地備援的形式備份。
- Firebase Hosting:全方位代管服務,可部署及提供網路應用程式和靜態內容。
- Cloud Logging:這項服務可讓您儲存、搜尋、分析及監控 Google Cloud 和其他雲端的記錄資料與事件,並接收相關快訊。
- Cloud Trace:適用於 Google Cloud 的分散式追蹤系統,可協助您瞭解應用程式處理使用者或其他應用程式傳入的要求所花費的時間,以及處理要求時花在 RPC 呼叫等作業上的時間。
- Error Reporting:這項服務會匯總並顯示執行中的雲端服務所產生的錯誤。錯誤報告會依據錯誤的起因,將同類型的錯誤歸類到同一個組別中。
架構
下圖顯示解決方案的架構:
要求流程
電子商務平台的要求處理流程如下。流程中的步驟已編號,如上方的架構圖所示。
- Firebase 託管用戶端前端。前端會使用 Lit 和網頁元件,在用戶端算繪 API 資料。
- 網路用戶端會呼叫以 Cloud Run 服務形式執行的 API 後端。Cloud Run API 伺服器使用 Django REST 架構以 Django 編寫而成。
- Python 應用程式設定和其他密鑰會儲存在 Secret Manager 中。
- 應用程式的靜態資產會儲存在 Cloud Storage 中。
- 使用 PostgreSQL 的 Cloud SQL 資料庫,是 Python 應用程式的關聯資料庫後端。
- 如果其他 Cloud 產品和 Cloud Run API 伺服器傳來記錄檔、OpenTelemetry 追蹤記錄和錯誤報告,Cloud Logging、Cloud Trace 和 Error Reporting 會儲存這些項目。這類資料可讓您監控正確的應用程式行為,並修正非預期的行為。
費用
如要估算電子商務平台搭配無伺服器運算解決方案所用 Google Cloud 資源的費用,請參閱 Google Cloud Pricing Calculator 中的預先計算估算值。
您可以根據估算結果,進一步計算部署作業的費用。您可以修改預估值,反映您打算對解決方案中使用的資源進行的任何設定變更。
預先計算的預估值是根據特定因素的假設而得,包括:
- 資源的部署位置。 Google Cloud
- 資源的使用時間長度。
事前準備
如要部署這項解決方案,您必須先擁有 Google Cloud 專案和一些 IAM 權限。
建立或選擇 Google Cloud 專案
部署解決方案時,請選擇要部署資源的Google Cloud 專案。您可以建立新專案,或使用現有專案進行部署。
如要建立新專案,請在開始部署前建立。使用新專案有助於避免與先前佈建的資源發生衝突,例如用於正式環境工作負載的資源。
如要建立專案,請完成下列步驟:
-
In the Google Cloud console, go to the project selector page.
-
Click Create project.
-
Name your project. Make a note of your generated project ID.
-
Edit the other fields as needed.
-
Click Create.
取得必要的 IAM 權限
如要啟動部署程序,您需要下表列出的 Identity and Access Management (IAM) 權限。
如果您是為這個解決方案建立新專案,則您在該專案中擁有roles/owner
基本角色,並具備所有必要權限。如果您沒有 roles/owner
角色,請要求管理員授予這些權限 (或包含這些權限的角色)。
所需的身分與存取權管理權限 | 包含必要權限的預先定義角色 |
---|---|
|
服務使用情形管理員 ( roles/serviceusage.serviceUsageAdmin ) |
|
服務帳戶管理員 ( roles/iam.serviceAccountAdmin ) |
|
專案 IAM 管理員 ( roles/resourcemanager.projectIamAdmin ) |
config.deployments.create config.deployments.list |
Cloud Infrastructure Manager 管理員 ( roles/config.admin ) |
iam.serviceAccount.actAs |
服務帳戶使用者 ( roles/iam.serviceAccountUser ) |
關於臨時服務帳戶權限
如果您透過控制台啟動部署程序,Google 會建立服務帳戶,代表您部署解決方案 (並在您選擇時刪除部署作業)。系統會暫時指派特定 IAM 權限給這個服務帳戶,也就是說,解決方案部署及刪除作業完成後,系統就會自動撤銷這些權限。Google 建議您在刪除部署作業後,一併刪除服務帳戶,如本指南稍後所述。
查看指派給服務帳戶的角色
如果Google Cloud 專案或機構的管理員需要這項資訊,請參閱下表。
- Cloud SQL 管理員 (
roles/cloudsql.admin
) - Compute Engine 管理員 (
roles/compute.admin
) - Compute Engine 網路管理員 (
roles/compute.networkAdmin
) - Firebase 服務管理服務代理 (
roles/firebase.managementServiceAgent
) - Firebase 託管管理員 (
roles/firebasehosting.admin
) - 服務帳戶管理員 (
roles/iam.serviceAccountAdmin
) - 服務帳戶使用者 (
roles/iam.serviceAccountUser
) - 專案 IAM 管理員 (
roles/resourcemanager.projectIamAdmin
) - Cloud Run Admin (
roles/run.admin
) - Secret Manager 管理員 (
roles/secretmanager.admin
) - Cloud Storage 管理員 (
roles/storage.admin
)
部署解決方案
為協助您輕鬆部署這項解決方案,GitHub 提供 Terraform 設定。Terraform 設定會定義解決方案所需的所有Google Cloud 資源。
您可以透過下列任一方法部署解決方案:
透過控制台:如要使用預設設定試用解決方案,並瞭解運作方式,請使用這個方法。Cloud Build 會部署解決方案所需的所有資源。不再需要已部署的解決方案時,可以透過控制台刪除。部署解決方案後建立的任何資源,可能需要另外刪除。
如要使用這個部署方法,請按照「透過主控台部署」一文中的操作說明進行。
使用 Terraform CLI:如要自訂解決方案,或想以基礎架構即程式碼 (IaC) 方法自動佈建及管理資源,請使用這個方法。從 GitHub 下載 Terraform 設定,視需要自訂程式碼,然後使用 Terraform CLI 部署解決方案。部署解決方案後,您可以繼續使用 Terraform 管理解決方案。
如要使用這個部署方法,請按照「使用 Terraform CLI 部署」一文中的操作說明進行。
透過控制台部署
請按照下列步驟部署預先設定的解決方案。
在 Google Cloud 快速部署解決方案目錄中,前往「採用無伺服器運算技術的電子商務平台」解決方案。
查看頁面上的資訊,例如解決方案的預估費用和預估部署時間。
準備好開始部署解決方案時,請按一下「Deploy」(部署)。
系統會顯示逐步設定窗格。
完成設定窗格中的步驟。
請記下您輸入的部署作業名稱。您稍後刪除部署作業時,需要使用這個名稱。
按一下「Deploy」(部署) 後,系統會顯示「Solution deployments」(解決方案部署作業) 頁面。 這個頁面的「狀態」欄位會顯示「部署中」。
等待解決方案部署完成。
如果部署失敗,「狀態」欄位會顯示「失敗」。您可以透過 Cloud Build 記錄檔診斷錯誤。詳情請參閱「透過控制台部署時發生錯誤」。
部署完成後,「狀態」欄位會變更為「已部署」。
如要查看及使用已部署的電子商務網頁應用程式,請按照「探索 Avocano 部署作業」一文中的操作說明進行。
如要查看已部署的 Google Cloud 資源及其設定,請參加互動式導覽。
不再需要解決方案時,您可以刪除部署作業,避免 Google Cloud 資源持續產生費用。詳情請參閱「刪除部署項目」。
使用 Terraform CLI 部署
本節說明如何自訂解決方案,或使用 Terraform CLI 自動佈建及管理解決方案。使用 Terraform CLI 部署的解決方案不會顯示在 Google Cloud 控制台的「解決方案部署作業」頁面中。
設定 Terraform 用戶端
您可以在 Cloud Shell 或本機主機中執行 Terraform。本指南說明如何在 Cloud Shell 中執行 Terraform。Cloud Shell 已預先安裝 Terraform,並設定為透過 Google Cloud進行驗證。
您可以在 GitHub 存放區中找到此解決方案的 Terraform 程式碼。
將 GitHub 存放區複製到 Cloud Shell。
系統會顯示提示,要求確認要將 GitHub 存放區下載到 Cloud Shell。
按一下「確認」。
Cloud Shell 會在另一個瀏覽器分頁中啟動,而 Terraform 程式碼會下載至 Cloud Shell 環境的
$HOME/cloudshell_open
目錄。在 Cloud Shell 中,檢查目前的工作目錄是否為
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
。這個目錄包含解決方案的 Terraform 設定檔。如要變更為該目錄,請執行下列指令:cd $HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
執行下列指令來初始化 Terraform:
terraform init
等待系統顯示下列訊息:
Terraform has been successfully initialized!
設定 Terraform 變數
您下載的 Terraform 程式碼包含變數,可根據需求自訂部署作業。舉例來說,您可以指定 Google Cloud 專案和區域,讓解決方案部署在這些位置。
確認目前的工作目錄為
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
。如果不是,請前往該目錄。在同一個目錄中,建立名為
terraform.tfvars
的文字檔案。在
terraform.tfvars
檔案中複製下列程式碼片段,並為必要變數設定值。- 按照程式碼片段註解中的指示操作。
- 這個程式碼片段只包含必須設定值的變數。Terraform 設定包含其他具有預設值的變數。如要查看所有變數和預設值,請參閱
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
目錄中的variables.tf
檔案。 請確認您在
terraform.tfvars
檔案中設定的每個值,都與variables.tf
檔案中宣告的變數型別相符。舉例來說,如果variables.tf
檔案中為變數定義的型別是bool
,則您必須在terraform.tfvars
檔案中,將true
或false
指定為該變數的值。# This is an example of the terraform.tfvars file. # The values in this file must match the variable types declared in variables.tf. # The values in this file override any defaults in variables.tf. # ID of the project in which you want to deploy the solution project_id = "PROJECT_ID" # Google Cloud region where you want to deploy the solution # Example: us-central1 region = "REGION" # Google Cloud zone where you want to deploy the solution # Example: us-central1-a zone = "ZONE" # Container Registry that hosts the client image client_image_host = "hsa-public/serverless-ecommerce" # Container Registry that hosts the server image server_image_host = "hsa-public/serverless-ecommerce"
如要瞭解可指派給必要變數的值,請參閱下列內容:
驗證及檢查 Terraform 設定
確認目前的工作目錄為
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
。如果不是,請前往該目錄。確認 Terraform 設定沒有錯誤:
terraform validate
如果指令傳回任何錯誤,請在設定中進行必要修正,然後再次執行
terraform validate
指令。重複這個步驟,直到指令傳回以下訊息為止:Success! The configuration is valid.
查看設定中定義的資源:
terraform plan
如果您未按照先前的說明建立
terraform.tfvars
檔案,Terraform 會提示您輸入沒有預設值的變數值。輸入必要值。terraform plan
指令的輸出內容是資源清單,列出您套用設定時,Terraform 會佈建的資源。如要進行任何變更,請編輯設定,然後再次執行
terraform validate
和terraform plan
指令。
佈建資源
確認 Terraform 設定不需要進一步變更後,即可部署資源。
確認目前的工作目錄為
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
。如果不是,請前往該目錄。套用 Terraform 設定:
terraform apply
如果您未按照先前的說明建立
terraform.tfvars
檔案,Terraform 會提示您輸入沒有預設值的變數值。輸入必要值。Terraform 會顯示即將建立的資源清單。
系統提示您執行動作時,請輸入
yes
。Terraform 會顯示訊息,說明部署進度。
如果無法完成部署作業,Terraform 會顯示導致失敗的錯誤。請查看錯誤訊息並更新設定,修正錯誤。然後再次執行
terraform apply
指令。如需排解 Terraform 錯誤的相關協助,請參閱「使用 Terraform CLI 部署解決方案時發生錯誤」。建立所有資源後,Terraform 會顯示下列訊息:
Apply complete!
如要查看及使用已部署的電子商務網頁應用程式,請按照「探索 Avocano 部署作業」一文中的操作說明進行。
如要查看已部署的 Google Cloud 資源及其設定,請參加互動式導覽。
不再需要解決方案時,您可以刪除部署作業,避免 Google Cloud 資源持續產生費用。詳情請參閱「刪除部署項目」。
探索 Avocano 部署作業
您已部署 Avocano 網站應用程式!您可以造訪 Avocano 網站並四處瀏覽,然後在 Google Cloud 控制台中瞭解這項解決方案的運作方式。請注意,應用程式部署完成後,網站可能需要幾分鐘才會顯示在提供的地址。
什麼是 Avocano?
這項解決方案會使用名為「Avocano」的範例應用程式,示範如何部署及管理網頁應用程式,並搭配使用許多無伺服器應用程式的工具和產品。Avocano 應用程式會模擬電子商務網頁應用程式的實際運作方式。
Avocano 前端會顯示虛假的店面,您可以在其中將商品加入購物車,並嘗試完成結帳程序,但隨後商店會揭露自己是假的 (Avoca--no!)。雖然您無法實際購買酪梨,但應用程式會將可用的產品數量減少一,藉此示範庫存管理。
探索前端
如要啟動解決方案部署作業的前端,請按照下列步驟操作:
- 開啟 Firebase 控制台。
- 選取現有專案。
- 前往「Build」(建構) >「Hosting」(託管) 區段。
- 選取結尾為 web.app 的「Domain」(網域)。範例應用程式的前端會在新的瀏覽器視窗中開啟。
現在你可以像顧客一樣與 Avocano 網站互動,包括瀏覽產品、將產品加入購物車,以及以訪客身分結帳。
查看自動調度資源和並行設定
Cloud Run 會根據流量自動擴充或縮減容器執行個體,確保應用程式能快速啟動。
瞭解自動調度資源和並行設定
請務必瞭解 Cloud Run 的自動調度資源和並行設定,可能會如何影響應用程式的效能和費用:
執行個體數量下限:您可以設定執行個體數量下限,為服務啟用閒置執行個體。預期流量會增加時,您可以提高最低執行個體設定,盡量縮短前 N 位使用者的回應時間。如果服務需要縮短延遲時間,特別是從零個作用中執行個體開始擴充時,您可以指定要保持暖機狀態、準備好處理要求的最低容器執行個體數量。
執行個體數量上限:在 Cloud Run 中提高執行個體數量上限設定,有助於處理預期會出現的極高流量。在這種情況下,您也應評估目前的配額,並考慮要求增加配額。調低最大執行個體設定,有助於避免產生意外費用,或提高基礎支援基礎架構 (例如資料庫容量) 的使用率。
並行:Cloud Run 並行設定會指定特定容器執行個體可同時處理的要求數量上限。針對應用程式行為最佳化記憶體、CPU 和並行,可確保每個容器執行個體都能發揮最大效用,並盡量減少擴充至新執行個體的需求。詳情請參閱「最佳化並行」。
查看自動調度資源和並行設定
如要查看 Cloud Run 服務目前的執行個體數量下限和上限設定,以及並行設定,請按照下列步驟操作:
- 前往 Cloud Run
- 按一下感興趣的服務,開啟「服務詳細資料」頁面。
- 按一下「Revisions」(修訂版本) 分頁標籤。
- 在右側的詳細資料面板中,「容器」分頁下方會列出目前的最低執行個體數、最高執行個體數和並行設定。
如要瞭解如何調整這些設定來提升應用程式效能,請參閱 Cloud Run 說明文件中的一般開發提示。
查看流量記錄
您可以使用 Cloud Run 中的記錄工具監控應用程式的流量,並在發生問題時收到快訊。
如要查看 Cloud Run 服務的記錄,請按照下列步驟操作:
- 前往 Cloud Run
- 在顯示的清單中按一下所選服務。
- 按一下「記錄」分頁標籤,取得此服務所有修訂版本的要求和容器記錄。您可以依記錄的嚴重性等級進行篩選。
Cloud Run 會自動從多個位置擷取記錄:寫入標準輸出和標準錯誤的任何項目、/var/log/
中的任何項目等。使用 Cloud Logging 程式庫進行的任何手動記錄也會一併擷取。您也可以按一下「在記錄檔探索工具中查看」,直接在 Cloud Logging 中查看這項服務的記錄。
在 Avocano 應用程式中,嘗試下列使用者動作,觸發您可在記錄中查看的對應輸出內容。
使用者動作 | 記錄輸出 |
---|---|
使用「收款」做為付款類型購買購物車,且購物車中的產品金額不得超過庫存數量。 | 記錄輸出內容會顯示 info 記錄,狀態為 200。httpRequest |
使用「Collect」做為付款類型購買購物車,但購物車中的產品數量超過庫存數量。 | 記錄輸出內容會顯示 Warning 記錄,狀態為 400 httpRequest 。 |
使用「消費金」做為付款類型,購買購物車中的商品。 | 記錄輸出內容會顯示 Error 記錄,狀態為 501 httpRequest 。 |
您可以在 serializers.py
檔案中,查看導致 400/501
HTTP 回應的錯誤代碼。Cloud Run 會記錄回應,並產生對應的要求記錄項目。
您可以設定記錄式快訊,只要記錄檔中出現特定訊息,您就會收到通知。
查看追蹤記錄檢測和擷取的追蹤記錄
這個解決方案使用 Open Telemetry Python 自動檢測,擷取 Avocano 應用程式的遙測資料。
瞭解追蹤的實作方式
解決方案會實作下列程式碼和設定,以便使用自動檢測功能產生追蹤記錄:
- 在 requirements.txt 檔案中新增 Cloud Trace 的依附元件,包括下列項目:
opentelemetry-distro
:安裝 Open Telemetry API、SDK 和指令列工具。opentelemetry-instrumentation
:新增 Python 自動檢測功能支援。opentelemetry-exporter-gcp-trace
:支援將追蹤記錄匯出至 Cloud Trace。opentelemetry-resource-detector
:支援偵測 Google Cloud 資源。opentelemetry-instrumentation-django
:允許追蹤 Django 應用程式的要求。
- 在
iam.tf
檔案中設定 IAM 繫結,讓伺服器能夠寫入 Cloud Trace。 - 在
services.tf
檔案中設定OTEL_TRACES_EXPORTER
環境變數,以使用 Cloud Trace 的匯出工具。 - 在
server/Procfile
中,將伺服器設為在 Avocano 應用程式上執行opentelemetry-instrument
指令。這個指令會偵測 Avocano 中的套件,並盡可能對這些套件套用自動追蹤檢測。
如要進一步瞭解如何收集 Python 的 Cloud Trace 資料,請參閱「Python 和 OpenTelemetry」。
查看延遲時間資料
如要查看要求的延遲時間資料,請按照下列步驟操作:
- 前往 Cloud Trace
- 在「追蹤記錄清單」頁面的「選取追蹤記錄」專區中,按一下代表已擷取追蹤記錄的藍點。「延遲時間」欄會顯示已擷取追蹤記錄的延遲時間。
您也可以在「Trace list」(追蹤記錄清單) 頁面中,使用下列視覺化方式查看追蹤記錄資料:
- 瀑布圖: 顯示應用程式收到的完整要求。時間軸中的每一步都是一個時距,按一下即可查看詳細資料。Cloud Run 會自動為內部作業建立範圍,例如要求處理和負載平衡。這些範圍會顯示在與 Avocano 產生的範圍相同的瀑布圖中,方便您查看要求的完整生命週期。
- 時距詳細資料:顯示您透過追蹤檢測應用程式時,在應用程式程式碼中加入的任何標籤或註解。
如要新增自訂追蹤記錄,請參閱 Open Telemetry 說明文件中的「手動插碼」。
設計建議
本節提供建議,說明如何使用採用無伺服器運算技術的電子商務平台解決方案,開發符合安全性、可靠性、成本和效能需求的架構。
如要查看各區域的設計建議,請按一下適當的分頁標籤。
強化安全性
設計重點 | 建議 |
---|---|
資料加密 |
根據預設,Cloud Run 會使用 Google-owned and Google-managed encryption key加密資料。如要使用您控管的金鑰保護容器,可以採用客戶自行管理的加密金鑰。詳情請參閱「使用客戶管理的加密金鑰」。 |
軟體供應鏈安全 | 如要確保只有授權的容器映像檔會部署至 Cloud Run 服務,可以使用二進位授權。 |
提高穩定性
設計重點 | 建議 |
---|---|
應用程式資源調度 | 解決方案中的 Cloud Run 服務已設定為根據要求負載,水平自動調度容器執行個體資源。請根據需求查看並調整自動調度參數。詳情請參閱「關於容器執行個體自動調度」。 |
處理要求 | 如要提升 Cloud Run 服務的回應速度,您可以使用工作階段親和性,在容器例項上儲存特定於用戶端的狀態。系統會盡可能將同一個用戶端的要求轉送至同一個容器執行個體。詳情請參閱「設定工作階段相依性 (服務)」。 |
資料持久性 | 如要避免資料遺失,可以使用 Cloud SQL 資料庫的自動備份功能。詳情請參閱「關於 Cloud SQL 備份」。 |
資料庫高可用性 (HA) | 解決方案中的 Cloud SQL 資料庫會部署在單一區域。如要使用高可用性,可以採用多區域設定。 詳情請參閱「關於高可用性」。 如果資料庫高可用性是重要需求,可以考慮改用 PostgreSQL 適用的 AlloyDB 服務。 Google Cloud |
資料庫可靠性 | 本解決方案中的 Cloud SQL 執行個體使用 使用 |
配額與限制 | Cloud Run 資源數量有限。如果您預期流量會大幅增加 (例如因季節性或特賣活動),請申請提高配額。詳情請參閱「如何增加配額」。 部分配額要求需要手動核准,因此請提前規劃。您也可以設定配額達成進度快訊。 |
降低成本
設計重點 | 建議 |
---|---|
資源效率 | Cloud Run 會根據 CPU 和記憶體用量,判斷應傳送至容器執行個體的要求數量。提高並行要求數上限設定,即可減少 Cloud Run 需要建立的容器執行個體數量,進而降低費用。詳情請參閱「每個執行個體的並行要求數量上限 (服務)」。 這個解決方案中的 Cloud Run 服務已設定為只在要求處理期間分配 CPU。Cloud Run 服務處理完要求後,容器執行個體對 CPU 的存取權就會遭到停用。如要瞭解這項設定對費用和效能的影響,請參閱「 CPU 分配 (服務)」。 |
提升成效
設計重點 | 建議 |
---|---|
應用程式啟動時間 | 如要減少冷啟動對效能的影響,您可以將 Cloud Run 容器執行個體數量下限設為非零值。詳情請參閱 Cloud Run 一般開發提示。 |
調整並行 | 這個解決方案經過調整,可盡量提高個別容器的輸送量。 Cloud Run 會自動調整並行數,以便處理多個要求。不過,如果容器無法處理大量並行要求,或容器能夠處理更多要求,您就應該調整預設的並行要求數量上限。詳情請參閱「最佳化並行作業」。 |
資料庫效能 | 對於效能要求較高的應用程式,您可以透過使用較大的機器類型,以及增加儲存空間容量,提升 Cloud SQL 效能。 如果資料庫效能是重要需求,可以考慮改用 PostgreSQL 適用的 AlloyDB 服務。 Google Cloud |
注意事項:
- 進行任何設計變更前,請先評估成本影響,並考量其他功能的潛在取捨。您可以使用 Google Cloud Pricing Calculator 評估設計變更對費用的影響。
- 如要在解決方案中實作設計變更,您需要具備 Terraform 程式設計專業知識,並深入瞭解解決方案中使用的 Google Cloud 服務。
- 如果您修改 Google 提供的 Terraform 設定,然後發生錯誤,請在 GitHub 中建立問題。我們會盡可能審查 GitHub 問題,但這並非一般使用問題的適用管道。
- 如要進一步瞭解如何在 Google Cloud中設計及設定實際工作環境,請參閱 Google Cloud中的登陸區設計,以及Google Cloud 設定檢查清單。
刪除解決方案部署作業
不再需要解決方案部署作業時,請刪除部署作業,以免系統繼續針對您建立的資源計費。
透過控制台刪除
如果您是透過控制台部署解決方案,請使用這個程序。
前往 Google Cloud 控制台的「Solution deployments」(解決方案部署項目) 頁面。
選取要刪除部署作業的專案。
找出要刪除的部署作業。
在部署作業的資料列中,按一下
「Actions」(動作),然後選取「Delete」(刪除)。您可能需要捲動畫面,才能看到資料列中的「動作」。
輸入部署作業的名稱,然後按一下「確認」。
「狀態」欄位會顯示「正在刪除」。
如果刪除作業失敗,請參閱「刪除部署作業時發生錯誤」一文中的疑難排解指南。
如果您不再需要用於解決方案的專案,可以刪除該專案。 Google Cloud 詳情請參閱「選用步驟:刪除專案」。
使用 Terraform CLI 刪除
如果您使用 Terraform CLI 部署解決方案,請按照這個程序操作。
在 Cloud Shell 中,請確認目前的工作目錄是
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
。如果不是,請前往該目錄。移除 Terraform 佈建的資源:
terraform destroy
Terraform 會顯示即將刪除的資源清單。
系統提示您執行動作時,請輸入
yes
。Terraform 會顯示訊息,說明進度。刪除所有資源後,Terraform 會顯示以下訊息:
Destroy complete!
如果刪除作業失敗,請參閱「刪除部署作業時發生錯誤」一文中的疑難排解指南。
如果您不再需要用於解決方案的專案,可以刪除該專案。 Google Cloud 詳情請參閱「選用步驟:刪除專案」。
選用:刪除專案
如果您是在新 Google Cloud 專案中部署解決方案,且現在已不再需要該專案,請完成下列步驟來刪除專案:
- 前往 Google Cloud 控制台的「管理資源」頁面。
- 在專案清單中選取要刪除的專案,然後按一下「刪除」。
- 在提示中輸入專案 ID,然後按一下「Shut down」(關閉)。
如果您決定保留專案,請刪除為這個解決方案建立的服務帳戶,詳情請見下節。
選用:刪除服務帳戶
如果您已刪除用於解決方案的專案,請略過本節。
如本指南稍早所述,部署解決方案時,系統會代表您建立服務帳戶。服務帳戶暫時獲派特定 IAM 權限,也就是在解決方案部署和刪除作業完成後,系統會自動撤銷權限,但不會刪除服務帳戶。Google 建議您刪除這個服務帳戶。
如果您透過 Google Cloud 控制台部署解決方案,請前往「Solution deployments」(解決方案部署作業) 頁面。(如果已開啟該頁面,請重新整理瀏覽器)。系統會在背景觸發程序,刪除服務帳戶。您不需採取進一步行動。
如果您使用 Terraform CLI 部署解決方案,請完成下列步驟:
前往 Google Cloud 控制台的「Service accounts」(服務帳戶) 頁面。
選取您用於解決方案的專案。
選取要刪除的服務帳戶。
為解決方案建立的服務帳戶電子郵件 ID 格式如下:
goog-sc-DEPLOYMENT_NAME-NNN@PROJECT_ID.iam.gserviceaccount.com
電子郵件 ID 包含下列值:
- DEPLOYMENT_NAME:部署作業的名稱。
- NNN:隨機 3 位數。
- PROJECT_ID:您部署解決方案的專案 ID。
點選「刪除」。
排解錯誤
診斷及解決錯誤時可採取的行動,取決於部署方法和錯誤的複雜程度。
透過控制台部署時發生錯誤
如果使用控制台時部署作業失敗,請執行下列操作:
前往「Solution deployments」(解決方案部署項目) 頁面。
如果部署失敗,「狀態」欄位會顯示「失敗」。
查看導致失敗的錯誤詳細資料:
在部署作業的資料列中,按一下「動作」
。您可能需要捲動畫面,才能看到資料列中的「動作」。
選取「查看 Cloud Build 記錄」。
查看 Cloud Build 記錄,並採取適當行動,解決導致失敗的問題。
使用 Terraform CLI 部署時發生錯誤
如果使用 Terraform 部署失敗,terraform
apply
指令的輸出內容會包含錯誤訊息,您可以查看這些訊息來診斷問題。
以下各節的範例顯示使用 Terraform 時可能遇到的部署錯誤。
未啟用 API 錯誤
如果您建立專案後,立即嘗試在新專案中部署解決方案,部署作業可能會失敗,並顯示類似下列的錯誤:
Error: Error creating Network: googleapi: Error 403: Compute Engine API has not
been used in project PROJECT_ID before or it is disabled. Enable it by visiting
https://console.developers.google.com/apis/api/compute.googleapis.com/overview?project=PROJECT_ID
then retry. If you enabled this API recently, wait a few minutes for the action
to propagate to our systems and retry.
如果發生這個錯誤,請稍待片刻,然後再次執行 terraform apply
指令。
無法指派要求地址的錯誤
執行 terraform apply
指令時,可能會發生 cannot assign requested address
錯誤,並顯示類似下列內容的訊息:
Error: Error creating service account:
Post "https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts:
dial tcp [2001:db8:ffff:ffff::5f]:443:
connect: cannot assign requested address
如果發生這個錯誤,請再次執行 terraform apply
指令。
刪除部署作業時發生錯誤
在某些情況下,嘗試刪除部署作業可能會失敗:
- 透過控制台部署解決方案後,如果您變更解決方案佈建的任何資源,然後嘗試刪除部署作業,刪除作業可能會失敗。「解決方案部署作業」頁面的「狀態」欄位會顯示「失敗」,而 Cloud Build 記錄會顯示錯誤原因。
- 使用 Terraform CLI 部署解決方案後,如果您透過非 Terraform 介面 (例如控制台) 變更任何資源,然後嘗試刪除部署作業,刪除作業可能會失敗。
terraform destroy
指令輸出內容中的訊息會顯示錯誤原因。
查看錯誤記錄和訊息,找出並刪除導致錯誤的資源,然後再次嘗試刪除部署作業。
如果無法刪除以主控台為基礎的部署作業,且您無法使用 Cloud Build 記錄檔診斷錯誤,則可使用 Terraform CLI 刪除部署作業,詳情請參閱下一節。
使用 Terraform CLI 刪除以控制台為基礎的部署作業
本節說明如何刪除以主控台為基礎的部署作業 (如果您嘗試透過主控台刪除時發生錯誤)。這個方法會下載要刪除的部署作業的 Terraform 設定,然後使用 Terraform CLI 刪除部署作業。
找出部署作業的 Terraform 程式碼、記錄和其他資料儲存區域。這個區域可能與您部署解決方案時選取的區域不同。
前往 Google Cloud 控制台的「Solution deployments」(解決方案部署項目) 頁面。
選取要刪除部署作業的專案。
在部署清單中,找出要刪除的部署所在的資料列。
按一下「查看所有列內容」
。在「Location」(位置) 欄中,記下第二個位置,如下例所示:
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
為專案 ID、區域和要刪除的部署作業名稱建立環境變數:
export REGION="REGION" export PROJECT_ID="PROJECT_ID" export DEPLOYMENT_NAME="DEPLOYMENT_NAME"
在這些指令中,請替換下列項目:
- REGION:您在本程序稍早記下的位置。
- PROJECT_ID:部署解決方案的專案 ID。
- DEPLOYMENT_NAME:要刪除的部署作業名稱。
取得要刪除的部署作業最新修訂版本 ID:
export REVISION_ID=$(curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}" \ | jq .latestRevision -r) echo $REVISION_ID
輸出結果會與下列內容相似:
projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME/revisions/r-0
取得部署作業的 Terraform 設定 Cloud Storage 位置:
export CONTENT_PATH=$(curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://config.googleapis.com/v1alpha2/${REVISION_ID}" \ | jq .applyResults.content -r) echo $CONTENT_PATH
以下是這個指令的輸出範例:
gs://PROJECT_ID-REGION-blueprint-config/DEPLOYMENT_NAME/r-0/apply_results/content
從 Cloud Storage 下載 Terraform 設定至 Cloud Shell:
gcloud storage cp $CONTENT_PATH $HOME --recursive cd $HOME/content/infra
等待系統顯示
Operation completed
訊息,如下列範例所示:Operation completed over 45 objects/268.5 KiB
初始化 Terraform:
terraform init
等待系統顯示下列訊息:
Terraform has been successfully initialized!
移除已部署的資源:
terraform destroy
Terraform 會顯示即將刪除的資源清單。
如果系統顯示任何有關未宣告變數的警告,請忽略這些警告。
系統提示您執行動作時,請輸入
yes
。Terraform 會顯示訊息,說明進度。刪除所有資源後,Terraform 會顯示下列訊息:
Destroy complete!
刪除部署作業成品:
curl -X DELETE \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}?force=true&delete_policy=abandon"
等待幾秒,然後確認部署構件已刪除:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}" \ | jq .error.message
如果輸出內容顯示
null
,請稍候幾秒鐘,然後再次執行指令。刪除部署構件後,系統會顯示如下例所示的訊息:
Resource 'projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME' was not found
- 如要提供說明文件、控制台內教學課程或解決方案的意見,請使用頁面上的「提供意見」按鈕。
如為未修改的程式碼,請在適當的 GitHub 存放區中建立問題:
我們會盡可能審查 GitHub 問題,但這並非一般使用問題的適用管道。
- 如要解決解決方案中使用的產品問題,請與 Cloud Customer Care 團隊聯絡。
提交意見回饋
快速部署解決方案僅供參考,並非正式支援的產品。Google 可能會變更或移除解決方案,恕不另行通知。
如要排解錯誤,請查看 Cloud Build 記錄和 Terraform 輸出內容。
如要提供意見,請按照下列步驟操作:
後續步驟
這個解決方案示範如何使用 Cloud Run 部署電子商務網頁應用程式。如要進一步瞭解 Google Cloud 產品和功能,請參閱: