AWS Service - ECR ECS EKS

2026. 4. 1. 10:29·Public Cloud/AWS

Amazon ECR (Elastic Container Registry)

ECR은 도커(Docker) 컨테이너 이미지를 저장하고 관리하는 보관소입니다.

  • 역할: 개발자가 작성한 코드를 컨테이너 이미지로 빌드한 뒤, 이를 안전하게 저장합니다.
  • 특징: AWS IAM과 연동되어 권한 관리가 강력하며, ECS나 EKS에서 이미지를 불러와 배포할 때 가장 빠르고 안정적입니다.

 

Amazon ECS (Elastic Container Service)

AWS에서 자체 개발한 컨테이너 오케스트레이션(관리) 서비스입니다.

  • 역할: ECR에 저장된 이미지를 가져와서 실제 서버(EC2 또는 Fargate)에서 실행하고 관리합니다.
  • 장점: 설정이 간단하고 배우기 쉽습니다.
    • 비용 효율: 클러스터 관리 비용(Control Plane)이 무료입니다. (사용한 리소스 비용만 지불)
    • 네이티브 통합: AWS의 다른 서비스(ALB, IAM, CloudWatch 등)와 매우 긴밀하게 연결되어 있습니다.
  • 단점: AWS 전용 도구이므로 다른 클라우드(GCP, Azure)로 옮길 때 설정 등을 다시 해야 합니다(Lock-in 가능성).

 

Amazon EKS (Elastic Kubernetes Service)

Kubernetes(K8s)를 AWS 환경에서 운영할 수 있도록 관리해주는 서비스입니다.

  • 역할: 대규모의 복잡한 컨테이너 환경을 전문적으로 관리합니다.
  • 장점: 유연성과 확장성: 오픈 소스인 Kubernetes의 모든 생태계(Helm, ArgoCD, Istio 등)를 그대로 사용할 수 있습니다.
    • 이식성: 다른 클라우드나 온프레미스 환경으로 서비스 이전이 비교적 자유롭습니다.
  • 단점: Kubernetes 자체의 난이도가 매우 높습니다.
    • 비용: 클러스터당 시간당 비용($0.10/hour, 월 약 7~8만 원)이 기본적으로 발생합니다.

 

비교하기

구분 ECR ECS EKS
주요 역할 이미지 저장/관리 컨테이너 배포/운영 Kubernetes 기반 배포/운영
관리 난이도 낮음 중간 높음
비용 저장 용량당 과금 사용한 인프라만 과금 클러스터 요금 발생 + 인프라 과금
추천 대상 모든 컨테이너 사용자 소규모~중간 규모, 빠른 배포 중시 대규모, 복잡한 마이크로서비스(MSA)

 

실습

인스턴스 세팅

더보기

Docker 및 awscli 설치

# Docker 설치
DOCKER_USER=ubuntu

sudo apt update
sudo apt-get update && sudo apt-get install -y \
  apt-transport-https \
  ca-certificates \
  curl \
  gnupg \
  lsb-release
  
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --yes --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  
sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io

sudo usermod -aG docker $DOCKER_USER

# awscli 설치
sudo apt update && sudo apt install unzip -y
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

# 설치 확인
aws --version

 

 

 AWS 로그인

aws configure

실습 - ECR

Simple Notification Service 생성

AWS에서 ECR 검색 → 리포지토리→ 리포지토리 생성

 

 

 

Docker 클라이언트가 AWS의 컨테이너 저장소(ECR)에 접근할 수 있도록 인증 토큰을 발급받아 로그인

 

 

 

방금 만든 AWS 리포지토리에 이미지 업로드

# min-nginx:v1.0는 임의로 만든 이미지
# 해당 이미지 태그 생성 후 배포
docker tag min-nginx:v1.0 799581472868.dkr.ecr.ap-northeast-2.amazonaws.com/min-nginx:v1.0
docker push 799581472868.dkr.ecr.ap-northeast-2.amazonaws.com/min-nginx:v1.0

 

 


실습 - ECS

클러스터 생성

AWS에서 ECS 검색 → 클러스터 → 클러스터 생성

 

 

 

새 태스크 정의 생성

AWS에서 ECS 검색 → 태스크 정의 → 새 태스크 정의 생성

 

 

 

아까 만든 min-ECS-cluster-00 클러스터에 들어가 태스크 생성

 

 

 

최종적으로 빌드된 Docker 이미지를 ECS 클러스터에 배포하여 실제 컨테이너 서비스로 구동시킬 수 있습니다


실습 - EKS

IAM 역할 추가

더보기

EKS 역할 추가

AmazonEKSClusterPolicy,

AmazonEKSVPCResourceController

 

AWS 검색창에 IAM 검색 -> 역할 -> 역할 생성 (EKS)

 

 

EC2 역할 추가

AmazonEC2ContainerRegistryReadOnly,

AmazonEKS_CNI_Policy,

AmazonEKSWorkerNodePolicy

AmazonSSMManagedInstanceCore

 

AWS 검색창에 IAM 검색 -> 역할 -> 역할 생성 (EC2)

 

 

최종 역할 추가 및 권한

 

 

 

인스턴스에 k8s 관리도구 및 eks 설치/운영도구

더보기

k8s 관리도구 - kubectl

# https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/install-kubectl.html
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.34.2/2025-11-13/bin/linux/amd64/kubectl
chmod +x ./kubectl
mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
kubectl version --client

 

eks 설치/운영 도구 - eksctl

# https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/eksctl.html
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
mv /tmp/eksctl /usr/local/bin

 

 

`cluster.yaml` 생성

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: min-cluster
  region: ap-northeast-2

vpc:
  id: vpc-0b4d781f8ccbee1d0
  subnets:
    public:
      ap-northeast-2a:
        id: subnet-0e39b2043ad66619a
      ap-northeast-2c:
        id: subnet-071965700e6b84141

iam:
  withOIDC: true

managedNodeGroups:
  - name: min-nodeGroup
    instanceType: t3.medium
    desiredCapacity: 2
    minSize: 1
    maxSize: 2
    privateNetworking: false
    subnets:
      - subnet-0e39b2043ad66619a
      - subnet-071965700e6b84141
    iam:
      withAddonPolicies:
        imageBuilder: true
        autoScaler: true
        ebs: true
    ssh:
      allow: true
      publicKeyName: min-01

 

 

 

`cluster.yaml` 실행

eksctl create cluster -f cluster.yaml

 

 

 

설치 중간에 오류났을 경우

더보기

설정한 두개의 서브넷에 `퍼블릭 주소 자동 할당 활성화` 체크

 

 

 

기존에 설치 되던 cluster 제거  

eksctl delete cluster --region=ap-northeast-2 --name=min-cluster

 

 

재설치

eksctl create cluster -f cluster.yaml

 

 

테스트용 `nginx-00.yaml` 생성

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: docker.io/box8741/min-nginx:v1.0
          ports:
          - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30080

 

 

 

nginx 접근을 위한 인바운드 규칙 추가

 

 

 

`curl <<EXTERNAL-IP>>:30080` 로 접근이 된다면 성공!

'Public Cloud > AWS' 카테고리의 다른 글

AWS Service - ELB  (0) 2026.04.02
AWS Service - Route53  (0) 2026.04.02
AWS Service - VPC Peering  (0) 2026.04.02
AWS  (0) 2026.04.02
AWS Load Balancer Controller와 SVC 연결 실습  (0) 2026.04.01
'Public Cloud/AWS' 카테고리의 다른 글
  • AWS Service - Route53
  • AWS Service - VPC Peering
  • AWS
  • AWS Load Balancer Controller와 SVC 연결 실습
민콕이
민콕이
안녕하세요
  • 민콕이
    공부 내용 정리 블로그
    민콕이
  • 전체
    오늘
    어제
    • 분류 전체보기 (55)
      • Network R&S (16)
      • Frontend (7)
      • Windows & Linux (16)
      • Database (2)
      • Docker (2)
      • Kubernetes (1)
      • Private Cloud (1)
      • Public Cloud (8)
        • AWS (8)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
  • 링크

    • github
    • velog
  • 공지사항

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
민콕이
AWS Service - ECR ECS EKS
상단으로

티스토리툴바