2017-04-04 67 views
8

Nasz układ Terraform jest taki, że uruchamiamy Terraform dla wielu kont aws (100+) i zdalnie zapisujemy plik stanu Terraform do centralnego zasobnika S3.Blokowanie stanu Terraform za pomocą DynamoDB

Nowa funkcja blokowania brzmi użytecznie i chce ją wdrożyć, ale nie jestem pewna, czy mogę skorzystać z centralnej tabeli DynamoDB na tym samym koncie, co w naszym wiadrze S3, czy też muszę utworzyć tabelę DynamoDB w każdym z kont AWS?

Odpowiedz

6

Możesz użyć pojedynczej tabeli DynamoDB do kontrolowania blokady dla pliku stanu dla wszystkich kont. To działałoby nawet wtedy, gdy masz wiele wiader S3 do zapisania stanu.

Tabela DynamoDB ma klucz LockID which is set as a bucketName/path. Tak długo, jak masz unikalną kombinację, będziesz miał się dobrze (powinieneś lub masz większe problemy z zarządzaniem państwem).

Oczywiście trzeba będzie skonfigurować zasady IAM dla wielu kont, aby umożliwić użytkownikom tworzenie rzeczy na jednym koncie, aby móc zarządzać przedmiotami w DynamoDB.

+0

Dzięki, wypróbuję to i wkrótce otrzymam informację zwrotną. – user1619524

+0

Jakieś opinie na ten temat? – reedobrien

+0

Tak, próbowałem i działało dobrze dla mnie. Ustawiłem stół ręcznie, a następnie utworzyłem połączenie terraform poprzez plik .tf. Uwaga: drugą odpowiedź Jirawata wykorzystałem jako przykład składni (w przykładzie użycia). Używam również terraform 0.9.7, więc musiałem użyć lock_table zamiast dynamodb_table, który jest używany w późniejszych wersjach. – kjbradley

3

Aby korzystać terraform blokowanie DynamoDB, wykonaj czynności opisane poniżej

1.Create AWS DynamoDB z terraform zablokować 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 aby utworzyć tabelę DynamoDB na AWS

terraform zastosować

Wykorzystanie Przykład

1.Wykorzystanie tabela DynamoDB zablokować terraform.state tworzenie na AWS. Jako przykład 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"  
} 

Wartość dynodb_table musi być zgodna z nazwą utworzonej przez nas tabeli DynamoDB.

2.Initialize S3 terraform i DynamoDB backend

terraform startowych

3.Execute terraform stworzyć serwer EC2

terraform zastosować

Aby zobaczyć kod, przejdź pod numer Github DynamoDB Locking Example