amazon ecs/ecr을 활용하여 마이크로서비스 구성하기 - 김기완 (aws...

75
© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 김기완, 솔루션즈 아키텍트 2017111Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기

Upload: amazon-web-services-korea

Post on 23-Jan-2018

492 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

김기완, 솔루션즈 아키텍트

2017년 11월 1일

Amazon ECS/ECR을 활용하여마이크로서비스 구성하기

Page 2: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

강연 중 질문하는 법

자신이 질문한 내역이 표시되며, 전체 공개로 답변된 내용은 검은색,

질문자 본인에게만 공개로 답변된 내용은 붉은 색으로 돌아옵니다.

Page 3: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

본 세션의 주요 주제

• 마이크로서비스 아키텍쳐 이해• 도커 컨테이너에 대하여• Amazon EC2 Container Service• Amazon EC2 Container Registry• AWS에서 Service Discovery 구성하기• ECS/ECR 기반의 DevOps 환경

Page 4: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

마이크로서비스 아키텍쳐

Page 5: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

마이크로서비스 아키텍쳐란?In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.

James Lewis & Martin Fowler, https://martinfowler.com/articles/microservices.html

Monolithic vs. MicroserviceLibraries vs. Services

개별적인 기능별로 구성된 팀 vs. 비즈니스 중심의, 기능이 섞여 있는 서비스 단위 팀차세대 vs. 소리소문 없는 끊임없는 기능 업데이트

Page 6: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

마이크로서비스 아키텍쳐의 이점

• 빠른 개발 속도 : 개발 언어 선택의 자유로움, 서비스 팀의

역량만으로 가능

• 빠른 배포 속도 및 병렬 배포 : 각 마이크로서비스간 독립된 배포

파이프라인 (CI/CD)

• DevOps팀과 통합된 운영 : 서비스에 대한 Ownership!

• 확장성, 가용성 : 마이크로서비스 특성에 맞는 확장성/가용성 설계

• 비즈니스 도메인과 밀접하게 연결 : Lean Cycle

Page 7: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

마이크로서비스 아키텍쳐 공통 구성 요소

• 모든 서비스들에 적용되는 공통 요소들 :

• 서비스 등록 및 제거 (Registration/Deregistration)

• 서비스 검색 (Discovery) 및 가용성 관리 (Healthiness)

• 서비스 메타데이터 관리 (Oauth, …)

• 서비스 버전 관리

• 서비스 별 Cache 관리

• 빠르고 효율적인 배포 환경 관리

• 자동화된 관리 및 모니터링

Page 8: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

마이크로서비스 설계의 고려 사항

• 모든 마이크로서비스는 :

• 탄력적(Elastic)이어야 함 (다른 서비스들과는 무관한 스케일

업/다운)

• 단위 리소스의 장애를 견디어야 함 (Resilient)

• 통일된 API 인터페이스를 가져야 함 (Composable)

• 작게 유지되어야 함 (Minimal)

• 다른 서비스들과는 독립적이어야 함 (Complete)

Page 9: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

마이크로서비스 구성 요소

Client DataStore

DiscoveryGateway BusinessDomain

MicroservicesAPI

Page 10: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

마이크로서비스 구성 요소 + DevOps

Client DataStore

DiscoveryGateway BusinessDomain

Version Control Repository

Continuous Integration

Continuous Delivery

MicroservicesAPI

DevOps Pipeline

Page 11: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

마이크로서비스 구성 요소 + DevOps

Client DataStore

DiscoveryGateway BusinessDomain

Version Control Repository

Continuous Integration

Continuous Delivery

MicroservicesAPI

DevOps Pipeline

API GatewayElastic LoadBalancing Amazon ECSElastic

BeanstalkLambda

DynamoDB RDS

AWS CodeCommit

Amazon ECR

AWS CodeDeploy

AWS CodeBuild

AWS CodePipeline

AWS CodeStar

AWS X-Ray

Page 12: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

도커 컨테이너

Page 13: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

마이크로서비스 vs. 도커 컨테이너“Capital One은 빠르게 클라우드에 최적화된 마이크로서비스 아키텍쳐를 받아들이고 있으며, 새로운 워크로드 및 기존의워크로드에도 적용해 나가고 있습니다. 마이크로서비스 적용을 고도화하고, 클라우드 자원들의 효율성을 높이며인프라스트럭쳐로부터 어플리케이션 레이어를 분리하기 위해서 Docker를 사용하여 워크로드들을 컨테이너화 (Containerize)하기시작하였고, Amazon EC2 Container 서비스를 사용하여 컨테이너들을 관리하고 있습니다.

도커를 통하여 과거에는 수 분, 여러 시간, 여러 날들이 걸리던 배포를 수 초만에 어디든지 원하는 곳에 (Dev/QA/Performance/Prod) 배포할 수 있게 되었습니다.”

https://aws.amazon.com/blogs/compute/microservice-delivery-with-amazon-ecs-and-application-load-balancers/

도커 컨테이너는:

• 작게 유지되고,

• 빠르게 배포되며,

• 스케일 업/다운이 쉽고 빠르며,

• 인프라스트럭쳐에 대한 종속성이 없음

마이크로서비스는:

• 작게 유지되어야 하고 (Minimal),

• 빠르게 병렬로 배포되며,

• 스케일 업/다운이 쉽고 빨라야 하며,

• 서비스간의 종속성이 없어야 함

Page 14: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

하지만,,,

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Page 15: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

도커를 마이크로서비스에 적용시 고려사항

1. 도커 컨테이너에 대한 Orchestration

2. 마이크로서비스를 사용하기 위한 배포 파이프라인 구성

3. 마이크로서비스에 대한 서비스 Discovery 방법

4. 마이크로서비스에 대한 모니터링 (가용성, 성능관리)

Page 16: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

도커 컨테이너에 대한 Orchestration

• 도커 컨테이너에 대한 스케줄링 (배치? 서비스?)

• 컨테이너 클러스터에 대한 자원 사용량 모니터링 및 자원 분배

• Auto Scaling / Load Balancing

• 이미지 레파지토리 관리

Docker Swarm: https://docs.docker.com/docker-for-aws/

Kubernetes: https://aws.amazon.com/quickstart/architecture/heptio-kubernetes/

오늘은 Amazon EC2 Container Service, EC2 Container Registry에 대해 자세히

알아봅니다!

Page 17: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon EC2 Container Service

Page 18: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

시작하기 전에…

Page 19: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon EC2 Container Service (ECS)

유연한 컨테이너배치 기능

모든 규모의컨테이너 관리

AWS 에서플랫폼으로 통합

별도의 어플리케이션이 필요 없는 컨테이너운영 매니지드 서비스

Page 20: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS 구성 요소

• 클러스터• 작업이 실행되는 EC2

인스턴스의 함대

• 작업 정의 (Task Definitions)• 작업에 대한 컨테이너 및

환경의 정의

• 작업 (Task)• 인스턴스에서 실행되는 실제

컨테이너 작업

클러스터 관리 엔진클러스터 리소스 및 작업 상태관리

스케줄러클러스터 상태를 고려한 작업배치

에이전트EC2 인스턴스 및 매니저와통신

Page 21: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS 구성 요소: 클러스터

DockerTask

EC2 instance

Container

DockerTask

EC2 instance

TaskDocker

EC2 instance

Task

AZ 1 AZ 2

Container Container Container

Page 22: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS 구성 요소: 클러스터 관리 엔진

DockerTask

EC2 instance

Container

DockerTask

EC2 instance

TaskDocker

EC2 instance

Task

AZ 1 AZ 2

Container Container Container

Cluster Management Engine

Page 23: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS 구성 요소: 클러스터 관리 엔진

DockerTask

EC2 instance

Container

DockerTask

EC2 instance

TaskDocker

EC2 instance

Task

AZ 1 AZ 2

Container Container Container

Cluster Management Engine

ECS agentECS agentECS agent

Agent Communication Service

Page 24: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS 아키텍쳐

ALB ALB

AZ 1 AZ 2

user/scheduler

Scheduler

Cluster State Service

Placement Engine

Event Stream

Internet

ECS agent ECS agent ECS agent

Page 25: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS 구성 요소: 작업 정의 (Task Definition)

Volume definitions

Container definitions

Page 26: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS 구성 요소: 작업 정의 (Task Definition)◉ AWS 관리 콘솔 u ECS u Task Definitions u Create new Task Definitions u Add container

u Add volumes

Page 27: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS 구성 요소: 작업 정의 (Task Definition)◉ AWS 관리 콘솔 u ECS u Task Definitions u Create new Task Definitions u Configure via JSON

Page 28: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS 구성 요소: 작업 (Task)

Data Volume

Containers

스케줄링EC2

instanceVolume definitions

Container definitions

• ECS 클러스터에서 업무를 수행하는 단위

• 관련 있는 하나 혹은 하나 이상의 컨테이너들의 모임

• ECS 클러스터에 속하는 인스턴스에 배포

Page 29: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS 구성 요소: 서비스 (Service)

• 작업 정의와 작업 개수를 기반으로 클러스터 내 서비스 생성

• 설정한 작업 개수로 컨테이너 이상 시 자동 복구

• Elastic Load Balancing을 통한 컨테이너 부하 분산 설정 가능

• Auto Scaling 설정 가능

Page 30: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS 구성 요소: 서비스 (Service)◉ AWS 관리 콘솔 u ECS u Clusters u Services u Create

Page 31: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS 구성 요소: 서비스 (Service)◉ AWS 관리 콘솔 u ECS u Clusters u Services u Create

Page 32: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 스케줄링 – 컨테이너 배치

클러스터 제약조건

커스텀 제약조건

배치 전략

필터 적용

CPU, 메모리 및 포트 요구 사항

위치, 인스턴스 유형, AMI, 사용자정의 속성 제약에 대한 필터링

배치 전략을 충족하는인스턴스 식별

배치 할 최종 컨테이너인스턴스 선택

Name Example

AMI ID attribute:ecs.ami-id == ami-eca289fb

Availability Zone

attribute:ecs.availability-zone == us-east-1a

Instance Type

attribute:ecs.instance-type == t2.small

Distinct Instances type=“distinctInstance”

Custom attribute:stack == prod

Page 33: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 스케줄링 – 컨테이너 배치 전략

Binpacking Spread Affinity Distinct Instance

Page 34: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 스케줄링 – 컨테이너 배치 전략 (1)

g2.2xlarge t2.small g2.2xlarge g2.2xlarge

특정 인스턴스 타입에 배치

Page 35: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 스케줄링 – 컨테이너 배치 전략 (2)

특정 인스턴스 타입 및 AZ를 선택하여 배포

g2.2xlarge t2.small t2.micro t2.medium

t2.medium t2.small g2.2xlarge

t2.small

t2.small t2.medium

us-east-1aus-east-1d

Page 36: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 스케줄링 – 컨테이너 배치 전략 (3)

Availability Zone별 분산 (spread)

g2.2xlarge t2.small t2.micro t2.medium

t2.medium t2.small g2.2xlarge t2.small

us-east-1aus-east-1d

g2.2xlarge t2.medium

t2.micro t2.small

us-east-1c

Page 37: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 스케줄링 – 컨테이너 배치 전략 (4)

Availability Zone별 분산 후 Binpack (메모리에 따라)

g2.2xlarge t2.small t2.micro t2.medium

t2.medium t2.small g2.2xlarge t2.small

us-east-1aus-east-1d

g2.2xlarge t2.medium

t2.micro t2.small

us-east-1c

Page 38: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 스케줄링 – 컨테이너 배치 전략 (6)

t2.medium g2.2xlarge t2.micro t2.small

t2.small t2.small g2.2xlarge t2.small

t2.small t2.small

g2.2xlarge t2.small

Page 39: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 스케줄링 – 컨테이너 배치 예

◉ AWS 관리 콘솔 u ECS u Clusters u Services u Create u Task Placement

Page 40: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 모니터링 로깅 – ECS 메트릭

• 2개 Dimensions• ClusterName• ServiceName

• 4개 지표• CPUReservation• MemoryReservation• CPUUtilization• MemoryUtilization Container

Instance

Cluster

Task definition

Task

Service

CloudWatchECS Metrics

#docker top

CloudWatchEC2 Metrics

Container Instance

Page 41: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 모니터링 로깅 – ECS 클러스터 모니터링

• Reservation• 클러스터 인스턴스의 task들이 예약한 CPU,메모리의 백분율

• Utilization• 클러스터 인스턴스의 task들이 사용한 CPU,메모리의 백분율

(Total CPU units / MiB of memory used by tasks in cluster)------------------------------------------------------------------------------------------- x 100(Total CPU units / MiB of memory registered by container instances in cluster)

(Total CPU units / MiB of memory reserved by tasks in cluster)------------------------------------------------------------------------------------------- x 100(Total CPU units / MiB of memory registered by container instances in cluster)

Page 42: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 모니터링 로깅 – ECS 클러스터 모니터링

◉ AWS 관리 콘솔 u ECS u Clusters u Metrics

Page 43: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 모니터링 로깅 – ECS 서비스 모니터링

• Utilization• CPU, 메모리 기준 서비스에 지정된 Task가 사용하는 CPU 및 메모리의 백분율

예) c4.large 인스턴스 (2,048 CPU, 3,768 MiB)----------------------------------------------서비스 내 Task1개 (512 CPU, 1024MiB 예약)

일정 기간 Task가 CPU 단위 2,048개 사용, 메모리 512MiB 사용-> CPU 사용률 400%, 메모리 사용률 50% 보고됨

(Total CPU units / MiB of memory used by tasks in cluster)----------------------------------------------------------------------------------------------------- x 100

(Total CPU units / MiB of memory reserved in task definition) x (number of tasks in service)

Page 44: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 모니터링 로깅 – ECS 서비스 모니터링

◉ AWS 관리 콘솔 u ECS u Clusters u Services u Metrics

Page 45: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 모니터링 로깅 – CloudWatch Logs를 활용한 로그 처리

CloudWatch Logs Amazon S3

Amazon Kinesis

AWS Lambda

Amazon Elasticsearch Service

Amazon ECS Store

Stream

Process

Search

CloudWatch Logs

CloudWatch Logs

CloudWatch Logs

Page 46: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 모니터링 로깅 – CloudWatch Logs logging driver

Page 47: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 오토 스케일링

Page 48: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 오토 스케일링: 컨테이너 드레이닝

ECS cluster instances

Auto Scaling “scale in” event

Page 49: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 오토 스케일링: 컨테이너 드레이닝

ECS cluster instancesAmazon

SNS

Auto Scaling Lifecycle hook

Page 50: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 오토 스케일링: 컨테이너 드레이닝

ECS cluster instances

Amazon ECS

Lambda function

AmazonSNS

Set (instance_ID, “draining”)

Page 51: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 오토 스케일링: 컨테이너 드레이닝

ECS cluster instances

Amazon ECS

Lambda function

AmazonSNS

Set (instance_ID, “draining”)

If ECSDescribeTasks(instance_ID) == NULL CompleteLifecycleAction(instance_ID)

ElsePrint(“Still running some tasks”)

Page 52: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 오토 스케일링: 컨테이너 드레이닝

ECS cluster instances

Amazon ECS

Lambda function

AmazonSNS

Set (instance_ID, “draining”)

If ECSDescribeTasks(instance_ID) == NULL CompleteLifecycleAction(instance_ID)

ElsePrint(“Still running some tasks”)

Complete Lifecycle hook

Page 53: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 로드 밸런싱: ELB & ALB

• ELB port와 컨테이너 port의 고정적 관계 필요• 예) ELB port 80 -> 컨테이너 port 3030 매핑가능

ELB port 80 -> 컨테이너 port 3030과 다른 컨테이너port 4040 동시 매핑 불가

Classic Load Balancer

Application Load Balancer

동적 호스트 Port 매핑 지원

예) 컨테이너 port 80 지정 -> 호스트 port 0 지정 시 임시 포트범위 (Amazon ECS AMI 기준 32768 ~ 61000) 에서 포트 동적 할당

-> Port 기반 라우팅, 우선 순위 규칙 지원으로 다른여러 서비스에 단일 ALB 동일한 리스너 port 사용 가능

Page 54: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 로드 밸런싱: ELB & ALB

HTTP/HTTPSTCP/SSL

ELB

example.com/app2example.com/app1

app1

app2

app1/app2

ELB

EC2 Instance

EC2 Instance

EC2 Instance

EC2 Instance

EC2 Instance

EC2 Instance

ALB

Page 55: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS: 로드 밸런싱: ALB를 활용한 ECS 컨테이너 로드 밸런싱

Container Instance

Container

Container

Target Group

Container

Container

Target GroupALB

Page 56: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon EC2 Container Registry

Page 57: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon EC2 Container Registry (ECR)

• 보안• IAM 리소스 기반 정책활용• 전송및 저장시 이미지암호화 (HTTPS, SSE)

• 손쉬운 이미지 관리 및 배포• ECS와 통합• 독립적인 서비스• Docker CLI와 통합• 관리콘솔 & AWS CLI를 통한 제어

• 가용성 & 성능• S3 기반• Regional Endpoints• 수백 건의 동시 pull처리

Page 58: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECR 셋업

# Authenticate Docker to your Amazon ECR registry> aws ecr get-login> docker login -u AWS -p <password> -e none https://<aws_account_id>.dkr.ecr.us-east-1.amazonaws.com> docker login -u AWS -p <password> -e none https://<aws_account_id>.dkr.ecr.us-east-1.amazonaws.com

# Create a repository called ecr-demo> aws ecr create-repository --repository-name ecr-demo

# Push an image to your repository> docker push <aws_account_id>.dkr.ecr.us-east-1.amazonaws.com/ecr-demo:v1

Page 59: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECR Docker Credential Helper

• https://github.com/awslabs/amazon-ecr-credential-helper

• docker-credential-ecr-login 바이너리를 PATH에 설정• ~/.docker/config.json 파일 설정:

{ "credsStore": "ecr-login" }

• Push and pull images from ECR without docker login

Page 60: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Service Discovery options on AWS

Page 61: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Service Discovery 구성 요소

Registry

Health Checks

Metadata store

Page 62: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Service Discovery: ELB 사용

• CloudWatch Events, Lambda 및 Route53 private hosted zone을

사용하여 자동으로 구성

• Route53이 service registry로 사용됨

• ECS의 Service API에 따라 Lambda를 사용하여 레코드를 추가/삭제

Page 63: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Service Discovery: ELB 사용

https://github.com/awslabs/ecs-refarch-service-discovery

Page 64: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Service Discovery: ELB 사용

Page 65: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Service Discovery: DNS 사용

• 컨테이너 인스턴스에 agent를 설치하여 사용 (open source,

ecssd_agent.go)

• Agent가 service name, IP, port를 route53 private hosted zone에

추가 (SRV record)

• lambda_health_check.py를 통해 문제가 있는 service를 cleanup

(scheduled lambda function)

Page 66: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Service Discovery: DNS 사용

https://github.com/awslabs/service-discovery-ecs-dns

Page 67: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Service Discovery: DNS 사용

Page 68: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Service Discovery: 여러 AWS Service 활용

Route53Registry

Health Checks

Metadata storeDynamoDB

Page 69: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Service Discovery: 여러 AWS Service 활용

Registry

Health Checks

Metadata store

DynamoDB

ELB

Parameter Store

Page 70: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Service Discovery: 3rd party tools

• Weaveworks

• Consul

• etcd

• Zookeeper

• Eureka

• and more

Page 71: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Service Discovery: Consul

Page 72: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Service Discovery: Consul

Page 73: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

ECS/ECR 기반의 DevOps 환경

Page 74: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

Amazon ECS Continuous Deployment

https://github.com/awslabs/ecs-refarch-continuous-deployment

Page 75: Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

질문에 대한 답변 드립니다.

발표자료/녹화영상 제공합니다.http://bit.ly/awskr-webinar

더 나은 세미나를 위해여러분의 의견을 남겨 주세요!