iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0
DevOps

Terraform 從零開始 - 實戰Lab打造GCP雲端自動化架構系列 第 29

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

  • 分享至 

  • xImage
  •  

使用 Terraform 創建關聯式 SQL 資料庫服務 (PostgreSQL),實現資料庫的管理。

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

文章同步分享到

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 設定

  • 設定連線:點選新增資料庫連線,選擇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-Codehttps://github.com/qwedsazxc78/Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code

  2. Terraform-project-best-practicehttps://github.com/qwedsazxc78/terraform-project-best-practice

  3. 歡迎訂閱我的udemy課程:Terraform 從零開始 - 10+實戰Lab打造GCP雲端自動化架構課程 - https://devops-with-alex.com/go/terraform


上一篇
Day 28 — Terraform/GCP實戰:使用 GCP Console 創建 GCP 資料庫服務 Cloud Sql (PostgreSQL)
下一篇
Day 30 — Terraform/GCP實戰:使用 GCP Console 創建 GCP 資料庫服務Cloud MemoryStore — Redis
系列文
Terraform 從零開始 - 實戰Lab打造GCP雲端自動化架構31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言