blog post

Terraform 從零開始 (9) — GCP 資料庫服務 — 使用Terraform創建memory store — Redis

GCP 資料庫服務 — 使用Terraform創建memory store — Redis
GCP 資料庫服務 — 使用Terraform創建memory store — Redis

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

1. Google 資料庫服務 — memory store的主要功能和用途

Google Cloud 的資料庫服務中,Memory Store 是一種受管式的記憶體資料庫服務,主要針對快速讀取和寫入的工作負載進行了優化。。以下是一些主要的功能和用途:

  1. 記憶體資料庫:Memorystore支援兩種資料庫引擎:Redis和Memcached,讓您可以根據應用程式和使用情境來選擇最適合的引擎,達到更高的效能和低延遲性。
  2. 完全托管的服務:Memorystore是完全托管的,這意味著您不需要管理任何伺服器或基礎架構。這樣可以大大減少您的維護成本和風險,同時提高您的開發效率和生產力。
  3. 快速和可擴展:由於Memorystore是基於記憶體的資料庫,因此它可以提供非常快速和低延遲的資料存取。此外,它還支援自動擴展,可以輕鬆地應對大流量的應用程式和工作負載。
  4. 高可用性和可靠性:Memorystore提供多個可用區域,以保證資料的高可用性和可靠性。它還提供了備份和還原功能,以防止資料丟失或損壞。
  5. 簡單易用:Memorystore易於設置和管理。您可以使用GCP控制台、命令列介面或API來操作Memorystore,並輕鬆地集成到您的應用程式中。

2.Google 資料庫服務 — memory store的使用情境

Google Cloud Platform 的資料庫服務 — memory store可在多種場景下使用,以下是一些常見的使用情境:

  1. 電子商務網站:在電子商務網站中,您需要存儲和緩存大量的產品和用戶資料,以提高網站的效能和用戶體驗。Memorystore可以提供快速和可擴展的資料存取能力,並且易於管理和維護。
  2. 多人遊戲:在多人遊戲中,您需要存儲和共享大量的遊戲狀性和玩家資料,以便在遊戲中快速且即時地呈現。Memorystore可以提供快速和可靠的記憶體資料庫解決方案,以支援遊戲中的高流量和低延遲性。
  3. 即時數據分析:在即時數據分析中,您需要快速地存儲和查詢大量的數據,以便在分析和決策過程中使用。Memorystore可以提供快速和可擴展的資料庫解決方案,並且支援常用的數據分析工具和平台。
  4. 醫療保健:在醫療保健領域中,您需要存儲和處理大量的病歷和醫療資料,以便提供高質量和高效率的醫療服務。Memorystore可以提供快速和可靠的記憶體資料庫解決方案,以支援醫療資料的存儲和查詢需求。

3. GCP 資料庫服務 — 使用Terraform創建memory store — redis

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

  1. 創建一個memory store 的 redis:這個步驟將確保我們有一個運行中的 Redis 服務,供後續的測試和連接使用。
  2. 創建一個用於redis forward的vm:這個 VM 將用於轉發 Redis 的連接。我們將設定 VM,使其能夠正確地轉發 Redis 請求。
  3. 使用ssh forward到個人電腦:使用 SSH Forward 將遠程 VM 上的 Redis 連接轉發到我們個人的電腦上。允許我們直接在本地測試和訪問 Redis 服務。
  4. 使用redis-gui來進行測試 (連結):介紹如何使用 Redis GUI 工具來測試我們創建的 Redis 服務。這將讓我們能夠輕鬆地查看、編輯和操作 Redis 中的資料。
  5. Terraform memory store 連結:可以到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 "GCP_ZONE" {
type = string
default = "asia-northeast1-a"
}

variable "redis_name" {
type = string
default = "redis-tf-ch4-12-3"
}

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

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

2-main.tf

##################################################################################
# RESOURCE
##################################################################################
resource "google_redis_instance" "cache" {
name = var.redis_name
display_name = "terraform 101 - ${var.redis_name}"
region = var.GCP_REGION

memory_size_gb = 1
tier = "BASIC"
redis_version = "REDIS_6_X"

persistence_config {
rdb_snapshot_period = "TWENTY_FOUR_HOURS"
}
}

這個檔案是主要的 Terraform 代碼,用於在 Google Cloud Platform 上創建一個 Redis 實例,讓我們逐一解釋這段代碼的意義:

  1. resource "google_redis_instance" "cache":這行代碼定義了一個 Google Cloud Redis 實例的 Terraform 資源,這個資源會在代碼中被引用為 cache
  2. name = var.redis_name:這行指定了 Redis 實例的名稱,使用了一個變數 redis_name 來命名。
  3. display_name = "terraform 101 - ${var.redis_name}":這行設定了 Redis 實例的顯示名稱,其中包含一個字串和變數 redis_name 的組合。
  4. region = var.GCP_REGION:這行指定了 Redis 實例所在的區域,使用了一個變數 GCP_REGION
  5. memory_size_gb = 1:這行指定了 Redis 實例的記憶體大小,此處為 1 GB。
  6. tier = "BASIC":這行指定了 Redis 實例的層級(或稱類型),這裡使用了基本層級。
  7. redis_version = "REDIS_6_X":這行指定了 Redis 的版本,此處為 Redis 6.x 版本。
  8. persistence_config:這是一個區塊,用於設定持久性配置,即關於數據的持久性和備份。rdb_snapshot_period = "TWENTY_FOUR_HOURS":這行指定了 RDB 快照的備份週期,這裡設定為每 24 小時。

總之,這段代碼描述了如何使用 Google Cloud Provider 創建一個 Redis 實例。代碼中使用變數來設定名稱和區域,同時也指定了該實例的記憶體大小、版本、持久性配置等細節。

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

terraform apply -auto-approve
GCP 資料庫服務 — memory store redis
GCP 資料庫服務 — memory store redis

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"

測試Redis連線:利用跳板機來連線Redis。

  1. 先記錄redis的內部ip,作為port fording遠方的連線ip
  2. 利用下方的cmd,更換成對應的專案、區域、虛擬機名稱、redis的內部ip
  3. 在terminal 執行ssh port forwding,並確認將遠方的reids port轉發到本地電腦上
  4. 下載安裝 Another Redis Desktop Manager ,開啟 Another Redis Desktop Manager 應用程式,並輸入下列資料: 
    Host: 127.0.0.1 
    port: 6379 預設
# gcloud compute ssh [VM名稱] --project [專案ID] --zone [區域] -- -L [本機端口]:[redis ip]]:[Redis端口]
gcloud compute ssh --zone "asia-northeast1-b" "redis-proxy" --project "terraform101-384507" -- -L 6379:10.12.243.27:6379
memory store proxy VM (代理連線)
memory store proxy VM (代理連線)
memory store proxy VM — gcloud 指令(代理連線)
memory store proxy VM — gcloud 指令(代理連線)
memory store proxy VM — port forwarding
memory store proxy VM — port forwarding
Another Redis Desktop Manager — 連線設定
Another Redis Desktop Manager — 連線設定
Another Redis Desktop Manager — 遠方Redis 連線成功
Another Redis Desktop Manager — 遠方Redis 連線成功

課程連結

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

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

訂閱 Terraform 從零開始 — 10+實戰Lab打造GCP雲端自動化架構課程
https://devops-with-alex.com/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 memory store

發佈留言

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