GNU/Linux >> Tutoriels Linux >  >> Linux

Comment gérer l'état de Terraform dans un compartiment AWS S3

Dans cet article, nous verrons ce qu'est un état Terraform et comment le gérer sur un Bucket S3. Nous verrons également ce qu'est le "lock" dans Terraform et comment l'implémenter. Pour implémenter cela, nous devons créer un compartiment S3 et une table DynamoDB sur AWS.

Avant de continuer, comprenons les bases de l'état et du verrouillage de Terraform.

  • État de Terraform (fichier terraform.tstate) : 
    Le fichier d'état contient des informations sur les ressources existantes définies dans les fichiers de configuration terraform. Par exemple, si vous avez créé une instance EC2 à l'aide de terraform config, le fichier d'état contient des informations sur la ressource réelle qui a été créée sur AWS.
  • S3 en tant que backend pour stocker le fichier d'état  :
    Si nous travaillons en équipe, il est préférable de stocker le fichier d'état de terraform à distance afin que les membres de l'équipe puissent y accéder. Pour stocker l'état à distance, nous avons besoin de deux éléments :un compartiment s3 pour stocker le fichier d'état et une ressource backend terraform s3.
  • Verrouiller  : 
    Si nous stockons le fichier d'état à distance afin que de nombreuses personnes puissent y accéder, nous risquons que plusieurs personnes tentent d'apporter des modifications au même fichier au même moment. Nous avons donc besoin d'un mécanisme qui "verrouille" l'état s'il est actuellement utilisé par d'autres utilisateurs. Nous pouvons y parvenir en créant une table dynamoDB que terraform pourra utiliser.

Ici, nous verrons toutes les étapes depuis la création manuelle d'un compartiment S3, l'ajout de la stratégie requise, la création d'une table DynamoDB à l'aide de Terraform et la configuration de Terraform pour utiliser S3 comme backend. et DynamoDB pour stocker le verrou.

Prérequis

  1. Compréhension de base de Terraform.
  2. Compréhension de base du compartiment S3.
  3. Terraform installé sur votre système.
  4. Compte AWS (créez-le si vous n'en avez pas).
  5. 'access_key' &'secret_key' d'un utilisateur AWS IAM. (Cliquez ici pour apprendre à créer un utilisateur IAM avec 'access_key' &'secret_key' sur AWS, )

Ce que nous allons faire

  1. Créez un compartiment S3 et attachez-lui une stratégie.
  2. Créer une table DynamoDB à l'aide de Terraform
  3. Créez un EC2 à l'aide des fichiers de configuration Terraform.
  4. Supprimez l'instance EC2 créée à l'aide de Terraform.

Créez un compartiment S3 et attachez-lui une stratégie.

Cliquez ici pour apprendre à créer un compartiment S3 sur un compte AWS. Une fois que vous avez créé un compartiment, attachez-lui la politique suivante.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"Stmt1560164441598", "Effect":"Allow", "Principal":"*", "Action":[ "s3:PutObject*", "s3:List*", "s3:Get*", "s3:Delete*" ], "Ressource":[ "arn:aws:s3:::state-lock-rahul" , "arn:aws:s3:::state-lock-rahul/*" ] } ]}

Configurez  "AWS_ACCESS_KEY_ID" et "AWS_SECRET_ACCESS_KEY" afin de pouvoir accéder à votre compte à partir de la CLI.

Utilisez la commande suivante pour exporter les valeurs de "AWS_ACCESS_KEY_ID" et "AWS_SECRET_ACCESS_KEY

exporter AWS_ACCESS_KEY_ID=AKIAQ6GAIA5XC2XMMM7Wexporter AWS_SECRET_ACCESS_KEY=BqmubAkz1L2OOsxcvJLjl3usE0XIn5WNtY+Qaxfbecho $AWS_ACCESS_KEY_IDecho $AWS_SECRET_ACCESS_KEY

Une fois que vous avez configuré vos informations d'identification, vous pouvez simplement les tester en répertoriant les compartiments à l'aide de la commande suivante.

aws s3 ls

Créer une table DynamoDB à l'aide de Terraform

Créez 'variables.tf' qui contient les variables requises pour la déclaration.

variables vim.tf

variable "region" { description ="Région d'AWS VPC"}

Créez 'main.tf' qui est responsable de la création d'une table DynamoDB. Ce main.tf lira les valeurs des variables de variables.tf. Cette table sera utilisée pour stocker la serrure.

provider "aws" { region ="${var.region}"}
resource "aws_dynamodb_table" "terraform_locks" {
name ="rahul-test-dynamodb-table"
billing_mode ="PAY_PER_REQUEST"
hash_key ="LockID"
attribut {
name ="LockID"
type ="S"
}
}

La première commande à utiliser est 'terraform init'. Cette commande télécharge et installe les plug-ins pour les fournisseurs utilisés dans la configuration. Dans notre cas, il s'agit d'AWS.

  terraform init

La deuxième commande à utiliser est 'terraform plan'. Cette commande permet de voir les changements qui auront lieu sur l'infrastructure.

 plan de terraformation

La commande 'terraform apply' créera les ressources sur l'AWS mentionnées dans le fichier main.tf. Vous serez invité à fournir votre contribution pour créer les ressources.

appliquer terraform

Maintenant, vous pouvez accéder au tableau de bord DynamoDB sur la console pour vérifier si la table a été créée ou non.

Jusqu'à présent, nous avons créé un compartiment S3 manuellement à partir de la console S3 et de la table DynamoDB à l'aide de Terraform. Nous n'avons pas configuré le compartiment S3 en tant que backend pour stocker l'état et la table DynamoDB pour stocker le verrou.

Pour atteindre notre objectif, nous devons modifier notre fichier Terraform main.tf. Après avoir modifié le code et l'avoir exécuté, notre état local préexistant sera copié dans le backend S3.

Mettre à jour notre main.tf existant avec le code suivant.

vim main.tf

provider "aws" { region ="${var.region}"} terraform { backend "s3" { bucket ="state-lock-rahul" key ="test/terraform.tfstate" region ="eu-west -3" dynamodb_table ="rahul-test-dynamodb-table" }} ressource "aws_dynamodb_table" "terraform_locks" { name ="rahul-test-dynamodb-table" billing_mode ="PAY_PER_REQUEST" hash_key ="LockID" attribut { name =" ID de verrouillage" type ="S" }}

Maintenant, si vous essayez la commande "terraform plan" pour voir quelle nouvelle ressource sera créée, la commande échouera avec l'erreur suivante.

Il vous sera demandé de réinitialiser le backend.

Pour réinitialiser le backend, utilisez la commande "terraform init". À cette étape, votre fichier d'état local sera copié dans le compartiment S3.

init terraform

Vous pouvez observer la sortie comme indiqué dans la capture d'écran ci-dessous après avoir exécuté la commande "terraform init", Terraform a été activé pour utiliser la table DynamoDb pour acquérir le verrou. Une fois le verrouillage activé, deux opérations identiques sur la même ressource ne peuvent pas être effectuées en parallèle.

Vous pouvez accéder au tableau de bord S3 à partir de la console AWS pour voir si le terraform.tfstate a été copié ou non.

Maintenant, vous pouvez à nouveau créer une nouvelle ressource et voir que l'état sera stocké sur le compartiment S3. Pour créer une nouvelle table de test DynamoDB, mettez à jour le fichier main.tf avec le code suivant.

vim main.tf

variable "region" { description ="Region of AWS VPC"}Rahuls-MacBook-Pro:terraform rahul$ cat main.tf provider "aws" { region ="${var.region}"}terraform { backend " s3" { bucket ="state-lock-rahul" key ="test/terraform.tfstate" region ="eu-west-3" dynamodb_table ="rahul-test-dynamodb-table" }}ressource "aws_dynamodb_table" "terraform_locks" { name ="rahul-test-dynamodb-table" billing_mode ="PAY_PER_REQUEST" hash_key ="LockID" attribut { name ="LockID" type ="S" }}ressource "aws_dynamodb_table" "test-table" { name ="rahul -test-table" billing_mode ="PAY_PER_REQUEST" hash_key ="LockID" attribut { name ="LockID" type ="S" }}

Cette fois, il n'est pas nécessaire d'exécuter "terraform init" car il n'y a aucun changement dans le backend du fournisseur.

Vous pouvez simplement utiliser la commande "terraform plan" pour voir quelles nouvelles ressources seront créées.

plan de terraform

Maintenant, exécutez la commande suivante pour créer une nouvelle table de test DynamoDb.

appliquer terraform

Dans la capture d'écran ci-dessus, vous pouvez voir que le verrouillage a été activé, le fichier .tfstate est en cours de copie vers S3.

Maintenant, dans la console, vous pouvez voir que la nouvelle table a été créée

Maintenant, si vous n'avez plus besoin de la ressource que vous avez créée à l'aide de Terraform, utilisez la commande suivante pour supprimer les ressources.

terraform détruit

Dès que vous supprimez les ressources, vous pouvez voir que la table qui était utilisée pour le verrouillage a également été supprimée. Si vous n'avez pas non plus besoin du compartiment S3, vous pouvez le supprimer de la console.

Conclusion

Dans cet article, nous avons appris la nécessité d'utiliser un état distant et de se verrouiller dans Terraform. Nous avons vu les étapes pour utiliser S3 Bucket comme backend pour stocker l'état Terraform et la table DynamoDb pour activer le verrouillage.


Linux
  1. Comment gérer les capacités des fichiers Linux

  2. Comment gérer le mot de passe du compte sous Linux

  3. Comment créer une instance RDS sur AWS à l'aide de Terraform

  4. Comment créer un rôle IAM dans AWS à l'aide de Terraform

  5. Comment utiliser AWS CLI pour gérer Amazon S3

Qu'est-ce que Terraform et comment l'installer et l'utiliser sur AWS EC2

Créer un compartiment S3 sur AWS à l'aide de Terraform

Comment créer un compartiment S3 à l'aide de Python Boto3 sur AWS

Comment créer une table DynamoDB dans AWS

Comment installer Terraform sur Ubuntu 18.04/20.04 LTS

Comment gérer les bases de données dans MariaDB sur Ubuntu 18.04