[ ECS — XII] CodePipeline ile ECS Fargate(Rolling Update)
AWS CodePipeline, dağıtım platformu olarak Amazon ECS ve Fargate dahil olmak üzere bir çok AWS platformlarında barındırılan uygulamaların Continuous Delivery(Sürekli Teslimat) ve Continuous Deployment(Sürekli Dağıtım) için bir devOps servisidir.
Biz de oluşturduğumuz yapının son parçası olarak bir pipeline tasarlayacağız. Bu pipeline üç adımdan oluşacak. Kaynak kodun bulunduğu repository ile entegrasyon, kaynak koddaki dockerfile’in build edilip yeni image’ın ECR servisindeki repomuza gönderilmesi(bu adımı bir önceki yazıda bulabilirsiniz) ve ECS Service’ine deploy aşaması.
CodePipeline’da container tabanlı bir uygulama dağıtımı gerçekleştirirken JSON formatında dağıtılacak image tanımları içeren bir dosya ister. Bu dosya varsayılan olarak imagedefinitions.json diye adlandırılır. İsterseniz farklı bir isimlendirme kullanabilirsiniz. Imagedefitions dosyası container adını, image Url’i bilgilerini içeren bir dosyadır.
Bu dosyayı pipeline’nın deploy adımında input artifact olarak kullanmak için bir önceki yazımızda oluşturduğumuz buildspec.yml dosyasını güncelleyelim.
Bunun için CodeBuild servisinde oluşturduğumuz ecsSample-CodeBuild projesinde edit -> buildspec adımlarını takip edelim.
Bu ekleme ile imagedefinitions.json dosyasını örnek formatta olduğu gibi oluşturuyoruz.
Artık CodePipeline servisine geçerek pipelinemızı oluşturmaya başlayalım.
Step 1: Bu adımda pipeline bir isim verelim. Advanged Settings alanında pipelinedaki artifactleri depolamak için isterseniz default olarak amazonun oluşturduğu S3 bucketını kullanabilir ya da kendi oluşturacağınız bir S3 bucketını seçebilirsiniz.
Step 2 : Bu adımda uygulamanızı barındırdığınız source providerda bulunan ilgili repository’i ve ilgili branchi belirtmeniz gerekiyor.
Step 3 : Build adımı. Biz kullanacağımız build projesini bir önceki yazımızda hazırlamıştık. Eğer hazır bir codebuild projeniz yoksa bu adımda da Create Project diyerek oluşturabilirsiniz.
Step 4 : Deploy adımı. Bu adımda dağıtımın nereye gerçekleşeceğinizi ve oluşturduğumuz imagedefinitions dosyasını belirtmemiz gerekiyor. Daha önceki yazımızda oluşturduğumuz ECS Service’ni bulunduğu cluster ile birlikte seçelim.
Review adımına göz attıktan sonra pipelinemızı oluşturalım.
Artık hedefimize ulaştık. Pipeline CodeCommit repository’imizdeki master branchinde bir değişiklik olduğunda branchdeki kaynak kod alınıp codebuild’e gönderir. Build projesi kaynak koddaki dockerfile build edip image’ı oluşturur. Oluşturulan image ECR servisindeki belirtilen repository’e gönderilir. Oluşturulan image’in ImageUrl’i container adıyla birlikte imagedefinitions.json dosyasına yazılır. Pipeline bu dosyadaki bilgileri kullanarak belirtilen ECS Service’ine dağıtımı başlatır.
Şimdi yaptıklarımızı adım adım takip edelim. CodeCommit servisinde bulunan repository’e gidip master branchine bir değişiklik yapıp commit oluşturalım.
Commiti oluşturduktan sonra oluşturduğumuz pipeline’a gidip süreci takip edebilirsiniz. CodeBuild servisinde buildspec.yml dosyasını oluştururken hatırlarsanız oluşan imageların commit id ‘ye göre tagleyip ECR servisindeki repository’e göndermiştik. CodeCommit repositoryden commitlere gidip attığımız commitin id’sini aklımızda tutalım.
ECR servisindeki repository’e giderek doğru commit numarasıyla taglenip taglenmediğini kontrol edelim.
Gördüğünüz gibi buraya kadar planladığımız herşey işlemiş.
Pipeline kontrol edip eğer deploy süreciniz tamamlandıysa ilgili application load balancer’ın DNS Name ile uygulamamıza erişelim. Yaptığımız değişikliği görüntüleyelim.
NOT : Oluşturduğumuz pipelinenın settings kısmında artifact olarak kullanılan S3 bucketına gittiğinizde codepipeline servisinin her adımın artifactlerine klasörler oluşturduğunu göreceksiniz. Klasörlerin içindeki zip dosyalarını indirip incelerseniz BuildArtifact klasörünün içerisinde imagedefinitions.json dosyalarının SourceArtifact klasörünün içerisinde ise ilgili branchteki kaynak kodların bulunduğu görebilirsiniz.
Bu yazı ile birlikte CI/CD sürecini de tamamlamış olduk. Bir sonraki yazıda deployment tipi Blue/Green Deployment olan yeni bir ECS service oluşturarak mevcut pipeline’ı B/G deployment’a uyarlayacağız.
[ ECS — II ] Kullanılacak Servislerin Tanıtımı ve IAM Rolleri Oluşturulması (✓)
[ ECS — III] ECS Terminoloji (✓)
[ ECS — IV] Docker Imageları ECR Repositorylerinde Yayınlama (✓)
[ ECS — V] ECS Fargate Task Definition Oluşturma (✓)
[ ECS — VI] ECS Fargate Task Çalıştırma (✓)
[ ECS — VII] ECS Fargate Service Oluşturma (✓)
[ ECS — VIII] Application Load Balancer ile ECS Fargate Service Oluşturma (✓)
[ ECS — IX] Rolling Update vs Blue/Green Deployment (✓)
[ ECS — XI] AWS CodeBuild Servisi ile ECS Fargate (✓)
[ ECS — XII] CodePipeline ile ECS Fargate(Rolling Update) (✓)
[ ECS — XIII] CodePipeline ile ECS Fargate(Blue/Green Deployment) (✓)