iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0
DevOps

大家都在用 Terraform 實作 IaC 為什麼不將程式寫得更簡潔易讀呢?系列 第 7

如何利用 HCL 語言的撰寫 Terraform 專案的基本介紹 (Part VII) - 使用 AWS S3 儲存 Terraform State 與 AWS DynamoDB 作為 lock 機制

  • 分享至 

  • xImage
  •  

前面幾天你試著執行過 terraform apply ".plan" 指令後,會發現有一個 terraform.tfstate 檔案被產生出來,對 Terraform 來說 tfstate 是一個非常重要的文件,用於跟蹤 Terraform 管理的基礎設施的狀態和資源資訊。這個文件包含了目前部署的資源狀態、資源屬性、依賴關係等信息,Terraform 使用它來確定應該如何更新或變更基礎設施。tfstate 文件通常以 JSON 或者 Terraform 二進制(*.tfstate)的格式存在。

為了確保 tfstate 文件的可用性、安全性和共享性,最佳實踐是將它儲存在可靠的外部存儲中,例如 AWS S3。另外,結合 AWS DynamoDB 作為 lock 機制是一個很好的實踐,它可以防止多個 Terraform 實例同時修改基礎設施。

以下是將 tfstate 儲存在 AWS S3 中與與 AWS DynamoDB 作為 lock 機制的步驟:

  1. 建立 S3 存儲桶(Bucket): 在 AWS 控制台中,建立一個 S3 存儲桶,這個存儲桶將用來保存 tfstate 文件。
    確保設定存儲桶的權限,以允許 Terraform 可以存取它。

  2. 建立 DynamoDB 資料表(Table): 在 AWS 控制台中,建立一個 DynamoDB 表,以用作 Terraform 的 lock 機制。你可以為表選擇一個適合的名稱,例如 terraform_locks。在表的主鍵設置中,使用 LockID 作為分區鍵(Partition Key)。

  3. 設置 backend s3 in main.tf 主程式中: 在你的 Terraform 設定中,你需要設置一個 Terraform backend,以指定 tfstate 文件的存儲位置。這通常在你的 main.tf 或者 backend.tf 文件中完成。以下是一個 backend 的例子:

terraform {
  backend "s3" {
    bucket         = "your-terraform-state-bucket"
    dynamodb_table = "my-terraform-infra-locks"
    key            = "terraform.tfstate"
    region         = "ap-northeast-1"  # 根據你的 S3 bucketv位置設定
    encrypt        = true
  }
}
  • bucket:設定為你在第 1 步中創建的 S3 bucket 名稱。
  • dynamodb_table: 設定為你在第 2 步中創建的 DynamoDB table 名稱。
  • key:這是 tfstate 文件的名稱,你可以自行命名。
  • region:根據你的 S3 存儲桶所在的 AWS 區域來設置。
  • encrypt:設定為 true 表示啟用加密。
  1. 初始化 Terraform 專案: 在你的 Terraform 專案目錄中運行 terraform init 命令,以初始化 Terraform 項目並配置 backend。Terraform 將提示你提供任何必需的變數值。

  2. 部署 Terraform 配置: 使用 terraform apply 命令來部署 Terraform 配置。Terraform 將自動將 tfstate 文件儲存在指定的 S3 存儲桶中。

  3. 維護存儲桶許可權: 請確保設置 S3 存儲桶的許可權以確保只有授權的用戶可以訪問 tfstate 文件。

  4. 共享存取: 如果有其他人需要訪問你的 Terraform 項目,請確保他們擁有訪問 S3 存儲桶的權限。他們需要有讀取 tfstate 文件的權限,以便能夠執行 terraform state 和其他操作。

使用 AWS S3 作為 tfstate 存儲的好處是它提供了高度的可用性、持久性和安全性。此外,你可以使用 AWS IAM(Identity and Access Management)來控制誰可以訪問存儲桶中的 tfstate 文件,以確保數據的安全性。


上一篇
如何利用 HCL 語言的撰寫 Terraform 專案的基本介紹 (Part VI) - 模組間相依性
下一篇
實作 AWS 常用服務之 Terraform 模組系列 - VPC 篇
系列文
大家都在用 Terraform 實作 IaC 為什麼不將程式寫得更簡潔易讀呢?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言