blog post

Terraform 從零開始 (2) — 網路服務 — 使用Terraform創建VPC-虛擬私人網路-Subnet-子網段-Firewall-防火牆

VPC網路服務 — 使用Terraform創建VPC-虛擬私人網路-Subnet-子網段-Firewall-防火牆
VPC網路服務 — 使用Terraform創建VPC-虛擬私人網路-Subnet-子網段-Firewall-防火牆

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

1. GCP 網路服務的主要功能和用途

Google Cloud Platform(GCP)的虛擬私人網路(VPC)是一個強大的工具,用於創建和管理虛擬網路環境,以支援各種雲端資源的部署。以下是 VPC 的主要功能和用途:

虛擬私人網路 VPC

VPC 是由 GCP 創建和管理的虛擬網路環境,它提供了以下主要功能:

  1. 創建虛擬網路環境: VPC 允許用戶創建一個虛擬的網路環境,其中可以部署各種 GCP 資源,如虛擬機器、資料庫、容器等。
  2. 安全保護: VPC 提供了一個安全的網路環境,可以保護 GCP 資源免受未經授權的訪問和網路攻擊。用戶可以設定安全性政策,確保資源的安全性。
  3. 跨區域和地區擴展: VPC 可以擴展到多個區域和地區,實現全球性的資源管理。這使得用戶可以在不同的地理位置部署資源,以實現更好的性能和可用性。

子網段 Subnet

Subnet 是將 VPC 劃分為更小的網路區域,以實現更好的資源管理和控制。以下是 Subnet 的功能:

  1. 更精細的管理: Subnet 允許用戶將 VPC 劃分為更小的區域,從而更精細地管理資源。這有助於組織和區分不同的部門、應用程式或用途。
  2. 靈活的資源配置: 通過配置 IP 地址範圍、防火牆和路由器等網路組件,Subnet 可以實現更靈活的資源配置,以滿足不同需求。
  3. 全球性的資源管理: 用戶可以在不同的區域和地區部署 Subnet,從而實現全球性的資源管理,並在不同地理位置達到最佳性能。

防火牆 Firewall

防火牆是保護 VPC 中資源安全的重要組件,以下是其主要功能:

  1. 安全性保護: Firewall 防火牆幫助用戶控制進出 VPC 的網路流量,以防止未經授權的訪問和網路攻擊。這是保護資源安全的關鍵組件。
  2. 流量控制: 通過配置不同的規則,例如允許或禁止特定網路流量的訪問,用戶可以實現更靈活的安全策略,確保只有合法的流量可以進入和離開 VPC。

2. Google 網路服務VPC的使用情境

Google Cloud Platform 的 VPC 在多個領域都有廣泛的應用,以下是一些常見的使用情境:

  1. 安全網路環境: 用戶可以通過創建 VPC 來建立一個安全的網路環境,以保護機密資料和應用程式。VPC 的安全性功能可以幫助用戶確保敏感資訊不會被未經授權的人訪問。
  2. 資源管理: 使用 Subnet 可以將 VPC 劃分為不同的子網段,以區分不同部門或應用程式。這有助於更好地組織和管理資源,使資源分類更加清晰。
  3. 安全策略實施: 透過配置防火牆規則,用戶可以控制對資源的訪問權限,防止未經授權的訪問和網路攻擊。這使得用戶可以實現定制的安全策略,以符合其特定需求。

3. GCP 網路服務 — 使用Terraform創建VPC 虛擬私人網路, Subnet 子網段, Firewall 防火牆

現在,讓我們來看看如何使用 Terraform 在 GCP 上創建GCP 網路服務,我們會有下面三個任務,也可以參考對應的程式碼連結

  1. 創建客戶的網路:在 GCP 中,我們可以使用 Terraform 定義並創建客戶的網路環境。
  2. 創建日本與新加坡的子網段:我們可以創建子網段,將網路進一步劃分為不同的區域。
  3. 創建 SSH / HTTPS 的防火牆:防火牆是保護網路中資源的重要組件,我們透過 Terraform 定義並創建防火牆規則。
  4. Terraform VPC 連結:可以到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"
}
}
}
##################################################################################
# PROVIDERS
##################################################################################
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 "network_name" {
type = string
default = "vpc-tf-ch4-3-3"
}

variable "location" {
type = string
default = "asia-east1"
}

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

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

2-main.tf

##################################################################################
# RESOURCE
##################################################################################
# 創建VPC虛擬私人網路
resource "google_compute_network" "customer_network" {
name = var.network_name
auto_create_subnetworks = false
}

# 創建子網域
resource "google_compute_subnetwork" "japan_subnet" {
name = "japan-subnet"
network = google_compute_network.customer_network.self_link
ip_cidr_range = "10.0.0.0/24"
region = "asia-northeast1"
}

resource "google_compute_subnetwork" "singapore_subnet" {
name = "singapore-subnet"
network = google_compute_network.customer_network.self_link
ip_cidr_range = "10.1.0.0/24"
region = "asia-southeast1"
}

# 創建防火牆
resource "google_compute_firewall" "ssh_https_firewall" {
name = "ssh-https-firewall"
network = google_compute_network.customer_network.self_link

allow {
protocol = "tcp"
ports = ["22", "80", "443"]
}

source_ranges = ["0.0.0.0/0"]
}

這個檔案是主要的 Terraform 代碼,用於創建虛擬私人網路(VPC)、子網段(Subnet)以及防火牆(Firewall)的配置。

  • 創建VPC虛擬私人網路: 在這個部分,我們定義了一個名稱為 “customer_network” 的 GCP 虛擬私人網路。我們通過 var.network_name 變數來命名這個網路,並且設定了 auto_create_subnetworks 參數為 false,這表示不會自動創建子網段。
  • 創建子網域: 我們創建了兩個子網段,分別是 “japan-subnet” 和 “singapore-subnet”。這些子網段分別關聯在不同的區域,並且具有不同的 IP 範圍。
  • 創建防火牆: 最後,我們創建了一個名稱為 “ssh-https-firewall” 的防火牆。這個防火牆允許 TCP 協議的 22、80 和 443 端口的流量,並且來自任何 IP 位址範圍的流量。這個防火牆將與我們創建的 VPC 關聯。

這些 Terraform 程式碼檔案配置,可以讓我們通過 Terraform 創建一個名為 “vpc-tf-ch4–3–3” 的虛擬私人網路(VPC)以及兩個日本與新加坡子網段(Subnet)以及防火牆(Firewall),並在其中設置防火牆允許規則。

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

terraform apply -auto-approve
虛擬私人網路(VPC)
子網段(Subnet)
防火牆(Firewall)

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"

課程連結

如果您覺得這篇文章對您有幫助,我誠摯地邀請您透過以下連結訂閱我的 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 虛擬私有雲 (VPC)

發佈留言

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