Terraform에서 GitOps까지: 11개의 마이크로서비스로 엔드‑투‑엔드 DevOps 플랫폼 구축

발행: (2026년 1월 15일 오전 09:18 GMT+9)
10 min read
원문: Dev.to

Source: Dev.to

이 문서에서는

  • Terraform를 사용하여 점프호스트를 프로비저닝한 방법
  • Ansible로 점프호스트를 구성한 방법
  • 보너스: 이 프로젝트를 구축하면서 AWS CostWatch를 사용해 AWS 비용을 실시간으로 모니터링하기

대상 독자

  • 프리 티어 사용자
  • 자신의 노트북 터미널에서 모든 작업을 수행하고 싶은 사람

보너스: 실시간으로 AWS 비용 모니터링 (AWS CostWatch)

서버가 필요 없습니다 – 노트북 터미널만 있으면 됩니다.

단계별

  1. 리포지토리 복제

    git clone https://github.com/vsaraths/AWS-Cost-Watch.git
    cd AWS-Cost-Watch
  2. 종속성 설치

    pip install boto3 rich sqlite-utils
  3. AWS 자격 증명 구성

    이미 자격 증명이 있는지 확인하세요:

    aws sts get-caller-identity

    아직 자격 증명이 구성되지 않았다면:

    aws configure

    프롬프트가 표시되면 다음을 입력하세요:

    • 액세스 키 ID
    • 시크릿 액세스 키
    • 기본 리전 이름
    • 기본 출력 형식 (선택 사항)
  4. CostWatch 실행

    python3 aws_cost_dashboard.py

    이 도구는 즉시 AWS 계정을 스캔하고 실시간으로 비용 정보를 표시하기 시작합니다.

Terraform & Ansible – Jumphost 구축

아래는 Terraform(인프라)과 Ansible(구성) 을 사용하여 점프호스트를 프로비저닝하는 간결한 단계별 가이드입니다.

1️⃣ 인프라 레포지토리 클론

git clone <REPO_URL>
cd <REPO_DIRECTORY>

<REPO_URL><REPO_DIRECTORY> 를 프로젝트에 맞는 실제 값으로 교체하세요.

2️⃣ AWS CLI 설정 (아직 설정하지 않았다면)

aws configure

Terraform 에 사용할 AWS 자격 증명을 동일하게 입력합니다.

3️⃣ Terraform 상태를 위한 S3 백엔드 생성

cd s3-buckets
# 버킷을 생성하는 Terraform 스크립트를 실행합니다
terraform init
terraform apply -auto-approve

S3 버킷은 Terraform 상태를 원격에 저장하여 안전하고 협업 가능한 인프라 관리를 가능하게 합니다.

3.1️⃣ (선택) 네트워크 인프라 생성

cd ../network
terraform init
terraform apply -auto-approve   # VPC, 서브넷, 라우트 테이블 등을 생성합니다

샘플 검증

terraform state list

4️⃣ 점프호스트 EC2 프로비저닝 (Terraform + Ansible)

cd ../ec2-jumphost
terraform init
terraform apply -auto-approve   # EC2 인스턴스를 생성합니다

인스턴스가 올라간 후, 함께 제공되는 Ansible 플레이북이 필요한 모든 도구를 설치·구성하여 설정을 재현 가능하고 멱등하게 만듭니다.

5️⃣ EC2 인스턴스에 연결하고 Jenkins 접근

# <KEY_NAME>.pem, <PUBLIC_IP> 를 자신의 값으로 교체하세요
ssh -i <KEY_NAME>.pem ec2-user@<PUBLIC_IP>

Git 설치 여부 확인

git --version

Jenkins 관리자 비밀번호 가져오기

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

📌 빠른 요약

단계작업주요 명령
1레포지토리 클론git clone …
2AWS CLI 설정aws configure
3S3 백엔드 생성terraform apply (s3-buckets 디렉터리)
3.1(선택) VPC 구축terraform apply (network 디렉터리)
4점프호스트 생성terraform apply (ec2-jumphost 디렉터리)
5SSH 및 Jenkinsssh …cat …/initialAdminPassword

명령에 -var 플래그를 추가하거나 다른 백엔드를 사용하는 등 환경에 맞게 자유롭게 조정하세요. 즐거운 프로비저닝 되세요!

Jenkins – 설치 및 파이프라인 설정

단계 6 – Jenkins 플러그인 설치

  1. 탐색: Jenkins Dashboard → Manage Jenkins → Plugins
  2. 필요한 플러그인 설치 (예: Git, Docker, Kubernetes, Pipeline 등).
  3. 설치가 완료되면 Jenkins를 재시작합니다 (실행 중인 작업이 없도록 확인).

단계 7 – Jenkins 자격 증명 설정

GitHub Personal Access Token (PAT) 추가:

Jenkins Dashboard → Manage Jenkins → Credentials → (global) → Global credentials (unrestricted) → Add Credentials → Secret text

단계 8 – Jenkins 파이프라인 작업 생성

모든 파이프라인은 동일한 GitHub 저장소를 가리킵니다:

https://github.com/vsaraths/Deploy--E-Commerce-Application-eks-microservices-platform-11-Services-.git

8.1 EKS 클러스터 생성

설정
작업 유형Pipeline (Multibranch)
브랜치 지정자*/main
Build with Parameters → ACTIONcreate-eks-cluster

8.2 Elastic Container Registry (ECR) 생성

설정
작업 유형Pipeline (Multibranch)
브랜치 지정자*/main
Build with Parameters → ACTIONcreate-ecr

다음 명령으로 저장소를 확인합니다:

aws ecr describe-repositories --region us-east-1

8.3 Docker 이미지 빌드 및 ECR에 푸시

각 마이크로서비스마다 별도의 파이프라인 작업(또는 단일 멀티브랜치 작업)을 생성합니다. 아래 표를 참고하여 ACTION 파라미터를 정의합니다.

서비스빌드 파라미터 (ACTION)
emailservicebuild-emailservice
checkoutservicebuild-checkoutservice
recommendationservicebuild-recommendationservice
frontendbuild-frontend
paymentservicebuild-paymentservice
productcatalogservicebuild-productcatalogservice
cartservicebuild-cartservice
loadgeneratorbuild-loadgenerator
currencyservicebuild-currencyservice
shippingservicebuild-shippingservice
adservicebuild-adservice

예시 Jenkinsfile (Groovy)

pipeline {
    agent any
    environment {
        AWS_DEFAULT_REGION = 'us-east-1'
        ECR_REPO = "your-account-id.dkr.ecr.${env.AWS_DEFAULT_REGION}.amazonaws.com/${params.SERVICE}"
    }
    stages {
        stage('Checkout') {
            steps {
                git url: 'https://github.com/vsaraths/Deploy--E-Commerce-Application-eks-microservices-platform-11-Services-.git',
                    branch: 'main'
            }
        }
        stage('Build Docker Image') {
            steps {
                sh "docker build -t ${params.SERVICE}:latest ./services/${params.SERVICE}"
            }
        }
        stage('Login to ECR') {
            steps {
                sh "aws ecr get-login-password | docker login --username AWS --password-stdin ${ECR_REPO}"
            }
        }
        stage('Push Image') {
            steps {
                sh """
                    docker tag ${params.SERVICE}:latest ${ECR_REPO}:latest
                    docker push ${ECR_REPO}:latest
                """
            }
        }
    }
}

각 작업에 맞는 서비스 이름으로 ${params.SERVICE} 를 교체하십시오.

Argo CD – 점프호스트 EC2에 설치

단계 13 – Argo CD 설치

# 13.1 Create a namespace for Argo CD
kubectl create namespace argocd

# 13.2 Install Argo CD manifests
kubectl apply -n argocd \
  -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

# 13.3 Verify the installation
kubectl get pods -n argocd   # All pods should be in the Running state.

# 13.4 (Optional) Validate the cluster nodes
kubectl get nodes

Argo CD UI에 접근하기 (포트‑포워드 예시)

kubectl port-forward svc/argocd-server -n argocd 8080:443
# Then open https://localhost:8080 in your browser.

요약

  1. AWS 비용을 실시간으로 모니터링 – CostWatch 사용.
  2. 재사용 가능한 점프호스트를 Terraform + Ansible으로 프로비저닝.
  3. Jenkins를 설정하고, 필요한 플러그인, 자격 증명, 그리고 EKS, ECR 및 모든 마이크로서비스용 파이프라인을 구성.
  4. 점프호스트에 Argo CD를 설치하여 GitOps 배포를 관리.

이러한 단계를 따르면 반복 가능하고 디버깅이 용이하며 프로덕션 준비가 된 DevOps 기반을 구축할 수 있습니다. 즐거운 개발 되세요!

테스트 포드 (필요한 경우)

kubectl get nodes

13.5 – 모든 ArgoCD 리소스 나열하기

출력 생략.

13.6 – LoadBalancer 로 ArgoCD 서버 노출하기

13.6.1 – ArgoCD 서버 서비스 편집

  1. ArgoCD 서버 서비스 매니페스트(예: argocd-server-svc.yaml)를 찾습니다.

  2. 다음 줄을 찾아 교체합니다:

    Original snippet

    type: ClusterIP   # '
        send_resolved: true

    Updated snippet

    type: LoadBalancer

    Note: send_resolved: true 라인은 Alertmanager 설정에 해당하므로 ArgoCD 서비스 매니페스트에서 제거해야 합니다.

  3. 변경 사항을 적용합니다

    kubectl apply -f argocd-server-svc.yaml

13.6.2 – Alertmanager Pod 재시작

kubectl rollout restart deployment/kube-prom-stack-alertmanager -n monitoring

⚠️ Gmail users: Gmail을 통해 알림을 보내야 하는 경우, “보안 수준이 낮은 앱 허용”을 활성화하거나 Google 계정 보안 설정에서 앱 비밀번호를 생성하십시오. 이렇게 하면 Gmail SMTP 서버를 사용할 때 Alertmanager가 인증할 수 있습니다.

CPU 사용량 알림 규칙 추가

cpu-alert-rule.yaml 파일을 생성합니다:

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: cpu-alert
  namespace: monitoring
spec:
  groups:
    - name: cpu.rules
      rules:
        - alert: HighCPUUsage
          expr: sum(rate(container_cpu_usage_seconds_total{namespace="argocd"}[5m])) by (pod) > 0.7
          for: 2m
          labels:
            severity: warning
          annotations:
            summary: "CPU usage > 70% on pod {{ $labels.pod }}"
            description: "CPU usage has been above 70% for more than 2 minutes."

규칙을 적용합니다:

kubectl apply -f cpu-alert-rule.yaml

Prometheus 서비스 편집

서비스 유형을 LoadBalancer 로 변경하고 (Alertmanager와 동일한 단계) 변경 사항을 적용합니다.

Prometheus LoadBalancer IP 가져오기

kubectl get svc -n monitoring kube-prom-stack-prometheus

예시 URL

http://a1b2c3d4.us-east-1.elb.amazonaws.com:9090

이제 Prometheus, Grafana에 접근할 수 있으며, CPU 사용량이 정의된 한도를 초과하면 이메일 알림을 받을 수 있습니다.

🎉 Final Checklist

  • ✅ Prometheus & Grafana installed
  • ✅ Grafana dashboards imported (Kubernetes, Argo CD, etc.)
  • ✅ Alertmanager reachable via LoadBalancer and email alerts configured
  • ✅ CPU/RAM metrics for your Argo CD app visible in Grafana

You’re all set! 🎉

Back to Blog

관련 글

더 보기 »