V tomto článku uvidíme, jak vytvořit opakovaně použitelné moduly v Terraformu. Moduly nám umožňují vyhnout se duplicitě kódu. To znamená, že stejný kód lze použít k vytvoření zdrojů stejného typu. Při použití modulů nemusíte kopírovat a vkládat kód, abyste vytvořili více zdrojů stejného typu.
Můžete například vložit kód do modulu Terraform a tento modul znovu použít ve zkušebním a produkčním prostředí. Tímto způsobem budeme moci obě prostředí znovu použít stejně kód ze stejného modulu namísto psaní kódu vícekrát.
V tomto článku napíšeme modul pro vytvoření S3 Bucket jako příklad.
Předpoklady
- Základní porozumění Terraformu.
- Terraform nainstalovaný ve vašem systému.
- Účet AWS (vytvořte si jej, pokud jej nemáte).
- 'access_key' a '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
- Napište si vlastní modul
- Vytvořte kbelík S3 pomocí modulu Terraform.
- Smažte vytvořený zdroj pomocí modulu Terraform.
Napište náš vlastní modul Terraform
Vytvořte vyhrazený adresář, kde můžete mít svůj terraform soubor "main.tf" a modul.
K vytvoření adresáře použijte následující příkaz
mkdir -p modules/aws-s3
Vytvořte soubor main.tf pod modules/aws-s3 a zkopírujte a vložte následující blok kódu, který bude použit jako modul k vytvoření bloku S3.
vim modules/aws-s3/main.tf
resource "aws_s3_bucket" "s3_bucket" {
bucket = var.bucket_name
acl = "public-read"
policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::${var.bucket_name}/*"
]
}
]
}
EOF
website {
index_document = "index.html"
error_document = "error.html"
}
tags = var.tags
}
Deklarujte požadovanou proměnnou v „modules/aws-s3/variables.tf“. Pokud chcete, můžete zadat výchozí hodnoty proměnných. Zkopírujte a vložte následující blok kódu pro vytvoření souboru.
vim modules/aws-s3/variables.tf
variable "bucket_name" { description = "Name of the s3 bucket. Must be unique." type = string } variable "tags" { description = "Tags to set on the bucket." type = map(string) default = {} }
Nyní vytvořte soubor "main.tf", který bude volat modul, který jsme definovali ve výše uvedeném kroku. Volání modulu znamená zahrnutí obsahu tohoto modulu do konfigurace s konkrétními hodnotami pro jeho proměnnou. Moduly se volají z jiných modulů pomocí module
bloky:
vim main.tf
provider "aws" { region = "${var.region}" access_key = "${var.access_key}" secret_key = "${var.secret_key}" } module "website_s3_bucket" { source = "./modules/aws-s3" bucket_name = "${var.bucket_name}" tags = { Terraform = "true" Environment = "dev" } }
Všechny moduly vyžadují zdrojový argument. Jeho hodnota je buď cesta k místnímu adresáři konfiguračních souborů modulu, nebo vzdálený zdroj modulu, který by měl Terraform stáhnout a použít.
Stejnou zdrojovou adresu lze zadat ve více blocích modulu, aby se vytvořilo více kopií zdrojů definovaných v rámci, případně s různými hodnotami proměnných.
Vytvořte soubor "variables.tf", který bude obsahovat definici proměnných. To bude obsahovat výchozí hodnoty, které je třeba předat modulu spolu s AWS „access_key“ a „secret_key“.
vim variables.tf
variable "access_key" { description = "Access key to AWS console" } variable "secret_key" { description = "Secret key to AWS console" } variable "region" { description = "Region of AWS VPC" } variable "bucket_name" { description = "(Required) Creates a unique bucket name" type = "string" default = "test-bucket-rahul-delete" }
Nyní vytvořte soubor „terraform.tfvars“, který bude obsahovat přihlašovací údaje uživatele AWS. Následující klíče je třeba změnit pomocí klíčů vašeho uživatele IAM. Před zadáním těchto klíčů je musíte vytvořit z konzoly AWS a s nikým tyto klíče nesdílet.
vim teraform.tfvars
region = "eu-west-3" access_key = "AKIAQ6GAIA5XX54GLLNG" secret_key = "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"
Vytvořte kbelík S3 pomocí modulu Terraform
Před spuštěním následujících příkazů se ujistěte, že jste nakonfigurovali platný access_key a secret_key.
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
Když provedete výše uvedený příkaz, po úspěšném dokončení uvidíte, že 1 nový zdroj byl přidán a 0 byl zničen.
Můžete přejít do konzole AWS S3 a ověřit, zda je segment S3 vytvořen či nikoli.
Smazat vytvořený S3 Bucket pomocí Terraform
Pokud již nepotřebujete zdroj, který jste vytvořili pomocí konfigurace uvedené v souboru main.tf, můžete pomocí příkazu "terraform zničit" všechny tyto zdroje smazat. Zde bude segment S3 odstraněn po provedení následujícího příkazu.
terraform zničit
Závěr
V tomto článku jsme viděli kroky k vytvoření vlastního modulu a vytvoření bloku S3 pomocí něj. Nyní lze stejný modul použít k vytvoření více segmentů S3, k tomu stačí změnit hodnoty proměnných a znovu použít stejný modul.