Terraform State Yönetimi
Terraform state yönetimi, tüm Terraform projelerinde son derece önemlidir. State yönetimi, Terraform altyapınız tarafından yönetilen kaynakların mevcut durumunu kod (IaC) dağıtımları olarak yönetmenize, depolamanıza ve almanıza olanak sağlayan özelliktir. Bu makalede, state’i yönetirken akılda tutulması gereken farklı Terraform state yönetimi türlerini, en iyi uygulamaları ve güvenlik endişelerini anlatmaya çalışacağım.
HashiCorp Terraform state, altyapı kaynaklarınızın mevcut durumunun bir temsilidir. Terraform, Terraform projesi tarafından yönetilen kaynakları bu şekilde takip eder. Buna, kaynak adları, kaynak kimlikleri ve dağıtılan kaynaklarla ilişkili tüm meta veriler gibi kaynak öznitelikleri dahildir. Terraform state, Terraform tarafından oluşturulan ve sürdürülen bir .tfstate dosya uzantısı kullanılarak bir state dosyasında saklanır. State dosyası manuel olarak düzenlenmez. Bu state dosyası, Terraform’un yönettiği kaynakları izlemesine izin verdiği ve Terraform konfigürasyonu değiştirildiğinde kaynakları istenen duruma getirmek için gerekli eylemleri belirlemek için kullanıldığı için önemlidir.
Terraform State, Terraform projesi tarafından dağıtılan ve yönetilen altyapı kaynaklarını etkin bir şekilde yönetmek için kullanılır. Altyapı kaynakları karmaşık olabilir ve oluşturmak, yapılandırmak ve yönetmek için birden çok adım gerektirebilir. Terraform, kaynaklarınızın istenen durumunu kodda bildirmenize olanak tanır ve Terraform, bu kaynakların durumunu takip etmek için state dosyasını kullanır. Terraform state, bağımsızlığı zorlamak için de kullanılır. Idempotency, bir konfigürasyonu birden çok kez uygulama ve her seferinde aynı sonucu elde etme yeteneğidir. Terraform, kaynakların mevcut durumunun beyan edilen durumla eşleşmesini sağlamak için state’i kullanır. Mevcut durum beyan edilen durumla uyuşmuyorsa, Terraform kaynakları istenen duruma getirmek için gerekli işlemleri yapacaktır. Terraform state’inin bir başka temel kullanımı da işbirliğini sağlamaktır. Terraform state’i, herkesin ortama dağıtılan altyapının aynı sürümü üzerinde çalıştığından emin olmak için ekip üyeleri arasında paylaşılır. Bu, HashiCorp Terraform’u projelerinizde kod olarak uygularken daha iyi işbirliği, daha kolay hata ayıklama ve daha şeffaf bir iş akışı sağlar.
Terraform state’i, Terraform tarafından dağıtılan ve yönetilen kaynakların ve bunların mevcut yapılandırmasının bir kaydını depolayarak çalışır. Terraform plan ve terraform Apply komutlarını çalıştırdığınızda, altyapı kaynaklarını Terraform kodunda yapılandırılan istenen duruma getirmek için değiştirmek üzere gerekli eylemleri belirlemek için durum dosyasının içeriğini kullanır. State ayrıca, istenen yapılandırmayı karşılamak için bir kaynağın oluşturulmasının, güncellenmesinin veya yok edilmesinin gerekip gerekmediğini belirlemek için kullanılır.
Terraform state yerel olarak veya uzaktan yönetilebilir. Yerel state yönetimi, state dosyasını yerel dosya sisteminde depolarken, uzak state yönetimi, durum dosyasını Microsoft Azure Blob Storage veya AWS S3 gibi bir uzak veri deposunda depolar. Uzak state yönetimi, yerel state yönetimine göre daha iyi işbirliği ve güvenlik özellikleri sağlar.
Yerel State Kullanma
Terraform, kaynak yapılandırmasının geçerli durumunu depolamak için terraform.tfstate adlı bir yerel state dosyası kullanır. Yerel state dosyası, yeni bir Terraform projesi oluştururken varsayılan Terraform’dur, ancak bunu Terraform state dosyasındaki terraform bloğunu kullanarak yapılandırabilirsiniz. Yerel state yönetimini başlatmak için terraform init komutunu çalıştırın. Terraform, Terraform projesinin geçerli dizininde terraform.tfstate adlı yeni bir state dosyası oluşturacaktır. Terraform başlatıldıktan sonra, ortama dağıtım için terraform Apply çalıştırıldığında altyapı kaynaklarınızın meta verilerini depolamak için bu yerel state dosyasını kullanacaktır. Bununla birlikte, Terraform yerel state’in bazı dezavantajları vardır. Veri kaybına karşı savunmasızdır ve ekip işbirliği için zordur. Bu nedenle, üretim Terraform dağıtımları ile uzak state yönetiminin kullanılması önerilir.
Uzak State Kullanma
Uzak state yönetimi, state’i bir uzak veri deposunda saklamanıza olanak tanır. Terraform, Microsoft Azure Blob Storage, AWS S3, Google Cloud Storage ve HashiCorp Terraform Cloud dahil olmak üzere birçok uzak veri deposunu destekler.
terraform {
backend "azurerm" {
resource_group_name = "tf-state-rg
storage_account_name = "tfstatesa"
container_name = "tfstate"
key = "prod.terraform.tfstate"
}
}
Yukarıdaki kod bloğu, Terraform’u, tfstate adlı kapsayıcıda tf-state-rg adlı Azure Blob Depolama hesabında depolamak üzere yapılandırır. State dosyası adı prod.terraform.tfstate’dir. Terraform init komutunu çalıştırmadan önce depolama hesabını ve kapsayıcıyı Azure’da el ile oluşturmanız gerekir.
Terraform’da uzak state yönetimini kullanmanın önemli avantajlarından biri, geliştirilmiş işbirliğidir. Uzak state yönetimi, ekip üyelerinin state dosyasına merkezi bir konumdan erişmesine ve bunları güncellemesine olanak tanır. Bu, birden fazla ekip üyesi aynı altyapı üzerinde çalışırken ortaya çıkabilecek çatışmaları önlemeye yardımcı olur. Ek olarak, uzak state yönetimi daha iyi sürüm kontrolü sağlayarak değişiklikleri izlemeyi ve önceki sürümlere geri dönmeyi kolaylaştırır.
Uzak state yönetimi, Terraform state (.tfstate) dosyaları için artırılmış güvenlik sağlar. State dosyasını Microsoft Azure Blob Storage veya AWS S3 gibi bir uzak veri deposunda depolayarak, yalnızca yetkili ekip üyelerinin state dosyasına erişimi olmasını sağlayabilirsiniz. Ek olarak, uzak state yönetimi daha iyi erişim kontrolü sağlayarak izinleri ve rolleri yönetmeyi kolaylaştırır. Uzak state , Terraform state dosyaları için daha iyi yedekleme ve kurtarma seçenekleri sunar. State dosyasını uzak bir veri deposunda depolayarak, veri kaybını önlemek için state dosyasını kolayca yedekleyebilir veya bulut veri çoğaltma özelliklerini kullanabilirsiniz. Ek olarak, bulut depolama hizmetleri, gerekirse durum dosyasını önceki bir sürüme geri yüklemeyi kolaylaştıran sürüm kontrol özellikleri sağlar.