我们的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