Cloud SQL 為全託管式關聯式資料庫 同時支援三種引擎 MySQL, PostgreSQL, SQL Server, 並且同時支援關聯式與向量搜尋 不用兩處查詢後合併, 我們在之後會用來進行語意查詢
GCS(gogle cloud storage)則是存放靜態檔案的檔案櫃, 類似aws的s3
Cloud SQL 是按**「租用資源」**計費,只要執行個體運行中就要收費。
db-f1-micro 或 db-custom-1-3840 即可。總結: Cloud SQL 是你專案中最固定的成本開銷(每個月約 $10~30 USD 起,視規格而定)。
GCS 是按**「使用量」**計費,就像水費,用多少收多少。
總結: GCS 對於存放爬蟲產出的 Excel 來說,成本近乎為零。
比較多的費用會在cloud sql的實體開機收費
本日實作
今天會有三項設定
pgvector 支持)。bank-ai-vpc 裡「畫出一塊保留區 (IP Range)」,然後告訴 Google:「請把我的 VPC 和你的 SQL VPC 接起來」。db-f1-micro + 10GB SSD)。chatbot_db 的資料庫與使用者。pgvector(這是你明天之後要做向量查詢的靈魂)。bank-ai-knowledge-assets-xxxx)。需要enable service networking api
https://console.cloud.google.com/apis/library/servicenetworking.googleapis.com?project=
我們會在 /terraform 建立一個 database.tf
# ==========================================
# 私有服務存取 (Private Service Access)
# ==========================================
# A. 在 VPC 中畫出一塊保留的內部 IP 區段給 Google 服務使用
resource "google_compute_global_address" "private_ip_alloc" {
name = "google-managed-services-range"
purpose = "VPC_PEERING"
address_type = "INTERNAL"
prefix_length = 16 # 這會保留一個 /16 的區段
network = google_compute_network.main_vpc.id # 本專案的 VPC
}
# B. 建立私有連線 (Peering),將你的 VPC 與 Google 服務網路接通
resource "google_service_networking_connection" "private_vpc_connection" {
network = google_compute_network.main_vpc.id
service = "servicenetworking.googleapis.com"
reserved_peering_ranges = [google_compute_global_address.private_ip_alloc.name]
}
# ==========================================
# Cloud SQL PostgreSQL 實例
# ==========================================
resource "google_sql_database_instance" "postgres_instance" {
name = "bank-ai-db-instance"
database_version = "POSTGRES_15" # 支援 pgvector 的版本
region = "asia-east1"
# 確保在私有連線建立後才開始建立資料庫
depends_on = [google_service_networking_connection.private_vpc_connection]
settings {
tier = "db-f1-micro" # 最小規格,省錢首選
disk_size = 10
disk_type = "PD_SSD"
disk_autoresize = true
ip_configuration {
ipv4_enabled = false # 重要:關閉公網 IP
private_network = google_compute_network.main_vpc.id # 指定走內網
}
# 銀行級別建議:開啟備份
backup_configuration {
enabled = true
}
}
# 防止誤刪:實務上建議設為 true,但在 POC 練習時可設為 false 方便砍掉重練
deletion_protection = false
}
# 建立資料庫本體
resource "google_sql_database" "chatbot_db" {
name = "chatbot_db"
instance = google_sql_database_instance.postgres_instance.name
}
# 建立資料庫使用者
resource "google_sql_user" "db_user" {
name = "bff_user"
instance = google_sql_database_instance.postgres_instance.name
password = "your-password-here" # Day 15 我們會改用 Secret Manager
}
# ==========================================
# GCS Bucket (存放原始 Excel)
# ==========================================
resource "google_storage_bucket" "excel_storage" {
name = "bank-ai-excel-assets-${google_sql_database_instance.postgres_instance.project}" # 加上 project ID 確保名稱唯一
location = "ASIA-EAST1"
force_destroy = true # 刪除 terraform 時一併刪除內容
public_access_prevention = "enforced" # 強制禁止公網存取
uniform_bucket_level_access = true # 統一權限管理
}
然後 terraform apply
這個過程會滿久的 資料庫可能會跑上10分鐘的時間
接著驗證我們今天建立的東西



不過因為cloud sql是以小時計費的
| 項目 | 每小時 (約) | 每天 (約) | 每月 (約) |
|---|---|---|---|
| 運算資源 (vCPU/RAM) | NT$ 0.35 | NT$ 8.4 | NT$ 252 |
| 儲存空間 (10GB SSD) | NT$ 0.02 | NT$ 0.5 | NT$ 15 |
| 總計 (未含稅) | NT$ 0.37 | NT$ 8.9 | NT$ 267 |
這是請gemini預估的費用
考量我的使用斷斷續續 我建立一個指令去刪除與重建實體
在根目錄新增 Makefile
# 指向你的 terraform 檔案夾路徑
TF_DIR=terraform
INSTANCE_TARGET=google_sql_database_instance.postgres_instance
# 1. 啟動/部署全部資源
up:
terraform -chdir=$(TF_DIR) apply -auto-approve
# 2. 僅關閉資料庫 (節省成本)
db-off:
terraform -chdir=$(TF_DIR) destroy -target=$(INSTANCE_TARGET) -auto-approve
# 3. 重新開啟資料庫
db-on:
terraform -chdir=$(TF_DIR) apply -target=$(INSTANCE_TARGET) -auto-approve
# 4. 全部刪除
down:
terraform -chdir=$(TF_DIR) destroy -auto-approve
最燒錢的就是sql, 所以驗證完後 我會跑 make db-off 去把資料庫刪掉 這樣運算資源和儲存空間就會停止計費
當我要繼續驗證實作時 在根目錄跑 make up 或是cd到 /terraform 跑 terraform apply 就會把所有的terraform設定復原
觀察看看如果以後覺得除了sql之外的花費也挺多的 我也會用 make down 來把terraform資料夾所有的實體包括connection都刪除