2024-11-25Hünkar Döner

EKS ile CI/CD Pipeline Entegrasyonu (GitHub Actions)

CI/CDGitHub ActionsEKSDevOps
E

EKS ile CI/CD Pipeline Entegrasyonu (GitHub Actions)

Modern yazılım geliştirmede hız her şeydir. Geliştiricinin yazdığı kodun, testlerden geçip Amazon EKS üzerindeki canlı ortama ulaşması dakikalar içinde ve el değmeden olmalıdır. Bu sürece CI/CD (Sürekli Entegrasyon / Sürekli Dağıtım) denir. En popüler CI araçlarından biri olan GitHub Actions ile EKS entegrasyonunu nasıl yapacağınızı anlatacağız.

Pipeline Adımları

Bir EKS dağıtım pipeline'ı genellikle şu adımlardan oluşur:

  1. Checkout: Kodun GitHub'dan çekilmesi.
  2. Configure AWS Credentials: GitHub runner'ın AWS hesabınıza erişmesi için yetkilendirilmesi (OIDC kullanın, Access Key değil!).
  3. Login to ECR: Docker imajını yüklemek için Amazon ECR'a giriş.
  4. Build & Push: Docker imajının oluşturulması ve ECR'a yüklenmesi.
  5. Update Kubeconfig: kubectl komutunun EKS ile konuşabilmesi için config dosyasının güncellenmesi.
  6. Deploy: kubectl apply veya helm upgrade ile uygulamanın güncellenmesi.

GitHub OIDC ile Güvenli Bağlantı

GitHub Actions'a AWS Access Key ve Secret Key vermek güvenlik riskidir. Bunun yerine OpenID Connect (OIDC) kullanın. AWS IAM'de bir "Identity Provider" oluşturarak, sadece sizin GitHub reponuzdan gelen isteklere geçici yetki verebilirsiniz.

Örnek Workflow Dosyası (.github/workflows/deploy.yml)

name: Deploy to EKS
on:
  push:
    branches: [ main ]
permissions:
  id-token: write
  contents: read
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: aws-actions/configure-aws-credentials@v2
        with:
          role-to-assume: arn:aws:iam::123456789012:role/GitHubActionRole
          aws-region: eu-central-1
      - run: |
          aws eks update-kubeconfig --name my-cluster
          kubectl set image deployment/my-app my-app=123456789012.dkr.ecr.eu-central-1.amazonaws.com/my-app:${{ github.sha }}

Bu basit pipeline, her commit sonrası uygulamanızı EKS üzerinde günceller.