terraform > local

İbrahim Yıldız
4 min readOct 24, 2024

Terraform Nedir ve Nasıl Kullanılır? (Local Ortamda Kullanım)

Terraform, altyapıyı yönetmek için kullanılan popüler bir “Infrastructure as Code” (IaC) aracıdır. Bulut sağlayıcıları (AWS, Azure, GCP) üzerinde yaygın olarak kullanılsa da, yerel (local) ortamlarda da altyapıyı tanımlamak ve yönetmek mümkündür. Bu yazıda, Terraform’un yerel ortamda nasıl kullanılabileceğine ve temel mimarisine kısaca değineceğiz.

Terraform’un Mimari Yapısı

Terraform’un çalışma yapısı declarative bir yaklaşıma dayanır. Yani, kullanıcının neyin yapılacağını belirttiği, ancak nasıl yapılacağının Terraform tarafından yönetildiği bir model kullanır. Ana bileşenleri şunlardır:

1. Providers: Farklı platformlara bağlanmayı sağlar. Yerel veya bulut sağlayıcılarıyla çalışmak için gereklidir. Örneğin, AWS, Azure gibi.

2. Resources: Oluşturmak veya yönetmek istediğiniz altyapı bileşenlerini ifade eder (örneğin, bir sanal makine, ağ yapılandırması).

3. Modules: Aynı kodu tekrar kullanmak istediğinizde modüller oluşturarak yönetimi kolaylaştırabilirsiniz.

4. State Files: Terraform’un altyapınızın mevcut durumunu takip ettiği dosyalardır. Bu dosyalar, daha sonraki değişikliklerin altyapıya nasıl uygulanacağını anlamak için önemlidir.


Terraform Komutları

• terraform init: Bu komut, gerekli provider’ları indirir ve projeyi başlatır.
• terraform plan: Altyapının nasıl oluşturulacağını gösteren bir plan oluşturur.
• terraform apply: Tanımladığınız altyapıyı hayata geçirir (Docker konteynerini çalıştırır).
• terraform fmt : Bu komut, Terraform dosyalarınızın formatını düzenler ve boşlukları doldurur.
• terraform validate : Bu komut, Terraform dosyalarını kontrol ederek yazım yanlışlıkları ve hataları denetler. Dosyaların geçerli olup olmadığını görmek için kullanılır.
• terraform destroy : Apply komutuyla oluşturduğunuz kaynakları silmek için kullanılır. Örneğin, dosyaları silmek istediğinizde bu komut devreye girer.

Terraform ile Yerel Dosya Oluşturma Örneği

Bu yazıda, Terraform kullanarak yerel ortamda bir dosya oluşturmayı ve içerik yazmayı öğreneceğiz. Terraform genellikle bulut altyapılarıyla birlikte kullanılsa da, yerel kaynakları da yönetme yeteneğine sahiptir. Aşağıdaki örnekte, bir dosya oluşturup içerisine yazı ekleyeceğiz.

Yerel Dosya Oluşturma Örneği

Öncelikle aşağıdaki Terraform konfigürasyonunu yazalım. Bu örnekte, masaüstünde bir deneme.txt dosyası oluşturup içine “testtt” metnini yazacağız.


resource "local_file" "ilkaynak" {
filename = "/Users/ibrahimyildiz/Desktop/terraform/deneme.txt"
content = "testtt"
file_permission = 0777
directory_permission = 0777
}




ibrahimyildiz@192 terraform % terraform init

Initializing the backend...

Initializing provider plugins...
- Finding latest version of hashicorp/local...
- Installing hashicorp/local v2.5.2...
- Installed hashicorp/local v2.5.2 (signed by HashiCorp)

Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
ibrahimyildiz@192 terraform % terraform plan

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create

Terraform will perform the following actions:

# local_file.ilkaynak will be created
+ resource "local_file" "ilkaynak" {
+ content = "testtt"
+ content_base64sha256 = (known after apply)
+ content_base64sha512 = (known after apply)
+ content_md5 = (known after apply)
+ content_sha1 = (known after apply)
+ content_sha256 = (known after apply)
+ content_sha512 = (known after apply)
+ directory_permission = "777"
+ file_permission = "777"
+ filename = "/Users/ibrahimyildiz/Desktop/terraform/deneme.txt"
+ id = (known after apply)
}

Plan: 1 to add, 0 to change, 0 to destroy.

─────────────────────────────────────────────


ibrahimyildiz@192 terraform % terraform apply

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create

Terraform will perform the following actions:

# local_file.ilkaynak will be created
+ resource "local_file" "ilkaynak" {
+ content = "testtt"
+ content_base64sha256 = (known after apply)
+ content_base64sha512 = (known after apply)
+ content_md5 = (known after apply)
+ content_sha1 = (known after apply)
+ content_sha256 = (known after apply)
+ content_sha512 = (known after apply)
+ directory_permission = "777"
+ file_permission = "777"
+ filename = "/Users/ibrahimyildiz/Desktop/terraform/deneme.txt"
+ id = (known after apply)
}

Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.

Enter a value: yes

local_file.ilkaynak: Creating...
local_file.ilkaynak: Creation complete after 0s [id=6c30886329e3e6961495d4dc6397c04c8b94f99a]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
ibrahimyildiz@192 terraform % cat deneme.txt
testtt%
ibrahimyildiz@192 terraform %

Değişken Tanımlama (test2.tf Dosyası)

Değişkenleri tanımlamak için variable bloğunu kullanırız. Aşağıdaki örnekte, bir firstVAR isimli string değişkeni tanımladık:

# test2.tf
variable "firstVAR" {
type = string
default = "fdgdfgfddgfdgf"
}


• type: Değişkenin veri tipini belirler. Bu örnekte string.
• default: Değişkenin varsayılan değerini belirler.

Adım 2: Değişkenin Kullanımı (test1.tf Dosyası)

Başka bir dosyada, bu değişkeni kullanarak bir kaynak oluşturabiliriz. Aşağıdaki test1.tf dosyasında, yerel bir dosya oluşturuyoruz ve dosyanın içeriğini firstVAR değişkeninden alıyoruz.

# test1.tf
resource "local_file" "ilkaynak" {
filename = "/Users/ibrahimyildiz/Desktop/terraform/deneme.txt"
content = var.firstVAR
file_permission = 0777
directory_permission = 0777
}

Burada, var.firstVAR değişkeni, test2.tf dosyasında tanımladığımız firstVAR değişkenine atıfta bulunur.

--

--

No responses yet