blog post

Terraform 從零開始 (8) — GCP 資料庫服務 — 使用Terraform創建關聯式 SQL DB — PostgreSQL

GCP 資料庫服務 — 使用Terraform創建關聯式 SQL DB — PostgreSQL
GCP 資料庫服務 — 使用Terraform創建關聯式 SQL DB — PostgreSQL

訂閱 Terraform 從零開始 — 10+實戰Lab打造GCP雲端自動化架構課程

1. GCP 資料庫服務 — 關聯式 SQL DB的主要功能和用途

Google Cloud Platform (GCP) 提供了多種資料庫服務,其中包括關聯式 SQL 資料庫服務,主要以 Google Cloud SQL 和 Google Cloud Spanner 為代表。這些服務讓您能夠在雲端環境中建立和管理關聯式資料庫,以支援您的應用程式和業務需求。以下是Cloud SQL一些主要的功能和用途:

  1. 完全管理式服務:Cloud SQL 是一個完全管理式服務,可以自動處理實例的設置、管理、維護和升級,這樣您就可以專注於應用程序的開發和部署。
  2. 多種資料庫引擎:Cloud SQL 支持 MySQL、PostgreSQL 和 SQL Server 等多種資料庫引擎,您可以根據需要選擇最適合您應用程序的引擎。
  3. 高可用性和可靠性:Cloud SQL 可以在不同的區域和可用區域中部署資料庫實例,並提供自動備份、故障切換和數據庫複製等功能,確保您的應用程序始終可用且數據安全。
  4. 縮放性:Cloud SQL 可以快速縮放資料庫實例的大小,以適應不同的工作負載需求。您可以按需調整實例的 CPU、內存和存儲空間,並隨時根據需要增加或減少容量。
  5. 安全性:Cloud SQL 提供各種安全功能,例如數據加密、IP 白名單、SSL/TLS 連接和身份驗證等,可保護您的數據免受未經授權的訪問和威脅。

2. GCP 資料庫服務 — 關聯式 SQL DB的使用情境

關聯式 SQL 資料庫在許多不同的使用情境下都是非常有用的,以下是一些常見的使用情境:

  1. Web 應用程序:如果您正在開發 Web 應用程序,並需要一個可靠、高效和安全的資料庫,您可以使用 MySQL 或 PostgreSQL 等資料庫引擎,快速啟動和部署資料庫實例,並輕鬆擴展或縮小資源以適應流量峰值。
  2. 遊戲數據存儲:如果您正在開發遊戲應用程序,並需要一個可擴展、可靠和高效的數據庫,您可以使用 MySQL 或 PostgreSQL 等資料庫引擎,在雲端上快速部署和維護資料庫實例,並通過數據庫複製和自動備份等功能確保數據的安全性和可靠性。此外,您還可以使用 Cloud SQL 的縮放性功能,根據需要增加或減少容量,以適應遊戲流量的變化。
  3. 商業應用程序:如果您正在開發商業應用程序,並需要一個可擴展、可靠和安全的資料庫,您可以使用 MySQL、PostgreSQL 或 SQL Server 等資料庫引擎,在雲端上輕鬆部署和管理資料庫實例,並通過自動備份和故障切換等功能確保應用程序的高可用性和數據的可靠性。

3. GCP 資料庫服務 — 使用Terraform創建關聯式 SQL DB

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

  1. 創建一個postgresql 14 的資料庫:首先,我們將使用 Terraform 的程式碼來創建一個 PostgreSQL 14 資料庫。
  2. 使用最簡單的cpu與硬碟空間設定:在這裡,我們選擇了最簡單的 db-f1-micro 型號,它具有較小的 CPU 和硬碟空間配置。根據您的實際需求,您可以選擇其他適合的配置。
  3. 使用dbever嘗試連線資料庫:完成資料庫實例的創建後,您可以使用 DBeaver 或其他類似的資料庫管理工具來連線到創建的 PostgreSQL 資料庫。
  4. Terraform SQL DB 連結:可以到github參考對應的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":這是用於定義 Google Cloud SQL 名稱的變數。

2-main.tf

##################################################################################
# RESOURCE
##################################################################################
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 代碼,用於創建創建一個 PostgreSQL 14 資料庫實例,並設置相關的參數配置。

  1. locals 區塊用於定義本地變數,即在 Terraform 配置中使用但不需要在遠端服務中建立的值。在這個程式碼中,定義了一個名為 allow_ips 的本地變數,它是一個包含一個 IP 位址區段 “0.0.0.0/0” 的字串列表。
  2. google_sql_database_instance 資源:這個資源塊創建了一個 PostgreSQL 資料庫實例。
  • name:資料庫實例的名稱,使用了 var.db_name 變數的值。
  • database_version:指定使用的資料庫版本為 PostgreSQL 14。
  • deletion_protection:設置為 false,允許刪除資料庫實例。
  • settings:這是設定資料庫實例的區塊。
  • tier:使用的硬體配置層級為 “db-f1-micro”,這是一種基本的硬體配置。
  • disk_size:設置硬碟大小為 10GB。
  • ip_configuration:設定 IP 配置的區塊。
  • authorized_networks:這是授權的網路區塊,允許特定的 IP 位址區段訪問資料庫。在這裡,使用 for_each 迭代 local.allow_ips 中的 IP 位址區段列表。
  • name:為每個 IP 位址區段創建一個名稱。
  • value:指定允許的 IP 位址區段。

3. google_sql_database 資源:這個資源塊創建了一個資料庫在資料庫實例中。

  • name:新資料庫的名稱,使用了 var.db_name 變數的值。
  • instance:這裡使用了先前定義的 google_sql_database_instance 資源的名稱。

4. google_sql_user 資源:這個資源塊創建了一個 PostgreSQL 使用者。

  • name:使用者名稱為 “admin”。
  • instance:這裡使用了先前定義的 google_sql_database_instance 資源的名稱。
  • password:指定使用者的密碼。

5. output 區塊:output 區塊用於定義輸出變數,這些變數可以在執行後顯示出來。

  • db_ip:這個輸出變數將顯示資料庫實例的公有 IP 位址。

總之,這段程式碼使用 Terraform 創建了一個 PostgreSQL 14 資料庫實例,並設置了相關的參數,包括硬體配置、授權 IP 位址等。這將幫助您在 Google Cloud Platform 上建立和管理資料庫。

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

terraform apply -auto-approve
GCP 資料庫服務 Cloud SQL- 關聯式 SQL DB
GCP 資料庫服務 Cloud SQL— 關聯式 SQL DB
GCP 資料庫服務 Cloud SQL- 資料庫規格
GCP 資料庫服務 Cloud SQL— 資料庫規格
GCP 資料庫服務 Cloud SQL — 使用者帳戶

Terraform tip:可以利用下列的 Terraform tip,來增進部署效率。

  1. 打開終端機中的 .bashrc or .zshrc 檔案
  2. 在文件最下方加入下列指令
  3. 執行 source ~/.zshrc 或是 source ~/.bashrc 讓下面的 alias 快捷鍵生效
alias tf="terraform"
alias tfv="terraform validate"
alias tfdp="terraform apply -auto-approve plan.out"
alias tfd="terraform apply -auto-approve"
alias tfr="terraform destroy -auto-approve"
alias tfp="terraform plan -out plan.out"

DBeaver測試

下載並安裝 DBeaver:前往 DBeaver 官方網站下載並安裝 DBeaver — https://dbeaver.io

在 DBeaver 中新增資料庫連線:打開 DBeaver,點擊「新增資料庫連線」,選擇 PostgreSQL 作為資料庫類型,然後填寫以下資訊:

  • 主機:資料庫實例的 IP 位址或域名
  • 埠號:默認為 5432
  • 資料庫名稱:您在 Terraform 設定中指定的資料庫名稱
  • 使用者名稱:通常為預設的 PostgreSQL 使用者名稱
  • 密碼:連線使用者的密碼

測試連線:填寫完所有資訊後,嘗試連線以測試是否成功。

DBeaver資料庫連線資訊
DBeaver資料庫連線資訊
DBeaver資料庫連線測試
DBeaver資料庫連線測試

課程連結

如果您覺得這篇文章對您有幫助,我誠摯地邀請您透過以下連結訂閱我的 Udemy 課程,進一步深入學習 Terraform 和 GCP 的知識:

訂閱 Terraform 從零開始 — 10+實戰Lab打造GCP雲端自動化架構課程

訂閱 Terraform 從零開始 — 10+實戰Lab打造GCP雲端自動化架構課程
https://devops-with-alex.zeabur.app/go/terraform

相關連結

  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. GCP 資料庫服務 Cloud SQL

發佈留言

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