blog post

Day 29 — Terraform/GCP實戰:使用 Terraform 創建 GCP 資料庫服務 Cloud Sql (PostgreSQL)

使用 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)

GCP 資料庫服務 — Cloud Sql (PostgreSQL)

2. GCP 資料庫服務 — 使用Terraform創建Cloud Sql

在這個章節中,我們將深入探討如何使用Terraform在Google Cloud Platform上創建Cloud Run。我們將依次進行以下步驟:

  1. 創建一個postgresql 14 的資料庫
  2. 使用最簡單的cpu與硬碟空間設定
  3. 使用dbever嘗試連線資料庫
  4. Terraform Cloud Sql 連結:可以到github參考對應的Terraform程式碼。

下載DBeaver來進行資料庫測試

  1. 前往DBeaver的官方網站:https://dbeaver.io/
  2. 在下載頁面上,選擇適用於您的操作系統的版本。DBeaver支援多個操作系統,包括Windows、macOS和Linux。點擊下載連結以開始下載安裝文件,請耐心等待下載完成。
  3. 完成下載後,根據您的操作系統執行安裝後,打開DBeaver應用程序。在首次運行時,您將需要配置連接到您的資料庫的設定,包括資料庫類型、主機名稱、用戶名、密碼等。稍後我們會配合Cloud Sql來進行後續練習。
DBeaver 下載社群版本

創建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檔案 1-variables.tf

這個檔案用於定義 Terraform 使用的變數,以實現更高度的可配置性和重用性。

  • variable "GCP_PROJECT":這是 GCP 專案 ID 的變數,它描述了 GCP 專案的 ID。它的預設值是 “terraform101-384507″,但可以在使用時指定不同的值。
  • variable "GCP_REGION":這是定義網路服務所在位置(地區)的變數。
  • variable "db_name":這是用於定義 cloud sql 名稱的變數。

2-main.tf

terraform檔案 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 plan -out plan.out

最後執行 terraform apply -auto-approve 來部署對應的資源到雲端架構上,就可以得到下列的結果。

terraform apply -auto-approve
# or
tfdp
部署雲端架構 terraform apply -auto-approve
GCP 資料庫服務 — Cloud Sql 創建完成

測試部署的 GCP 資料庫服務Cloud Sql

Terraform 創建修改完畢,並看到 Cloud Sql 後,可以點選查看資料庫的詳細資料。後續我們會利用Dbever來連線資料庫,並測試連線。

GCP 資料庫服務 — Cloud Sql 總覽
  • DBever 連線Cloud sql 設定(2/2)
    設定連線:點選新增資料庫連線,選擇postgresql 與下一步,選擇host並輸入剛剛Cloud Sql 公開連線的 ip,port使用預設的5432,而database名稱使用postgres。帳號密碼則用剛剛創建的帳號與密碼,使用admin / admin!@#$%
    測試連線:輸入連線資訊後,可以點選test connection,並確認能夠正確連線成功。
    實際連線:左邊導覽列 navigation bar 可以點選連線圖示,並進行連線。打開postgres資料庫並點選schema與table可以看到內部的詳細資訊,這樣就代表成功連線資料庫成功。
DBever 連線 — 設定連線
DBever 連線 — 連線資訊
DBever 連線 — 測試連線
DBever 連線 — 實際連線

3. 總結 Summary

  1. Terraform 雲端資源實作:介紹如何使用Terraform自動化地創建Cloud Sql 的過程。主要步驟包括:
    初始化 Terraform: 使用 terraform init 初始化 Terraform 項目,確保環境正確設定。
    設定變數: 定義所需變數,如 GCP 專案 ID、區域和服務名稱,以便稍後在 Terraform 中使用。
    建立Cloud sql 服務定義: 定義Cloud Sql 服務的特性,包括服務名稱、資料庫類型、連線資訊、資料庫使用者與網路連線設定等。
    生成計劃執行部署: 使用 terraform plan 生成部署計劃,並使用 terraform apply 部署 Cloud sql 服務及其相關資源到 Google Cloud Platform。
  2. 部署並測試 Cloud sql 的資料庫連線:執行Terraform部署的指令,並完成了下列設定,並嘗試使用Dbever來進行連線測試。
    – 資料庫連線:察看資料庫的網路設定,作為後續DBeaver的連線設定,同時記得授權網路後續要修改成限制的連線ip,避免資安洩漏。
    – 測試服務:DBeaver 下載社群版本後,進行設定連線、測試連線與實際連線,確認整個連線到cloud sql的過程。

4. 相關連結

  1. 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
  2. Terraform-project-best-practice — https://github.com/qwedsazxc78/terraform-project-best-practice
  3. 歡迎訂閱我的udemy課程:Terraform 從零開始 — 10+實戰Lab打造GCP雲端自動化架構課程

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *