Terraform İle AWS Kullanımı ve EC2 Server Deploy

Terraform ile Amazon Web Services (AWS) bulut sağlayıcısı için kolaylıkla bir altyapı hazırlayabilirsiniz. Bu yazıda AWS üzerinde hizmetleri oluşturmak, yönetmek ve yok etmek için Terraform kullanacağınız. Ayrıca AWS, aşağıdaki sebeplerden dolayı Terraform öğrenmek için iyi bir seçimdir:

  • AWS, açık ara en popüler bulut altyapısı sağlayıcısıdır. Sonraki üç en büyük rakibin (Microsoft, Google ve IBM) toplamından daha fazla olan bulut altyapısı pazarında %32'lik bir paya sahiptir (Kaynak: Canalys, 2021).
  • AWS, çok çeşitli güvenilir ve ölçeklenebilir bulut barındırma hizmetleri sunar. Bunlardan başında; sanal sunucuları deploy etmek için kullanabileceğiniz Amazon Elastic Compute Cloud (Amazon EC2), Bir sanal sunucu kümesini yönetmeyi kolaylaştıran Otomatik Ölçeklendirme Grupları (ASG'ler) ve trafiği sanal sunucular kümesine dağıtmak için kullanabileceğiniz Elastic Load Balancer'lard (ELB'ler) gelir.
  • AWS, ilk yıl için, tüm bu örnekleri ücretsiz olarak veya çok düşük bir maliyetle çalıştırmanıza izin verecek cömert bir Ücretsiz Katman sunar. Ücretsiz kullanım kredilerinizi zaten kullandıysanız, bu yazıdaki örnekler yine de size daha birkaç TL den fazlasına mal olmaz.

Daha önce AWS veya Terraform kullanmadıysanız endişelenmeyin; Bu yazı, her iki teknolojiye de yeni başlayanlar için tasarlanmıştır. Aşağıdaki adımlarda size yol göstereceğim:

  • AWS hesabını ayarlamak
  • Terraform'u yüklemek
  • Bir sunucu deploy etmek
  • Sunucuları kaldırmak

1. AWS Hesabını Ayarlamak

Henüz bir AWS hesabınız yoksa https://aws.amazon.com adresine gidin ve kaydolun. AWS'ye ilk kaydolduğunuzda, başlangıçta root kullanıcı olarak oturum açarsınız. Bu kullanıcı hesabı, hesapta her şeyi yapmak için erişim izinlerine sahiptir, bu nedenle güvenlik açısından root kullanıcısını gündelik olarak kullanmak iyi bir fikir değildir. Aslında, root kullanıcıyı kullanmanız gereken tek şey, daha sınırlı izinlere sahip başka kullanıcı hesapları oluşturmak ve ardından hemen bu hesaplardan birine geçmektir.

Daha sınırlı bir kullanıcı hesabı oluşturmak için Identity and Access management (IAM) hizmetini kullanmanız gerekecektir. IAM, kullanıcı hesaplarının yanı sıra her kullanıcı için izinleri yönettiğiniz yerdir. Yeni bir IAM kullanıcısı oluşturmak için öncelikle IAM Konsolu'na gidiniz.

Şekil 1: AWS IAM yönetim sayfası

Kullanıcılar (Users) menüsünü ve ardından Kullanıcı Ekle (Add users) butonunu tıklayın.

Şekil 2: Kullanıcı eklemek için butonu kullanınız.

Kullanıcı için bir ad girin ve  "Erişim anahtarı - Programlı erişim (Access key - Programmatic access)"in seçili olduğundan emin olun. (Not, AWS'nin zaman zaman web konsolunda değişiklikler yaptığını, bu nedenle gördüklerinizin aşağıdaki ekran görüntülerinden biraz farklı görünebileceğini unutmayın).

Şekil 3: Kullanıcı adını ve erişim yöntemini seçiyoruz

İleri düğmesine tıklayın. AWS, sizden kullanıcıya izinler eklemenizi isteyecektir. Varsayılan olarak, yeni IAM kullanıcılarının hiçbir izni yoktur ve bir AWS hesabında hiçbir şey yapamazlar. IAM kullanıcınıza bir şey yapma yeteneği vermek için bir veya daha fazla IAM ilkesi o kullanıcının hesabıyla ilişkilendirmeniz gerekir. IAM İlkesi, bir kullanıcının ne yapmasına izin verilip verilmediğini tanımlayan bir JSON belgesidir. Kendi IAM ilkelerinizi oluşturabilir veya AWS hesabınızda yerleşik olarak bulunan ve Yönetilen İlkeler (Managed Policies) olarak bilinen önceden tanımlanmış IAM ilkelerinizden bazılarını kullanabilirsiniz.

Bu yazıdaki örnekleri çalıştırmak için en basit yöntem olarak Şekil 4'te gösterildiği gibi, IAM kullanıcınıza AdministratorAccess managed policy eklemektir.

Şekil 4: Kullanıcıma admin haklarını tanımlıyoruz.

Birkaç kez direkt İleri'yi ve ardından Kullanıcı oluştur (Create user) düğmesini tıklayın. AWS, Şekil 5'te gösterildiği gibi, o kullanıcının Access key ID ve Secret Access key güvenlik kimlik bilgilerini size gösterecektir. Bunları hemen kaydetmelisiniz çünkü bir daha asla gösterilmeyecekler ve ilerleyen bölümlerde bunlara ihtiyacınız olacak. Bu kimlik bilgilerinin AWS hesabınıza erişim sağladığını unutmayın, bu nedenle bunları güvenli bir yerde saklayın (ör. 1Password, LastPass veya macOS Anahtar Zinciri gibi bir parola yöneticisi) ve asla kimseyle paylaşmayın.

Şekil 5: AWS kimlik bilgilerinizi güvenli bir yerde saklayın. Bunları asla kimseyle paylaşmayın.

Kimlik bilgilerinizi kaydettikten sonra Kapat düğmesini tıklayın. Artık Terraform'u kullanmaya hazırsınız.

2. Terraform Kurulumu

AWS kullanıcımız ve erişim bilgileri hazır olduğuna göre artık Terraform'u kullanmaya geçebiliriz. Terraform'un kurulumu oldukça basittir ve bir önceki yazımızda sizler için detaylıca kurulum aşamalarını görsellerle anlattık. Yazıya aşağıdaki bağlantıdan ulaşabilir ve Terraform kurulumunu tamamladıktan sonra bir sonraki başlıkla devam edebilirsiniz.

Terraform Nedir? Nasıl Kurulur?
Terraform, basit ve declarative bir dil kullanarak altyapınızı kod olarak tanımlamanızı sağlayan açık kaynak kodlu bir araçtır.
Kurulum aşaması 3 nolu başlık altındadır.

3. Provider Kimlik Bilgilerini Ayarlamak

Terraform'un AWS hesabınızda değişiklik yapabilmesi için, daha önce oluşturduğunuz IAM kullanıcısı için AWS kimlik bilgilerini AWS_ACCESS_KEY_ID ve AWS_SECRET_ACCESS_KEY ortam değişkenleri olarak ayarlamanız gerekir. Örneğin, bir Unix/Linux/macOS terminalinde bunu şu komutlarla yapabilirsiniz:

export AWS_ACCESS_KEY_ID=AKIKERTERIZNN7BLOG
export AWS_SECRET_ACCESS_KEY=wJalrXKerTeriz/BLOG/bPxRfiCEXAMPLEKEY

Aynısını bir Windows komut terminalinde şu şekilde yapabilirsiniz:

set AWS_ACCESS_KEY_ID=AKIKERTERIZNN7BLOG
set AWS_SECRET_ACCESS_KEY=wJalrXKerTeriz/BLOG/bPxRfiCEXAMPLEKEY

Bu ortam değişkenlerinin yalnızca çalıştırıldığı shell için geçerli olduğunu unutmayın. Bu nedenle bilgisayarınızı yeniden başlatırsanız veya yeni bir terminal penceresi açarsanız, bu değişkenleri yeniden export etmeniz gerekir.

🚨 GÜVENLİK NOTLARI:

Ortam değişkenlerini yukarıda gösterildiği gibi ayarlamak, en azından Linux/Unix/Mac'te kimlik bilgilerinizi bash geçmişinizde saklayacaktır. Bu, kimlik bilgilerinizin düz metin olarak diskte saklanacağı anlamına gelir! Bunu önlemenin birkaç yolu var.

Birincisi, export komutlarından önce bir boşluk eklemektir:

 export AWS_ACCESS_KEY_ID=AKIKERTERIZNN7BLOG
 export AWS_SECRET_ACCESS_KEY=wJalrXKerTeriz/BLOG/bPxRfiCEXAMPLEKEY

Varsayılan olarak, başında boşluk bulunan komutlar bash geçmişinde saklanmaz (not: emin olmak için burada açıklandığı gibi HISTCONTROL ayarınızı değiştirmeniz gerekebilir).

İkinci ve daha güvenli seçenek, kimlik bilgilerinizi pass gibi CLI dostu parola deposunda saklamaktır. Örneğin, kimlik bilgilerini aşağıdaki gibi saklayabilirsiniz:

pass insert aws-access-key-id
Enter aws-access-key-id: AKIKERTERIZNN7BLOG

pass insert aws-secret-access-key
Enter aws-secret-access-key: wJalrXKerTeriz/BLOG/bPxRfiCEXAMPLEKEY

Yukarıdaki komutları çalıştırdığınızda, pass, kimlik bilgilerini aws-access-key-id ve aws-secret-access-key adlı iki dosyaya kaydederek her dosyayı gpg ile şifreler. Artık, bash geçmişinde herhangi bir secret saklama riski olmadan ortam değişkenlerinizi aşağıdaki  komutta olduğu gibi ayarlayabilirsiniz:

export AWS_ACCESS_KEY_ID=$(pass aws-access-key-id)
export AWS_SECRET_ACCESS_KEY=$(pass aws-secret-access-key)

Hatta yukarıdaki iki satırı alıp auth.sh adlı bir komut dosyasına yerleştirebilir ve tek bir komutla ortam değişkenlerinizi ayarlayabilirsiniz. Ardından yazının ilerleyen bölümlerde göreceğiniz gibi bir terraform komutu çalıştırmadan önce hızlıca kimlik bilgilerini ilgili terminale set edebilirsiniz.

. auth.sh
terraform apply

🚧 ASLA YAPMAYIN

Terraform ile providerlara erişebilmek için gerekli olan kimlik bilgileri veya token gibi hassas içerikleri asla ortalıkta bırakmayınız. Clear text olarak kodunuza da asla yerleştirmeyin. Terraform örneklerine bakarken birçok kodda bu kimlik bilgilerini yerleştirebilmeniz için hazır kod parçaları göreceksinizdir. Mesela şunun gibi:

provider "aws" {
  access_key = "KERTERIZXXXBLOG"
  secret_key = "OjSRn8Kerteriz/BlogwUIBXeKQXrAO"
  region = "us-east-2"
}

provider "digitalocean" {
    token = "085445801a4faKerteriz0b34ce8860Blog07550b3c97"
}

Terraform provider özelliği herhangi bir ortam değişkeni ayarlaması yapmanıza gerek kalmadan kimliklendirme aşamasında işinize yarayacaktır fakat gizli bilgileriniz bir o kadar da açıkta kalacaktır. Terraform öğrenme aşamasında kolaylık olması için bu yöntemi kullanabilirsiniz fakat production kodunuzda veya deployment sunucunuzda bu gizli bilgileri açıkça yayınlamayın. Bunun yerine biraz yukarıda bahsettiğimiz yöntemleri kullanabilir veya internette başka hangi güvenli yöntemler var araştırabilirsiniz.

4. EC2 Instance Deploy Etmek

Terraform kodu .tf uzantılı dosyalarda HashiCorp Configuration Language (HCL) ile yazılmıştır. Declarative bir dildir, yani amacınız sadece istediğiniz altyapıyı anlatmaktır ve Terraform bunun nasıl oluşturulacağını kendi çözecektir. Terraform, çok çeşitli platformlarda veya AWS, Azure, Google Cloud, DigitalOcean ve diğerleri dahil olmak üzere birçok sağlayıcıda (provider) altyapı (infrastructure) oluşturabilir.

Terraform kodunu hemen hemen her metin düzenleyicide yazabilirsiniz. Biraz arama yaparsanız, vim, emacs, Sublime Text, Atom, Visual Studio Code ve IntelliJ de dahil olmak üzere çoğu düzenleyici için Terraform syntax highlighting desteği bulabilirsiniz ("Terraform" yerine "HCL" kelimesini aramanız gerekebilir). Kendimin Visual Studio Code kullandığımı da belirtmek isterim.

Şekil 6: Visual Studio Code editöründeki Terraform eklentisi

Terraform'u kullanmanın ilk adımı, genellikle kullanmak istediğiniz sağlayıcıları yapılandırmaktır. Bu yapılandırma için boş bir klasör oluşturun ve içine aşağıdaki içerikleri içeren main.tf adlı bir dosyayı ekleyin:

provider "aws" {
  region = "us-east-2"
}

Bu kod parçası, Terraform'a sağlayıcınız olarak AWS'i kullanacağınızı ve altyapınızı us-east-2 bölgesine dağıtmak istediğinizi söyler. AWS, dünyanın her yerinde bölgelere göre gruplandırılmış veri merkezlerine sahiptir. AWS Region, us-east-2 (Ohio), eu-west-1 (İrlanda) ve ap-southeast-2 (Sidney) gibi ayrı bir coğrafi bölgedir. Her bölge içinde us-east-2a, us-east-2b vb. gibi Availability Zone (AZ'ler) olarak bilinen birden çok yalıtılmış veri merkezi vardır. Bu sağlayıcıda yapılandırabileceğiniz birçok başka ayar vardır, ancak şimdilik bunu basit tutalım. Çünkü ileride sağlayıcı yapılandırmasına daha derinlemesine bakacağız. Ayrıca tüm bölge ve AZ'lere şu adresten ulşabilirsiniz:

Regions and Zones - Amazon Elastic Compute Cloud
Describes the Regions, Availability Zones, Local Zones, Outposts, and Wavelength Zones world-wide where you can host your instances.

Her sağlayıcı türü için oluşturabileceğiniz sunucular, veritabanları ve yük dengeleyiciler gibi birçok farklı türde kaynak (resource) vardır. Terraform'da bir kaynak oluşturmak için genel syntax şöyledir:

resource "<PROVIDER>_<TYPE>" "<NAME>" {
  [CONFIG ...]
}
  • PROVIDER bir sağlayıcının adıdır (örneğin, AWS),
  • TYPE, o sağlayıcıda oluşturulacak kaynak türüdür (örneğin, instance),
  • NAME, bu kaynağa atıfta bulunmak için Terraform kodu boyunca kullanabileceğiniz bir değişkendir (örneğin, my_instance),
  • CONFIG, o kaynağa özgü bir veya daha fazla bağımsız değişkenden oluşur.

Örneğin, AWS'de EC2 Instance olarak bilinen tek bir (sanal) sunucu deploy etmek için main.tf'deki aws_instance kaynağını aşağıdaki gibi kullanabilirsiniz:

resource "aws_instance" "example" {
  ami           = "ami-0fb653ca2d3203ac1"
  instance_type = "t2.micro"
}

aws_instance resource birçok farklı argümanı destekler, ancak şimdilik sadece gerekli olan iki argümanı ayarlamanız yeterlidir:

  • ami: EC2 instance üzerinde çalışacak Amazon Machine Image (AMI) değişkenidir. AWS Marketplace'da ücretsiz ve ücretli AMI'ler bulabilir veya Packer gibi araçları kullanarak kendi AMI'lerinizi oluşturabilirsiniz. Önceki kod örneği, us-east-2'deki bir Ubuntu 20.04 AMI'nin kimliğidir. Bu AMI'nin kullanımı ücretsizdir. AMI kimliklerinin her AWS bölgesinde farklı olduğunu lütfen unutmayın, bu nedenle bölge parametresini us-east-2 dışında bir şeyle değiştirirseniz, o bölge için ilgili Ubuntu AMI Kimliğini manuel olarak aramanız gerekir ve bu değişkeni düzenlemeniz gerekir. İlerleyen yazılarımızda AMI Kimliğini tamamen otomatik olarak nasıl alacağınızı göreceksiniz. Fakat şimdilik istediğiniz farklı bir image için nasıl AMI ID alabileceğinizi öğrenmek için şu yazımıza hızlıca bakabilirsiniz:
AWS Marketplace AMI ID Nasıl Bulunur?
AWS Marketplace üzerinden kullanmak istediğiniz AMI için nasıl AMI ID bulabilirsiniz gösteriyoruz.
  • instance_type: Çalıştırılacak EC2 Instance tipidir. Her EC2 Instance tipi, farklı miktarda CPU, bellek, disk alanı ve ağ kapasitesi sağlar. EC2 Instance tipleri sayfası, mevcut tüm seçenekleri listeler. Yukarıdaki örnek, bir sanal CPU'ya, 1 GB belleğe sahip olan ve AWS Free Tier'ın bir parçası olan t2.micro'yu ayarlar.
💡
NOT: Terraform, her biri düzinelerce resource'ı destekleyen düzinelerce sağlayıcıyı destekler ve her resource için düzinelerce argüman vardır. Hepsini hatırlamanın bir yolu maalesef yok. Terraform kodu yazarken, hangi resource'ların mevcut olduğunu ve her birinin nasıl kullanılacağını araştırmak için düzenli olarak Terraform belgelerine başvurmalısınız. Örneğin, aws_instance kaynağına ilişkin belgeler buradadır

Bir terminalde, main.tf dosyasını oluşturduğunuz klasöre gidin ve terraform init komutunu çalıştırın (Öncesinde 3. başlıktaki ortam değişkenleri bu terminal için ayarlamayı unutmayın):

Şekil 7: Terrafom init komutu ile gerekli kütüphaneler indirilir ve kodunuz apply için hazır hale getirilir.

Terraform binary dosyası, Terraform için temel işlevleri içerir, ancak hiçbir provider'ın (örneğin, AWS, Azure, GCP vb.) koduyla birlikte gelmez. Bu nedenle Terraform'u ilk kullanmaya başladığınızda , Terraform'a kodu taramasını, hangi providerları kullandığınızı bulmasını ve onlar için kütüphanesini indirmesini söylemek için terraform init çalıştırmanız gerekir. Varsayılan olarak, provider kodu, Terraform'un çalışma dizinindeki .terraform klasörüne indirilecektir (bunu .gitignore'a eklemek isteyebilirsiniz). Terraform ayrıca indirdiği sağlayıcı koduyla ilgili bilgileri bir .terraform.lock.hcl dosyasına kaydeder (bu dosya hakkında daha fazla bilgiyi ilerleyen yazılarımızda öğreneceksiniz). Daha sonraki yazılarda init komutu ve .terraform klasörü için birkaç başka kullanım daha göreceksiniz. Şimdilik, yeni Terraform koduyla her başladığınızda init komutunu çalıştırmanız gerektiğini ve init'i birden çok kez çalıştırmanın tamamen güvenli olduğunu unutmayınız. (init komutu idempotent dir).

Provider kodunu indirdiğinize göre, terraform plan komutunu çalıştırabilirsiniz:

$ terraform plan

(...)

Terraform will perform the following actions:

  # aws_instance.example will be created
  + resource "aws_instance" "example" {
      + ami                          = "ami-0fb653ca2d3203ac1"
      + arn                          = (known after apply)
      + associate_public_ip_address  = (known after apply)
      + availability_zone            = (known after apply)
      + cpu_core_count               = (known after apply)
      + cpu_threads_per_core         = (known after apply)
      + get_password_data            = false
      + host_id                      = (known after apply)
      + id                           = (known after apply)
      + instance_state               = (known after apply)
      + instance_type                = "t2.micro"
      + ipv6_address_count           = (known after apply)
      + ipv6_addresses               = (known after apply)
      + key_name                     = (known after apply)
      (...)
  }

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

plan komutu, herhangi bir değişiklik yapmadan önce Terraform'un ne yapacağını görmenizi sağlar. Bu, kodunuzu ortama salmadan önce akıl sağlığınızı kontrol etmenin harika bir yoludur :) plan komutunun çıktısı, Unix, Linux ve git'in bir parçası olan diff komutunun çıktısına benzer: artı işaretli (+) her şey oluşturulur, eksi işaretli () her şey silinir, ve yaklaşık işareti (~) olan her şey düzenlenir. Önceki çıktıda, Terraform'un tek bir EC2 Bulut Sunucusu oluşturmayı planladığını ve tam olarak istediğiniz gibi başka bir şey olmadığını görebilirsiniz.

Instance'ı gerçekten oluşturmak için terraform apply komutunu çalıştırın ve yapılacak işlemleri teyit ettikten sonra yes yazarak işlemleri başlatın:

Şekil 8: Terraform apply komutu ile planlarımızı yürütürüz.

Tebrikler, Terraform kullanarak AWS hesabınıza bir EC2 Instance deploy ettiniz! Bunu doğrulamak için EC2 konsoluna gidin ve Şekil 9'a benzer bir şey gördüğünüzden emin olun. Ayrıca 1 numaralı işaretlediğim yerden us-east-2 seçili olmasına dikkat edin.

Şekil 9: Başarılı bir deploy sonrası EC' COnsole çıktımız

Birçok parametreyi manual düzenleyip bir instance luşturmaktansa birkaç satır kodla instance'ı ayağa kaldırmak kiç kuşkusuz muhteşem bir şey fakat bu en heyecan verici örneklere henüz gelmedik. İlerleyen yazılarımızda her bir heyecan verici örneği tek tek anlatacağız. Fakat şimdilik işi biraz daha ilginç hale getirelim. İlk olarak, EC2 Instance'ın bir adı olmadığına dikkat edin. Bir ad eklemek için aws_instance kaynağına tags ekleyebilirsiniz:

resource "aws_instance" "example" {
  ami           = "ami-0fb653ca2d3203ac1"
  instance_type = "t2.micro"

  tags = {
    Name = "terraform-example"
  }
}

Bunun ne yapacağını görmek için terraform apply komutunu tekrar çalıştırın:

$ terraform apply

aws_instance.example: Refreshing state...
(...)

Terraform will perform the following actions:

  # aws_instance.example will be updated in-place
  ~ resource "aws_instance" "example" {
        ami                          = "ami-0fb653ca2d3203ac1"
        availability_zone            = "us-east-2b"
        instance_state               = "running"
        (...)
      + tags                         = {
          + "Name" = "terraform-example"
        }
        (...)
    }

Plan: 0 to add, 1 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:

Terraform, bu yapılandırma dosyaları için önceden oluşturduğu tüm kaynakları takip eder, böylece EC2 Instance'ın zaten var olduğunu bilir (Uygula komutunu çalıştırdığınızda Terraform'un Refreshing state… dediğine dikkat edin) ve size zaten deploy edilmişler ile arasındaki farkı gösterebilir. Önceki fark, Terraform'un Name adında tek bir etiket oluşturmak istediğini gösterir. Bu nedenle evet yazın ve Enter'a basın.

EC2 konsolunuzu yenilediğinizde Şekil 10'a benzer bir şey görürsünüz.

Şekil 10: Yeni değiştirdiğimiz Name etiketine sahip instance

Artık çalışan bir Terraform kodunuz olduğuna göre, onu sürüm kontrolüyle saklamak isteyebilirsiniz. Bu, kodunuzu diğer ekip üyeleriyle paylaşmanıza, tüm altyapı değişikliklerinin geçmişini izlemenize ve debug için log günlüğünü kullanmanıza olanak tanır. Örneğin, yerel bir Git reposunu nasıl oluşturabileceğiniz ve Terraform yapılandırma dosyanız ile kilit dosyanızı saklamak için git'i nasıl kullanacağınızı aşağıda görebilirsiniz. (Kilit dosyası hakkında her şeyi ilerleyen yazılarda anlatacağız; şimdilik, bilmeniz gereken tek şey bu kodunuzla birlikte sürüm kontrolüne eklenmelidir):

git init
git add main.tf .terraform.lock.hcl
git commit -m "Initial commit"

Ayrıca aşağıdaki içeriğe sahip bir .gitignore dosyası oluşturmalısınız:

.terraform
*.tfstate
*.tfstate.backup

Önceki .gitignore dosyası Git'e, Terraform'un geçici bir çalışma dizini olarak kullandığı .terraform klasörünü ve ayrıca Terraform'un stateleri depolamak için kullandığı *.tfstate dosyalarını yok saymasını söyler. .gitignore dosyasını da commit etmelisiniz:

git add .gitignore
git commit -m "Add a .gitignore file"

Bu kodu ekip arkadaşlarınızla paylaşmak için herkesin erişebileceği paylaşılan bir Git reposu oluşturmak isteyeceksiniz. Bunu yapmanın bir yolu GitHub kullanmaktır. Github.com'a gidin, henüz bir hesabınız yoksa bir hesap oluşturun ve yeni bir repository yaratın. Yerel Git reponuzu, yeni GitHub reposu olarak kullanmak için aşağıdaki gibi git kodlarını çalıştırabilirsiniz:

git remote add origin git@github.com:<YOUR_USERNAME>/<YOUR_REPO_NAME>.git

Artık, commitlerinizi takım arkadaşlarınızla paylaşmak istediğinizde, onları origin'e push edebilirsiniz:

git push origin main

Ve ne zaman takım arkadaşlarınızın yaptığı değişiklikleri görmek isterseniz, onları origin'den pull edebilirsiniz:

git pull origin main

Bu Terraform yazı serimizin geri kalanını gözden geçirirken ve genel olarak Terraform'u kullanırken, düzenli olarak git commit ve git push değişikliklerinizi yaptığınızdan emin olun. Bu şekilde, yalnızca ekip üyeleriyle bu kod üzerinde işbirliği yapmakla kalmayacak, tüm altyapı değişiklikleriniz de hata ayıklama için çok kullanışlı olan log günlüğüne kaydedilecektir. İleride Terraform'u ekip olarak kullanma hakkında daha fazla bilgi vereceğiz.

5. EC2 Instance Destroy Etmek

Bu yazının veya gelecekteki yazıların sonunda Terraform ile denemelerinizi bitirdiğinizde, AWS'nin sizden bunlar için ücret talep etmemesi için oluşturduğunuz tüm kaynakları kaldırmak iyi bir fikirdir. Terraform, yarattığınız kaynakları takip ettiğinden, temizleme işlemi oldukça basittir. Tek yapmanız gereken destroy komutunu çalıştırmaktır:

$ terraform destroy

(...)

Terraform will perform the following actions:

  # aws_lb.example will be destroyed
  - resource "aws_lb" "example" {
      (...)
    }

  (...)

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

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value:

Bir production ortamında destroy komutunu nadiren çalıştırmanız gerektiğini söylemeye gerek yok! Destroy komutunu "geri alma" şansınız yoktur, bu nedenle Terraform size yaptığınız şeyi gözden geçirmeniz için son bir şans verir ve silmek üzere olduğunuz tüm kaynakların listesini size gösterip onaylamanızı ister. Her şey yolunda görünüyorsa, yes yazın ve Enter'a basın. Ardından Terraform, bağımlılık grafiğini oluşturacak ve mümkün olduğunca fazla paralellik kullanarak tüm kaynakları doğru sırada silecektir. Bir veya iki dakika içinde AWS hesabınız tekrar temiz olacaktır.

6. Özet

Bu yazıda Terraform kullanabilmek için AWS hesabınızı nasıl ayarlayacağınız, Terraform'u naıl kuracağınıza ve EC2 Instance yani sanal sunucuyu Terraform ile nasıl deploy edebileceğinize değindik. İlerleyen yazılarımızda daha fazla servis ve provider ile daha fazla örnek yapacağız. Bunun için Terraform kategorisini takipte kalabilirsiniz.