使用 Terraform 創建關聯式 SQL 資料庫服務 (PostgreSQL),實現資料庫的管理。
資料庫服務 Cloud Sql 的主要功能、用途與使用情境,可以參考先前的章節來做了解,會更幫助我們了解對應用terraform產生的雲端資源。
Terraform/GCP實戰:使用 GCP Console 創建 GCP 資料庫服務 Cloud Sql (PostgreSQL)
在這個章節中,我們將深入探討如何使用Terraform在Google Cloud Platform上創建Cloud Run。我們將依次進行以下步驟:
創建一個postgresql 14 的資料庫
使用最簡單的cpu與硬碟空間設定
使用dbever嘗試連線資料庫
Terraform Cloud Sql 連結:可以到github參考對應的Terraform程式碼。
前往DBeaver的官方網站:https://dbeaver.io/
在下載頁面上,選擇適用於您的操作系統的版本。DBeaver支援多個操作系統,包括Windows、macOS和Linux。點擊下載連結以開始下載安裝文件,請耐心等待下載完成。
完成下載後,根據您的操作系統執行安裝後,打開DBeaver應用程序。在首次運行時,您將需要配置連接到您的資料庫的設定,包括資料庫類型、主機名稱、用戶名、密碼等。稍後我們會配合Cloud Sql來進行後續練習。
接著創建三個檔案,分別是 0-provider.tf, 1-variables.tf, 2-main.tf。
0-provider.tf
##################################################################################
# CONFIGURATION
##################################################################################
terraform {
required_version = ">=1.0"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.40.0"
}
}
}
provider "google" {
project = var.GCP_PROJECT
region = var.GCP_REGION
# zone = var.zone
}
這個檔案主要用於配置 Terraform 的提供者(provider),以確保 Terraform 可以正確地與 Google Cloud Platform(GCP)進行交互。
1-variables.tf
variable "GCP_PROJECT" {
description = "GCP Project ID"
type = string
default = "terraform101-384507"
}
variable "GCP_REGION" {
type = string
default = "asia-northeast1"
}
variable "db_name" {
type = string
default = "db-tf-ch4-10-3"
}
這個檔案用於定義 Terraform 使用的變數,以實現更高度的可配置性和重用性。
variable "GCP_PROJECT":這是 GCP 專案 ID 的變數,它描述了 GCP 專案的 ID。它的預設值是 "terraform101-384507",但可以在使用時指定不同的值。
variable "GCP_REGION":這是定義網路服務所在位置(地區)的變數。
variable "db_name":這是用於定義 cloud sql 名稱的變數。
2-main.tf
locals {
allow_ips = ["0.0.0.0/0", ]
}
resource "google_sql_database_instance" "instance" {
name = var.db_name
database_version = "POSTGRES_14"
deletion_protection = false
settings {
tier = "db-f1-micro" # 使用基本的硬體配備
disk_size = "10"
ip_configuration {
dynamic "authorized_networks" {
for_each = local.allow_ips
iterator = allow_ips
content {
name = "allow-${allow_ips.key}"
value = allow_ips.value
}
}
}
}
}
resource "google_sql_database" "this" {
name = var.db_name
instance = google_sql_database_instance.instance.name
}
resource "google_sql_user" "users" {
name = "admin"
instance = google_sql_database_instance.instance.name
password = "admin!@#$%"
}
output "db_ip" {
value = google_sql_database_instance.instance.public_ip_address
}
這段 Terraform 程式碼的目的是使用 Terraform 工具自動化地在 Google Cloud Platform 上創建一個 Cloud Sql,並將相關的資源設定和配置進行定義。:
locals 區塊:
google_sql_database_instance 資源,定義了一個 GCP Cloud SQL 資料庫實例:
name :指定了資料庫實例的名稱,使用了變數 var.db_name。
database_version :指定了資料庫引擎的版本,這裡使用了 PostgreSQL 14。
deletion_protection :設定為 false,表示不啟用刪除保護,允許刪除資料庫實例。
settings :區塊包含了硬體配置、磁碟大小和授權網路的設定。
ip_configuration :使用 local.allow_ips 中的 IP 地址來授權訪問資料庫實例。
google_sql_database 資源用於定義 Cloud SQL 資料庫:
name :指定了資料庫的名稱,同樣使用了變數 var.db_name。
instance :引用了先前定義的資料庫實例,以確保資料庫屬於特定實例。
google_sql_user 資源定義了一個資料庫使用者:
name :指定使用者的名稱,這裡設置為 "admin"。
instance :引用了先前定義的資料庫實例,將使用者與特定實例關聯。
password :設置了使用者的密碼。
output 區塊:
定義了一個輸出變數 db_ip,它將資料庫實例的公共 IP 地址作為值。
可用於後續 Terraform 部署中,以查看實例的 IP 地址。
到專案目錄執行初始化計畫
terraform init
# or
tf init
確認部署計畫內容
terraform plan -out plan.out
# or
tfp
最後執行 terraform apply -auto-approve來部署對應的資源到雲端架構上,就可以得到下列的結果。
terraform apply -auto-approve
# or
tfdp
Terraform 創建修改完畢,並看到 Cloud Sql 後,可以點選查看資料庫的詳細資料。後續我們會利用Dbever來連線資料庫,並測試連線。
DBever 連線Cloud sql 設定:
**admin / admin!@#$%**
。Terraform 雲端資源實作:介紹如何使用Terraform自動化地創建Cloud Sql 的過程。主要步驟包括:
部署並測試 Cloud sql 的資料庫連線:執行Terraform部署的指令,並完成了下列設定,並嘗試使用Dbever來進行連線測試。
Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code — https://github.com/qwedsazxc78/Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code
Terraform-project-best-practice — https://github.com/qwedsazxc78/terraform-project-best-practice
歡迎訂閱我的udemy課程:Terraform 從零開始 - 10+實戰Lab打造GCP雲端自動化架構課程 - https://devops-with-alex.com/go/terraform