Terraform'u DigitalOcean'da nasıl çalıştırabilirim?

0 Hisse senetleri
0
0
0
0

giriiş

Terraform, altyapıyı düzenli bir şekilde oluşturmak ve yönetmek için kullanılan bir araçtır. DigitalOcean Droplet'lerini, Yük Dengeleyicilerini ve hatta DNS kayıtlarını yönetmenin yanı sıra diğer sağlayıcılar tarafından sunulan çok çeşitli hizmetleri de yönetmek için kullanabilirsiniz. Terraform, komut satırı arayüzü kullanır ve masaüstünüzden veya uzak bir sunucudan çalıştırılabilir.

Terraform, uygulama ortamınızı veya veri merkezinizi oluşturan bileşenleri tanımlayan yapılandırma dosyalarını okuyarak çalışır. Yapılandırmaya bağlı olarak, istenen duruma ulaşmak için ne yapılması gerektiğini açıklayan yürütülebilir bir plan oluşturur. Daha sonra, altyapınızı oluşturmak için bu planı yürütmek üzere Terraform'u kullanırsınız. Yapılandırmada değişiklikler meydana geldiğinde, Terraform mevcut altyapıyı yeni tanımlanan duruma güncellemek için artımlı planlar oluşturabilir ve yürütebilir.

Bu eğitimde, Terraform'u kuracak ve DigitalOcean üzerinde, DigitalOcean Yük Dengeleyici tarafından yük dengelemesi yapılan iki Nginx sunucusundan oluşan bir altyapı oluşturmak için kullanacaksınız. Ardından, Terraform'u kullanarak DigitalOcean'da Yük Dengeleyiciye işaret eden bir DNS kaydı ekleyeceksiniz. Bu, Terraform'u kullanmaya başlamanıza ve ihtiyaçlarınızı karşılayan DigitalOcean tabanlı bir altyapıyı nasıl yönetip dağıtabileceğiniz konusunda size fikir verecektir.

Ön koşullar
  • Bir DigitalOcean hesabı
  • DigitalOcean kontrol panelinden oluşturabileceğiniz kişisel bir DigitalOcean erişim kodu.
  • DigitalOcean hesabınıza parola gerektirmeyen bir SSH anahtarı eklendi.
  • DigitalOcean adlı bir sunucuya yönlendirilmiş kişisel bir alan adı.

Adım 1 – Terraform Kurulumu

Terraform, uzak bir masaüstünde veya sunucuda çalıştırdığınız bir komut satırı aracıdır. Kurulumu için indirip PATH'inize eklemeniz gerekir, böylece çalıştığınız herhangi bir dizinde çalıştırabilirsiniz.

Öncelikle, işletim sisteminize ve mimarinize uygun paketi resmi indirme sayfasından indirin. macOS veya Linux kullanıyorsanız, Terraform'u curl ile indirebilirsiniz.

macOS'ta Terraform'u indirmek ve ana dizininize yerleştirmek için şu komutu kullanın:

curl -o ~/terraform.zip https://releases.hashicorp.com/terraform/1.7.2/terraform_1.7.2_darwin_amd64.zip

Linux'ta şu komutu kullanın:

curl -o ~/terraform.zip https://releases.hashicorp.com/terraform/1.7.2/terraform_1.7.2_linux_amd64.zip

~/opt/terraform klasörünü oluşturun:

mkdir -p ~/opt/terraform

Ardından, unzip komutunu kullanarak Terraform'u ~/opt/terraform klasörüne açın. Ubuntu'da, apt kullanarak unzip'i kurabilirsiniz:

sudo apt install unzip

İndirilen arşivi ~/opt/terraform klasörüne çıkarmak için aşağıdaki komutu çalıştırın:

unzip ~/terraform.zip -d ~/opt/terraform

Son olarak, terraform komutunu çalıştırılabilir dosyanın tam yolunu belirtmeden çalıştırabilmek için ~/opt/terraform yolunu PATH ortam değişkeninize ekleyin.

Linux'ta PATH'i bashrc dosyasında tanımlamanız gerekir. Bu dosya yeni bir kabuk açıldığında çalıştırılır. Düzenlemek için aşağıdaki komutu çalıştırın:

nano ~/.bashrc

Terraform yolunu PATH'e eklemek için, dosyanın sonuna aşağıdaki satırı ekleyin:

export PATH=$PATH:~/opt/terraform

İşiniz bittiğinde dosyayı kaydedip kapatın.

Artık tüm yeni shell oturumlarınız terraform komutunu bulabilir. Yeni PATH'i mevcut oturumunuza yüklemek için, Linux sisteminde Bash kullanıyorsanız aşağıdaki komutu çalıştırın:

. ~/.bashrc

Eğer macOS'ta Bash kullanıyorsanız, bunun yerine şu komutu çalıştırın:

. .bash_profile

ZSH kullanıyorsanız, şu komutu çalıştırın:

. .zshrc

Terraform'u doğru şekilde kurduğunuzu doğrulamak için, `terraform` komutunu argüman olmadan çalıştırın:

terraform

Aşağıdakine benzer bir çıktı göreceksiniz:

OutputUsage: terraform [global options] <subcommand> [args]
The available commands for execution are listed below.
The primary workflow commands are given first, followed by
less common or more advanced commands.
Main commands:
init Prepare your working directory for other commands
validate Check whether the configuration is valid
plan Show changes required by the current configuration
apply Create or update infrastructure
destroy Destroy previously-created infrastructure
All other commands:
console Try Terraform expressions at an interactive command prompt
fmt Reformat your configuration in the standard style
force-unlock Release a stuck lock on the current workspace
get Install or upgrade remote Terraform modules
graph Generate a Graphviz graph of the steps in an operation
import Associate existing infrastructure with a Terraform resource
login Obtain and save credentials for a remote host
logout Remove locally-stored credentials for a remote host
output Show output values from your root module
providers Show the providers required for this configuration
refresh Update the state to match remote systems
show Show the current state or a saved plan
state Advanced state management
taint Mark a resource instance as not fully functional
test Experimental support for module integration testing
untaint Remove the 'tainted' state from a resource instance
version Show the current Terraform version
workspace Workspace management
Global options (use these before the subcommand, if any):
-chdir=DIR Switch to a different working directory before executing the
given subcommand.
-help Show this help output, or the help for a specified subcommand.
-version An alias for the "version" subcommand.

Bunlar Terraform'un kabul ettiği komutlardır. Çıktı size kısa bir açıklama verecektir ve bu eğitim boyunca bunlar hakkında daha fazla bilgi edineceksiniz.

Terraform'u kurduğumuza göre, şimdi onu DigitalOcean kaynaklarıyla çalışacak şekilde yapılandıralım.

Adım 2 – Terraform'u DigitalOcean için Yapılandırın

Terraform, kurabileceğiniz çeşitli hizmet sağlayıcılarını destekler. Her sağlayıcının, genellikle ilgili hizmet sağlayıcı API'sini ortaya koyan kendi özellikleri vardır.

DigitalOcean sağlayıcısı, Terraform'un altyapı oluşturmak için DigitalOcean API'si ile etkileşim kurmasına olanak tanır. Bu sağlayıcı, aşağıdakiler dahil olmak üzere çeşitli DigitalOcean kaynaklarının oluşturulmasını destekler:

  • digitalocean_droplet: Damlacıklar (sunucular)
  • digitalocean_loadbalancer: Yük Dengeleyici
  • digitalocean_domain: DNS alan adı kayıtları
  • digitalocean_record: DNS kayıtları

Terraform, DigitalOcean API'siyle iletişim kurmak ve hesabınızdaki kaynakları yönetmek için DigitalOcean kişisel erişim anahtarınızı kullanır. Bu anahtarı başkalarıyla paylaşmayın ve komut dosyası ve sürüm kontrolünden uzak tutun. Aşağıdaki komutu çalıştırarak DigitalOcean kişisel erişim anahtarınızı DO_PAT adlı bir ortam değişkenine aktarın:

export DO_PAT="your_personal_access_token"

Aşağıdaki komutu çalıştırarak altyapı yapılandırmanızı saklayacak bir dizin oluşturun:

mkdir ~/loadbalance

Yeni oluşturulan dizine gidin:

cd ~/loadbalance

Terraform yapılandırma dosyaları, .tf dosya uzantısıyla biten metin dosyalarıdır. İnsan tarafından okunabilir ve yorumları desteklerler. (Terraform ayrıca JSON formatlı yapılandırma dosyalarını da destekler, ancak bunlar burada ele alınmamıştır.) Terraform, çalışma dizininizdeki tüm yapılandırma dosyalarını bildirimsel olarak okur, bu nedenle kaynak ve değişken tanımlarının sırası önemli değildir. Tüm altyapınız tek bir yapılandırma dosyasında bulunabilir, ancak açıklık sağlamak için yapılandırma dosyalarını kaynak türüne göre ayırmanız önerilir.

Terraform ile altyapı oluşturmanın ilk adımı, kullanacağınız sağlayıcıyı tanımlamaktır.

Terraform ile DigitalOcean sağlayıcısını kullanmak için, Terraform'a bunu bildirmeniz ve eklentiyi uygun kimlik bilgileri değişkenleriyle yapılandırmanız gerekir. Sağlayıcı için yapılandırmayı saklayan provider.tf adlı bir dosya oluşturun:

nano provider.tf

Terraform'a DigitalOcean sağlayıcısını kullanmak istediğinizi ve onu nerede bulacağını bildirmek için dosyaya aşağıdaki satırları ekleyin:

terraform {
required_providers {
digitalocean = {
source = "digitalocean/digitalocean"
version = "~> 2.0"
}
}
}

Ardından, yapılandırma dosyalarınızın geri kalanında bunlara referans verebilmeniz için aşağıdaki değişkenleri dosyada tanımlayın:

  • do_tokenDigitalOcean'a kişisel erişim şifreniz.
  • özel anahtar: Terraform'un yeni Droplet'lere giriş yapabilmesi ve Nginx'i kurabilmesi için özel anahtarın konumu.

Bu değişkenlerin değerlerini burada sabit kodlamak yerine, çalıştırıldığında Terraform'a iletiyorsunuz. Bu da yapılandırmayı daha taşınabilir hale getiriyor.

Bu değişkenleri tanımlamak için dosyaya şu satırları ekleyin:

...
variable "do_token" {}
variable "pvt_key" {}

Ardından, DigitalOcean sağlayıcısını yapılandırmak ve DigitalOcean hesap kimlik bilgilerinizi atamak için bu satırları ekleyin. do_token Tartışmaya gelince... Token Sağlayıcıyı belirtin:

...
provider "digitalocean" {
token = var.do_token
}

Son olarak, Terraform'un oluşturduğunuz her yeni droplet'e SSH anahtarınızı otomatik olarak eklemesini istiyorsunuz. SSH anahtarınızı DigitalOcean'a eklerken ona bir ad verdiniz. Terraform bu adı kullanarak genel anahtarı alabilir. DigitalOcean hesabınızda verdiğiniz anahtar adını değiştirerek şu satırları ekleyin. terraform Yapmak:

...
data "digitalocean_ssh_key" "terraform" {
name = "terraform"
}

Dosya sağlayıcı.tf Doldurduğunuz form şu şekilde görünecektir:

terraform {
required_providers {
digitalocean = {
source = "digitalocean/digitalocean"
version = "~> 2.0"
}
}
}
variable "do_token" {}
variable "pvt_key" {}
provider "digitalocean" {
token = var.do_token
}
data "digitalocean_ssh_key" "terraform" {
name = "terraform"
}

Projeniz için Terraform'u başlatmak için şu komutu çalıştırın:

terraform init

Bu işlem, yapılandırmanızı okuyacak ve sağlayıcınız için eklentileri yükleyecektir. Bunu çıktıda göreceksiniz:

OutputInitializing the backend...
Initializing provider plugins...
- Finding digitalocean/digitalocean versions matching "~> 2.0"...
- Installing digitalocean/digitalocean v2.34.1...
- Installed digitalocean/digitalocean v2.34.1 (signed by a HashiCorp partner, key ID F82037E524B9C0E8)
Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here:
https://www.terraform.io/docs/cli/plugins/signing.html
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.

Eğer takılıp kalırsanız ve Terraform beklediğiniz gibi çalışmıyorsa, dosyayı silerek sorunu çözebilirsiniz. terraform.tfstate Oluşturulan kaynakları manuel olarak kaldırın (örneğin Denetim Masası aracılığıyla) ve yeniden başlayın.

Terraform artık yapılandırıldı ve DigitalOcean hesabınıza bağlanabilir. Sonraki adımda, Nginx sunucusunu çalıştıracak bir droplet tanımlamak için Terraform'u kullanacaksınız.

3. Adım – İlk Nginx sunucusunu tanımlayın

Terraform kullanarak bir DigitalOcean Droplet oluşturabilir, ardından onu çalıştırabilir ve üzerine yazılım yükleyebilirsiniz. Bu adımda, Terraform kullanarak bir Ubuntu 20.04 ortamı oluşturacak ve Nginx web sunucusunu kuracaksınız.

Yeni bir Terraform yapılandırma dosyası oluşturuldu. www-1.tf Droplet yapılandırmasını içeren bir dosya oluşturun:

nano www-1.tf

Droplet kaynağını tanımlamak için aşağıdaki satırları girin:

resource "digitalocean_droplet" "www-1" {
image = "ubuntu-20-04-x64"
name = "www-1"
region = "nyc3"
size = "s-1vcpu-1gb"
ssh_keys = [
data.digitalocean_ssh_key.terraform.id
]

Önceki yapılandırmada, ilk satır www-1 adlı bir digitalocean_droplet kaynağı tanımlar. Kalan satırlar, Droplet'in bulunduğu veri merkezi ve yapılandırmak istediğiniz Droplet'in boyutunu belirten Slug dahil olmak üzere Droplet'in özelliklerini belirtir. Bu durumda, bir CPU ve 1 GB RAM'e sahip bir Droplet oluşturan s-1vcpu-1gb kullanıyorsunuz. (Kullanabileceğiniz mevcut Slug'ları görmek için bu Slug boyutu tablosuna bakın.)

Bölüm ssh_anahtarları Droplet'e eklemek istediğiniz genel anahtarların listesini belirtir. Bu örnekte, listede bulunan anahtarı belirtirsiniz. sağlayıcı.tf Buradaki adın, daha önce tanımladığınız adla aynı olduğundan emin olun. sağlayıcı.tf Eşleşmesi gerektiğini belirttiniz.

Terraform'u DigitalOcean API'sine karşı çalıştırdığınızda, Droplet hakkında genel ve özel IP adresleri gibi çeşitli bilgiler toplar. Bu bilgiler, yapılandırmanızdaki diğer kaynaklar tarafından kullanılabilir.

Bir Droplet kaynağı için hangi argümanların gerekli veya isteğe bağlı olduğunu bilmiyorsanız, lütfen resmi Terraform belgelerine bakın: DigitalOcean Damlacık Spesifikasyonu

Terraform'un SSH üzerinden sunucuya bağlanabilmesi için bir bağlantı kurmak üzere, dosyanın sonuna aşağıdaki satırları ekleyin:

...
connection {
host = self.ipv4_address
user = "root"
type = "ssh"
private_key = file(var.pvt_key)
timeout = "2m"
}

Bu satırlar, Terraform'un sunucuya nasıl bağlanması gerektiğini açıklıyor; böylece Terraform, Nginx'i kurmak için SSH üzerinden bağlantı kurabilir. Özel anahtar değişkeni kullanılarak var.pvt_key Dikkat edin—Terraform'u çalıştırdığınızda değeri ona iletiyorsunuz.

Bağlantıyı kurduğunuza göre, Nginx'i yüklemek için kullanacağınız Remote-exec sağlayıcısını yapılandırın. Bunu yapmak için, yapılandırmaya aşağıdaki satırları ekleyin:

...
provisioner "remote-exec" {
inline = [
"export PATH=$PATH:/usr/bin",
# install nginx
"sudo apt update",
"sudo apt install -y nginx"
]
}
}

Şunu unutmayın ki, satır içi dizideki dizeler, root kullanıcısının Nginx'i yüklemek için çalıştırdığı komutlardır.

Tamamlanmış dosya şu şekilde görünüyor:

resource "digitalocean_droplet" "www-1" {
image = "ubuntu-20-04-x64"
name = "www-1"
region = "nyc3"
size = "s-1vcpu-1gb"
ssh_keys = [
data.digitalocean_ssh_key.terraform.id
]
connection {
host = self.ipv4_address
user = "root"
type = "ssh"
private_key = file(var.pvt_key)
timeout = "2m"
}
provisioner "remote-exec" {
inline = [
"export PATH=$PATH:/usr/bin",
# install nginx
"sudo apt update",
"sudo apt install -y nginx"
]
}
}

Dosyayı kaydedin ve düzenleyiciden çıkın. Sunucuyu tanımladınız ve artık dağıtmaya hazırsınız, bunu şimdi yapacaksınız.

4. Adım – Terraform Kullanarak Bir Nginx Sunucusu Oluşturma

Mevcut Terraform yapılandırmanız bir Nginx sunucusunu tanımlıyor. Şimdi Droplet'i tam olarak tanımlandığı gibi dağıtacaksınız.

Emir arazi düzenleme planı Çalıştırma planını veya Terraform'un tanımladığınız altyapıyı oluşturmak için neler yapacağını görmek için aşağıdaki komutu çalıştırın. DigitalOcean Erişim Belirteci ve özel anahtarınızın yolunu belirtmeniz gerekir, çünkü yapılandırmanız Nginx kurulumu için Droplet'e erişmek üzere bu bilgileri kullanacaktır. Bir plan oluşturmak için aşağıdaki komutu çalıştırın:

terraform plan \
-var "do_token=${DO_PAT}" \
-var "pvt_key=$HOME/.ssh/id_rsa"

Şuna benzer bir çıktı göreceksiniz:

OutputTerraform 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:
# digitalocean_droplet.www-1 will be created
+ resource "digitalocean_droplet" "www-1" {
+ backups = false
+ created_at = (known after apply)
+ disk = (known after apply)
+ graceful_shutdown = false
+ id = (known after apply)
+ image = "ubuntu-20-04-x64"
+ ipv4_address = (known after apply)
+ ipv4_address_private = (known after apply)
+ ipv6 = false
+ ipv6_address = (known after apply)
+ locked = (known after apply)
+ memory = (known after apply)
+ monitoring = false
+ name = "www-1"
+ price_hourly = (known after apply)
+ price_monthly = (known after apply)
+ private_networking = (known after apply)
+ region = "nyc3"
+ resize_disk = true
+ size = "s-1vcpu-1gb"
+ ssh_keys = [
+ "...",
]
+ status = (known after apply)
+ urn = (known after apply)
+ vcpus = (known after apply)
+ volume_ids = (known after apply)
+ vpc_uuid = (known after apply)
}
Plan: 1 to add, 0 to change, 0 to destroy.
───────────────────────────────────────────────────────────────
Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now.

"+ resource “digitalocean_droplet” “www-1” satırı, Terraform'un aşağıdaki ayrıntılarla www-1 adında yeni bir Droplet kaynağı oluşturacağı anlamına gelir. Tam olarak olması gereken de budur, bu nedenle mevcut uygulamayı çalıştırmak için terraform application komutunu çalıştırın:

terraform apply \
-var "do_token=${DO_PAT}" \
-var "pvt_key=$HOME/.ssh/id_rsa"

Öncekiyle aynı çıktıyı alacaksınız, ancak bu sefer Terraform size devam etmek isteyip istemediğinizi soracak:

Output...
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

"Evet" yazın ve ENTER tuşuna basın. Terraform Droplet size şunları sağlar:

Outputdigitalocean_droplet.www-1: Creating...

Bir süre sonra, Terraform'un remote-exec sağlayıcısı ile Nginx'i kurduğunu göreceksiniz ve ardından işlem tamamlanacaktır:

Output
digitalocean_droplet.www-1: Provisioning with 'remote-exec'...
....
digitalocean_droplet.www-1: Creation complete after 1m54s [id=your_www-1_droplet_id]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
...

Terraform, www-1 adında yeni bir Droplet oluşturdu ve üzerine Nginx'i kurdu. Yeni Droplet'inizin genel IP adresini ziyaret ederseniz, Nginx karşılama sayfasını göreceksiniz. Genel IP adresi Droplet oluşturulduğunda görüntülenir, ancak mevcut Terraform durumunu görüntüleyerek her zaman görebilirsiniz. Terraform, her plan çalıştırdığında veya durumunu güncellediğinde terraform.tfstate durum dosyasını günceller.

Ortamınızın mevcut durumunu görüntülemek için aşağıdaki komutu kullanın:

terraform show terraform.tfstate

Bu, Droplet'inizin genel IP adresini gösterir.

Outputresource "digitalocean_droplet" "www-1" {
backups = false
created_at = "..."
disk = 25
id = "your_www-1_droplet_id"
image = "ubuntu-20-04-x64"
ipv4_address = "your_www-1_server_ip"
ipv4_address_private = "10.128.0.2"
...

Nginx sunucunuzun çalıştığını doğrulamak için tarayıcınızda http://your_www-1_server_ip adresine gidin.

Bu aşamada, Terraform'da tanımladığınız Droplet'i dağıtmış oldunuz. Şimdi ikinci bir Droplet oluşturacaksınız.

Adım 5 – İkinci Bir Nginx Sunucusu Oluşturma

Artık bir Nginx sunucusu yapılandırdığınıza göre, mevcut sunucu yapılandırma dosyasını kopyalayıp Droplet kaynak adını ve ana bilgisayar adını değiştirerek hızlıca ikinci bir sunucu ekleyebilirsiniz.

Bunu manuel olarak yapabilirsiniz, ancak komutu kullanarak da yapabilirsiniz. sed Dosyayı okumak için www-1.tftüm örnekleri değiştirerek www-1 İle www-2 ve adlı yeni bir dosya oluşturun www-2.tf Daha hızlı. İşte komut: sed Bunu yapmak için şunlar gereklidir:

sed 's/www-1/www-2/g' www-1.tf > www-2.tf

Sed kullanımına dair daha fazla bilgi edinmek için Sed Kullanımı sayfasını ziyaret edebilirsiniz. sed Daha fazla bilgi edin.

Terraform'un yapacağı değişiklikleri önizlemek için, terraform programını tekrar çalıştırın:

terraform plan \
-var "do_token=${DO_PAT}" \
-var "pvt_key=$HOME/.ssh/id_rsa"

Çıktı, Terraform'un www-2 adlı ikinci bir sunucu oluşturacağını gösteriyor:

OutputTerraform 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:
# digitalocean_droplet.www-2 will be created
+ resource "digitalocean_droplet" "www-2" {
+ backups = false
+ created_at = (known after apply)
+ disk = (known after apply)
+ id = (known after apply)
+ image = "ubuntu-20-04-x64"
+ ipv4_address = (known after apply)
+ ipv4_address_private = (known after apply)
+ ipv6 = false
+ ipv6_address = (known after apply)
+ locked = (known after apply)
+ memory = (known after apply)
+ monitoring = false
+ name = "www-2"
+ price_hourly = (known after apply)
+ price_monthly = (known after apply)
+ private_networking = true
+ region = "nyc3"
+ resize_disk = true
+ size = "s-1vcpu-1gb"
+ ssh_keys = [
+ "...",
]
+ status = (known after apply)
+ urn = (known after apply)
+ vcpus = (known after apply)
+ volume_ids = (known after apply)
+ vpc_uuid = (known after apply)
}
Plan: 1 to add, 0 to change, 0 to destroy.
...

İkinci droplet'i oluşturmak için Terraform uygulamasını tekrar çalıştırın:

terraform apply \
-var "do_token=${DO_PAT}" \
-var "pvt_key=$HOME/.ssh/id_rsa"

Daha önce olduğu gibi, Terraform sizden devam etmek isteyip istemediğinizi onaylamanızı isteyecektir. Planı tekrar gözden geçirin ve devam etmek için Evet yazın.

Bir süre sonra Terraform yeni sunucuyu oluşturur ve sonuçları görüntüler:

Outputdigitalocean_droplet.www-2: Creation complete after 1m47s [id=your_www-2_droplet_id]
...
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Terraform, mevcut sunucuyu değiştirmeden yeni bir sunucu oluşturdu. Ek Nginx sunucuları eklemek için bu adımı tekrarlayabilirsiniz.

Artık Nginx çalıştıran iki Droplet'iniz olduğuna göre, aralarında trafiği bölmek için bir yük dengeleyici tanımlayıp dağıtacaksınız.

Adım 6 – Yük Dengeleme

İki web sunucusu arasında trafiği yönlendirmek için, resmi Terraform sağlayıcısı tarafından desteklenen DigitalOcean Yük Dengeleyici'yi kullanacaksınız.

Yeni bir Terraform yapılandırma dosyası oluşturuldu. yük dengeleyici.tf Yaratmak:

nano loadbalancer.tf

Yük dengeleyiciyi tanımlamak için aşağıdaki satırları ekleyin:

resource "digitalocean_loadbalancer" "www-lb" {
name = "www-lb"
region = "nyc3"
forwarding_rule {
entry_port = 80
entry_protocol = "http"
target_port = 80
target_protocol = "http"
}
healthcheck {
port = 22
protocol = "tcp"
}
droplet_ids = [digitalocean_droplet.www-1.id, digitalocean_droplet.www-2.id ]
}

Yük dengeleyici tanımı, adını, bulunacağı veri merkezini, trafiği dengelemek için dinlemesi gereken portları, sağlık kontrolleri için yapılandırmayı ve dengelemesi gereken paketlerin kimliklerini belirtir; bu kimlikleri Terraform değişkenleri kullanarak alırsınız.

Ardından, dağıtım sonrasında Yük Dengeleyicinin gerçekten kullanılabilir olduğundan emin olmak için bir durum kontrolü tanımlayın:

check "health_check" {
data "http" "lb_check" {
url = "http://${digitalocean_loadbalancer.www-lb.ip}"
}
assert {
condition = data.http.lb_check.status_code == 200
error_message = "${data.http.lb_check.url} returned an unhealthy status code"
}
}

Bu kontrol, HTTP üzerinden Yük Dengeleyici IP adresinin durumunu sorgular ve droplet'lerin sağlıklı ve kullanılabilir olduğunu gösteren 200 dönüş kodunun doğruluğunu kontrol eder. Herhangi bir hata veya farklı bir dönüş kodu varsa, dağıtım adımlarından sonra bir uyarı görüntülenecektir. İşlem tamamlandığında dosyayı kaydedip kapatın.

Tekrar sipariş verin arazi düzenleme planı Yeni çalıştırılabilir dosyayı incelemek için çalıştırın:

terraform plan \
-var "do_token=${DO_PAT}" \
-var "pvt_key=$HOME/.ssh/id_rsa"

Aşağıdakiler de dahil olmak üzere çeşitli çıktı satırları göreceksiniz:

Output...
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
<= read (data resources)
Terraform will perform the following actions:
# data.http.lb_check will be read during apply
# (config refers to values not yet known)
<= data "http" "lb_check" {
+ body = (known after apply)
+ id = (known after apply)
+ response_body = (known after apply)
+ response_body_base64 = (known after apply)
+ response_headers = (known after apply)
+ status_code = (known after apply)
+ url = (known after apply)
}
# digitalocean_loadbalancer.www-lb will be created
+ resource "digitalocean_loadbalancer" "www-lb" {
+ algorithm = "round_robin"
+ disable_lets_encrypt_dns_records = false
+ droplet_ids = [
+ ...,
+ ...,
]
+ enable_backend_keepalive = false
+ enable_proxy_protocol = false
+ http_idle_timeout_seconds = (known after apply)
+ id = (known after apply)
+ ip = (known after apply)
+ name = "www-lb"
+ project_id = (known after apply)
+ redirect_http_to_https = false
+ region = "nyc3"
+ size_unit = (known after apply)
+ status = (known after apply)
+ urn = (known after apply)
+ vpc_uuid = (known after apply)
+ forwarding_rule {
+ certificate_id = (known after apply)
+ certificate_name = (known after apply)
+ entry_port = 80
+ entry_protocol = "http"
+ target_port = 80
+ target_protocol = "http"
+ tls_passthrough = false
}
+ healthcheck {
+ check_interval_seconds = 10
+ healthy_threshold = 5
+ port = 22
+ protocol = "tcp"
+ response_timeout_seconds = 5
+ unhealthy_threshold = 3
}
}
Plan: 1 to add, 0 to change, 0 to destroy.
│ Warning: Check block assertion known after apply
│ on loadbalancer.tf line 27, in check "health_check":
│ 27: condition = data.http.lb_check.status_code == 200
│ ├────────────────
│ │ data.http.lb_check.status_code is a number
│
│ The condition could not be evaluated at this time, a result will be known when this plan is applied.
╵
...

Damlacıklar www-1 Ve www-2 Zaten mevcutlar, Terraform Yük Dengeleyici www-lb'yi oluşturuyor ve sağladıktan sonra kontrol ediyor.

Dağıtıma başlamadan önce, health_check'te kullanılan http bağımlılığını eklemek için projeyi yeniden başlatmanız gerekiyor:

terraform init -upgrade

Ardından, yük dengeleyiciyi oluşturmak için Terraform uygulamasını çalıştırın:

terraform apply \
-var "do_token=${DO_PAT}" \
-var "pvt_key=$HOME/.ssh/id_rsa"

Terraform sizden bir kez daha planı gözden geçirmenizi isteyecektir. Devam etmek için "Evet" yazarak planı onaylayın.

Bunu yaptıktan sonra, aşağıda kısaltılmış olarak verilen şu satırları içeren bir çıktı göreceksiniz:

Output...
digitalocean_loadbalancer.www-lb: Creating...
...
digitalocean_loadbalancer.www-lb: Creation complete after 1m18s [id=your_load_balancer_id]
data.http.lb_check: Reading...
data.http.lb_check: Read complete after 0s [id=http://lb-ip]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
...

lb_check işleminin başarıyla tamamlandığını lütfen unutmayın.

İtibaren terraform show terraform.tfstate Yük dengeleyicinizin IP adresini bulmak için şunu kullanın:

terraform show terraform.tfstate

IP adresini www-lb girdisi altında bulabilirsiniz:

Output...
# digitalocean_loadbalancer.www-lb:
resource "digitalocean_loadbalancer" "www-lb" {
algorithm = "round_robin"
disable_lets_encrypt_dns_records = false
droplet_ids = [
your_www-1_droplet_id,
your_www-2_droplet_id,
]
enable_backend_keepalive = false
enable_proxy_protocol = false
id = "your_load_balancer_id"
ip = "your_load_balancer_ip"
name = "www-lb"
...

Tarayıcınızda http://your_load_balancer_ip adresine gidin ve Yük Dengeleyici trafiği iki Nginx sunucusundan birine yönlendirdiği için Nginx karşılama sayfasını göreceksiniz.

Şimdi Terraform kullanarak DigitalOcean hesabınız için DNS'i nasıl yapılandıracağınızı öğreneceksiniz.

Adım 7 – Alan Adları ve DNS Kayıtları Oluşturma

Terraform, Droplet'ler ve Yük Dengeleyicilere ek olarak DNS alanları oluşturabilir ve alan adlarını kaydedebilir. Örneğin, alan adınızı Yük Dengeleyicinize yönlendirmek istiyorsanız, bu ilişkiyi açıklayan bir yapılandırma yazabilirsiniz.

DNS ayarlarınızı tanımlamak için yeni bir dosya oluşturun:

nano domain_root.tf

Aşağıdaki alan adı kaynağını ekleyin ve your_domain yerine kendi alan adınızı yazın:

resource "digitalocean_domain" "default" {
name = "your_domain"
ip_address = digitalocean_loadbalancer.www-lb.ip
}

İşiniz bittiğinde dosyayı kaydedip kapatın.

Ayrıca bir CNAME kaydı da ekleyebilirsiniz. www.alan_alanınız ile alan_adınız CNAME kaydı için yeni bir dosya oluşturun:

nano domain_cname.tf

Dosyaya şu satırları ekleyin:

resource "digitalocean_record" "CNAME-www" {
domain = digitalocean_domain.default.name
type = "CNAME"
name = "www"
value = "@"
}

İşiniz bittiğinde dosyayı kaydedip kapatın.

DNS kayıtları eklemek için uygulama terraform Ve daha sonra Terraform uygulaması Diğer kaynaklar gibi çalıştırın.

Alan adınıza gidin ve Nginx karşılama sayfasını göreceksiniz çünkü alan adı, trafiği iki Nginx sunucusundan birine yönlendiren Yük Dengeleyiciye işaret ediyor.

Adım 8 – Altyapınızı yok edin

Terraform genellikle üretim ortamlarında kullanılmasa da, mevcut altyapıyı da yok edebilir. Bu özellik, özellikle birden fazla kez dağıtılan ve yok edilen geliştirme ortamlarında faydalıdır.

İlk olarak, kullanarak terraform planı - yok et Altyapı yıkımı için bir uygulama planı oluşturun:

terraform plan -destroy -out=terraform.tfplan \
-var "do_token=${DO_PAT}" \
-var "pvt_key=$HOME/.ssh/id_rsa"

Terraform, altyapı kaynaklarınızı kaldıracağını belirten eksi işaretiyle birlikte kırmızı renkle vurgulanmış kaynaklar içeren bir plan çıktısı verir.

Sonra Terraform uygulaması Planı uygulamak için şunları kullanın:

terraform apply terraform.tfplan

Terraform, oluşturulan planda belirtildiği gibi kaynakları yok etmeye devam edecektir.

Sonuç

Bu eğitimde, DigitalOcean üzerinde yük dengelemeli bir web altyapısı oluşturmak için Terraform kullandınız; bu altyapıda DigitalOcean Yük Dengeleyicisinin arkasında çalışan iki Nginx web sunucusu bulunmaktadır. Kaynakları nasıl oluşturacağınızı ve yok edeceğinizi, mevcut durumu nasıl görüntüleyeceğinizi ve DNS girişlerini yapılandırmak için Terraform'u nasıl kullanacağınızı öğrendiniz.

Terraform'un nasıl çalıştığını anladığınıza göre, projeleriniz için sunucu altyapısını tanımlayan yapılandırma dosyaları oluşturabilirsiniz. Bu eğitimdeki örnek, sunucuların dağıtımını nasıl otomatikleştirebileceğinizi göstermek için iyi bir başlangıç noktasıdır. Zaten tedarik araçları kullanıyorsanız, bu eğitimde kullanılan tedarik yöntemini kullanmak yerine, sunucuları oluşturma sürecinin bir parçası olarak yapılandırmak için bunları Terraform ile entegre edebilirsiniz.

Terraform'un çok daha fazla özelliği vardır ve diğer sağlayıcılarla da çalışabilir. Altyapınızı iyileştirmek için Terraform'u nasıl kullanacağınız hakkında daha fazla bilgi için resmi Terraform belgelerine göz atın. Bu eğitim, Terraform ile Altyapı Yönetimi serisinin bir parçasıdır. Bu seri, Terraform'u ilk kez kurmaktan karmaşık projeleri yönetmeye kadar birçok Terraform konusunu kapsamaktadır.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Ayrıca Şunları da Beğenebilirsiniz

CentOS 6/7'ye IBSng nasıl kurulur

CentOS 6/7'de IBSng Kurulum Eğitimi Bu makalede, centOS 6/7'de IBSng kurulum eğitimi size yardımcı olmak için sağlanmıştır…