我有多個 git 存盤庫(例如汽車存盤庫、車庫存盤庫),其中每個存盤庫都使用 terraform.tf檔案部署多個 AWS 服務/資源。
我希望每個 repo 將他的狀態保存在 s3 遠程后端,這樣當 repo 從 prod 或 dev 作業區部署其資源時,狀態將保存在正確的 s3 存盤桶(prod/dev)中。
S3 存盤桶和檔案夾將類似于:
# AWS Prod bucket
terraform_prod_states Bucket:
- Path1: /cars/cars.tfstate
- Path2: /garage/garage.tfstate
# AWS Dev bucket
terraform_dev_states Bucket:
- Path1: /cars/cars.tfstate
- Path2: /garage/garage.tfstate
但在遠程后端部署存盤庫并保存狀態之前 - 需要設定 S3 存盤桶和權限。
問題?
誰應該設定 S3 存盤桶/權限/dynamodb 表(用于鎖定)?最佳實踐是什么?
選項:
是否應該從 AWS 管理控制臺手動創建一次 S3 存盤桶和表?
我是否應該有一個單獨的 repo 負責準備所有必需的 AWS 基礎設施:bucket/permissions/dynamodb(在這種情況下,我假設 infra repo 還應該保留遠程狀態和鎖定 - 誰應該這樣做?)
每個倉庫(汽車、車庫)都應該檢查 S3 和 dynamodb 表是否存在,以及是否需要準備遠程狀態資源供自己使用?
這里的感覺就像雞肉和雞蛋。
uj5u.com熱心網友回復:
您可以將其添加到 tf 腳本中,例如:
resource "aws_s3_bucket" "b" {
bucket = lower("${terraform.workspace}.mysite${var.project_name}")
acl = "private"
tags = {
Environment = "${terraform.workspace}"
}
}
但更多與安全組等相關的設定需要這一切都在檔案中,也可以看到本教程- https://www.bacancytechnology.com/blog/aws-s3-bucket-using-terraform
uj5u.com熱心網友回復:
是否應該從 AWS 管理控制臺手動創建一次 S3 存盤桶和表?
不一定 - 我建議創建一個單獨的檔案夾,該檔案夾具有用于管理狀態的 Terraform 配置(一次性設定)。我會呼叫存盤桶,tfstate但除了所需的 IAM 權限之外沒有任何限制。此外,用于lifecycle防止存盤桶通過 Terraform 被破壞并啟用版本控制。如果您想要狀態鎖定和一致性,還可以指定一個 DynamoDB 表,主鍵名為 LockID,型別為string(這是必需的),并在使用遠程狀態時指定名稱。
誰應該設定 S3 存盤桶/權限/dynamodb 表(用于鎖定)?最佳實踐是什么?
您將在一次性 TF 狀態設定中進行操作。我會將它作為保存其他 TF 配置的同一個存盤庫的一部分,而不是為單個 TF 檔案創建一個新的存盤庫(這很可能不會改變)。
每個倉庫(汽車、車庫)是否應該檢查 S3 和 dynamodb 表是否存在,以及是否需要準備遠程狀態資源供自己使用?
不,不要做任何檢查 - 正如我所提到的,只需手動進行。
正如您所注意到的那樣,您將始終遇到先有雞還是先有蛋的問題,因此請手動執行此操作,但單個 S3 存盤桶的狀態將非常小,并且可以在需要時匯入到狀態中。
這里的目標是將雞蛋問題與雞不再下蛋的情況隔離開來——你只需要設定一次遠程狀態并且很少改變它。
仍然比手動創建桶好得多。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/327450.html
上一篇:AWSIAM角色能否用于在AWS之外運行的應用程式?
下一篇:Terraform匯入地圖資源
