Terraform Modülü ve EC2 Instance Oluşturma

Zekiye AYDEMİR
3 min readAug 21, 2022

Linkedin profilimde paylaştığım bu yazımı burada da paylaşıyorum.

Terraform kurulumunu anlattığım yazıma linkten ulaşabilirsiniz.

Terraform modülleri, tekrarlanan kod parçalarını diğer Terraform projeleri ve konfigürasyonlarında yeniden kullanılabilir hale getirir. Terraform modülü, bir veya daha fazla .tf uzantılı dosya içeren bir Terraform konfigürasyonudur.

Bir modül oluşturma ve onu yerel olarak kullanma adımlarını içeren bir Terraform modülünün temellerine bakacağız.

VPC Modulü Oluşturma

Öncelikle, projemizin dizinlerini oluşturuyoruz:

mkdir -p terraform_project/modules/vpc

main.tf dosyasını aşağıdaki gibi oluşturup içeriği ekliyoruz:

vim main.tfprovider "aws" {
region = var.region
}
resource "aws_vpc" "this" {
cidr_block = "10.0.0.0/16"
}
resource "aws_subnet" "this" {
vpc_id = aws_vpc.this.id
cidr_block = "10.0.1.0/24"
}
data "aws_ssm_parameter" "this" {
name = "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2"
}

variables.tf dosyasını aşağıdaki gibi oluşturup içeriği ekliyoruz:

vim variables.tfvariable "region" {
type = string
default = "us-east-1"
}

subnet_id ve ami_id değerlerinin ana projeye aktarılabilmesi için aşağıdaki gibi outputs.tf doyasında tanımlıyoruz;

vim outputs.tf output "subnet_id" {
value = aws_subnet.this.id
}
output "ami_id" {
value = data.aws_ssm_parameter.this.value
}

main.tf: Bu dosya, modülün sağlayacağı(provider) kaynaklarının kodunu içerir.

variables.tf: Bu dosya, modülün ihtiyaç duyduğu input değişkenlerini içerir.

outputs.tf: Bu dosya, modül kod bloğunun ürettiği çıktıların ana projede kullanılabilmesi için referans verir.

Buraya kadar olan kısımda VPC modulü kodlarını yazdık. Şimdi Modulü kullanacağımız asıl projeye geçiyoruz;

Terraform ile EC2 Oluşturma

VPC modülünü kullanarak bu networkte EC2 instance oluşturacağız.

Öncelikle proje için yazının ilk başında oluşturduğumuz terraform_project dizinine gidiyoruz. Ardından EC2 instance’ı oluşturacağımız main.tf dosyasını aşağıdaki içerikle oluşturuyoruz:

cd ~/terraform_project
vim main.tf
variable "main_region" {
type = string
default = "us-east-1"
}
provider "aws" {
region = var.main_region
}
module "vpc" {
source = "./modules/vpc"
region = var.main_region
}
resource "aws_instance" "my-instance" {
ami = module.vpc.ami_id
subnet_id = module.vpc.subnet_id
instance_type = "t2.micro"
}

main.tf’deki kod, daha önce oluşturduğunuz VPC modülünü çağırır. Terraform’un modül kodunun nerede olduğunu bilmesini sağlamak için modül dizinini kaynak olarak giriyoruz.

EC2 instance’ı oluşturulduğunda private ip’sinin komut çıktısında ekrana yazılması için outputs.tf dosyasını aşağıdaki gibi oluşturuyoruz:

vim outputs.tfoutput "PrivateIP" {
description = "Private IP of EC2 instance"
value = aws_instance.my-instance.private_ip
}

Alt dizinlerdeki dosyalar da dahil olmak üzere tüm dosyalardaki kodları biçimlendirmek için terraform fmt -recursive komutunu çalıştırıyoruz.

Gerekli sağlayıcıları(provider) almak ve vpc modulündeki kodu almak için terraform init komutunu çalıştırıyoruz:

terraform fmt -recursive
terraform init

Terraform kodlarında herhangi bir hata var mı onu kontrol edebilmek için de terraform validate komutunu çalıştırıyoruz.

terraform plan ve sonrasında terraform apply — auto-approve komutunu çalıştırıyoruz:

terraform plan
terraform apply --auto-approve

Vpc modulünde tanımladığım vpc, subnet ve aynı network ağında EC2 instance’ı oluşturduk.

Tüm bu adımların sonunda aşağıdaki dizin yapısını elde ederiz:

Bu yazımda, bir Terraform modülünün oluşturulmasının temellerini ve yerel kullanımını gösterdim. Daha detaylı bilgi için Terrafom dökümantasyonuna bakabilirsiniz.

Kaynakça: A Cloud Guru

--

--

Zekiye AYDEMİR

PostgreSQL Certified DBA | MongoDB Certified DBA | AWS Certified Admin