2017-04-04 15 views
8

Bố cục Terraform của chúng ta là như vậy mà chúng ta chạy Terraform cho nhiều tài khoản aws (100+) và lưu tệp trạng thái Terraform từ xa vào một thùng S3 trung tâm.Khóa trạng thái Terra bằng cách sử dụng DynamoDB

Tính năng khóa mới có vẻ hữu ích và muốn triển khai nhưng tôi không chắc liệu tôi có thể sử dụng bảng DynamoDB trung tâm trong cùng một tài khoản như trong thùng S3 của chúng tôi hoặc tôi cần tạo bảng DynamoDB trong mỗi của tài khoản AWS?

Trả lời

6

Bạn có thể sử dụng một bảng DynamoDB đơn để điều khiển khóa cho tệp trạng thái cho tất cả các tài khoản. Điều này sẽ hoạt động ngay cả khi bạn có nhiều nhóm S3 để lưu trữ trạng thái.

Bảng DynamoDB được khóa trên LockID which is set as a bucketName/path. Vì vậy, miễn là bạn có một sự kết hợp độc đáo của những người bạn sẽ được tốt (bạn nên hoặc bạn có vấn đề lớn hơn với quản lý nhà nước của bạn).

Rõ ràng bạn sẽ cần phải thiết lập chính sách IAM tài khoản chéo để cho phép người dùng tạo các thứ trong một tài khoản để có thể quản lý các mục trong DynamoDB.

+0

Cảm ơn, tôi sẽ sớm thử phản hồi này và phản hồi. – user1619524

+0

Mọi phản hồi về điều này? – reedobrien

+0

Đúng, đã thử và nó hoạt động tốt cho tôi. Tôi thiết lập bảng theo cách thủ công sau đó có terraform kết nối với nó thông qua các tập tin .tf. Lưu ý: Tôi đã sử dụng câu trả lời khác của Jirawat làm ví dụ cú pháp (trong Ví dụ sử dụng). Ngoài ra, tôi đang sử dụng terraform 0.9.7, vì vậy tôi đã phải sử dụng lock_table thay vì dynamodb_table được sử dụng cho các phiên bản sau này. – kjbradley

3

Để sử dụng terraform DynamoDB khóa, hãy làm theo các bước dưới đây

1.Create một AWS DynamoDB với terraform khóa 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 để tạo ra các bảng DynamoDB trên AWS

terraform áp dụng

Cách sử dụng Ví dụ

1.Use bảng DynamoDB để khóa tạo terraform.state trên AWS. Ví dụ về 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"  
} 

Giá trị dynamodb_table phải khớp với tên của bảng DynamoDB mà chúng tôi đã tạo.

2.Initialize S3 terraform và DynamoDB backend

terraform init

3.Execute terraform để tạo máy chủ EC2

terraform áp dụng

Để xem mã, hãy đến số Github DynamoDB Locking Example

Các vấn đề liên quan