Pada artikel ini, kita akan melihat cara membuat modul yang dapat digunakan kembali di Terraform. Modul memungkinkan kita untuk menghindari duplikasi kode. Ini berarti kode yang sama dapat digunakan untuk membuat sumber daya dari jenis yang sama. Dengan menggunakan modul, Anda tidak perlu menyalin-menempelkan kode untuk membuat banyak sumber daya dengan jenis yang sama.
Misalnya, Anda dapat memasukkan kode ke dalam modul Terraform dan menggunakan kembali modul tersebut di lingkungan staging dan produksi, dengan cara ini kita akan dapat membuat kedua lingkungan menggunakan kembali secara sama kode dari modul yang sama alih-alih menulis kode beberapa kali.
Pada artikel ini, kita akan menulis modul untuk membuat Bucket S3 sebagai contoh.
Prasyarat
- Pemahaman dasar tentang Terraform.
- Terraform terpasang di sistem Anda.
- Akun AWS (Buat jika Anda belum memilikinya).
- 'access_key' &'secret_key' dari Pengguna AWS IAM. (Klik di sini untuk belajar membuat pengguna IAM dengan 'access_key' &'secret_key' di AWS, )
Apa yang akan kami lakukan
- Tulis modul kami sendiri
- Buat bucket S3 menggunakan Modul Terraform.
- Hapus resource yang dibuat menggunakan Modul Terraform.
Tulis modul Terraform kita sendiri
Buat direktori khusus tempat Anda dapat memiliki file dan modul terraform "main.tf".
Gunakan perintah berikut untuk membuat direktori
mkdir -p modules/aws-s3
Buat file main.tf di bawah modules/aws-s3 dan salin tempel blok kode berikut yang akan digunakan sebagai modul untuk membuat Bucket 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
}
Deklarasikan variabel yang diperlukan di "modules/aws-s3/variables.tf". Jika mau, Anda dapat menentukan nilai default ke variabel. Copy paste blok kode berikut untuk membuat file.
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 = {} }
Sekarang, buat file "main.tf" yang akan memanggil modul yang kita definisikan pada langkah di atas. Memanggil modul berarti menyertakan konten modul tersebut ke dalam konfigurasi dengan nilai tertentu untuk variabelnya. Modul dipanggil dari dalam modul lain menggunakan module
blok:
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" } }
Semua modul memerlukan argumen sumber. Nilainya adalah jalur ke direktori lokal file konfigurasi modul, atau sumber modul jarak jauh yang harus diunduh dan digunakan Terraform.
Alamat sumber yang sama dapat ditentukan dalam beberapa blok modul untuk membuat beberapa salinan sumber daya yang ditentukan di dalamnya, mungkin dengan nilai variabel yang berbeda.
Buat "variables.tf" yang akan berisi definisi variabel. Ini akan menyimpan nilai default yang perlu diteruskan ke modul bersama dengan "access_key" dan "secret_key" AWS.
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" }
Sekarang buat "terraform.tfvars" yang akan menyimpan Kredensial Pengguna AWS. Kunci berikut perlu diubah dengan kunci pengguna IAM Anda. Sebelum menentukan kunci ini, Anda harus membuatnya dari AWS Console dan tidak membagikan kunci ini kepada siapa pun.
vim terraform.tfvars
region = "eu-west-3" access_key = "AKIAQ6GAIA5XX54GLLNG" secret_key = "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"
Buat bucket S3 menggunakan Modul Terraform
Sebelum Anda menjalankan perintah berikut, pastikan Anda telah mengonfigurasi access_key dan secret_key yang valid.
Perintah pertama yang digunakan adalah 'terraform init'. Perintah ini mengunduh dan menginstal plugin untuk penyedia yang digunakan dalam konfigurasi. Dalam kasus kami ini adalah AWS.
terraform init
Perintah kedua yang digunakan adalah 'terraform plan'. Perintah ini digunakan untuk melihat perubahan yang akan terjadi pada infrastruktur.
rencana terraform
Perintah 'terraform apply' akan membuat sumber daya pada AWS yang disebutkan dalam file main.tf. Anda akan diminta untuk memberikan masukan untuk membuat sumber daya.
terraform berlaku
Saat Anda menjalankan perintah di atas, setelah berhasil diselesaikan, Anda dapat melihat bahwa 1 sumber daya baru telah ditambahkan dan 0 telah dihancurkan.
Anda dapat membuka konsol AWS S3 untuk memverifikasi apakah Bucket S3 dibuat atau tidak.
Hapus Bucket S3 yang dibuat menggunakan Terraform
Jika Anda tidak lagi memerlukan sumber daya yang Anda buat menggunakan konfigurasi yang disebutkan dalam file main.tf, Anda dapat menggunakan perintah "terraform destroy" untuk menghapus semua sumber daya tersebut. Di sini, ember S3 akan dihapus setelah menjalankan perintah berikut.
penghancuran terraform
Kesimpulan
Dalam artikel ini, kita melihat langkah-langkah untuk menulis modul kita sendiri dan membuat bucket S3 menggunakannya. Sekarang modul yang sama dapat digunakan untuk membuat beberapa Bucket S3, untuk melakukannya kita hanya perlu mengubah nilai variabel dan menggunakan kembali modul yang sama.