我們的Terraform佈局使我們能夠爲許多aws(100+)帳戶運行Terraform,並將Terraform狀態文件遠程保存到中央S3存儲桶。使用DynamoDB的Terraform狀態鎖定
新的鎖定功能聽起來很有用,希望實現它,但我不確定是否可以在與S3存儲桶相同的帳戶中使用中央DynamoDB表,或者是否需要在每個表中創建一個DynamoDB表的AWS賬戶?
我們的Terraform佈局使我們能夠爲許多aws(100+)帳戶運行Terraform,並將Terraform狀態文件遠程保存到中央S3存儲桶。使用DynamoDB的Terraform狀態鎖定
新的鎖定功能聽起來很有用,希望實現它,但我不確定是否可以在與S3存儲桶相同的帳戶中使用中央DynamoDB表,或者是否需要在每個表中創建一個DynamoDB表的AWS賬戶?
您可以使用單個DynamoDB表來控制所有帳戶的狀態文件鎖定。即使您有多個S3存儲桶來存儲狀態,這也可以工作。
DynamoDB表的鍵是LockID
which is set as a bucketName/path。所以只要你有一個獨特的組合,你會很好(你應該或者你有更大的問題與你的國家管理)。
顯然,您需要設置跨帳戶IAM策略,以允許用戶在一個帳戶中創建事物,以便能夠管理DynamoDB中的項目。
要使用terraform DynamoDB鎖定,進行如下
1.創建一個AWS DynamoDB的步驟與terraform鎖定terraform.tfstate。
provider "aws" {
region = "us-east-2"
}
resource "aws_dynamodb_table" "dynamodb-terraform-lock" {
name = "terraform-lock"
hash_key = "LockID"
read_capacity = 20
write_capacity = 20
attribute {
name = "LockID"
type = "S"
}
tags {
Name = "Terraform Lock Table"
}
}
2.Execute terraform到AWS創建DynamoDB表
terraform申請
用法示例
1.使用DynamoDB表鎖定terraform.state創建在AWS上。作爲EC2示例
terraform {
backend "s3" {
bucket = "terraform-s3-tfstate"
region = "us-east-2"
key = "ec2-example/terraform.tfstate"
dynamodb_table = "terraform-lock"
encrypt = true
}
}
provider "aws" {
region = "us-east-2"
}
resource "aws_instance" "ec2-example" {
ami = "ami-a4c7edb2"
instance_type = "t2.micro"
}
dynamodb_table值必須與我們創建的DynamoDB表的名稱匹配。
2.Initialize的terraform S3和DynamoDB後端
terraform初始化
3.Execute terraform創建EC2服務器
terraform申請
謝謝,我會盡快回復並反饋。 – user1619524
對此有何反饋? – reedobrien
是的,試過了,它對我來說工作得很好。我手動設置了表格,然後通過.tf文件將terraform連接到它。注意:我使用Jirawat的其他答案作爲語法示例(在用法示例下)。此外,我正在使用terraform 0.9.7,所以我不得不使用lock_table而不是用於更高版本的dynamodb_table。 – kjbradley