Son-dan Sona AWS DevOps Projesi: Amazon EKS Üzerinde Java Uygulaması Derleme ve Dağıtımını Otomatikleştirme
Merhaba! Bu makalede, Amazon EKS üzerinde bir Java uygulamasının derlenmesi ve dağıtımının nasıl otomatikleştirileceğini kapsayan kapsamlı bir uçtan uca AWS DevOps projesine dalacağız. DevOps’u benimsemek, geliştirme ve operasyon ekiplerinin işbirliğini geliştirerek yazılım teslimatını hızlandıran ve daha güvenilir bir geliştirme süreci oluşturan bir yaklaşımdır. AWS, çeşitli araçlar ve hizmetler sağlayarak DevOps uygulamaları için ideal bir platform sunar. Amazon Elastic Kubernetes Service (EKS), Kubernetes’i yönetilen bir hizmet olarak sunarak containerized uygulamaları dağıtmak ve yönetmek için güçlü ve esnek bir çözüm sunar.
Proje Genel Bakış
Bu projede, bir Spring Boot uygulaması oluşturacak, onu bir Docker görüntüsü olarak paketleyecek ve EKS kümesi üzerinde dağıtacağız. Ayrıca, derleme, test ve dağıtım adımlarını otomatikleştirmek için AWS CodePipeline ve CodeBuild gibi hizmetleri kullanacağız. Tüm bu süreç, kod deposu olarak GitHub’ı kullanarak yönetilecektir.
Gereksinimler
Bu proje için şunlara ihtiyacınız olacak:
- Bir AWS hesabı
- GitHub hesabı
- AWS CLI
- Docker
- Java Development Kit (JDK)
- Maven
Proje Adımları
1. Java Uygulamasını Oluşturma
İlk adım, Spring Boot uygulamasını oluşturmaktır. Spring Initializr web sitesini kullanarak kolayca bir temel proje oluşturabilirsiniz: https://start.spring.io/. İhtiyaç duyulan bağımlılıkları eklediğinizden emin olun (örneğin, web, spring-boot-starter-web). Projeyi yerel makinenize indirin.
2. Docker Görüntüsü Oluşturma
Bir Docker görüntüsü oluşturmak için, proje dizinine bir Dockerfile ekleyin. Aşağıdaki Dockerfile, Java uygulamanızı çalıştırmak için temel bir ortam sağlar:
“`dockerfile
FROM openjdk:11-jre-slim
WORKDIR /app
COPY target/*.jar app.jar
ENTRYPOINT [“java”, “-jar”, “app.jar”]
“`
Bu Dockerfile, OpenJDK 11 tabanlı bir görüntü kullanır, çalışma dizinini ayarlar, oluşturulan JAR dosyasını kopyalar ve uygulamayı başlatmak için bir giriş noktası tanımlar. Dockerfile’ı oluşturduktan sonra, aşağıdaki komutla Docker görüntüsünü oluşturun:
“`bash
docker build -t my-java-app .
“`
3. GitHub Deposuna Ekleme
Dockerfile’ı ve projenizi GitHub’a ekleyin. Bu, kodun versiyon kontrolünü sağlayacak ve CodePipeline’a entegre etmenizi sağlayacaktır.
4. AWS EKS Kümesi Oluşturma
EKS kümesini, AWS konsolu veya AWS CLI’yı kullanarak oluşturabilirsiniz. EKS kümesinin oluşturulması, Kubernetes’i barındırmak için gerekli alt yapı bileşenlerini sağlayacaktır. EKS kümenizi oluşturmak için AWS CLI’yi kullanmak istiyorsanız, aşağıdaki komutları kullanabilirsiniz:
“`bash
aws eks create-cluster –name my-eks-cluster –region us-east-1 –role-arn arn:aws:iam::[hesap_id]:role/[rol_ismi]
“`
5. AWS CodePipeline Oluşturma
CodePipeline, derleme, test ve dağıtım gibi birden çok adım içeren bir yazılım teslimat süreçlerini otomatikleştirmek için kullanılabilen bir sürekli entegrasyon ve sürekli dağıtım (CI/CD) hizmetidir. CodePipeline’ı oluşturmak için AWS konsolunu kullanabilir veya AWS CLI’yi kullanabilirsiniz.
6. CodePipeline’a CodeBuild Aşaması Ekleme
CodeBuild, kodunuzun derlenmesini ve test edilmesini otomatikleştirmek için kullanılabilen bir tamamen yönetilen derleme hizmetidir. CodePipeline’a bir CodeBuild aşaması eklemek için, CodePipeline konsolunu kullanabilir veya AWS CLI’yi kullanabilirsiniz. CodeBuild aşamasını yapılandırırken, bir derleme görüntüsü, derleme komutları ve çıktı artefaktları gibi bilgileri belirtmeniz gerekecektir. CodeBuild’ı yapılandırmak için AWS CLI’yi kullanmak isterseniz, aşağıdaki komutları kullanabilirsiniz:
“`bash
aws codebuild create-project –name my-codebuild-project –source {
“type”: “GITHUB”,
“location”: “https://github.com/[kullanıcı_adı]/[depo_adı]”,
“buildspec”: “buildspec.yml”
} –artifacts {
“type”: “S3”,
“location”: “s3://[kovalama_kovası]/build”
}
“`
Burada `buildspec.yml` dosyası, CodeBuild’ın nasıl davranacağını tanımlar. Aşağıdaki bir örnek `buildspec.yml` dosyasıdır:
“`yaml
version: 0.2
phases:
install:
runtime-versions:
java: openjdk11
commands:
– echo “Installing dependencies…”
– mvn clean install
build:
commands:
– echo “Building Docker image…”
– docker build -t my-java-app .
post_build:
commands:
– echo “Pushing Docker image to ECR…”
– docker push [hesap_id].dkr.ecr.[bölge].amazonaws.com/[depo_adı]/my-java-app
artifacts:
type: docker
image: [hesap_id].dkr.ecr.[bölge].amazonaws.com/[depo_adı]/my-java-app
cache:
paths:
– ‘/root/.m2/**’
“`
7. CodePipeline’a EKS Dağıtım Aşaması Ekleme
CodePipeline’a EKS dağıtım aşaması eklemek için, CodePipeline konsolunu veya AWS CLI’yi kullanabilirsiniz. EKS dağıtım aşamasını yapılandırırken, Kubernetes manifestinin konumunu, küme bilgilerini ve dağıtım stratejisini belirtmeniz gerekecektir. Dağıtım aşaması için AWS CLI’yi kullanmak isterseniz, aşağıdaki komutları kullanabilirsiniz:
“`bash
aws codepipeline create-pipeline –name my-codepipeline –role-arn arn:aws:iam::[hesap_id]:role/[rol_ismi] –artifact-store {
“type”: “S3”,
“location”: “s3://[kovalama_kovası]”
} –stages {
“name”: “Source”,
“runOrder”: 1,
“actions”: {
“name”: “Source”,
“actionTypeId”: {
“category”: “Source”,
“owner”: “AWS”,
“provider”: “GitHub”,
“version”: “1”
},
“configuration”: {
“Owner”: “[kullanıcı_adı]”,
“Repo”: “[depo_adı]”,
“Branch”: “main”
},
“outputArtifacts”: [
{
“name”: “SourceArtifact”
}
]
}
}, {
“name”: “Build”,
“runOrder”: 2,
“actions”: {
“name”: “Build”,
“actionTypeId”: {
“category”: “Build”,
“owner”: “AWS”,
“provider”: “CodeBuild”,
“version”: “1”
},
“configuration”: {
“ProjectName”: “my-codebuild-project”
},
“inputArtifacts”: [
{
“name”: “SourceArtifact”
}
],
“outputArtifacts”: [
{
“name”: “BuildArtifact”
}
]
}
}, {
“name”: “Deploy”,
“runOrder”: 3,
“actions”: {
“name”: “Deploy”,
“actionTypeId”: {
“category”: “Deploy”,
“owner”: “AWS”,
“provider”: “ECS”,
“version”: “1”
},
“configuration”: {
“ClusterName”: “my-eks-cluster”,
“ServiceRoleArn”: “arn:aws:iam::[hesap_id]:role/ecsTaskExecutionRole”,
“LaunchType”: “FARGATE”,
“TaskDefinition”: “my-java-app”,
“ApplicationName”: “my-java-app”,
“DeploymentConfigName”: “CodePipelineDefault”
},
“inputArtifacts”: [
{
“name”: “BuildArtifact”
}
]
}
}
“`
Burada, `my-codebuild-project` CodeBuild projesinin adı, `my-eks-cluster` EKS kümesinin adı ve `ecsTaskExecutionRole` EKS kümesi üzerinde görevleri çalıştırmak için gerekli olan IAM rolünün adıdır.
8. Uygulamayı Dağıtma
CodePipeline’ı oluşturduktan sonra, kodunuzu GitHub deposuna ittiğinizde otomatik olarak yürütülecektir. CodePipeline, derleme aşamasını, dağıtım aşamasını ve sonunda Java uygulamanızı EKS kümesi üzerinde dağıtacaktır.
Sonuç
Bu makale, AWS EKS’de bir Java uygulaması oluşturmak, derlemek ve dağıtmak için uçtan uca bir DevOps projesi oluşturma adımlarını gösterdi. Bu proje, CI/CD boru hattınızı otomatikleştirmek ve yazılım teslimat sürecini hızlandırmak için AWS CodePipeline ve CodeBuild gibi araçları kullanarak DevOps ilkelerini uygular. Bu projenin, AWS’de DevOps uygulamalarına başlamak için sağlam bir temel oluşturmanıza yardımcı olacağını umuyorum.
Bu makalede bahsedilen kavramlar hakkında daha fazla bilgi edinmek istiyorsanız, fatihsoysal.com web sitemi ziyaret edebilir ve benzer konuları içeren diğer makalelerime göz atabilirsiniz.
