Ansible Dinamik Envanter: Bulut Sunucularını Otomatik Bulmak
Beceri rehberi

Ansible Dinamik Envanter: Bulut Sunucularını Otomatik Bulmak

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 5 dk okuma

Ansible dinamik envanter kurulumu: envanter eklentisi, aws_ec2 yapılandırma dosyası, filtreler, keyed_groups ve doğrulama komutlarıyla bulut sunucuları yönetin.

Statik envanter bulutta neden yetmez?

Bulutta sunucular sürekli açılır, kapanır ve IP adresleri değişir. Elle tutulan bir envanter dosyası ilk gün doğrudur, birkaç gün sonra eskir: kapanmış makineler listede kalır, yeni açılanlar listede yoktur. Dinamik envanter bu sorunu, makine listesini her çalıştırmada bulut sağlayıcısının kendisinden okuyarak çözer.

Ansible belgeleri, değişken sunucu kümeleri için bulut sağlayıcıları, LDAP, Cobbler ve CMDB gibi dış kaynakları örnek veriyor ve dinamik envanter için betik yerine envanter eklentilerini öneriyor. Betikler script eklentisi üzerinden hâlâ çalışır, ancak yeni kurulumlar için eklenti yolu tercih edilir. Eklentiler sağlayıcının etiketlerini, bölgesini ve örnek türünü otomatik olarak gruplara dönüştürebildiği için playbook'ları "sunucu listesi" yerine "rol etiketi" üzerinden yazmanıza imkân verir.

Örnek: Amazon EC2 için envanter dosyası

Eklenti tabanlı envanterde yapılandırma bir YAML dosyasıdır. Amazon EC2 eklentisinin dosya adı aws_ec2.yml ya da aws_ec2.yaml ile bitmelidir; örneğin uretim.aws_ec2.yml. İçerik şu biçimdedir:

plugin: amazon.aws.aws_ec2 regions: - <bölge adı> filters: tag:Ortam: - uretim instance-state-name: running hostnames: - tag:Name - dns-name keyed_groups: - prefix: rol key: tags.Rol compose: ansible_host: private_ip_address

Burada regions aranacak bölgeleri sınırlar; boş bırakılırsa tüm bölgeler taranır. filters EC2'nin describe-instances filtrelerini kullanır, burada etikete ve çalışır durumdaki örneklere göre daraltma yapılıyor. hostnames makine adının hangi alandan alınacağını öncelik sırasıyla belirler. keyed_groups bir değişkenin değerine göre otomatik grup üretir. compose ise değişken türetir; örnekte bağlantı adresi özel IP olarak ayarlanıyor.

Doğrulama: envanteri çalıştırmadan görmek

Dinamik envanteri playbook'a vermeden önce ne ürettiğine bakın:

ansible-inventory -i uretim.aws_ec2.yml --graph ansible-inventory -i uretim.aws_ec2.yml --list

--graph grup ağacını, --list ise her makinenin değişkenleriyle birlikte tam çıktısını verir. Beklediğiniz grupların oluştuğunu, filtrenin istemediğiniz makineleri dışarıda bıraktığını ve ansible_host değerinin doğru geldiğini bu aşamada görürsünüz. Ardından aynı dosyayı playbook'a verirsiniz:

ansible-playbook -i uretim.aws_ec2.yml bakim.yml --limit rol_web

Sağlayıcı kimlik bilgileri envanter dosyasına yazılmaz; ortam değişkeni, paylaşılan kimlik dosyası ya da sağlayıcının rol mekanizması kullanılır. Eklentinin çalışması için ilgili koleksiyonun ve bulut SDK bağımlılıklarının kurulu olduğunu da kontrol edin.

Tek bir makinenin envanterde nasıl göründüğünü görmek için ansible-inventory -i uretim.aws_ec2.yml --host <makine adı> komutu o makinenin tüm değişkenlerini verir; hangi etiketlerin, hangi özel adresin ve hangi grupların geldiğini buradan okursunuz. Bağlantı denemesi için de ansible rol_web -i uretim.aws_ec2.yml -m ansible.builtin.ping komutu yeterlidir: ping modülü yanıt veriyorsa SSH, anahtar ve kullanıcı ayarları doğrudur. Bu küçük denemeler, bir playbook'u gerçek makinelere göndermeden önce envanter ve bağlantı sorunlarını ayırır.

Etiket stratejisi: gruplar buradan doğar

Dinamik envanterin kalitesi, bulut kaynaklarının ne kadar tutarlı etiketlendiğine bağlıdır. Her sunucuda ortam, rol ve sahip ekip etiketleri varsa keyed_groups ile ortam_uretim, rol_web gibi gruplar kendiliğinden oluşur; playbook'taki hosts alanı da bu gruplara bakar. Etiketsiz makineler hiçbir gruba girmez ve otomasyonun dışında kalır.

Bu yüzden etiket standardını altyapıyı kuran araçla (örneğin Terraform ya da bulut şablonları) birlikte zorunlu hale getirin. Etiket adlarında yazım farkı (Ortam, ortam, ORTAM) ayrı gruplar üretir; tek bir yazım kuralı belirleyin. Sunucu açıldığında etiketi de aynı anda yazılırsa Ansible ilk çalıştırmada makineyi doğru gruba alır.

Etiketlerden türeyen grupları playbook'ta doğrudan hedef alırsınız. Örneğin hosts: rol_web yazan bir play yalnızca Rol etiketi web olan makinelerde çalışır; yeni bir web sunucusu açıldığında playbook'ta hiçbir satır değişmez. Bu, "ekle-çıkar" envanter bakımını ortadan kaldırır, ama tersine bir sorumluluk da getirir: yanlış etiketlenmiş bir makine yanlış rolün bakımına girer. Bu yüzden toplu bakımlardan önce --list-hosts ile hedef listesini gözle kontrol etmek ucuz ve etkili bir güvencedir.

Statik ve dinamik envanteri birlikte kullanmak

Her şey dinamik olmak zorunda değildir. Envanter bir dizin olabilir; içindeki çalıştırılabilir dosyalar dinamik kaynak, diğerleri statik sayılır. Belgeler, .ini, .cfg ve .bak gibi uzantıların varsayılan olarak yok sayıldığını, bunun ansible.cfg içindeki inventory_ignore_extensions ile ya da ANSIBLE_INVENTORY_IGNORE ortam değişkeniyle değiştirilebileceğini belirtiyor.

Statik bir dosyada, dinamik grupların üst grubunu tanımlayabilirsiniz. Dinamik alt grupları statik dosyada boş olarak bildirip bir üst grubun çocuğu yaparsınız. Böylece "canlı_ortam" gibi insan tarafından adlandırılmış bir grup, bulut etiketlerinden gelen grupları içerir. Aynı yöntemle bulutta olmayan birkaç fiziksel sunucuyu da aynı playbook'larla yönetebilirsiniz.

Sık hatalar ve performans

  • Dosya adı eklenti beklentisine uymuyor, bu yüzden eklenti dosyayı hiç tanımıyor
  • Kimlik bilgisi eksik ya da yanlış bölge: envanter boş dönüyor
  • Filtre yazmadan tüm hesabı taramak; büyük hesaplarda yavaşlık ve beklenmedik hedefler
  • ansible_host için genel IP kullanıp özel ağdaki sunuculara ulaşamamak
  • Üretim envanterini geliştirme ortamıyla aynı dosyada tutmak

Büyük ortamlarda envanter çıktısı her çalıştırmada API çağrısı yapar. Eklentilerin önbellek ayarı bu yükü azaltır; ancak önbelleğin süresi kadar eski veriyle çalışılabileceğini unutmayın. Kritik bir bakım öncesinde önbelleği yenileyip --graph çıktısını gözden geçirmek iyi bir alışkanlıktır.

Bu beceriyi Mindset programında nerede çalışırsınız

Ansible ile Konfigürasyon Yönetimi eğitiminde Dinamik Envanter ve Bulut Entegrasyonu ayrı bir modüldür. Eğitim, bulutta çalışan sunucu filolarını yöneten sistem mühendisleri, DevOps ve platform ekipleri için uygundur.

Kurumsal ekiplerde envanteri bulut etiketlerine bağlamak, yeni açılan sunucunun otomasyon kapsamına elle eklenmeden girmesini sağlar. Aynı hat AWX ve Ansible Automation Platform modülüne uzanarak envanterin merkezi bir arayüzden yönetilmesine de bağlanır; Terraform ile altyapı kuran ekipler için de tamamlayıcı bir adımdır.

İlgili Mindset programı

Ansible ile Konfigürasyon Yönetimi

Sık sorulanlar

Sık sorulan sorular

Dinamik envanter betiği mi eklenti mi kullanmalıyım?

Ansible belgeleri dinamik envanter için betik yerine eklentileri öneriyor. Betikler script envanter eklentisi sayesinde geriye dönük uyumluluk için çalışmaya devam eder, ancak yeni kurulumlarda sağlayıcı eklentisi hem bakım hem de yapılandırma açısından daha rahattır.

Envanter dosyam neden boş sonuç veriyor?

Sık nedenler: dosya adının sağlayıcı eklentisinin beklediği sonekle bitmemesi, kimlik bilgilerinin ya da bölgenin yanlış olması, filtrenin hiçbir makineyle eşleşmemesi ve gerekli koleksiyon ya da SDK paketinin kurulu olmaması. ansible-inventory --graph ile adım adım daraltarak bulabilirsiniz.

Birden fazla bulut hesabını nasıl yönetirim?

Her hesap ya da bölge için ayrı bir eklenti yapılandırma dosyası yazıp hepsini aynı envanter dizinine koyabilirsiniz. Ansible dizindeki kaynakları birleştirir. Hesap ayrımını grup adlarına yansıtmak playbook'larda hedef seçmeyi kolaylaştırır.

Özel ağdaki sunuculara nasıl bağlanırım?

compose bölümünde ansible_host değişkenini özel IP alanına eşleyebilirsiniz. Bağlantının kurulacağı makinenin o ağa erişimi olmalıdır; gerekiyorsa bir atlama sunucusu üzerinden SSH ayarı yapılır. Genel IP yalnızca gerçekten dışarıya açık makineler için kullanılmalıdır.

Envanter çıktısını nasıl denetlerim?

ansible-inventory komutu --graph ile grup ağacını, --list ile her makinenin değişkenlerini gösterir. Playbook çalıştırmadan önce beklediğiniz grupların oluştuğunu bu çıktıdan doğrularsınız. Bakım öncesi bu kontrolü alışkanlık haline getirmek hatalı hedeflemeyi azaltır.

Ansible Dinamik Envanter ile Bulut Sunucuları