Amazon DVA-C02: Dağıtım ve CI/CD (CodePipeline, CodeBuild, CodeDeploy, Elastic Beanstalk, Konteynerler) — Çalışma kılavuzu
Şunun bir parçası: AWS Developer Associate DVA-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.
CodePipeline ve CodeBuild ile CI/CD temelleri: desenler, API’ler ve sık karşılaşılan tuzaklar
Pipeline’ları kaynak, derleme, test, onay, dağıtım ve dağıtım sonrası doğrulama gibi net aşamalarla tasarlayın. CodePipeline bu aşamaları koordine eder; minimum ve kapsamı belirlenmiş izinler veren bir pipeline rolü kullanın ve üçüncü taraf entegrasyonları için eylem rollerini yapılandırın. Pipeline’ları CodeCommit webhook’ları aracılığıyla veya programatik olarak tetiklemek için StartPipelineExecution (AWS SDK: codepipeline.startPipelineExecution) ile başlatın. Derlemeler için, aşamaları (install, pre_build, build, post_build) tanımlayan buildspec.yml dosyasına sahip CodeBuild projelerini tercih edin; anlık veya toplu derlemelere ihtiyacınız olduğunda derlemeleri doğrudan StartBuild veya StartBuildBatch ile çağırın. İmaj derlemeleri için, pre_build aşamasında aws ecr get-login-password komutunun çıktısını docker login’e yönlendirin, ardından ECR’a docker build/push yapın ve değişmez (immutable) artifact referansları üretmek için imaj digest’ini yakalayın. “latest” gibi değişken etiketleri kullanmaktan kaçının; bunun yerine, dağıtımların deterministik olması için imaj digest’lerine referans veren task definition’ları veya manifest dosyaları oluşturun. Sık karşılaşılan tuzaklara dikkat edin: uzun süren betiklerde süresi dolmuş ECR kimlik doğrulama token’ları, ECR’a push yapmak veya AWS API’lerini çağırmak için yetersiz CodeBuild IAM politikaları ve ARN’lerin hard-code edilmesi. Derlemeleri, artifact’leri S3’e veya pipeline artifact deposuna yükleyecek şekilde düzenleyin ve hassas, yalnızca çalışma zamanında kullanılacak değerler için bu verileri derleme artifact’lerinin içine gömmek yerine ortam değişkenlerini ve Parameter Store/Secrets Manager’ı kullanın.
Dağıtım stratejileri: CodeDeploy, Lambda alias’ları ve Elastic Beanstalk yapılandırma seçenekleri
Risk toleransınıza ve geri alma (rollback) ihtiyaçlarınıza uyan dağıtım modelini seçin. Lambda için, versiyonları ve alias’ları kullanın; bir versiyon yayınlayın (lambda.publishVersion) ve Lambda uygulamasını ve dağıtım grubunu referans alan bir dağıtım (codedeploy.createDeployment) oluşturarak CodeDeploy aracılığıyla trafik kaydırma kurallarıyla alias’ları güncelleyin. Hassas canary veya doğrusal (linear) geçişler için CodeDeployDefault.LambdaCanary10Percent5Minutes gibi CodeDeploy’un yerleşik yapılandırmalarını veya özel trafik yönlendirmeyi kullanın. EC2 ve şirket içi (on-prem) uygulamalar için CodeDeploy, trafik öncesi doğrulamalar için yaşam döngüsü kancalarına (lifecycle hooks) ve sağlık kontrolü hatalarında otomatik geri almaya sahip blue/green dağıtımı destekler. Elastic Beanstalk birden fazla politika sunar: All at Once (hızlı, riskli), Rolling, Rolling with Additional Batch (daha güvenli) ve Immutable (en güvenli). Bunları, DeploymentPolicy ve OptionSettings belirterek eb deploy veya update-environment API’si ile değiştirebilirsiniz. Geliştiricilerin düştüğü yaygın tuzaklar arasında, otomatik trafik geçişini engelleyen uygulama sağlık kontrollerini (ALB hedef grubu sağlığı, EB sağlık raporlaması) yapılandırmayı unutmak ve CodeDeploy’un Lambda’yı çağırması veya ECS’yi güncellemesi için yetersiz IAM izinleri bulunur. Veritabanı destekli sürümler için, kod ve şemayı aynı işlemde birbirine bağlamaktan kaçınmak amacıyla geriye dönük uyumlu şema değişikliklerini ve dağıtım öncesi özellik bayraklarını (feature toggles) göz önünde bulundurun.
Konteyner pipeline’ları, ECR, ECS/Fargate ve EKS: derleme, dağıtım ve değişmez (immutable) referanslar
Sağlam bir konteyner pipeline’ı, imajları CodeBuild’da derler, ECR’a push eder ve ECS, Fargate veya EKS’e dağıtımı tetikler. CodeBuild’da, aws ecr get-login-password | docker login –username AWS –password-stdin ${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com komutunu çalıştırın, ardından docker build -t repo:tag ., docker push yapın ve docker inspect –format=’{{index .RepoDigests 0}}’ image aracılığıyla imaj digest’ini yakalayın. ECS/Fargate için, containerDefinitions içinde imaj digest’i ile yeni task definition’ı kaydedin (ecs.registerTaskDefinition), ardından yeni task definition’ı kullanmak için servisi güncelleyin (ecs.updateService) veya değişimi tetiklemek için forceNewDeployment’ı ayarlayın; ALB seviyesinde trafik kaydırma ile ECS blue/green dağıtımları için CodeDeploy kullanın. EKS için, imaj digest’lerine referans vermek üzere Kubernetes manifest’lerini güncelleyin ve kubectl set image komutunu uygulayın veya deklaratif GitOps araçları kullanın; CodeBuild, aws eks update-kubeconfig ve kubectl komutlarını çalıştırabilir. Tipik tuzaklar: güncel olmayan dağıtımlara neden olan değişken etiketler kullanmak, ECS’nin yeni imajları dağıtmasını engelleyen task definition’larını güncellemeyi ihmal etmek, Fargate task’larında yetersiz CPU/bellek veya ENI limitleri ve CodeBuild’a push edilmiş imajları okuması için ecr:BatchGetImage iznini vermeyi unutmak.
Dağıtım öncesi doğrulama, geri almalar ve gözlemlenebilirlik: testler, hook’lar ve operasyonel güvenlik önlemleri
Otomatikleştirilmiş birim (unit), entegrasyon ve duman (smoke) testlerini pipeline aşamalarına entegre edin. Testleri çalıştırmak için CodeBuild’u, izleme (tracing) ve yapılandırılmış loglar için AWS X-Ray veya CloudWatch Logs’u kullanın; sonraki sorguların kullanıcıya veya istek niteliklerine göre filtreleme yapabilmesi için SDK’lardaki PutAnnotation ile X-Ray izlerini (trace) notlandırın. Dağıtım öncesi için CodePipeline’da manuel onay eylemleri veya otomatikleştirilmiş doğrulayıcı adımları kullanın: dağıtılan endpoint’i deneyen Canary kontrollerini CodeBuild aracılığıyla çalıştırın veya betiklenmiş doğrulamaları çalıştırmak için CloudWatch Synthetics canary’lerini çağırın. Sağlık kontrollerini ve (de)registrasyon mantığını çalıştırmak için CodeDeploy yaşam döngüsü hook’larını (BeforeAllowTraffic, AfterAllowTraffic) kullanın. Otomatik geri alma tetikleyicileri uygulayın: sıfır olmayan dağıtım durumunda veya başarısız alarmlarda (dağıtım grubuna eklenmiş CloudWatch alarmları) geri alması için CodeDeploy’u yapılandırın ve Lambda için, alias’ı önceki sürüme işaret edecek şekilde güncelleyerek hızlı geri almayı sağlamak amacıyla trafik kaydırmalı alias’lar kullanın. Geliştiricilerin düştüğü tuzaklar arasında uyumsuz zaman aşımları (Lambda zaman aşımının SQS görünürlük zaman aşımından daha kısa olması), ECS/CodeDeploy için AppSpec hook’larını doğru şekilde ayarlamayı unutmak ve çalışma zamanı davranışını doğrulamadan dağıtım API çağrılarının başarısına güvenmek yer alır. Dağıtımları metrikler ve alarmlarla donatın ve izlenebilirlik için artifact’lerde (yapıt) değişmez (immutable) tanımlayıcılar kullanın.
Pratik Problem: Kullanım Senaryosu
Senaryo: ExampleRetail, dev/test/prod hesapları genelinde AWS üzerinde bir mikroservis vitrini çalıştırmaktadır. Kaynak kontrolü için CodeCommit, CI için CodePipeline/CodeBuild, imajlar için ECR, bir ALB arkasındaki servisler için ECS/Fargate ve asenkron çalışanlar için Lambda kullanıyorlar.
Zorluk: Bir geliştiricinin, canary trafik kaydırma ve başarısızlık durumunda geri alacak otomatik dağıtım öncesi doğrulama özelliklerine sahip, yeni bir ödeme (checkout) servisi container’ını dağıtmak için güvenli, otomatik bir pipeline eklemesi gerekiyor.
Önerilen Yaklaşım:
- Docker imajını oluşturan, birim testlerini çalıştıran, ECR’a giriş yapan (aws ecr get-login-password | docker login –username AWS –password-stdin ${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com), imajı push’layan ve imaj özetini (digest) içeren bir JSON artifact’i (yapıt) yayan bir CodeBuild projesi oluşturun.
- CodePipeline’da, imaj özetine referans vererek ecs.registerTaskDefinition aracılığıyla yeni bir ECS görev tanımı (task definition) kaydeden, ardından yeni görev tanımını bağlayan bir AppSpec ve canary için ayarlanmış bir deploymentConfig (ör. CodeDeployDefault.ECSCanary10Percent5Minutes) ile codedeploy.createDeployment’ı çağırarak bir CodeDeploy ECS dağıtımı oluşturan bir dağıtım aşaması ekleyin.
- Kritik ödeme (checkout) endpoint’lerini çağıran ve yanıtları doğrulayan bir dağıtım sonrası testi olarak CodeBuild tabanlı bir doğrulama eylemi veya bir CloudWatch Synthetics canary’si ekleyin; pipeline’ın başarılı doğrulama için beklemesini sağlayın.
- Eşikler aşılırsa dağıtımı otomatik olarak iptal etmek ve geri almak için CodeDeploy geri alma seçeneklerini ve dağıtım grubuna bağlı bir CloudWatch alarmını (ör. 5xx hata oranı veya gecikme) yapılandırın.
Gerekçe: Değişmez (immutable) imajlar oluşturmak, görev tanımlarını açık imaj özetleriyle (digest) kaydetmek ve CodeDeploy’un trafik kaydırma artı otomatik doğrulama özelliklerini kullanmak, dağıtımların tekrarlanabilir ve gözlemlenebilir olmasını sağlarken güvenli canary sürümleri ve hızlı, otomatik geri alma imkanı sunar.
← CloudFormation ve Kod Olarak Altyapı (SAM · Tüm alanlar · Güvenlik →
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 →