sol 개발 블로그 로고
Published on

AWS와 Docker (2)

Authors
  • avatar
    Name
    Chan Sol OH
    Twitter

목차

이번 포스팅은 AWS와 Docker (1)을 이어서 AWS의 도커 관련 서비스를 정리하려고한다.

ECR

ECR은 Elastic Contrainer Registry의 약자로 AWS에 도커 이미지를 저장하고 관리하는 데 사용한다. ECR은 계정에 한해 비공개로 저장하는 방식과 ECR Public Gallery에 저장하여 공개하는 방식이 있다. ECR은 ECS와 완전히 통합 가능하고 이미지는 백그라운드에서 S3에 저장된다.

ECS 클러스터의 EC2 인스턴스에 ECR의 이미지를 끌어오기 위해서는 EC2 인스턴스에 IAM 역할을 지정하면된다. 즉, ECR에 대한 모든 접근은 IAM이 보호하고 있다.

ECR은 단순히 이미지를 저장하는 기능이 끝이 아니라 이미지의 취약점 스캐닝, 버저닝, 태그 및 수명 주기 확인을 지원한다.

AWS CLI를 통해 ECR 이미지 풀, 푸시하기

  1. Login Command로 CLI로 ecr에 로그인한다. 아래 로그인을 통해 도커 자격 증명을 얻게된다.
    Login
    aws ecr get-login-password --region [region] | docker login --username [username]
    --password-stdin [aws 계정 id].dkr.ecr.[region].amazonaws.com
    
  2. Docker Command로 이미지를 풀 및 푸시한다.
    Push
    docker push [aws 계정 id].dkr.ecr.[region].amazonaws.com/[이미지 이름]:[버전]
    
    Pull
    docker pull [aws 계정 id].dkr.ecr.[region].amazonaws.com/[이미지 이름]:[버전]
    
    도커 이미지를 풀, 푸시하지 못하는 이유는 올바른 IAM 권한을 가지고 있지 않다는 뜻이다.

AWS Copilot

AWS Copilot은 컨테이너화된 production-ready 애플리케이션을 빌드하고 릴리즈하는 CLI 툴이다. AppRunner, ECS, 그리고 Fargate에서 앱을 쉽게 실행시킬 수 있다.

인프라를 설정하는 대신 앱을 빌드하는 데 집중할 수 있고, ECS, VPC, ELB, ECR 등과 같은 복잡한 인프라를 Copilot이 준비해준다, 심지어 CodePipeline과 통합해서 명령어 하나만으로 컨테이너를 자동 배포할 수 있다.

위와 같은 장점 말고도 다중 환경 배포, 문제 해결, 로그 확인, health 체크 등등 CLI나 YAML 파일을 이용해 마이크로 서비스 애플리케이션의 아키텍처를 형성한다. 그 다음 Copilot CLI를 이용해 애플리케이션을 컨테이너화하고 배포한다.

AWS EKS

EKS란 Elastic Kubernetes Service의 약자로 관리형 Kubernetes 클러스터를 AWS에서 시작하기 위한 수단이다.

Kubernetes는 Docker 애플리케이션의 자동 배포, 스케일링 및 관리를 위한 오픈 소스 시스템이다. ECS를 대체할 수 있는 시스템으로 컨테이너를 실행한다는 목적은 비슷하지만, 다른 API를 제공한다. Kubernetes는 ECS와 달리 오픈 소스라서 많은 클라우드 제공자가 사용하기 때문에 어느 정도 표준화되어 있다.

EKS는 2가지 시작 모드를 지원한다. 워커 노드를 배포하고 싶다혐 EC2를 선택할 수 있고, 서버리스 컨테이너를 배포하고 싶다면 Fargate 모드를 선택할 수 있다.

EKS를 사용하는 경우는 회사가 이미지 Kubernetes를 사내에서 또는 다른 클라우드에서 이미 사용하고 있거나 단지 Kubernetes API를 이용하고 싶은 경우, 그리고 AWS를 이용해 Kubernetes 클러스터를 관리하고 싶은 경우가 있다.

Kubernetes is cloud-agnostic (다른 클라우드 제공자에서도 사용할 수 있는 기술)

EKS 아키텍쳐

  • EKS Pods : ECS의 태스크와 유사하게 몇 종류의 컨테이너를 생성할지 결정한다.
  • EKS Worker Node : ECS에서 EC2 인스턴스와 동일한 의미를 가진다.

한 Worker node 안에 여러 컨테이너를 EKS Pod라고 하고 그런 Worker Node는 ASG로 관리할 수 있다.

EKS Node Types

  • Managed Node Groups : EC2 인스턴스를 노드로써 생성하고 관리한다. 이런 노드는 EKS 서비스 자체에서 관리하는 ASG의 일부이며 온디맨드 및 스팟 인스턴스를 지원한다.
  • Self-Managed Nodes : 노드를 직접 생성한 다음 EKS 클러스터에 등록하고 자체 노드를 ASG의 일부로서 관리해야한다. 이때 사전 설치된 EKS 최적화 AMI를 사용할 수 있어 시간을 절약할 수 있다. 온디맨드 및 스팟 인스턴스를 지원한다.
  • AWS Fargate : 아무런 노드도 관리되지 않기 때문에 관리가 필요없다.

EKS에서 Data Volume 연결

StorageClass 매니페스트를 지정해서 EKS 클러스터에 Data Volume을 연결할 수 있다. 이때 Container Storage Interface(CSI) 호환 드라이버라는 것을 활용한다. Amazon EBS, Fargate와 함께 작동하는 유일한 스토리지 클래스 유형인 EFS, FSx for Lustre, FSx for NetApp ONTAP이 있다.