Cloud Run 上的 Wagtail

1. 簡介

894762ebb681671c.png

Cloud Run 是代管運算平台,能夠讓您執行可透過 HTTP 要求叫用的無狀態容器。Cloud Run 採用無伺服器技術,可為您省去所有基礎架構管理工作,讓您專心處理最重要的事物,建構出色的應用程式。

它也與 Google Cloud 生態系統中的許多其他部分原生連結,包括用於代管資料庫的 Cloud SQL、用於統一物件儲存空間的 Cloud Storage,以及用於管理機密資料的 Secret Manager

Wagtail 是基於 Django 建構的開放原始碼內容管理系統 (CMS),Django 是有助快速開發的高階 Python 網路架構。

在本教學課程中,您將使用這些元件部署小型 Wagtail 專案。

注意:本程式碼研究室上次驗證時使用的是 Wagtail 5.2.2,該版本支援 Django 5。

課程內容

  • 如何使用 Cloud Shell
  • 如何建立 Cloud SQL 資料庫
  • 如何建立 Cloud Storage 值區
  • 如何建立 Secret Manager 密鑰
  • 如何使用不同 Google Cloud 服務的 Secrets
  • 如何將 Google Cloud 元件連結至 Cloud Run 服務
  • 如何使用 Container Registry 儲存已建構的容器
  • 如何部署至 Cloud Run
  • 如何在 Cloud Build 中執行資料庫結構定義遷移作業

2. 設定和需求

自助式環境設定

  1. 登入 Google Cloud 控制台,然後建立新專案或重複使用現有專案。如果您還沒有 Gmail 或 Google Workspace 帳戶,請務必建立帳戶

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 「Project name」是這個專案參與者的顯示名稱。這是 Google API 不會使用的字元字串。您隨時可以更新。
  • 專案 ID 在所有 Google Cloud 專案中都是不重複的值,且無法變更 (設定後即無法變更)。Cloud 控制台會自動產生專屬字串,您通常不需要特別在意。在大多數程式碼研究室中,您都需要參照專案 ID (通常會以 PROJECT_ID 表示)。如果您不喜歡系統產生的 ID,可以隨機產生另一個 ID。或者,您也可以自行嘗試,看看是否可用。這項設定在這個步驟後就無法變更,並會在整個專案期間維持不變。
  • 提醒您,有些 API 會使用第三個值「專案編號」。如要進一步瞭解這三個值,請參閱說明文件
  1. 接下來,您需要在 Cloud 控制台中啟用帳單功能,才能使用 Cloud 資源/API。執行這個程式碼研究室不會產生太多費用,甚至可能完全不會產生費用。如要關閉資源,避免在本教學課程結束後繼續產生費用,您可以刪除建立的資源或專案。Google Cloud 新使用者可享有價值 $300 美元的免費試用期

Google Cloud Shell

雖然 Google Cloud 可透過筆記型電腦遠端操作,但在本程式碼研究室中,我們會使用 Google Cloud Shell,這是在雲端運作的指令列環境。

啟用 Cloud Shell

  1. 在 Cloud 控制台中,按一下「啟用 Cloud Shell」 圖示 853e55310c205094.png

3c1dabeca90e44e5.png

如果這是您首次啟動 Cloud Shell,系統會顯示中介畫面,說明 Cloud Shell 的功能。如果您看到中介畫面,請按一下「繼續」

9c92662c6a846a5c.png

佈建並連線至 Cloud Shell 的作業只需幾分鐘的時間。

9f0e51b578fecce5.png

這個虛擬機器會載入所有必要的開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,可大幅提升網路效能和驗證功能。您可以在瀏覽器中完成本程式碼研究室的大部分工作,甚至是全部工作。

連線至 Cloud Shell 後,您應會發現自己通過驗證,且專案已設為您的專案 ID。

  1. 在 Cloud Shell 中執行下列指令,確認您已通過驗證:
gcloud auth list

指令輸出

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. 在 Cloud Shell 中執行下列指令,確認 gcloud 指令知道您的專案:
gcloud config list project

指令輸出

[core]
project = <PROJECT_ID>

如未設定,請輸入下列指令設定專案:

gcloud config set project <PROJECT_ID>

指令輸出

Updated property [core/project].

3. 啟用 Cloud API

在 Cloud Shell 中,為要使用的元件啟用 Cloud API:

gcloud services enable \
  run.googleapis.com \
  sql-component.googleapis.com \
  sqladmin.googleapis.com \
  compute.googleapis.com \
  cloudbuild.googleapis.com \
  secretmanager.googleapis.com \
  artifactregistry.googleapis.com

由於這是您第一次透過 gcloud 呼叫 API,系統會要求您授權使用憑證發出這項要求。這項操作會在每個 Cloud Shell 工作階段中執行一次。

這項作業可能需要幾分鐘才能完成。

完成後,畫面上應會顯示類似以下的成功訊息:

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

4. 建立範本專案

您將使用預設的 Wagtail 專案範本做為 Wagtail 範例專案。為此,您將暫時安裝 Wagtail 來產生範本。

如要建立這個範本專案,請使用 Cloud Shell 建立名為 wagtail-cloudrun 的新目錄,然後前往該目錄:

mkdir ~/wagtail-cloudrun
cd ~/wagtail-cloudrun

接著,將 Wagtail 安裝到臨時虛擬環境中:

virtualenv venv
source venv/bin/activate
pip install wagtail

接著,在目前的資料夾中建立新的範本專案:

wagtail start myproject .

目前資料夾中現在會有範本 Wagtail 專案:

ls -F
Dockerfile  home/  manage.py*  myproject/  requirements.txt  search/ venv/

您現在可以關閉並移除臨時虛擬環境:

deactivate
rm -rf venv

從這裡開始,系統會在容器中呼叫 Wagtail。

5. 建立後端服務

您現在將建立後端服務:專用服務帳戶、Artifact Registry、Cloud SQL 資料庫、Cloud Storage 值區,以及多個 Secret Manager 值。

在部署作業中使用密碼時,請務必保護密碼值,這對任何專案的安全性都至關重要,並確保不會有人不小心將密碼放在不該放的位置 (例如直接放入設定檔,或直接輸入終端機,以便從記錄中擷取)。

首先,請設定兩個基本環境變數,一個用於專案 ID:

PROJECT_ID=$(gcloud config get-value core/project)

以及一個區域:

REGION=us-central1

建立服務帳戶

如要限制服務對 Google Cloud 其他部分的存取權,請建立專屬的服務帳戶:

gcloud iam service-accounts create cloudrun-serviceaccount

您將在本程式碼研究室的後續章節中,透過電子郵件地址參照這個帳戶。在環境變數中設定該值:

SERVICE_ACCOUNT=$(gcloud iam service-accounts list \
    --filter cloudrun-serviceaccount --format "value(email)")

建立 Artifact Registry

如要儲存已建構的容器映像檔,請在所選區域建立容器登錄:

gcloud artifacts repositories create containers --repository-format docker --location $REGION

您將在本程式碼研究室的後續章節中,以名稱參照這個登錄:

ARTIFACT_REGISTRY=${REGION}-docker.pkg.dev/${PROJECT_ID}/containers

建立資料庫

建立 Cloud SQL 執行個體:

gcloud sql instances create myinstance --project $PROJECT_ID \
  --database-version POSTGRES_14 --tier db-f1-micro --region $REGION

這項作業可能需要幾分鐘才能完成。

在該例項中建立資料庫:

gcloud sql databases create mydatabase --instance myinstance

在同一個執行個體中建立使用者:

DJPASS="$(cat /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9' | fold -w 30 | head -n 1)"
gcloud sql users create djuser --instance myinstance --password $DJPASS

授予服務帳戶連線至執行個體的權限:

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:${SERVICE_ACCOUNT} \
    --role roles/cloudsql.client

建立儲存空間值區

建立 Cloud Storage 值區 (請注意,名稱必須全域不重複):

GS_BUCKET_NAME=${PROJECT_ID}-media
gcloud storage buckets create gs://${GS_BUCKET_NAME} --location ${REGION} 

授予服務帳戶管理儲存桶的權限:

gcloud storage buckets add-iam-policy-binding gs://${GS_BUCKET_NAME} \
    --member serviceAccount:${SERVICE_ACCOUNT} \
    --role roles/storage.admin

由於儲存在值區中的物件會有不同的來源 (值區網址,而非 Cloud Run 網址),因此您需要設定跨源資源共享 (CORS) 設定。

建立名為 cors.json 的新檔案,並在其中加入下列內容:

touch cors.json
cloudshell edit cors.json

cors.json

[
    {
      "origin": ["*"],
      "responseHeader": ["Content-Type"],
      "method": ["GET"],
      "maxAgeSeconds": 3600
    }
]

將此 CORS 設定套用至新建立的儲存空間值區:

gsutil cors set cors.json gs://$GS_BUCKET_NAME

將設定儲存為密鑰

設定了後端服務後,您現在可以將這些值儲存在使用 Secret Manager 保護的檔案中。

Secret Manager 可讓您以二進位 blob 或文字字串的形式儲存、管理及存取密鑰。這類金鑰適用於儲存設定資訊,例如資料庫密碼、API 金鑰或應用程式在執行階段所需的 TLS 憑證。

首先,請建立一個檔案,其中包含資料庫連線字串、媒體儲存桶、Django 的密鑰 (用於為工作階段和權杖簽署加密) 的值,以及啟用偵錯功能:

echo DATABASE_URL=\"postgres://djuser:${DJPASS}@//cloudsql/${PROJECT_ID}:${REGION}:myinstance/mydatabase\" > .env

echo GS_BUCKET_NAME=\"${GS_BUCKET_NAME}\" >> .env

echo SECRET_KEY=\"$(cat /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9' | fold -w 50 | head -n 1)\" >> .env

echo DEBUG=True >> .env

接著,請建立名為 application_settings 的 Secret,並使用該檔案做為 Secret:

gcloud secrets create application_settings --data-file .env

允許服務帳戶存取這個密鑰:

gcloud secrets add-iam-policy-binding application_settings \
  --member serviceAccount:${SERVICE_ACCOUNT} --role roles/secretmanager.secretAccessor

列出密鑰,確認密鑰已建立:

gcloud secrets versions list application_settings

確認已建立 Secret 後,請移除本機檔案:

rm .env

6. 設定應用程式

您先前建立的範本專案現在需要進行一些變更。這些變更可簡化 Wagtail 隨附的範本設定配置,並將 Wagtail 與先前建立的後端服務整合。

調整設定

找出產生的 base.py 設定檔,並在主 myproject 資料夾中將其重新命名為 basesettings.py

mv myproject/settings/base.py myproject/basesettings.py

使用 Cloud Shell 網路編輯器建立新的 settings.py 檔案,並加入以下程式碼:

touch myproject/settings.py
cloudshell edit myproject/settings.py

myproject/settings.py

import io
import os
from urllib.parse import urlparse

import environ

# Import the original settings from each template
from .basesettings import *

# Load the settings from the environment variable
env = environ.Env()
env.read_env(io.StringIO(os.environ.get("APPLICATION_SETTINGS", None)))

# Setting this value from django-environ
SECRET_KEY = env("SECRET_KEY")

# Ensure myproject is added to the installed applications
if "myproject" not in INSTALLED_APPS:
    INSTALLED_APPS.append("myproject")

# If defined, add service URLs to Django security settings
CLOUDRUN_SERVICE_URLS = env("CLOUDRUN_SERVICE_URLS", default=None)
if CLOUDRUN_SERVICE_URLS:
    CSRF_TRUSTED_ORIGINS = env("CLOUDRUN_SERVICE_URLS").split(",")
    # Remove the scheme from URLs for ALLOWED_HOSTS
    ALLOWED_HOSTS = [urlparse(url).netloc for url in CSRF_TRUSTED_ORIGINS]
else:
    ALLOWED_HOSTS = ["*"]

# Default false. True allows default landing pages to be visible
DEBUG = env("DEBUG", default=False)

# Set this value from django-environ
DATABASES = {"default": env.db()}

# Change database settings if using the Cloud SQL Auth Proxy
if os.getenv("USE_CLOUD_SQL_AUTH_PROXY", None):
    DATABASES["default"]["HOST"] = "127.0.0.1"
    DATABASES["default"]["PORT"] = 5432

# Define static storage via django-storages[google]
GS_BUCKET_NAME = env("GS_BUCKET_NAME")
STATICFILES_DIRS = []
GS_DEFAULT_ACL = "publicRead"
STORAGES = {
    "default": {
        "BACKEND": "storages.backends.gcloud.GoogleCloudStorage",
    },
    "staticfiles": {
        "BACKEND": "storages.backends.gcloud.GoogleCloudStorage",
    },
}

請花點時間閱讀各項設定的註解。

請注意,您可能會在這個檔案中看到 linting 錯誤。這個狀況有可能發生:Cloud Shell 沒有這個專案的相關資訊,因此可能會回報無效的匯入內容和未使用的匯入內容。

然後移除舊的設定資料夾。

rm -rf myproject/settings/

接著,您將擁有兩個設定檔:一個來自 Wagtail,另一個則是您剛剛建立的,並根據這些設定進行建構:

ls myproject/*settings*
myproject/basesettings.py  myproject/settings.py

最後,開啟 manage.py 設定檔,並更新設定,讓 Wagtail 指向主要的 settings.py 檔案。

cloudshell edit manage.py

manage.py 行 (舊版)

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings.dev")

manage.py 行 (後)

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")

myproject/wsgi.py 檔案進行相同的設定變更:

cloudshell edit myproject/wsgi.py

myproject/wsgi.py 行 (之前)

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings.dev")

myproject/wsgi.py 行 (後)

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")

移除自動建立的 Dockerfile:

rm Dockerfile

Python 依附元件

找出 requirements.txt 檔案,並附加下列套件:

cloudshell edit requirements.txt

requirements.txt (附加)

gunicorn
psycopg2-binary
django-storages[google]
django-environ

定義應用程式圖片

只要容器符合 Cloud Run 容器合約,Cloud Run 就會執行該容器。本教學課程選擇省略 Dockerfile,改用 Cloud Native Buildpacks。建構包可協助建構常見語言 (包括 Python) 的容器。

本教學課程會選擇自訂用於啟動網路應用程式的 Procfile

如要將範本專案容器化,請先在專案頂層 (與 manage.py 位於相同目錄) 中建立名為 Procfile 的新檔案,然後複製下列內容:

touch Procfile
cloudshell edit Procfile

Procfile

web: gunicorn --bind 0.0.0.0:$PORT --workers 1 --threads 8 --timeout 0 myproject.wsgi:application

7. 設定、建構及執行遷移步驟

如要在 Cloud SQL 資料庫中建立資料庫結構定義,並在 Cloud Storage 值區中填入靜態資產,您必須執行 migratecollectstatic

這些 Django 基本遷移指令必須在可存取資料庫的已建構容器映像檔中執行。

您也需要執行 createsuperuser 來建立管理員帳戶,以便登入 Django 管理員。

為此,您將使用 Cloud Run 工作來執行這些工作。您可以透過 Cloud Run 工作執行有明確結束時間的程序,非常適合用於管理工作。

定義 Django 超級使用者密碼

如要建立超級使用者,您必須使用非互動式版本的 createsuperuser 指令。這個指令需要使用特殊名稱的環境變數,以取代輸入密碼的提示。

使用隨機產生的密碼建立新密鑰:

echo -n $(cat /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9' | fold -w 30 | head -n 1) | gcloud secrets create django_superuser_password --data-file=-

允許服務帳戶存取這個密鑰:

gcloud secrets add-iam-policy-binding django_superuser_password \
  --member serviceAccount:${SERVICE_ACCOUNT} \
  --role roles/secretmanager.secretAccessor

更新個人資料

為讓 Cloud Run 工作更清楚,請在 Procfile 中建立捷徑,並將下列進入點附加至 Procfile

migrate: python manage.py migrate && python manage.py collectstatic --noinput --clear
createuser: python manage.py createsuperuser --username admin --email noop@example.com --noinput

您現在應該有三個項目:預設的 web 進入點、用於套用資料庫遷移作業的 migrate 進入點,以及用於執行 createsuperuser 指令的 createuser 進入點。

建構應用程式映像檔

更新 Procfile 後,請建構映像檔:

gcloud builds submit --pack image=${ARTIFACT_REGISTRY}/myimage

建立 Cloud Run 工作

映像檔已建立完成,您可以使用該映像檔建立 Cloud Run 工作。

這些工作會使用先前建構的映像檔,但使用不同的 command 值。這些值會對應至 Procfile 中的值。

建立遷移工作:

gcloud run jobs create migrate \
  --region $REGION \
  --image ${ARTIFACT_REGISTRY}/myimage \
  --set-cloudsql-instances ${PROJECT_ID}:${REGION}:myinstance \
  --set-secrets APPLICATION_SETTINGS=application_settings:latest \
  --service-account $SERVICE_ACCOUNT \
  --command migrate

建立使用者建立作業:

gcloud run jobs create createuser \
  --region $REGION \
  --image ${ARTIFACT_REGISTRY}/myimage \
  --set-cloudsql-instances ${PROJECT_ID}:${REGION}:myinstance \
  --set-secrets APPLICATION_SETTINGS=application_settings:latest \
  --set-secrets DJANGO_SUPERUSER_PASSWORD=django_superuser_password:latest \
  --service-account $SERVICE_ACCOUNT \
  --command createuser

執行 Cloud Run 工作

設定工作後,請執行遷移作業:

gcloud run jobs execute migrate --region $REGION --wait

確認這個指令的輸出內容顯示執行作業「已順利完成」。

您稍後更新應用程式時,會執行這項指令。

在資料庫設定中,使用工作建立使用者:

gcloud run jobs execute createuser --region $REGION --wait

確認這個指令的輸出內容顯示執行作業「已順利完成」。

您不必再次執行這項指令。

8. 部署至 Cloud Run

建立及填入後端服務後,您現在可以建立 Cloud Run 服務來存取這些服務。

您可以使用下列指令,建立容器化應用程式的初始部署作業,將其部署至 Cloud Run:

gcloud run deploy wagtail-cloudrun \
  --region $REGION \
  --image ${ARTIFACT_REGISTRY}/myimage \
  --set-cloudsql-instances ${PROJECT_ID}:${REGION}:myinstance \
  --set-secrets APPLICATION_SETTINGS=application_settings:latest \
  --service-account $SERVICE_ACCOUNT \
  --allow-unauthenticated

稍候片刻,等待部署作業完成。部署成功之後,指令列會顯示服務網址:

Service [wagtail-cloudrun] revision [wagtail-cloudrun-00001-...] has been deployed and is serving 100 percent of traffic.
Service URL: https://wagtail-cloudrun-...run.app

您現在可以在網路瀏覽器中開啟這個網址,查看已部署的容器:

c2f23d1f5b97a79a.png

9. 存取 Django 管理員

更新 CSRF 設定

Django 內建防範跨網站偽造要求 (CSRF) 的保護機制。只要在 Django 網站上提交表單 (包括登入 Django 管理員),系統就會檢查「信任的來源」設定。如果不相符,Django 就會傳回錯誤。

mysite/settings.py 檔案中,如果已定義 CLOUDRUN_SERVICE_URL 環境變數,系統會在 CSRF_TRUSTED_ORIGINSALLOWED_HOSTS 設定中使用該變數。雖然定義 ALLOWED_HOSTS 並非必要,但建議您加入這項屬性,因為 CSRF_TRUSTED_ORIGINS 已要求使用此屬性。

您需要服務網址,因此必須先完成初次部署,才能新增這項設定。

您必須更新服務才能新增這項環境變數。您可以將其新增至 application_settings 密鑰,也可以直接新增做為環境變數。

以下實作項目會利用 gcloud 的格式設定轉義功能。

擷取服務網址:

CLOUDRUN_SERVICE_URLS=$(gcloud run services describe wagtail-cloudrun \
  --region $REGION  \
  --format "value(metadata.annotations[\"run.googleapis.com/urls\"])" | tr -d '"[]')
echo $CLOUDRUN_SERVICE_URLS

將這個值設為 Cloud Run 服務的環境變數:

gcloud run services update wagtail-cloudrun \
  --region $REGION \
  --update-env-vars "^##^CLOUDRUN_SERVICE_URLS=$CLOUDRUN_SERVICE_URLS"

登入 Django 管理員

如要存取 Django 管理員介面,請在服務網址後方加上 /admin

現在請使用「admin」使用者名稱登入,並使用下列指令擷取密碼:

gcloud secrets versions access latest --secret django_superuser_password && echo ""

2b9139acc7208827.png

8ad565366c53ba3c.png

10. 開發應用程式

開發應用程式時,您會想在本機上測試應用程式。如要這樣做,您必須連線至 Cloud SQL (「正式版」) 資料庫或本機 (「測試」) 資料庫。

連線至實際工作環境的資料庫

您可以使用 Cloud SQL 驗證 Proxy 連線至 Cloud SQL 執行個體。這個應用程式會建立從本機電腦到資料庫的連線。

安裝 Cloud SQL 驗證 Proxy 後,請按照下列步驟操作:

# Create a virtualenv
virtualenv venv
source venv/bin/activate
pip install -r requirements.txt

# Copy the application settings to your local machine
gcloud secrets versions access latest --secret application_settings > temp_settings

# Run the Cloud SQL Auth Proxy
./cloud-sql-proxy ${PROJECT_ID}:${REGION}:myinstance

# In a new tab, start the local web server using these new settings
USE_CLOUD_SQL_AUTH_PROXY=true APPLICATION_SETTINGS=$(cat temp_settings) python manage.py runserver

請務必在工作完成後移除 temp_settings 檔案。

連線至本機 SQLite 資料庫

或者,您也可以在開發應用程式時使用本機資料庫。Django 支援 PostgreSQL 和 SQLite 資料庫,而 PostgreSQL 提供的某些功能 SQLite 並未提供,但在許多情況下,兩者的功能都相同。

如要設定 SQLite,您必須更新應用程式設定,指向本機資料庫,然後套用結構定義遷移作業。

如要設定這項方法,請按照下列步驟操作:

# Create a virtualenv
virtualenv venv
source venv/bin/activate
pip install -r requirements.txt

# Copy the application settings to your local machine
gcloud secrets versions access latest --secret application_settings > temp_settings

# Edit the DATABASE_URL setting to use a local sqlite file. For example:
DATABASE_URL=sqlite:////tmp/my-tmp-sqlite.db

# Set the updated settings as an environment variable
APPLICATION_SETTINGS=$(cat temp_settings) 

# Apply migrations to the local database
python manage.py migrate

# Start the local web server
python manage.py runserver

請務必在工作完成後移除 temp_settings 檔案。

建立遷移作業

變更資料庫模型時,您可能需要執行 python manage.py makemigrations 來產生 Django 的遷移檔案。

您可以在設定實際工作環境或測試資料庫連線後執行這項指令。或者,您也可以提供空白設定,在不使用資料庫的情況下產生遷移檔案:

SECRET_KEY="" DATABASE_URL="" GS_BUCKET_NAME="" python manage.py makemigrations

套用應用程式更新

如要將變更套用至應用程式,您必須:

  • 將變更內容建構為新映像檔,
  • 套用任何資料庫或靜態遷移作業,然後
  • 更新 Cloud Run 服務,以便使用新的映像檔。

如要建構映像檔,請按照下列步驟操作:

gcloud builds submit --pack image=${ARTIFACT_REGISTRY}/myimage

如果您有要套用的遷移作業,請執行 Cloud Run 工作:

gcloud run jobs execute migrate --region $REGION --wait

如要使用新映像檔更新服務,請按照下列步驟操作:

gcloud run services update wagtail-cloudrun \
  --region $REGION \
  --image ${ARTIFACT_REGISTRY}/myimage

11. 恭喜!

您剛剛將複雜的專案部署至 Cloud Run!

  • Cloud Run 會自動及水平擴充您的容器映像檔,以處理收到的要求,然後在需求減少時縮減規模。您只需要支付處理要求期間使用的 CPU、記憶體和網路費用。
  • 您可以使用 Cloud SQL 佈建代管 PostgreSQL 執行個體,讓系統自動維護,並原生整合至許多 Google Cloud 系統。
  • Cloud Storage 可讓您以可在 Django 中順暢存取的方式使用雲端儲存空間。
  • 您可以使用 Secret Manager 儲存密鑰,並讓 Google Cloud 的特定部分存取這些密鑰,而其他部分則無法存取。

清理

如要避免系統向您的 Google Cloud Platform 帳戶收取在本教學課程中使用資源的相關費用:

  • 前往 Cloud Console 中的「管理資源」頁面。
  • 在專案清單中選取專案,然後按一下「刪除」
  • 在對話方塊中輸入專案 ID,然後按一下「Shut down」(關閉) 即可刪除專案。

瞭解詳情

/