56
스타트업과 개발자들을 위한 AWS 클라우드 태권 Amazon EC2 & Auto Scaling 제대로 활용하기 김상필 솔루션즈 아키텍트, 한국아마존웹서비스

Cloud Taekwon 2015 - Amazon EC2 & Auto Scaling 제대로 활용하기

Embed Size (px)

Citation preview

스타트업과 개발자들을 위한 AWS 클라우드 태권

Amazon EC2 & Auto Scaling

제대로 활용하기

김상필

솔루션즈 아키텍트, 한국아마존웹서비스

스타트업과 개발자들을 위한 AWS 클라우드 태권

Amazon EC2 제대로 사용하기

EC2 기초

인스턴스 수명주기

EC2 인스턴스 종류

AMI(Amazon Machine Image) 사용

EC2 인스턴스 부트스트래핑(Bootstrapping)

CloudWatch를 통한 EC2 모니터링

오토스케일링 (Autoscaling)

스타트업과 개발자들을 위한 AWS 클라우드 태권

Amazon EC2 제대로 사용하기

EC2 기초

인스턴스 수명주기

EC2 인스턴스 종류

AMI(Amazon Machine Image) 사용

EC2 인스턴스 부트스트래핑(Bootstrapping)

CloudWatch를 통한 EC2 모니터링

오토스케일링 (Autoscaling)

스타트업과 개발자들을 위한 AWS 클라우드 태권

EC2 기초

클라우드 내 가상 서버들

한 개에서 수천개의 인스턴스들로 확장

모든 공개 AWS 지역 (region)

필요에 따라 생성, 시작, 중단, 구성, 모니터링

모든 소프트웨어 설치 : 웹, 비지니스애플리케이션,클라이언트/서버, 배치 프로세싱

사용한 용량에 대해서만 비용 지불

다양한 비용 모델

Amazon EC2

스타트업과 개발자들을 위한 AWS 클라우드 태권

온디맨드(On-demand)

예약(Reserved)

스팟(Spot)

전용(Dedicated)

1년 또는 3년 예약온디맨드보다 최대 75%

저렴한 시간 당 비용

시간 당 컴퓨팅 용량 비용지불 장기 계약 필요 없음

사용되지 않는 EC2 용량에대하여 비용 입찰

고객 전용 하드웨어 상의VPC에 인스턴스 런치

고객은 현재 상황 및 용량 수요 예측에 따라 비용을 최적화하기 위하여 다양한구매 옵션을 고려할 수 있음

증감하는 부하 확정된 사용률 시간 무관한 부하 매우 민감한 부하

EC2 기초: 비용 모델

스타트업과 개발자들을 위한 AWS 클라우드 태권

Amazon EC2 제대로 사용하기

EC2 기초

인스턴스 수명주기

EC2 인스턴스 종류

AMI(Amazon Machine Image) 사용

EC2 인스턴스 부트스트래핑(Bootstrapping)

CloudWatch를 통한 EC2 모니터링

오토스케일링 (Autoscaling)

스타트업과 개발자들을 위한 AWS 클라우드 태권

프로비저닝 및 수명주기

생성(Create) -> 시작(Start) ->

중지(Stop) -> 종료(Terminate)

콘솔에서 수동관리

API(또는 기타 툴)로 자동관리

디맨드 기반의 자동화 (수요곡선)

스타트업과 개발자들을 위한 AWS 클라우드 태권

Amazon EC2 제대로 사용하기

EC2 기초

인스턴스 수명주기

EC2 인스턴스 종류

AMI(Amazon Machine Image) 사용

EC2 인스턴스 부트스트래핑(Bootstrapping)

CloudWatch를 통한 EC2 모니터링

오토스케일링 (Autoscaling)

스타트업과 개발자들을 위한 AWS 클라우드 태권

인스턴스 종류

HS1

M1

C1

CC2

HI1CG1

M2

CR1

38개의 “현재 세대” 인스턴스 종류

15개의 “이전 세대” 인스턴스 종류

M4 C3

I2G2

C4 D2

R3

스타트업과 개발자들을 위한 AWS 클라우드 태권

다양한 종류의 인스턴스

M3

범용

M1

컴퓨팅 최적화

C3

C1 CC2

스토리지 최적화

D2I2

HI1

G2

GPU

CG1

메모리 최적화

R3

M2 CR1

C4

HS1

M4

스타트업과 개발자들을 위한 AWS 클라우드 태권

Amazon EC2 제대로 사용하기

EC2 기초

인스턴스 수명주기

EC2 인스턴스 종류

AMI(Amazon Machine Image) 사용

EC2 인스턴스 부트스트래핑(Bootstrapping)

CloudWatch를 통한 EC2 모니터링

오토스케일링 (Autoscaling)

스타트업과 개발자들을 위한 AWS 클라우드 태권

AMI(아마존 머신 이미지)

사용자 머신 이미지

사용자가 EC2인스턴스로부터 생성한AMI로 다른 계정에 공개

가능

Amazon 관리

각 지역에서 Amazon에의해 관리되는 Linux 및

Windows 이미지들

커뮤니티 관리

다른 AWS 사용자 및마켓플레이스 파트너에의해 관리되고 유지되는

공개 이미지들

스타트업과 개발자들을 위한 AWS 클라우드 태권

AMI(아마존 머신 이미지)

스타트업과 개발자들을 위한 AWS 클라우드 태권

Amazon EC2 제대로 사용하기

EC2 기초

인스턴스 수명주기

EC2 인스턴스 종류

AMI(Amazon Machine Image) 사용

EC2 인스턴스 부트스트래핑(Bootstrapping)

CloudWatch를 통한 EC2 모니터링

오토스케일링 (Autoscaling)

스타트업과 개발자들을 위한 AWS 클라우드 태권

부트스트래핑: 메타데이터 및 사용자데이터

모든 EC2 인스턴스는 로컬 인스턴스의 메타데이터 및사용자 데이터 서비스에 접근권한을 가짐

인스턴스요청

User data

Instance

Meta-data service

스타트업과 개발자들을 위한 AWS 클라우드 태권

부트스트래핑: 메타데이터 및 사용자데이터

메타데이터(Metadata): 인스턴스에 대한 불변의 데이터

인스턴스 내에서 HTTP를 통하여 접근 가능 http://169.254.169.254/latest/meta-data/

인스턴스 내에서 동작하는 스크립트는, 해당 인스턴스에 대한 유용한 정보를 제공할

수 있음 :

• Hostname, AMI ID, Instance ID, Public/Private DNS, Availability Zone

호스트명을 조회하기 위한 메타데이터 사용 예 :

# curl http://169.254.169.254/latest/meta-data/hostname

ip-10-0-1-13.ap-northeast-1.compute.internal

스타트업과 개발자들을 위한 AWS 클라우드 태권

사용자데이터(User Data): 인스턴스 생성 시 최대 16KB 텍스트

까지 인스턴스에 전달

인스턴스 내에서 HTTP를 통하여 접근 가능 -

http://169.254.169.254/latest/user-data/

텍스트는 인스턴스 상의 스크립트에 의하여 파싱(Parsing) 되어

머신을 구성하기 위하여 사용 가능

부트스트래핑: 메타데이터 및 사용자데이터

스타트업과 개발자들을 위한 AWS 클라우드 태권

AMI 내 커스텀 스크립트

(script_runner.py) 가 사용자데이터를

읽고 파싱하여, 부트 시 EC2

인스턴스를 구성

부트스트래핑: 메타데이터 및 사용자데이터

스타트업과 개발자들을 위한 AWS 클라우드 태권

부트스트래핑: 사용자데이터 및 CloudInit

사용자데이터의 내용이 다음과 같이 시작하면 최초 부트 시CloudInit 이 이를 실행 :

• #! (Linux)

• <script> (Windows; 기술적으로 CloudInit이 아닌 EC2Config가 실행)

CloudInit는 Amazon Linux, Ubuntu 및 RHEL AMI들에 설치 됨

EC2Config는 Windows Server AMI들에 설치 됨

CloudInit 및 EC2Config 모두 package repo 또는 source 를 통하여다른 배포판에 설치될 수 있음

스타트업과 개발자들을 위한 AWS 클라우드 태권

부트 시 Apache 및 MySQL을 설치하고 EIP를 할당하는사용자 데이터:

#!/bin/bash

# Install Apache, PHP, and MySQLyum install –y httpd mysql-server

# Attach an Elastic IP to this instanceec2-associate-address \

23.34.45.56 \-i $(curl http://169.254.169.254/latest/meta-data/instance-id)

부트스트래핑: 사용자데이터 및 CloudInit

스타트업과 개발자들을 위한 AWS 클라우드 태권

부트스트래핑: 예제

최신 소프트웨어 설치

S3로부터 데이터 복사

DNS 등록

서비스 기동

패키지 업데이트

재기동

80 포트 오픈

로드밸런서에 등록

장치 마운트

스타트업과 개발자들을 위한 AWS 클라우드 태권

동적으로 구성

• 인스턴스 시작

• 인스턴스 시작 시 액션을 수행하기위하여 메타데이터 서비스 및 cloud-init

사용

• Puppet/Chef/Opsworks 와 같은구성관리도구 사용

vsAMI 생성

• 인스턴스 시작

• 인스턴스 구성

• 인스턴스로부터 AMI 생성

• AMI로부터 새 인스턴스 시작

부트스트래핑

스타트업과 개발자들을 위한 AWS 클라우드 태권

동적으로 구성+AMI 생성

• 인스턴스 시작

• 인스턴스 구성

• 인스턴스로부터 AMI 생성

• AMI로부터 새 인스턴스 시작

• 커스텀 정보의 전달및 인스턴스 생성

이후 태스크 수행을위하여 부트스트래핑

사용

스윗 스팟(Sweet spot)

부트스트래핑

스타트업과 개발자들을 위한 AWS 클라우드 태권

Linux

JEE

Your Code

Log4J

Spring

Hibernate

Struts

Tomcat

Apache

Java App Stack

사용자 애플리케이션을

구동하기 위해 필요한 전체

구성 요소 예제

3가지 AMI/부트스트래핑

기술의 사용

부트스트래핑: AMIs

스타트업과 개발자들을 위한 AWS 클라우드 태권

사전 빌드 및 AMI

인벤토리로부터 배포할 수

있도록 전체적으로

동작하는(Fully-functional)

AMI를 준비

AMIs 인벤토리

Linux

JEE

Your Code

Log4J

Spring

Hibernate

Struts

Tomcat

Apache

Amazon EC2

Linux

JEE

Your Code

Log4J

Spring

Hibernate

Struts

Tom

cat

Apache

Linu

x

JEE

Your Code

Log

4J

Spring

Hibernat

e

Struts

Tomcat

Apa

che

Linux

JEE

Your

Code

Log4J

Spring

Hibe

rnate

Stru

ts

Tomcat

Apache

Linux

JEE

Your Cod

e

Log4J

Spring

Hibernate

Struts

Tomcat

Apache

Java AMI

부트스트래핑: AMI 생성

스타트업과 개발자들을 위한 AWS 클라우드 태권

기본 OS AMI

최소한의 구성 요소(OS, J2EE 및

Chef/Puppet)를 가진 AMI가

배포됨. 그외 모든 구성은

인스턴스 배포 후 Chef/Puppet

등과 같은 구성관리도구를 통하여

일어남

AMIs 인벤토리

Amazon EC2

OS AMI

Fetch on boot

Linux

JEE

Your Code

S3

Hibernate

Tomcat

Log4J

Spring

Struts

Apache

Linux

JEE

Linux

JEEChef/Puppet

Chef/Puppet

scripts

부트스트래핑: 동적 구성

스타트업과 개발자들을 위한 AWS 클라우드 태권

부분적으로 구성된 AMI

부트 시 애플리케이션 코드 및

다른 지원 구성요소를

읽어와서 설치하는 스크립트를

가진 “골든 이미지(Golden

image)”가 배포

AMIs 인벤토리

Amazon EC2

Java AMI

Your Code

S3

Log4J

Spring

Struts

Linux

JEE

Hibernate

Tomcat

Apache

Fetch on boot

Fetch on boot

Linux

JEE

Hibernate

Tomcat

Apache

Linux

JEE

Hibernate

Tomcat

Apache

Linux

JEE

Hibernate

Tomcat

Apache

Linux

JEE

Hibernate

Tomcat

Apache

부트스트래핑: Sweet spot

스타트업과 개발자들을 위한 AWS 클라우드 태권

Why do this?

자동화손이 덜 갈수록, 실수가 적음

가용성자가 치유 능력을

통하여 가용성 향상

보안인스턴스는

기본적으로 보안구성

유연성Shell, Powershell, CloudFormation,

Chef, Puppet, OpsWorks 확장성

대규모 배포 관리및 오토스케일링

효율성적은 시간과

노력으로 자산을관리 및 감사

스타트업과 개발자들을 위한 AWS 클라우드 태권

Do Don’t

Some dos and don’ts

IAM 롤 사용

가능한 키없이 사용

AMI와 동적부트스트래핑 사이의

밸런스 유지

API 액세스 키를 코드에삽입 (그리고 GIT에

퍼블리시) 또는 AMIs생성에 포함 (그리고

공유)

스타트업과 개발자들을 위한 AWS 클라우드 태권

Amazon EC2 제대로 사용하기

EC2 기초

인스턴스 수명주기

EC2 인스턴스 종류

AMI(Amazon Machine Image) 사용

EC2 인스턴스 부트스트래핑(Bootstrapping)

CloudWatch를 통한 EC2 모니터링

오토스케일링 (Autoscaling)

스타트업과 개발자들을 위한 AWS 클라우드 태권

CloudWatch를 통한 EC2 모니터링

스타트업과 개발자들을 위한 AWS 클라우드 태권

Amazon EC2 제대로 사용하기

EC2 기초

인스턴스 수명주기

EC2 인스턴스 종류

AMI(Amazon Machine Image) 사용

EC2 인스턴스 부트스트래핑(Bootstrapping)

CloudWatch를 통한 EC2 모니터링

오토스케일링 (Autoscaling)

스타트업과 개발자들을 위한 AWS 클라우드 태권

Scaling의 종류

수직적 Scaling(Scale Up/Down)

• 인스턴스 종류를 변경

• EBS 용량 증가

r3.8xlarge

c3.2xlarge

m3.medium

스타트업과 개발자들을 위한 AWS 클라우드 태권

수직적 스케일링

다른 EC2 인스턴스 종류• High memory instances

• High CPU instances

• High I/O instances

• High storage instances

인스턴스의 크기 변경이 용이

결국 한계점에 도달

인스턴스 Stop/Start가 필요

r3.8xlarge

c3.2xlarge

m3.medium

스타트업과 개발자들을 위한 AWS 클라우드 태권

Scaling의 종류

수평적 Scaling(Scale Out/In)

• 인스턴스 추가/제거

• ELB

• 오토스케일링(Autoscaling)

m3.medium

m3.medium

m3.medium

m3.medium

m3.medium

m3.medium

m3.medium

스타트업과 개발자들을 위한 AWS 클라우드 태권

전통적 IT 리소스 사용 패턴

On and Off Fast Growth

Variable peaks Predictable peaks

스타트업과 개발자들을 위한 AWS 클라우드 태권

전통적 IT 리소스 사용 패턴

On and Off Fast Growth

Variable peaks Predictable peaks

Poor

Service

WASTE

스타트업과 개발자들을 위한 AWS 클라우드 태권

클라우드 IT 리소스 사용 패턴(Auto Scaling)

On and Off Fast Growth

Variable peaks Predictable peaks

스타트업과 개발자들을 위한 AWS 클라우드 태권

오토 스케일링

워크로드의 요구에 맞게 컴퓨터 클러스터의 크기를 조정

인스턴스의 최대/최소 숫자를 정의

언제 스케일 아웃 및 스케일 인이 발생할지 정의

스케일링 구동을 위해 Amazon CloudWatch를 통해 메트릭 정보 수집

온 디맨드 및 스팟 인스턴스 유형에 대한 오토 스케일링 실행

It’s Free!

Auto Scaling

스타트업과 개발자들을 위한 AWS 클라우드 태권

인스턴스 추가 시오토스케일링이 생성하는

것 정의 – ec2-run-instances API 커맨드와

유사

AMI인스턴스 종류

보안 그룹인스턴스 키 쌍

한 번에 오직 하나의 활성화된배포 구성

오토스케일링은 오래된배포구성으로 생성된인스턴스를 먼저 종료

오토스케일링에 의해관리되는 EC2 인스턴스들의

그룹

풀 크기를 관리하기 위한 자동헬스 체크

정책에 따라 자동으로인스턴스의 숫자를 확장 및축소 – Min, Max, Desired

ELB와 자동으로 통합

복수 가용 영역에 자동 분산 및밸런스

오토스케일링 동작 수행을위한 파라미터

스케일 아웃/인 및 개수

ChangeInCapacity (+/- #)ExactCapacity (#)

ChangeInPercent (+/- %)

쿨 다운 (초)

CloudWatch 이벤트에 의하여정책이 트리거됨

배포 구성 오토스케일링 정책오토스케일링 그룹

스타트업과 개발자들을 위한 AWS 클라우드 태권

스케일링 계획

수요 기반 스케일링

수동 스케일링

일정 기반 스케일링

항상 현재 인스턴스 수준을 유지

스타트업과 개발자들을 위한 AWS 클라우드 태권

오토스케일링 수명주기

스타트업과 개발자들을 위한 AWS 클라우드 태권

오토스케일링

스타트업과 개발자들을 위한 AWS 클라우드 태권

오토스케일링

스타트업과 개발자들을 위한 AWS 클라우드 태권

오토스케일링

스타트업과 개발자들을 위한 AWS 클라우드 태권

오토스케일링

스타트업과 개발자들을 위한 AWS 클라우드 태권

오토스케일링

스타트업과 개발자들을 위한 AWS 클라우드 태권

Availability Zone A Availability Zone B

오토스케일링: 오토스케일링 그룹

스타트업과 개발자들을 위한 AWS 클라우드 태권

Availability Zone A Availability Zone B

오토스케일링: 오토스케일링 그룹

스타트업과 개발자들을 위한 AWS 클라우드 태권

Availability Zone A Availability Zone B

오토스케일링: 오토스케일링 그룹

스타트업과 개발자들을 위한 AWS 클라우드 태권

Availability Zone A Availability Zone B

오토스케일링: 오토스케일링 그룹

스타트업과 개발자들을 위한 AWS 클라우드 태권

Availability Zone A Availability Zone B

오토스케일링: 오토스케일링 그룹

스타트업과 개발자들을 위한 AWS 클라우드 태권

Latency

CloudWatchAuto Scaling

ELB

Auto scaling Group

오토스케일링: ELB + CloudWatch

스타트업과 개발자들을 위한 AWS 클라우드 태권

Stop doing these:서버를 정적으로 배포/운영

컴퓨팅 파워를 물리적인 자원으로 취급컴퓨팅 파워를 제한된 약정으로 생각

스타트업과 개발자들을 위한 AWS 클라우드 태권

and start doing these

보안기본적으로 안전한

시스템을 구축

탄력성스태이트리스오토스케일링애플리케이션

수정보다는 대체문제가 있는 곳을 수정하는

대신, 손쉽게 재구성자유로운 계획 수립전통적인 용량 산정방식

극복

비용 고려리소스 태깅,

다양한 인스턴스유형 활용

Automation자동화

필요 시 인스턴스를생성하고 필요없을때 삭제

스타트업과 개발자들을 위한 AWS 클라우드 태권

THANK YOU