使用 Cloud Run 工作建立 AlloyDB 資料庫

1. 總覽

在本研究室中,您將使用 Cloud Run 工作建立 AlloyDB 資料庫。您將設定私人服務存取權無伺服器虛擬私有雲存取權,以使用私人 IP 啟用 Cloud Run 工作與 AlloyDB 資料庫之間的連線。

學習目標

在本研究室中,您將瞭解如何執行下列操作:

  • 設定 AlloyDB 叢集和執行個體
  • 部署 Cloud Run 工作來建立 AlloyDB 資料庫

2. 設定和需求

Cloud 專案設定

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 「專案名稱」是這項專案參與者的顯示名稱。這是 Google API 未使用的字元字串。您可以隨時更新。
  • 所有 Google Cloud 專案的專案 ID 均不得重複,且設定後即無法變更。Cloud 控制台會自動產生一個不重複的字串。但通常是在乎它何在在大部分的程式碼研究室中,您必須參照專案 ID (通常為 PROJECT_ID)。如果您對產生的 ID 不滿意,可以隨機產生一個 ID。此外,您也可以自行嘗試,看看系統是否提供該付款方式。在完成這個步驟後就無法變更,而且在專案期間仍會保持有效。
  • 資訊中的第三個值是專案編號,部分 API 會使用這個編號。如要進一步瞭解這三個值,請參閱說明文件
  1. 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Cloud 資源/API。執行這個程式碼研究室並不會產生任何費用,如果有的話。如要關閉資源,以免系統產生本教學課程結束後產生的費用,您可以刪除自己建立的資源,或刪除整個專案。Google Cloud 的新使用者符合 $300 美元免費試用計畫的資格。

環境設定

如要啟用 Cloud Shell,請按一下搜尋列右側的圖示。

eb0157a992f16fa3.png

如要啟用服務 API,請將下方指令複製及貼上至終端機,然後按下 Enter 鍵:

gcloud services enable \
    alloydb.googleapis.com \
    artifactregistry.googleapis.com \
    cloudbuild.googleapis.com \
    run.googleapis.com \
    vpcaccess.googleapis.com \
    compute.googleapis.com \
    servicenetworking.googleapis.com \
    --quiet

設定環境變數:

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')
export DB_DATABASE=test
export DB_USER=postgres
export DB_PASSWORD=password123
export REGION=us-central1
export CLUSTER=test-cluster
export INSTANCE=test-instance
export VPC_CONNECTOR=vpcconnector

3. 設定並建立 AlloyDB 叢集

指定設定所需的權限。讓 Cloud Run 工作能連線至 AlloyDB 資料庫。

gcloud projects add-iam-policy-binding $PROJECT_NAME \
  --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
  --role="roles/alloydb.client"

設定私人服務存取權

私人服務存取權會實作為虛擬私有雲對等互連連線,在您的虛擬私有雲網路與 AlloyDB 資源 (叢集和執行個體) 所在的基礎 Google Cloud 虛擬私有雲網路之間,進行對等互連。有了私人連線,虛擬私有雲網路中的資源只要使用內部 IP 位址,就能與存取的 AlloyDB 資源進行專屬通訊。虛擬私有雲網路中的資源不需要網際網路存取權或外部 IP 位址,也能連線至 AlloyDB 資源。

如要在與 AlloyDB 位於相同 Cloud 專案的虛擬私有雲網路內建立私人服務存取權設定,請執行兩項作業:

在虛擬私有雲網路中建立分配的 IP 位址範圍。

gcloud compute addresses create google-managed-services-default \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=20 \
    --network=projects/$PROJECT_ID/global/networks/default

在虛擬私有雲網路與基礎 Google Cloud 虛擬私有雲網路之間建立私人連線。這個步驟需要約 2 分鐘才能完成。

gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=google-managed-services-default \
    --network=default \
    --project=$PROJECT_ID

建立 AlloyDB 叢集。

gcloud beta alloydb clusters create $CLUSTER \
    --password=$DB_PASSWORD \
    --network=default \
    --region=$REGION \
    --project=$PROJECT_NAME

gcloud beta alloydb clusters describe $CLUSTER --region=$REGION

建立 AlloyDB 執行個體。這個步驟需要約 10 分鐘才能完成。

gcloud beta alloydb instances create $INSTANCE \
    --cluster=$CLUSTER \
    --region=$REGION \
    --instance-type=PRIMARY \
    --cpu-count=2 \
    --project=$PROJECT_NAME

gcloud beta alloydb instances describe $INSTANCE \
    --cluster=$CLUSTER \
    --region $REGION

查看在 Cloud 控制台中建立的叢集

568d273c0e0d6408.png

將資料庫 IP 位址儲存到變數。」

export DB_HOST=$(gcloud beta alloydb instances describe $INSTANCE \
    --cluster=$CLUSTER \
    --region=$REGION \
    --format=json | jq \
    --raw-output ".ipAddress")

echo "DB_HOST=$DB_HOST"

4. 探索 Cloud Run 工作程式碼

您可以透過多種方式建立 AlloyDB 資料庫,一個是建立 Compute Engine VM、安裝 psql 用戶端,然後連線至執行個體來建立資料庫。請參閱這篇文章,進一步瞭解這個做法。

在本研究室中,您將使用 Cloud Run 工作建立新的 AlloyDB 資料庫。

請查看以下檔案:

  • Dockerfile - 安裝必要的依附元件(postgresql-client)
  • Script.sh - 使用指令列公用程式來建立資料庫

在 Cloud Shell 中建立新資料夾:

mkdir ~/alloy-db-cloud-run-job
cd ~/alloy-db-cloud-run-job 

建立新檔案 Dockerfile

cat > Dockerfile <<EOF
FROM ubuntu:latest
RUN apt-get update && apt-get install -y postgresql-client && apt-get clean
COPY script.sh /
RUN chmod +x /script.sh
CMD ["/script.sh"]
ENTRYPOINT ["/bin/bash"]
EOF

建立新的檔案 script.sh,並在當中的內容如下:

echo "Connecting to $DB_HOST"
createdb -h $DB_HOST -p 5432 $PGDB
echo "Created $PGDB database"

psql -h $DB_HOST -l

變更 Script.sh 的權限:

chmod +x script.sh

5. 部署 Cloud Run 工作

設定無伺服器虛擬私有雲存取。這可讓 Cloud Run Job 使用內部/私人 IP 與 AlloyDB 叢集通訊。這個步驟需要約 2 分鐘才能完成。

gcloud compute networks vpc-access connectors create ${VPC_CONNECTOR} \
    --region=${REGION} \
    --range=10.8.0.0/28

建立 Artifact Registry 存放區來儲存容器映像檔。

gcloud artifacts repositories create db-job-repository \
  --repository-format=docker \
  --location=$REGION

建構容器映像檔並發布至 Artifact Registry。

gcloud builds submit -t $REGION-docker.pkg.dev/$PROJECT_NAME/db-job-repository/db-job:latest

部署 Cloud Run 工作。

gcloud beta run jobs create db-job \
    --image=$REGION-docker.pkg.dev/$PROJECT_NAME/db-job-repository/db-job:latest \
    --set-env-vars DB_HOST=$DB_HOST \
    --set-env-vars PGUSER=$DB_USER \
    --set-env-vars PGPASSWORD=$DB_PASSWORD \
    --set-env-vars PGDB=$DB_DATABASE \
    --vpc-connector $VPC_CONNECTOR \
    --region $REGION

查看用來建立工作的標記:

--vpc-connector - Cloud Run 工作會使用虛擬私有雲連接器來連線至 AlloyDB 私人 IP 位址。

在 Cloud 控制台中查看已建立的工作

93d8224eca8c687f.png

執行 Cloud Run 工作來建立 test 資料庫。

gcloud beta run jobs execute db-job --region $REGION

在 Cloud 控制台中查看 Cloud Run 工作記錄

3f2269736b53f44c.png

6. 恭喜!

恭喜,您已完成程式碼研究室!

本文涵蓋的內容:

  • 如何建立 AlloyDB 叢集和執行個體
  • 如何使用 Cloud Run 工作建立 AlloyDB 資料庫

清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取本教學課程所用資源的費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。

刪除專案

如要避免付費,最簡單的方法就是刪除您針對教學課程建立的專案。