Takip et

AWS Terraform ile Elastic Beanstalk Üzerinde Mavi-Yeşil Dağıtım (Blue-Green Deployment)

Mavi-Yeşil dağıtım, temel olarak iki ayrı, tamamen özdeş üretim ortamı oluşturma prensibine dayanır. Bir ortam (örneğin Mavi), mevcut canlı uyg…

AWS Terraform ile Elastic Beanstalk Üzerinde Mavi-Yeşil Dağıtım (Blue-Green Deployment)

Modern yazılım geliştirme süreçlerinde kesintisiz dağıtım ve yüksek erişilebilirlik, kritik öneme sahiptir. Mavi-Yeşil dağıtım stratejisi, bu hedeflere ulaşmak için etkili bir yöntem sunar. Bu makalede, AWS’nin güçlü PaaS çözümü Elastic Beanstalk’ı ve altyapıyı kod olarak yönetme (IaC) aracı Terraform’u bir araya getirerek, uygulamalarınız için nasıl güvenilir ve sıfır kesinti süreli Mavi-Yeşil dağıtım yapılabileceğini detaylı bir şekilde inceleyeceğiz.

Mavi-Yeşil Dağıtım: Kavram ve Avantajları

Mavi-Yeşil dağıtım, yazılım güncellemelerini risksiz ve kesintisiz bir şekilde canlıya almak için kullanılan bir stratejidir. Bu yaklaşım, üretim ortamınızın iki özdeş kopyasını bulundurur: “Mavi” (mevcut canlı sürüm) ve “Yeşil” (yeni sürüm).

Mavi-Yeşil Dağıtımın Temelleri

Mavi-Yeşil dağıtım, temel olarak iki ayrı, tamamen özdeş üretim ortamı oluşturma prensibine dayanır. Bir ortam (örneğin Mavi), mevcut canlı uygulamayı çalıştırırken, diğer ortam (Yeşil) yeni uygulama sürümünü barındırır. Yeni sürüm Yeşil ortamda tamamen test edilip doğrulandıktan sonra, trafik yönlendirmesi Mavi’den Yeşil’e anında değiştirilir. Bu, kullanıcılar için herhangi bir kesinti yaşanmamasını sağlar.

Geleneksel Dağıtım Yaklaşımlarına Göre Üstünlükleri

Geleneksel dağıtım yöntemleri (örneğin, yerinde güncelleme veya kademeli dağıtım), genellikle bir miktar kesinti süresi veya hata riski içerir. Mavi-Yeşil dağıtım ise, yeni sürümün tamamen izole bir ortamda hazırlanmasına olanak tanır. Bu sayede, canlı ortama etki etmeden kapsamlı testler yapılabilir ve olası sorunlar önceden tespit edilebilir.

Sıfır Kesinti ve Geri Alma Kolaylığı

Bu stratejinin en büyük avantajlarından biri, sıfır kesinti süresiyle dağıtım yapabilmesidir. Trafik anahtarlama işlemi genellikle saniyeler içinde gerçekleşir. Ayrıca, yeni sürümde beklenmedik bir sorun ortaya çıkarsa, trafik anında eski Mavi ortama geri yönlendirilebilir. Bu “geri alma” (rollback) yeteneği, dağıtım riskini minimize eder ve iş sürekliliğini garanti altına alır.

Test ve Doğrulama Süreçleri

Yeşil ortam, canlı trafiğe açılmadan önce kapsamlı entegrasyon, performans ve kullanıcı kabul testleri için ideal bir platform sunar. Bu, yeni özelliklerin, performans iyileştirmelerinin veya hata düzeltmelerinin üretim ortamına güvenle taşınmasını sağlar. Geliştiriciler ve test ekipleri, canlı kullanıcıları etkilemeden yeni sürümü detaylıca inceleyebilir.

AWS Elastic Beanstalk’ın Rolü ve Mavi-Yeşil Desteği

AWS Elastic Beanstalk, geliştiricilerin uygulamaları AWS bulutunda kolayca dağıtmasına ve yönetmesine olanak tanıyan, kullanımı kolay bir hizmettir. Mavi-Yeşil dağıtımlar için güçlü yerleşik yetenekler sunar.

Elastic Beanstalk Nedir?

Elastic Beanstalk, web uygulamalarını ve hizmetlerini dağıtmak ve ölçeklendirmek için tasarlanmış bir Platform as a Service (PaaS) çözümüdür. Uygulamanızın kodunu yüklemeniz yeterlidir; Elastic Beanstalk, kapasite sağlama, yük dengeleme, otomatik ölçeklendirme ve uygulama durumu izleme gibi altyapı detaylarını sizin için yönetir. Çeşitli programlama dilleri ve platformları destekler.

Mavi-Yeşil Dağıtım İçin Elastic Beanstalk Özellikleri

Elastic Beanstalk, Mavi-Yeşil dağıtım için iki temel mekanizma sunar: ortam klonlama ve CNAME (Canonical Name) takas etme. Yeni bir sürüm dağıtmak istediğinizde, mevcut ortamınızı klonlayarak yeni bir “yeşil” ortam oluşturabilirsiniz. Bu yeşil ortam, yeni uygulama sürümünüzle güncellenir. Tüm testler tamamlandıktan sonra, Elastic Beanstalk’ın “Swap Environment CNAMEs” özelliği ile trafik, eski (mavi) ortamdan yeni (yeşil) ortama anında yönlendirilir.

Ortam Tipleri ve Konfigürasyonları

Elastic Beanstalk, web sunucusu ortamları ve worker ortamları olmak üzere iki ana tipte ortam sunar. Web sunucusu ortamları HTTP isteklerini işlerken, worker ortamları arka plan işlemlerini yürütür. Her iki ortam tipi de Mavi-Yeşil dağıtım için kullanılabilir. Ortamlar, uygulama platformu (örneğin, Node.js, Python, Java), EC2 örnek tipi, otomatik ölçeklendirme ayarları ve veritabanı bağlantıları gibi birçok parametreyle yapılandırılabilir.

Uygulama Versiyonları ve Ortamlar

Elastic Beanstalk, uygulamanızın farklı versiyonlarını yönetmenize olanak tanır. Her dağıtım, uygulamanızın yeni bir versiyonunu oluşturur. Bu versiyonlar daha sonra belirli bir Elastic Beanstalk ortamına atanır. Mavi-Yeşil dağıtımda, yeni uygulama versiyonu Yeşil ortama dağıtılırken, eski versiyon Mavi ortamda çalışmaya devam eder. Bu, versiyon kontrolünü ve geri alma işlemlerini kolaylaştırır.

Terraform ile Altyapıyı Kod Olarak Yönetmek

Terraform, altyapıyı kod olarak (Infrastructure as Code – IaC) tanımlamak ve sağlamak için kullanılan açık kaynaklı bir araçtır. AWS kaynaklarını yönetirken Terraform kullanmak, tekrarlanabilir, sürdürülebilir ve ölçeklenebilir bir altyapı oluşturmanın anahtarıdır.

Terraform Nedir ve Neden Kullanılır?

Terraform, HashiCorp tarafından geliştirilen, deklaratif bir yapılandırma dili (HCL – HashiCorp Configuration Language) kullanarak bulut ve diğer hizmet sağlayıcılarındaki kaynakları yönetmenizi sağlayan bir IaC aracıdır. Neden kullanılır? Çünkü altyapınızı manuel olarak yapılandırmak yerine kod olarak tanımlayarak, tutarlılık, sürüm kontrolü, otomasyon ve işbirliği gibi avantajlar elde edersiniz.

AWS Kaynak Yönetiminde Terraform’un Gücü

Terraform, AWS ekosistemindeki hemen hemen her hizmeti yönetebilir: EC2 örneklerinden S3 kovalarına, VPC’lerden IAM rollerine kadar. Elastic Beanstalk ortamlarını da Terraform ile tanımlamak, dağıtım süreçlerinizi otomatikleştirmenize ve altyapınızın durumunu her zaman belirli bir konfigürasyonda tutmanıza olanak tanır. Bu, manuel hataları azaltır ve dağıtım hızını artırır.

Terraform State Yönetimi

Terraform, yönettiği altyapının mevcut durumunu bir “state” dosyasında (terraform.tfstate) saklar. Bu dosya, Terraform’un hangi kaynakları oluşturduğunu, güncellediğini veya sildiğini takip etmesini sağlar. Üretim ortamlarında, bu state dosyasının güvenli ve merkezi bir yerde (örneğin, S3 kovası ve DynamoDB kilitleme ile) saklanması kritik öneme sahiptir. Bu, ekip üyeleri arasında tutarlı bir çalışma ortamı sağlar ve veri kaybını önler.

Modüler Yapı ve Yeniden Kullanılabilirlik

Terraform, karmaşık altyapıları daha küçük, yönetilebilir ve yeniden kullanılabilir parçalara bölmek için modülleri destekler. Elastic Beanstalk ortamları gibi sıkça kullanılan yapılandırmaları modüller halinde tanımlamak, kod tekrarını azaltır, kodun okunabilirliğini artırır ve farklı projelerde veya ortamlarda (geliştirme, test, üretim) aynı altyapı bileşenlerini kolayca dağıtmanızı sağlar.

Terraform ile Elastic Beanstalk Mavi-Yeşil Dağıtım Mimarisi

Terraform kullanarak Elastic Beanstalk üzerinde Mavi-Yeşil dağıtım mimarisi kurmak, altyapınızın tutarlı ve tekrarlanabilir olmasını sağlar. Bu mimari, yük dengeleyici, iki Beanstalk ortamı ve DNS kayıtlarının akıllıca yönetimini içerir.

Genel Mimari Bakışı

Mimarinin temelinde, bir AWS Application Load Balancer (ALB) bulunur. Bu ALB, gelen trafiği Elastic Beanstalk ortamlarına yönlendirir. İki ayrı Elastic Beanstalk ortamı (Mavi ve Yeşil) bulunur. Her ortam, kendi EC2 örneklerine, Auto Scaling gruplarına ve diğer AWS kaynaklarına sahiptir. Route 53 gibi bir DNS hizmeti, ALB’nin URL’sini işaret ederek kullanıcıların uygulamaya erişmesini sağlar.

AWS Kaynaklarının İlişkisi

Terraform’da, Elastic Beanstalk dağıtımı için birden fazla kaynak tanımlarız: aws_elastic_beanstalk_application (uygulamanın genel tanımı), aws_elastic_beanstalk_application_version (uygulamanın belirli bir kodu veya sürümü), ve aws_elastic_beanstalk_environment (uygulama versiyonunun çalıştığı ortam). Her ortam, kendi yük dengeleyicisine, güvenlik grubuna ve Auto Scaling yapılandırmasına sahiptir. Bu kaynaklar, Terraform tarafından yönetilen bağımlılıklar aracılığıyla birbirine bağlanır.

Dağıtım Aşamaları ve Durum Yönetimi

Terraform ile Mavi-Yeşil dağıtım, genellikle aşağıdaki adımları içerir: mevcut (Mavi) ortamın tanımlanması, yeni (Yeşil) ortamın oluşturulması, yeni uygulama versiyonunun Yeşil ortama dağıtılması, trafik takası ve eski Mavi ortamın isteğe bağlı olarak kaldırılması. Terraform, her adımda altyapının mevcut durumunu izler ve yalnızca gerekli değişiklikleri uygular, bu da dağıtımın öngörülebilirliğini artırır.

Trafik Yönlendirme Mekanizmaları

Elastic Beanstalk’ın Mavi-Yeşil dağıtımında trafik yönlendirmesi, genellikle ortamların CNAME’lerini takas ederek yapılır. Terraform, aws_elastic_beanstalk_environment kaynağının settings bloğunda bu takas işlemini tetiklemek için gerekli yapılandırmaları içerebilir. Alternatif olarak, DNS kayıtlarını (örneğin, Route 53’teki bir CNAME kaydını) manuel olarak veya bir otomasyon betiği ile yeni ortamın URL’sine işaret edecek şekilde güncellemek de mümkündür.

Terraform Kaynakları ve Yapılandırma Adımları

Terraform ile Elastic Beanstalk Mavi-Yeşil dağıtımını kurmak için belirli AWS kaynaklarını tanımlamamız ve yapılandırmamız gerekir. İşte bu kaynakların temel bir görünümü ve örnek bir kod yapısı.

Temel AWS ve Elastic Beanstalk Kaynakları

Bir Elastic Beanstalk uygulaması için Terraform’da genellikle aşağıdaki kaynaklar tanımlanır:

  • aws_elastic_beanstalk_application: Uygulamanızın genel bir tanımı.
  • aws_s3_bucket: Uygulama versiyonlarının depolanacağı S3 kovası.
  • aws_elastic_beanstalk_application_version: S3’e yüklenen uygulama zip dosyasını işaret eden belirli bir versiyon.
  • aws_elastic_beanstalk_environment: Uygulama versiyonunun çalışacağı ortam (Mavi veya Yeşil).
  • aws_iam_instance_profile: EC2 örneklerinin AWS hizmetlerine erişimini sağlayan IAM rolü.

Terraform Modülleri ile Yapılandırma

Karmaşıklığı azaltmak ve yeniden kullanılabilirliği artırmak için Elastic Beanstalk ortamlarını bir Terraform modülü içinde tanımlamak iyi bir pratiktir. Bu modül, bir ortamın tüm bağımlılıklarını (örneğin, güvenlik grupları, yük dengeleyici ayarları, Auto Scaling yapılandırması) kapsayabilir ve dışarıdan parametrelerle yapılandırılabilir hale getirilebilir.

Ortam Değişkenleri ve Parametre Yönetimi

Elastic Beanstalk ortamlarına özel değişkenler (örneğin veritabanı bağlantı dizeleri, API anahtarları) aws_elastic_beanstalk_environment kaynağının setting bloğu aracılığıyla geçirilebilir. Terraform değişkenleri (.tfvars dosyaları veya komut satırı argümanları) kullanarak farklı ortamlar (dev, staging, prod) için farklı değerler sağlamak mümkündür. Hassas veriler için AWS Secrets Manager veya SSM Parameter Store kullanılması önerilir.

Örnek Terraform Kodu Yapısı

Aşağıda, temel bir Elastic Beanstalk uygulamasını ve ortamını tanımlayan basitleştirilmiş bir Terraform kodu örneği bulunmaktadır:


resource "aws_elastic_beanstalk_application" "my_app" {
  name        = "my-webapp"
  description = "My awesome web application"
}

resource "aws_s3_bucket" "app_bucket" {
  bucket = "my-webapp-app-versions-${random_string.suffix.result}"
  acl    = "private"
}

resource "random_string" "suffix" {
  length  = 8
  special = false
  upper   = false
}

resource "aws_elastic_beanstalk_application_version" "app_version_v1" {
  application = aws_elastic_beanstalk_application.my_app.name
  name        = "v1-${random_string.suffix.result}"
  bucket      = aws_s3_bucket.app_bucket.id
  key         = "app-v1.zip" # Bu dosya S3'e manuel olarak yüklenmeli veya CI/CD ile.
}

resource "aws_elastic_beanstalk_environment" "blue_env" {
  name                = "my-webapp-blue"
  application         = aws_elastic_beanstalk_application.my_app.name
  solution_stack_name = "64bit Amazon Linux 2 v3.4.10 running Node.js 16"
  version_label       = aws_elastic_beanstalk_application_version.app_version_v1.name

  setting {
    namespace = "aws:autoscaling:launchconfiguration"
    name      = "InstanceType"
    value     = "t3.micro"
  }
  setting {
    namespace = "aws:elasticbeanstalk:environment"
    name      = "EnvironmentType"
    value     = "LoadBalanced"
  }
  # Diğer ayarlar...
}

Mavi-Yeşil Dağıtım Akışı ve Otomasyon

Terraform ile Elastic Beanstalk üzerinde Mavi-Yeşil dağıtım akışını otomatikleştirmek, dağıtım süreçlerinizi hızlandırır ve insan hatasını minimize eder. Bu süreç genellikle belirli adımları takip eder.

Yeni Sürümün Dağıtımı (Yeşil Ortam Oluşturma)

Dağıtım süreci, yeni uygulama versiyonunuzun (örneğin, bir zip dosyası) S3 kovasına yüklenmesiyle başlar. Ardından, Terraform kodunuzda yeni bir aws_elastic_beanstalk_application_version kaynağı tanımlanır ve mevcut (mavi) ortamın bir klonu olan yeni bir "yeşil" Elastic Beanstalk ortamı oluşturulur. Bu yeşil ortam, yeni uygulama versiyonunu kullanacak şekilde yapılandırılır. terraform apply komutu, bu yeni ortamı AWS'de sağlar.

Test ve Doğrulama Süreçleri

Yeşil ortam başarıyla sağlandıktan ve yeni uygulama versiyonu dağıtıldıktan sonra, bu ortam canlı trafiğe açılmadan önce kapsamlı testlere tabi tutulur. Bu testler manuel olabilir veya otomatik test suiteleri (bir CI/CD boru hattının parçası olarak) aracılığıyla yürütülebilir. Performans testleri, güvenlik taramaları ve fonksiyonel testler, yeni sürümün kararlılığını ve doğruluğunu sağlamak için kritik öneme sahiptir.

Trafik Geçişi (URL Swap)

Testler başarıyla tamamlandığında, sıra trafiği Mavi ortamdan Yeşil ortama geçirmeye gelir. Elastic Beanstalk'ın kendi konsolu veya AWS CLI/SDK aracılığıyla swap-environment-cnames komutu kullanılarak bu işlem gerçekleştirilir. Bu komut, iki ortamın CNAME kayıtlarını anında takas eder, böylece tüm yeni trafik Yeşil ortama yönlendirilirken, eski Mavi ortam hala çalışır durumda kalır. Terraform doğrudan bu takas işlemini yapamaz, genellikle bir otomasyon betiği veya CI/CD adımı ile tetiklenir.

Eski Ortamın Temizlenmesi (Mavi Ortamın Kaldırılması)

Trafik başarıyla Yeşil ortama geçirildikten ve yeni sürümün stabil çalıştığından emin olunduktan sonra, eski Mavi ortam artık gereksiz hale gelir. Bu ortam, kaynak tüketimini önlemek ve maliyetleri düşürmek amacıyla Terraform'un terraform destroy komutuyla veya AWS konsolu üzerinden güvenli bir şekilde kaldırılabilir. Bu adım, geri alma ihtiyacı kalmadığında yapılmalıdır.

Sonuç ve Sık Sorulan Sorular (SSS)

AWS Elastic Beanstalk ve Terraform'u birleştirerek Mavi-Yeşil dağıtım stratejisi uygulamak, modern DevOps uygulamaları için güçlü ve güvenilir bir yaklaşımdır. Bu yöntem, kesintisiz dağıtım, hızlı geri alma yeteneği ve altyapının kod olarak yönetilmesi gibi kritik avantajlar sunarak yazılım geliştirme ve operasyon süreçlerinizi önemli ölçüde iyileştirir. Uygulama güncellemelerini daha az riskle ve daha yüksek güvenle canlıya almanın anahtarını sunar.

Sık Sorulan Sorular (SSS)

S1: Mavi-Yeşil dağıtım her uygulama için uygun mudur?
C1: Çoğu web uygulaması ve API için uygundur. Ancak, durum bilgisi olan (stateful) uygulamalar veya büyük veritabanı şema değişiklikleri gerektiren durumlar ek dikkat ve stratejiler gerektirebilir.

S2: Terraform ile Elastic Beanstalk dağıtımında dikkat edilmesi gerekenler nelerdir?
C2: Terraform state dosyasının güvenli yönetimi, ortam değişkenlerinin doğru yapılandırılması, IAM rollerinin en az ayrıcalık prensibine göre tanımlanması ve dağıtım öncesi kapsamlı testler kritik öneme sahiptir.

S3: Geri alma işlemi nasıl yapılır?
C3: Eğer yeni (Yeşil) ortamda bir sorun olursa, Elastic Beanstalk'ın "Swap Environment CNAMEs" özelliği kullanılarak trafik anında eski (Mavi) ortama geri yönlendirilebilir. Bu, hızlı ve kesintisiz bir geri alma sağlar.

S4: Mavi-Yeşil dağıtımın maliyet etkisi nedir?
C4: Kısa bir süre için iki tam ortamın çalışması nedeniyle maliyetler artabilir. Ancak, kesinti süresinin önlenmesi ve dağıtım riskinin azalması, genellikle bu ek maliyetin karşılığını fazlasıyla verir. Eski ortamın hızlıca kaldırılması maliyetleri optimize eder.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

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

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version