使用 Terraform 創建關聯式 SQL 資料庫服務 (PostgreSQL),實現資料庫的管理。
文章同步分享到
blog – https://devops-with-alex.com/day-29-terraform-gcp-cloud-sql/
ithome – https://ithelp.ithome.com.tw/articles/10339332
Medium – https://medium.com/p/5450d481a619
1. GCP 資料庫服務 Cloud Sql 主要功能、用途與使用情境
資料庫服務 Cloud Sql 的主要功能、用途與使用情境,可以參考先前的章節來做了解,會更幫助我們了解對應用terraform產生的雲端資源。
Terraform/GCP實戰:使用 GCP Console 創建 GCP 資料庫服務 Cloud Sql (PostgreSQL)
2. GCP 資料庫服務 — 使用Terraform創建Cloud Sql
在這個章節中,我們將深入探討如何使用Terraform在Google Cloud Platform上創建Cloud Run。我們將依次進行以下步驟:
- 創建一個postgresql 14 的資料庫
- 使用最簡單的cpu與硬碟空間設定
- 使用dbever嘗試連線資料庫
- Terraform Cloud Sql 連結:可以到github參考對應的Terraform程式碼。
下載DBeaver來進行資料庫測試
- 前往DBeaver的官方網站:https://dbeaver.io/
- 在下載頁面上,選擇適用於您的操作系統的版本。DBeaver支援多個操作系統,包括Windows、macOS和Linux。點擊下載連結以開始下載安裝文件,請耐心等待下載完成。
- 完成下載後,根據您的操作系統執行安裝後,打開DBeaver應用程序。在首次運行時,您將需要配置連接到您的資料庫的設定,包括資料庫類型、主機名稱、用戶名、密碼等。稍後我們會配合Cloud Sql來進行後續練習。
創建terraform檔案
接著創建三個檔案,分別是 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)進行交互。
terraform
:這個區塊設定了 Terraform 的版本要求,確保使用的版本符合最低要求大於4.40.0版本。同時,它也定義了所需的提供者和版本。provider "google"
:這個區塊指定了要使用的 GCP 提供,指定了 GCP 專案 ID(由var.GCP_PROJECT
變數提供)。
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 區塊:
allow_ips
:本地變數,它包含一個 IP 地址"0.0.0.0/0"
,表示允許從任何 IP 地址訪問資料庫實例。注意生產環境 production environment 使用時,要限制對應的IP,避免資安洩漏的問題。
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部署
到專案目錄執行初始化計畫
terraform init
# or
tf init
確認部署計畫內容
terraform plan -out plan.out
# or
tfp
最後執行 terraform apply -auto-approve
來部署對應的資源到雲端架構上,就可以得到下列的結果。
terraform apply -auto-approve
# or
tfdp
測試部署的 GCP 資料庫服務Cloud Sql
Terraform 創建修改完畢,並看到 Cloud Sql 後,可以點選查看資料庫的詳細資料。後續我們會利用Dbever來連線資料庫,並測試連線。
- DBever 連線Cloud sql 設定(2/2):
– 設定連線:點選新增資料庫連線,選擇postgresql 與下一步,選擇host並輸入剛剛Cloud Sql 公開連線的 ip,port使用預設的5432,而database名稱使用postgres。帳號密碼則用剛剛創建的帳號與密碼,使用admin / admin!@#$% 。
– 測試連線:輸入連線資訊後,可以點選test connection,並確認能夠正確連線成功。
– 實際連線:左邊導覽列 navigation bar 可以點選連線圖示,並進行連線。打開postgres資料庫並點選schema與table可以看到內部的詳細資訊,這樣就代表成功連線資料庫成功。
3. 總結 Summary
- Terraform 雲端資源實作:介紹如何使用Terraform自動化地創建Cloud Sql 的過程。主要步驟包括:
– 初始化 Terraform: 使用 terraform init 初始化 Terraform 項目,確保環境正確設定。
– 設定變數: 定義所需變數,如 GCP 專案 ID、區域和服務名稱,以便稍後在 Terraform 中使用。
– 建立Cloud sql 服務定義: 定義Cloud Sql 服務的特性,包括服務名稱、資料庫類型、連線資訊、資料庫使用者與網路連線設定等。
– 生成計劃執行部署: 使用 terraform plan 生成部署計劃,並使用 terraform apply 部署 Cloud sql 服務及其相關資源到 Google Cloud Platform。 - 部署並測試 Cloud sql 的資料庫連線:執行Terraform部署的指令,並完成了下列設定,並嘗試使用Dbever來進行連線測試。
– 資料庫連線:察看資料庫的網路設定,作為後續DBeaver的連線設定,同時記得授權網路後續要修改成限制的連線ip,避免資安洩漏。
– 測試服務:DBeaver 下載社群版本後,進行設定連線、測試連線與實際連線,確認整個連線到cloud sql的過程。
4. 相關連結
- 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雲端自動化架構課程