2017-04-04 154 views
8

我們的Terraform佈局使我們能夠爲許多aws(100+)帳戶運行Terraform,並將Terraform狀態文件遠程保存到中央S3存儲桶。使用DynamoDB的Terraform狀態鎖定

新的鎖定功能聽起來很有用,希望實現它,但我不確定是否可以在與S3存儲桶相同的帳戶中使用中央DynamoDB表,或者是否需要在每個表中創建一個DynamoDB表的AWS賬戶?

回答

6

您可以使用單個DynamoDB表來控制所有帳戶的狀態文件鎖定。即使您有多個S3存儲桶來存儲狀態,這也可以工作。

DynamoDB表的鍵是LockID which is set as a bucketName/path。所以只要你有一個獨特的組合,你會很好(你應該或者你有更大的問題與你的國家管理)。

顯然,您需要設置跨帳戶IAM策略,以允許用戶在一個帳戶中創建事物,以便能夠管理DynamoDB中的項目。

+0

謝謝,我會盡快回復並反饋。 – user1619524

+0

對此有何反饋? – reedobrien

+0

是的,試過了,它對我來說工作得很好。我手動設置了表格,然後通過.tf文件將terraform連接到它。注意:我使用Jirawat的其他答案作爲語法示例(在用法示例下)。此外,我正在使用terraform 0.9.7,所以我不得不使用lock_table而不是用於更高版本的dynamodb_table。 – kjbradley

3

要使用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申請

看到代碼,去 Github DynamoDB Locking Example