Amazon DOP-C02: CI/CD İşlem Hatları ve Dağıtım Stratejileri — Çalışma kılavuzu
Şunun bir parçası: AWS DevOps Engineer Professional DOP-C02 — Çalışma kılavuzu. Doğrulanmış cevaplarla şurada pratik yapın: Amazon sınav merkezi, veya şurada süreli deneme sınavları çözün: ExamRoll.io.
Genel Bakış
AWS üzerinde sağlam bir CI/CD sistemi; kaynak kontrolü, derleme, test, yapıt (artifact) yönetimi, dağıtım orkestrasyonu ve güvenli sürüm stratejilerini birden fazla hesap ve Bölge (Region) genelinde bir araya getirir. Temel yönetilen hizmetler—CodeCommit, CodeArtifact, CodeBuild, CodePipeline ve CodeDeploy—sunucu bakımını ortadan kaldırır, IAM ve KMS ile sıkı bir şekilde entegre olur ve EC2/Auto Scaling, ECS ve Lambda’ya yönelik blue/green, canary, rolling ve in-place dağıtımlar için birinci sınıf destek sağlar. Etkili pipeline’lar aynı zamanda hassas tetikleyicilere (webhook’lar, EventBridge, zamanlamalar), disiplinli yapıt yönetimine, hızı artırmak için derleme önbelleğe almaya (build caching) ve otomatik geri alma (rollback) için sağlık alarmlarıyla birlikte kontrollü trafik kaydırmaya (traffic shifting) dayanır. Kurumsal yapılar için, hesaplar arası (cross-account) ve Bölgeler arası (cross-Region) desenler zorunludur ve rol üstlenmeyi (role assumption), bölgesel yapıt depolarını (regional artifact stores) ve tutarlı şifreleme politikalarını gerektirir.
AWS Geliştirici Araçları ile Orkestrasyon
CodeCommit’i özel, yüksek erişilebilirliğe sahip bir Git hizmeti olarak kullanın. Depo (repository) ve pull request olayları için EventBridge ile entegre olur, onay kuralı şablonlarını (approval rule templates) destekler ve ayrıntılı yetkilendirme için IAM kullanır. Üçüncü taraf Git (GitHub/Bitbucket) için, neredeyse gerçek zamanlı tetikleyiciler için CodePipeline kaynak eylemlerini (source actions) webhook’lar ile yapılandırın.
CodeArtifact, birden fazla ekosistem (npm, Maven, PyPI, NuGet) için paket yönetimini merkezileştirir. Önbelleğe alma ile genel kayıtlara (public registries) yukarı akış (upstream) bağlantılarını, depo başına KMS şifrelemesini ve otomatik olarak süresi dolan kapsamlı kimlik doğrulama token’larını (scoped auth tokens) destekler. Uzun ömürlü sırları (secrets) gömmek yerine paket yöneticilerini yapılandırmak için pre_build sırasında
undefined
komutunu çağırarak CodeBuild’e entegre edin.
CodeBuild, worker’ları yönetmeye gerek kalmadan geçici, konteynerize derlemeler sağlar. Temel yetenekler:
- Özel bağımlılıklar için ortam izolasyonu ve VPC desteği. Docker derlemeleri için ayrıcalıklı modu (privileged mode) etkinleştirin ve imaj derlemelerini hızlandırmak için yerel Docker katman önbelleğe almayı (local Docker layer caching) etkinleştirin.
- Üç kaynaktan ortam değişkenleri: düz metin (plaintext), SSM Parameter Store ve Secrets Manager (varsayılan olarak güvenlidir, kodda sabitlenmiş sırlar yoktur). Ayrıca CodePipeline’dan da değişkenler aktarabilirsiniz.
- Derleme sürelerini azaltmak için önbelleğe alma (Caching):
- Yerel önbelleğe alma: kaynak önbelleği (source cache), Docker katman önbelleği (Docker layer cache) ve derleme ana makinesindeki (build host) özel dizinler.
- S3 önbelleğe alma: derlemeler arasında paylaşılan yeniden kullanılabilir bağımlılık setleri.
- Yapıt yönetimi: birden fazla çıktı (ör. uygulama paketi ve CloudFormation şablonu) yayınlamak için
primaryArtifactsvesecondaryArtifactsbelirtin. Yapıtları KMS anahtarlarıyla şifreleyin ve genel ACL’lerden kaçının. - Raporlama: logları CloudWatch Logs/S3’e gönderin. Test sonuçları için raporları ve PR geri bildirimi için CodeBuild rozetlerini (badges) kullanın.
CodePipeline orkestratördür. Paralel veya sıralı çalışabilen eylemlerle aşamaları (kaynak, derleme, test, dağıtım, onay) tanımlayın. En iyi uygulamalar:
- Tetikleyiciler:
- GitHub/Bitbucket kaynakları için webhook’lar.
- CodeCommit dal (branch) değişiklikleri için EventBridge kuralları; pipeline’lar başlamadığında kuralın varlığını doğrulayın.
StartPipelineExecutionkomutunu çağıran EventBridge zamanlama kuralları aracılığıyla zamanlanmış pipeline’lar.
- Yapıt depoları: pipeline tarafından kullanılan her Bölge için bir S3 bucket’ı; müşteri tarafından yönetilen bir KMS anahtarı kullanın. Bölgeler arası eylemler için bölgesel yapıt depoları ekleyin.
- Neredeyse gerçek zamanlı bildirimler için sohbet/webhook entegrasyonu amacıyla SNS veya EventBridge ile manuel onaylar.
- Ayrıntılı IAM: en az ayrıcalığa sahip bir pipeline hizmet rolü (service role); hesaplar arası işlemler için eylem başına roller üstlenilir (assumed).
CodeDeploy; EC2/şirket içi (on-prem), ECS ve Lambda hedeflerini destekleyen dağıtım motorudur. Yaşam döngüsü kancalarını (lifecycle hooks), trafik kaydırmayı (traffic shifting), sağlık kontrollerini ve CloudWatch alarmları aracılığıyla otomatik geri almayı yönetir. EC2 örneklerinin CodeDeploy agent’ını çalıştırdığından, bir örnek profiline (instance profile) sahip olduğundan ve CodeDeploy uç noktalarına (endpoints) giden bağlantısı (veya NAT üzerinden çıkış) olduğundan emin olun. Atlanan olaylar (skipped events) ve işlem yapılmayan dağıtımlar (no-op deployments) genellikle agent/izin/bağlantı sorunlarına işaret eder.
Dağıtım Stratejileri ve CodeDeploy Yaşam Döngüsü
Stratejiyi riske, kapasiteye ve platforma göre seçin:
- Yerinde (In-place) (EC2/şirket içi): Uygulamayı mevcut sunucularda güncelleyin. OneAtATime, HalfAtATime veya AllAtOnce dağıtım yapılandırmalarıyla birleştirin. Sunucuları boşaltmak (drain) ve yeniden kaydetmek için bir ELB ekleyin.
- Kademeli (Rolling) (ECS): Aynı servisteki görevleri (task) gruplar halinde değiştirin. Yerel ECS kademeli dağıtımı veya kontrollü geçiş ile mavi/yeşil olarak CodeDeploy aracılığıyla yönetilir.
- Mavi/yeşil (Blue/green):
- EC2/Auto Scaling: Yeşil bir ASG oluşturun, doğrulayın, ardından trafiği maviden yeşile kesin. İsteğe bağlı olarak mavi ortamı sonlandırın veya koruyun.
- ECS: İkinci bir hedef grubunun (target group) arkasında bir yedek görev seti (task set) oluşturun; doğrulayın, ardından dinleyicileri (listener) değiştirin.
- Lambda: Alias trafiğini yeni bir fonksiyon sürümüne kaydırın ve izleyin.
- Kanarya (Canary): Önce küçük bir yüzdeyi (ör. %10) kaydırın, bir süre gözlemleyin, ardından tamamlayın.
- Doğrusal (Linear): Trafiği eşit adımlarla artırın (ör. her 5 dakikada bir %10).
CodeDeploy appspec.yml dosyası, nelerin kurulacağını ve betiklerin ne zaman çalıştırılacağını tanımlar:
- EC2/Şirket İçi (On-Prem) için (YAML):
- files: dosyaların nereye yerleştirileceği.
- permissions: özel betikler olmadan dosya sahipliği/modu güncellemeleri.
- kancalar (hooks) (yaygın): ApplicationStop, BeforeInstall, Install, AfterInstall, ApplicationStart, ValidateService.
- Trafik kontrol kancaları (bir load balancer kullanıldığında): BeforeBlockTraffic, AfterBlockTraffic, BeforeAllowTraffic, AfterAllowTraffic.
- Davranışı ayrı revizyonlar olmadan dinamik olarak değiştirmek için (örneğin, dağıtım grubuna göre Apache log seviyelerini değiştirmek gibi) önceden tanımlanmış ortam değişkenlerini (ör. DEPLOYMENT_GROUP_NAME, DEPLOYMENT_ID, LIFECYCLE_EVENT) kullanın.
- ECS için:
- resources: TaskDefinition ve LoadBalancerInfo ile TargetService.
- kancalar (hooks): BeforeInstall, AfterInstall, AfterAllowTestTraffic, BeforeAllowTraffic, AfterAllowTraffic.
- AfterAllowTestTraffic, bir test dinleyicisi (test listener) ile yeşil görev setinde (green task set) duman/entegrasyon testleri (smoke/integration tests) için idealdir.
- Lambda için:
- resources, kaydırılacak fonksiyonu, sürümü ve alias’ı tanımlar.
- kancalar (hooks): BeforeAllowTraffic ve AfterAllowTraffic.
Trafik kaydırma ve geri alma (rollback):
- Dağıtım yapılandırmalarını (deployment configurations) yapılandırın:
- Lambda/ECS: Canary10Percent15Minutes, Canary10Percent5Minutes, Linear10PercentEvery1Minute, AllAtOnce veya özel.
- EC2 Mavi/Yeşil: Load balancer dinleyicileri/hedef grupları aracılığıyla tek seferde (all-at-once), kanarya (canary) veya doğrusal (linear) trafik yeniden yönlendirmesi.
- Hatalarda, 5xx’lerde veya özel metriklerde otomatik geri alma (auto-rollback) için dağıtım grubuna CloudWatch alarmları ekleyin. ECS için alarmlar, hedef grubun 5xx’lerini veya servis metriklerini izleyebilir; Lambda için, alias/sürüm boyutlarıyla fonksiyonun Errors/Throttles metriklerini izleyin.
- Doğrulamayı Lambda veya SSM aracılığıyla çalıştırmak için yaşam döngüsü kancalarını (lifecycle hooks) (ör. AfterAllowTestTraffic) kullanın; sıfır olmayan çıkış kodları (non-zero exits) geri almaya neden olur.
EC2, ECS ve Lambda için Mavi/Yeşil ve Trafik Kaydırma
EC2/Auto Scaling:
- CodeDeploy ile mavi/yeşil dağıtım, yeşil için yeni bir Auto Scaling grubu oluşturur, bunu ayrı bir hedef gruba (target group) bağlar ve ardından ALB dinleyicilerini (listener) değiştirir. Maviyi otomatik olarak sonlandırmayı veya hızlı geri alma için saklamayı seçebilirsiniz.
- EC2’de yerinde (in-place) dağıtım için, sunucuları düzgün bir şekilde kayıttan çıkarmak/kaydetmek (deregister/register) ve kullanılabilirliği korumak için bir ELB ile birleştirin. Dağıtım yapılandırması, grup boyutlarını ve ilerleme hızını belirler.
ECS:
- CodeDeploy, bir ALB’nin arkasındaki iki hedef grubu (target group) kullanarak ECS servisleriyle entegre olur. Yeni görev tanımı (task definition) ile bir yedek görev seti (replacement task set) (yeşil) oluşturulur.
- Test trafiği, özel bir test dinleyicisi (test listener) aracılığıyla yeşil hedef grubuna akar; üretim trafiği, terfi edilene kadar mavide kalır.
- Kanarya (Canary) veya doğrusal (linear) kaydırmalar, CloudWatch alarmlarını izlerken trafiği yeşile doğru ilerletir. Üretime geçişten önce doğrulamayı (örneğin, sentetik kontrolleri çağıran bir Lambda fonksiyonu) yürütmek için AfterAllowTestTraffic kancasını kullanın.
Lambda:
- CodeDeploy, ağırlıklı yönlendirme (weighted routing) ile bir fonksiyon alias’ını yeni bir sürüme günceller. Kanarya (Canary) ve doğrusal (linear) desenler, trafik yüzdesini kademeli olarak taşır. Alias üzerindeki CloudWatch alarmları otomatik geri almayı tetikler.
- AWS SAM veya CDK ile, her fonksiyon için kanarya/doğrusal politikasını ve alarmları kodlamak üzere şablonlarda AutoPublishAlias ve DeploymentPreference ayarlarını yapın.
CodeDeploy ötesinde ağırlıklı yönlendirme:
- Çok Bölgeli (multi-Region) veya çok yığınlı (multi-stack) dengeleme için, sağlık kontrolleri (health checks) ile birlikte Route 53 ağırlıklı kayıtları (weighted records), bölgesel trafik bölme (örneğin, ikincil bir Bölgeye %1) ve yük devretme (failover) sağlar. Bu, CodeDeploy’un servis başına trafik kaydırmasını tamamlar ancak onun yerini almaz.
Çoklu Hesap ve Çoklu Bölge Dağıtımı
Kurumsal pipeline’lar genellikle merkezi bir “araç” (tooling) hesabında bulunur ve birden fazla Bölgedeki dev/test/prod hesaplarına dağıtım yapar:
- Hesaplar arası (Cross-account):
- CodePipeline eylemlerinde, pipeline rolünün principal’ına güvenen hedef hesaptaki bir RoleArn’ı belirtin. Her eylem (CloudFormation, CodeDeploy, ECS, Lambda) için en az ayrıcalık (least-privilege) izinlerini kullanın.
- Hedef hesap kaynaklarına erişmesi gereken CodeBuild için, build’in bir rol üstlenmesini (assume a role) (STS) sağlayın veya geniş AdministratorAccess yerine hesaba özgü bir eylem rolü kullanın.
- CodeDeploy’un EC2’ye dağıtım yapması için, hedef hesap uygulama/dağıtım grubunu ve hizmet rolünü yönetir; pipeline, CreateDeployment’ı çağırmak için bir rol üstlenir.
- Bölgeler arası (Cross-Region):
- Pipeline yapılandırmasına her Bölge için bir artifact deposu ekleyin (bölgesel bir KMS anahtarına sahip bir S3 bucket’ı). Pipeline rolünün ve eyleme özgü rollerin okuma/yazma yapmasına izin vermek için bucket policy’lerini güncelleyin.
- Gerektiğinde bölgeye özgü artifact’ler oluşturun (örneğin, Bölgeye yerel bir S3 bucket’ını hedefleyerek
aws cloudformation packageile Lambda kodunu paketlemek). - Uzak bir Bölgedeki CloudFormation dağıtım eylemleri, Bölgenin artifact deposuna referans vermeli ve en az ayrıcalık için hedef hesapta bir stack yürütme rolü belirtebilir.
Güvenlik, artifact’ler ve yönetişim:
- Artifact bucket’larını özel (private) tutun; authenticated-read gibi genel ACL’lerden kaçının. KMS şifrelemesi ile pipeline ve eylem rollerine göre kapsamı belirlenmiş bucket policy’lerine dayanın.
- Artifact’leri öngörülebilir bir şekilde göndermek için buildspec’leri standartlaştırın (örneğin, EC2/CodeDeploy için uygulama paketi, ECS için taskdef.json ve appspec, Lambda için paketlenmiş şablonlar).
- CodeDeploy aracısının ve temel çalışma zamanının tutarlı olması için EC2’de AMI ön hazırlığı (pre-baking) ile değişmezliği (immutability) teşvik edin; bu, sapmayı (drift) ve dağıtım süresini azaltır.
- Pipeline olaylarını bildirimlere, chat ops’a veya bilet sistemlerine yansıtmak ve manuel onay kapılarını (manual gates) düzenlemek için EventBridge kurallarını kullanın.
Pratik Problem Senaryosu
Spotify, karma bir işlem altyapısına (Fargate üzerinde ECS, EC2 tabanlı hizmetler ve Lambda) sahip yüzlerce mikroservis genelinde daha güvenli yayınlara ihtiyaç duymaktadır. Üretim trafiğinden önce otomatik testlerle canary ve blue/green dağıtımları, artifact yönetişimi ve prod’u ayrı bir hesapta tutarken çok Bölgeli (multi-Region) yükseltme gerektiriyorlar.
- Depoları ve paketleri oluşturun
- Özel (private) repolar ve EventBridge odaklı PR/test otomasyonu için CodeCommit kullanın. CodeArtifact, tedarik zinciri kontrollerini standartlaştırmak için upstream’ler ve KMS şifrelemesi ile npm, Maven ve PyPI bağımlılıklarını barındırır. Neden: Merkezi IAM/KMS entegrasyonu ve kritik depolar için harici webhook’lara gerek olmaması; CodeArtifact, önbelleğe alınmış, seçilmiş paketler sunar.
- Build ve test
- Her hizmet için VPC entegrasyonu, yerel önbellekleme (Docker katmanı ve kaynak) ve Secrets Manager/Parameter Store’dan alınan ortam değişkenleri ile CodeBuild projeleri oluşturun. İmajları build edip ECR’a gönderin; ikincil artifact’ler (taskdef.json/appspec.yaml veya paketlenmiş CloudFormation şablonları) oluşturun. Neden: Geçici, izole build’ler, güçlü secret yönetimi, önbellekleme yoluyla daha hızlı döngüler ve hem container hem de sunucusuz paketlemeyi destekleyen çoklu çıktılar.
- Pipeline’ları düzenleyin
- Bir araç hesabında merkezi bir CodePipeline oluşturun ve şu aşamaları ekleyin: Kaynak (Source), Build, Birim Testleri (Unit Tests), Staging’e Dağıt (Deploy-to-Staging), Otomatik Testler, Manuel Onay, Prod’a Dağıt (Deploy-to-Prod). Tetikleyiciler, CodeCommit güncellemelerinde EventBridge’den gelir; gecelik zamanlanmış bir EventBridge kuralı entegrasyon testlerini başlatır. Neden: Kapıları (gates) olan ve hem olay hem de zamanlama odaklı yürütmelere sahip, görüş bildiren (opinionated), denetlenebilir bir akış.
- Blue/green ve canary dağıtımları
- ECS hizmetleri, iki hedef grubu ve canary trafik kaydırma ile CodeDeploy blue/green kullanır; doğrulama, sözleşme testlerini (contract tests) ve sentetik kontrolleri yürüten bir Lambda aracılığıyla AfterAllowTestTraffic’te çalışır. EC2 hizmetleri, kapasite izin verdiğinde OneAtATime ile CodeDeploy in-place veya blue/green ASG takasları kullanır. Lambda fonksiyonları, Canary10Percent15Minutes ve API Gateway’den gelen Hatalar (Errors) ve 5xx üzerindeki CloudWatch alarmlarını kullanarak CodeDeploy ile dağıtılır. Neden: Çalışma zamanı başına birinci sınıf trafik kontrolleri ve alarm ihlallerinde otomatik geri alma (rollback), müşteri etkisini en aza indirir.
- Hesaplar arası ve Bölgeler arası yükseltme
- Pipeline, dev/test/prod hesaplarında ortama özgü rolleri üstlenir. us-east-1 ve eu-west-1 için, bölgesel artifact depoları ve bölgesel KMS anahtarları yapılandırın; CodeBuild, bölgeye özgü paketlenmiş şablonlar üretir ve artifact’leri Bölgeye yerel bucket’lara yükler. Her hesap/Bölgedeki CloudFormation eylemleri, stack yürütme rollerini kullanır; CodeDeploy eylemleri, ortama özgü uygulamaları/dağıtım gruplarını hedefler. Neden: Prod’un güçlü bir şekilde izolasyonu, rol üstlenme (role assumption) yoluyla en az ayrıcalık ve düşük operasyonel yük ile uyumlu şifreleme.
- Artifact yönetişimi ve güvenliği
- Kısıtlayıcı policy’ler ile S3 artifact bucket’larını özel (private) olmaya zorlayın ve tüm genel ACL’leri kaldırın. Container imajlarını ve şablonları imzalayın; SBOM’ları build artifact’leri olarak saklayın. Üretim eylemlerini araç hesabındaki pipeline’larla sınırlamak için IAM koşul anahtarlarını (condition keys) kullanın. Neden: Veri sızıntısını önler, köken takibini (provenance) iyileştirir ve tedarik zinciri en iyi uygulamalarıyla uyumludur.
- Gözlemlenebilirlik ve bildirimler
- Tüm dağıtım gruplarına CloudWatch alarmları ekleyin; EventBridge kuralları, CodePipeline yürütme ve onay olaylarını bir SNS konusuna ve Slack’e gönderi yapan bir Lambda’ya iletir. Neden: Daha hızlı geri bildirim, otomatik geri almalar ve gerektiğinde insan müdahalesi gerektiren onaylar.
Bu tasarım, heterojen çalışma zamanlarını tek bir yönetilen araç zinciri altında birleştirir, otomatik doğrulamayla güvenli dağıtım stratejileri sunar, kendi barındırdığınız CI/CD altyapısını ortadan kaldırarak bakımı azaltır ve görevlerin net bir şekilde ayrılmasıyla küresel olarak ölçeklenir.
Tüm alanlar · Kod Olarak Altyapı ve Yapılandırma Yönetimi →
Bu soruları çözün → · ExamRoll.io’da süreli pratik →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
Sınavınızı geçin →