GNU/Linux >> Znalost Linux >  >> Linux

Jak spravovat stav Terraform v kbelíku AWS S3

V tomto článku uvidíme, co je stav Terraform a jak jej spravovat na S3 Bucket. Také uvidíme, co je to „zámek“ v Terraformu a jak jej implementovat. Abychom to mohli implementovat, musíme vytvořit S3 Bucket a DynamoDB Table na AWS.

Než budeme pokračovat, pojďme se seznámit se základy stavu Terraform a zámku.

  • Terraform State (soubor terraform.tstate): 
    Soubor stavu obsahuje informace o tom, jaké zdroje existují definované v konfiguračních souborech terraform. Pokud jste například vytvořili instanci EC2 pomocí konfigurace terraform, pak soubor stavu obsahuje informace o skutečném zdroji, který byl vytvořen na AWS.
  • S3 jako backend pro uložení státního souboru :
    Pokud pracujeme v týmu, pak je dobré uložit soubor stavu terraform vzdáleně, aby k němu měli přístup lidé z týmu. Abychom mohli ukládat stav na dálku, potřebujeme dvě věci:bucket s3 pro uložení souboru stavu a základní zdroj terraform s3.
  • Zamknout
    Pokud stavový soubor uložíme vzdáleně, aby k němu mělo přístup mnoho lidí, riskujeme, že se více lidí pokusí provést změny ve stejném souboru ve stejnou dobu. Potřebujeme tedy mít mechanismus, který „uzamkne“ stav, pokud jej aktuálně používají ostatní uživatelé. Toho můžeme dosáhnout vytvořením tabulky dynamoDB, kterou bude terraform používat.

Zde uvidíme všechny kroky od ručního vytvoření bucketu S3, přidání požadované zásady, vytvoření tabulky DynamoDB pomocí Terraform a konfigurace Terraformu pro použití S3 jako backendu a DynamoDB pro uložení zámku.

Předpoklady

  1. Základní porozumění Terraformu.
  2. Základní pochopení S3 Bucket.
  3. Terraform nainstalovaný ve vašem systému.
  4. Účet AWS (vytvořte si jej, pokud jej nemáte).
  5. 'access_key' &'secret_key' uživatele AWS IAM. (Kliknutím sem se dozvíte, jak vytvořit uživatele IAM pomocí 'access_key' a 'secret_key' na AWS, )

Co uděláme

  1. Vytvořte segment S3 a připojte k němu zásady.
  2. Vytvořte tabulku DynamoDB pomocí Terraform
  3. Vytvořte EC2 pomocí konfiguračních souborů Terraform.
  4. Vymažte vytvořenou instanci EC2 pomocí Terraform.

Vytvořte segment S3 a připojte k němu zásady.

Kliknutím sem se dozvíte, jak vytvořit S3 Bucket na účtu AWS. Jakmile vytvoříte segment, připojte k němu následující zásady.

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

Nakonfigurujte  „AWS_ACCESS_KEY_ID“ a „AWS_SECRET_ACCESS_KEY“, abyste ke svému účtu měli přístup z CLI.

Použijte následující příkaz k exportu hodnot „AWS_ACCESS_KEY_ID“ a „AWS_SECRET_ACCESS_KEY

export AWS_ACCESS_KEY_ID=AKIAQ6GAIA5XC2XMMM7Wexport AWS_SECRET_ACCESS_KEY=BqmubAkz1L2OOsxcvJLjl3usE0XIn5WNtY+Qaxfbecho $AWS_ACCESS_KEY_IDECHO $AWSCESS_KEY_IDECHO $AWSC 

Jakmile nakonfigurujete své přihlašovací údaje, můžete je jednoduše otestovat uvedením segmentů pomocí následujícího příkazu.

aws s3 ls

Vytvoření tabulky DynamoDB pomocí Terraform

Vytvořte 'variables.tf', který obsahuje proměnné požadované deklarací.

vim variables.tf

proměnná "region" { description ="Region of AWS VPC"}

Vytvořte soubor 'main.tf', který je zodpovědný za vytvoření tabulky DynamoDB. Tento main.tf bude číst hodnoty proměnných z variables.tf. Tato tabulka bude sloužit k uložení zámku.

poskytovatel "aws" { region ="${var.region}"}
zdroj "aws_dynamodb_table" "terraform_locks" {
name ="rahul-test-dynamodb-table"
billing_mode ="PAY_PER_REQUEST"
hash_key ="ID zámku"
atribut {
name ="ID zámku"
typ ="S"
}
}

Prvním příkazem, který se má použít, je 'terraform init'. Tento příkaz stáhne a nainstaluje pluginy pro poskytovatele používané v rámci konfigurace. V našem případě je to AWS.

  terraform init

Druhý příkaz, který se má použít, je 'terraform plan'. Tento příkaz se používá k zobrazení změn, ke kterým dojde v infrastruktuře.

 plán terraform

příkaz 'terraform apply' vytvoří prostředky na AWS uvedené v souboru main.tf. Budete vyzváni, abyste poskytli svůj vstup pro vytvoření zdrojů.

platí Terraform

Nyní můžete přejít na ovládací panel DynamoDB na konzole a zkontrolovat, zda byla tabulka vytvořena nebo ne.

Do této chvíle jsme vytvořili S3 Bucket ručně z konzole S3 a tabulky DynamoDB pomocí Terraformu. Nekonfigurovali jsme S3 Bucket jako Backend pro ukládání stavu a DynamoDB Table pro ukládání zámku.

Abychom dosáhli našeho cíle, musíme upravit náš soubor Terraform main.tf. Po úpravě kódu a jeho provedení bude náš již existující místní stav zkopírován do S3 Backend.

Aktualizujte náš stávající soubor main.tf pomocí následujícího kódu.

vim main.tf

poskytovatel "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" }} zdroj "aws_dynamodb_table" "terraform_locks" { name ="rahul-test-dynamodb-table" billing_mode ="PAY_PER_REQUEST" hash_key ="LockID" atribut { name =" LockID" typ ="S" }}

Pokud nyní zkusíte příkaz "terraform plan" a uvidíte, jaký nový zdroj bude vytvořen, příkaz selže s následující chybou.

Budete požádáni o reinicializaci backendu.

Chcete-li znovu inicializovat backend, použijte příkaz "terraform init". V tomto kroku bude váš místní státní soubor zkopírován do S3 Bucket.

terraform init

Po provedení příkazu „terraform init“ můžete sledovat výstup, jak je znázorněno na níže uvedeném snímku obrazovky. Terraformu bylo povoleno používat tabulku DynamoDb k získání  zámku. Jakmile je uzamčení povoleno, nelze paralelně provádět dvě stejné operace na stejném zdroji.

Z konzoly AWS můžete přejít na řídicí panel S3 a zjistit, zda byl soubor terraform.tfstate zkopírován nebo ne.

Nyní můžete znovu vytvořit nový zdroj a uvidíte, že stav bude uložen v S3 Bucket. Chcete-li vytvořit novou testovací tabulku DynamoDB, aktualizujte soubor main.tf pomocí následujícího kódu.

vim main.tf

proměnná "region" { description ="Region of AWS VPC"}Rahuls-MacBook-Pro:terraform rahul$ cat main.tf poskytovatel "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" }}zdroj "aws_dynamodb_table" "terraform_locks" { name ="rahul-test-dynamodb-table" billing_mode ="PAY_PER_REQUEST" hash_key ="LockID" atribut { name ="LockID" typ ="S" }}zdroj "aws_dynamodb_table" "test-table" { name ="rahul -test-table" billing_mode ="PAY_PER_REQUEST" hash_key =atribut "ID zámku" { name ="ID zámku" typ ="S" }}

Tentokrát není nutné spouštět „terraform init“, protože v Backendu k poskytovateli nedošlo k žádné změně.

Stačí použít příkaz „terraform plan“, abyste viděli, jaké nové zdroje budou vytvořeny.

plán terraform

Nyní provedením následujícího příkazu vytvořte novou testovací tabulku DynamoDb.

platí terraform

Na výše uvedeném snímku obrazovky můžete vidět, že uzamčení bylo povoleno, soubor .tfstate se kopíruje do S3.

Nyní v konzole vidíte, že byla vytvořena nová tabulka

Nyní, pokud již nepotřebujete zdroj, který jste vytvořili pomocí Terraformu, použijte k odstranění zdrojů následující příkaz.

terraform zničit

Jakmile smažete zdroje, uvidíte, že byla smazána i tabulka, která byla používána k zamykání. Pokud nepotřebujete ani S3 Bucket, můžete jej smazat z konzole.

Závěr

V tomto článku jsme se dozvěděli o nutnosti použití vzdáleného stavu a zamykání v Terraformu. Viděli jsme kroky pro použití S3 Bucket jako Backend pro uložení Terraform State a DynamoDb Table pro povolení uzamčení.


Linux
  1. Jak spravovat možnosti souborů Linux

  2. Jak spravovat heslo účtu v Linuxu

  3. Jak vytvořit instanci RDS na AWS pomocí Terraform

  1. Jak vytvořit roli IAM v AWS pomocí Terraform

  2. Jak používat AWS CLI ke správě Amazon S3

  3. Jak spravovat swapovací oddíl v Linuxu

  1. Jak spustit instanci AWS EC2 pomocí Terraform

  2. Jak vytvořit modul Terraform

  3. Jak spravovat instance AWS EC2 pomocí aws-cli