aws 클라우드 입문하기

104
OSS 개발자포럼 Public Cloud Hands-on Lab AWS 클라우드 입문하기 2017.03.18 한만종([email protected])

Upload: manjong-han

Post on 11-Apr-2017

131 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: AWS 클라우드 입문하기

OSS 개발자포럼 Public Cloud Hands-on Lab

AWS 클라우드 입문하기

2017.03.18 한만종([email protected])

Page 2: AWS 클라우드 입문하기

Speaker

한만종 [email protected]

• 현재) 히든트랙 CTO • 현재) 강남대학교 컴퓨터미디어정보공학부 재학 • 미래창조과학부 소프트웨어 마에스트로 6기 • 전자부품연구원(KETI) 스마트미디어연구센터 • (주)퀵켓 서비스개발부

Page 3: AWS 클라우드 입문하기

강의 순서1. 클라우드 컴퓨팅이란?

2. AWS(Amazon Web Services) 소개

3. Amazon EC2로 서버 인스턴스 만들기

4. Amazon S3로 파일 스토리지 만들기

5. Amazon RDS로 데이터베이스 구축하기

6. Amazon ElasticBeanstalk으로 예제 웹 어플리케이션 배포하기

7. 간단한 팁 소개 / 질의응답 시간

Page 4: AWS 클라우드 입문하기

클라우드 컴퓨팅이란?

Page 5: AWS 클라우드 입문하기

클라우드 컴퓨팅이란?

Page 6: AWS 클라우드 입문하기

클라우드 컴퓨팅이란?• Cloud computing is a type of Internet-based computing that provides shared computer processing resources and data to computers and other devices on demand.

• It is a model for enabling ubiquitous, on-demand access to a shared pool of configurable computing resources, which can be rapidly provisioned and released with minimal management effort

- Wikipedia

Page 7: AWS 클라우드 입문하기

클라우드 컴퓨팅이란?• NIST에서 꼽은 5가지 주요 특징

- On-demand self-service

- Broad network access

- Resource pooling

- Rapid elasticity

- Measured service

Page 8: AWS 클라우드 입문하기

클라우드 컴퓨팅이란?

• 클라우드를 구축하기 위한 주요 기술

- Virtualization

- Multi-tenant based Architecture

- Network Fabric

Page 9: AWS 클라우드 입문하기

클라우드 컴퓨팅이란?• 클라우드 서비스 모델

Page 10: AWS 클라우드 입문하기

클라우드 컴퓨팅이란?• 클라우드 서비스 모델

- Mobile Backend as a Service

- Serverless Computing (Function as a Service)

Page 11: AWS 클라우드 입문하기

클라우드 컴퓨팅이란?• 클라우드 서비스 모델

- Firewall as a Service

- Container as a Service

- Loadbalancer as a Service

- Network as a Service

Page 12: AWS 클라우드 입문하기

클라우드 컴퓨팅이란?• 클라우드 서비스 모델

- XaaS (Anything as a Service)

- On-demand 방식으로 리소스를 서비스로서 제공

- 클라우드 클라이언트에서 접근하여 바로 사용

Page 13: AWS 클라우드 입문하기

클라우드 컴퓨팅이란?• 클라우드 배포 모델

Page 14: AWS 클라우드 입문하기

클라우드 컴퓨팅이란?• 클라우드 배포 모델

- Private 클라우드

OpenStack, VMWare vCloud, IBM Bluemix, Oracle, Redhat, …

- Public 클라우드

AWS, Microsoft Azure, Google Cloud Platform, …

Page 15: AWS 클라우드 입문하기

클라우드 컴퓨팅이란?• 클라우드 vs 호스팅?

- Virtual Private Server

- Dedicated Server Hosting

- Web Hosting

Page 16: AWS 클라우드 입문하기

AWS(Amazon Web Services)• Amazon에서 각종 컴퓨팅 자원들을 웹 서비스 형태(REST, SOAP)로 제공

하는 클라우드 서비스

• 2006년에 Amazon S3와 Amazon EC2를 시작으로 현재는 90여개의 서비스를 제공

• 100만명 이상의 고객과 1분기 당 20조원 가량의 수익이 발생하고 있으며, Microsoft, 구글 등 경쟁업체 14곳을 합한 것보다 많은 인프라 자원을 운용

• 쇼핑몰 업체로서의 Amazon이 축적한 인프라 기술력을 사업으로 확대 - http://blog.b3k.us/2009/01/25/ec2-origins.html - https://www.quora.com/How-and-why-did-Amazon-get-into-

the-cloud-computing-business

Page 17: AWS 클라우드 입문하기

AWS(Amazon Web Services)

Page 18: AWS 클라우드 입문하기

AWS(Amazon Web Services)

Page 19: AWS 클라우드 입문하기

AWS(Amazon Web Services)

Page 20: AWS 클라우드 입문하기

AWS(Amazon Web Services)• Region(리전)

일종의 Data Center 집합 단위. 가상화된 리소스들을 제공해줄 수 있는 Data Center의 집합.

• Availability Zone(AZ)

HA(High Availability)를 제공하기 위해 하나의 Region을 여러개의 물리적인 AZ로 나눔. Region이 하나의 네트워크를 공유하기 때문에 가상 자원을 손쉽게 Multi-AZ로도 구성 가능.

• Instance(인스턴스)

가상화된 컴퓨팅 자원. EC2 인스턴스는 가상 컴퓨터 자원을 가리키며, RDS 인스턴스는 데이터베이스가 설치된 가상 컴퓨터 자원을 가리킴.

Page 21: AWS 클라우드 입문하기

AWS(Amazon Web Services)

Page 22: AWS 클라우드 입문하기

AWS(Amazon Web Services)• 이번 실습 강의 내용

Amazon EC2

AmazonS3

AmazonRDS

AWS Elastic Beanstalk

Page 23: AWS 클라우드 입문하기

AWS(Amazon Web Services)• 이번 실습 강의 내용

RDS Instance

S3 Bucket

Elastic IP

AWS Region

EC2 Instance

app

nginx-proxy

Page 24: AWS 클라우드 입문하기

Amazon EC2• 가상 서버, 스토리지, 네트워크 등 가상 컴퓨팅 자원을 제공하는 AWS 서비스.

- Amazon 머신 이미지 (AMI)

- Instance Type

- Security Key Pair

- Amazon EBS (Elastic Block Store)

- Security Group

- Elastic IP

- Virtual Private Clouds (VPC)

Page 25: AWS 클라우드 입문하기

Amazon EC2

security group

EC2 Instance Elastic IP

Amazon EBS

Availability Zone

AMI

Page 26: AWS 클라우드 입문하기

Amazon EC2

Page 27: AWS 클라우드 입문하기

Amazon EC2

Page 28: AWS 클라우드 입문하기

Amazon EC2

Page 29: AWS 클라우드 입문하기

Amazon EC2

Page 30: AWS 클라우드 입문하기

Amazon EC2

Page 31: AWS 클라우드 입문하기

Amazon EC2

Page 32: AWS 클라우드 입문하기

Amazon EC2

Page 33: AWS 클라우드 입문하기

Amazon EC2

Page 34: AWS 클라우드 입문하기

Amazon EC2

Page 35: AWS 클라우드 입문하기

Amazon EC2

Page 36: AWS 클라우드 입문하기

Amazon EC2

Page 37: AWS 클라우드 입문하기

Amazon EC2

Page 38: AWS 클라우드 입문하기

Amazon EC2

Page 39: AWS 클라우드 입문하기

Amazon EC2

Page 40: AWS 클라우드 입문하기

Amazon EC2• 자동적으로 scale-out 되도록 설정하고 싶다면?

Auto Scaling Group으로 생성

Page 41: AWS 클라우드 입문하기

Amazon EC2

Page 42: AWS 클라우드 입문하기

Amazon EC2

Page 43: AWS 클라우드 입문하기

Amazon EC2

Page 44: AWS 클라우드 입문하기

Amazon EC2

Page 45: AWS 클라우드 입문하기

Amazon S3• 웹을 통해 파일을 쉽게 관리할 수 있는 스토리지를 제공해주

는 오브젝트 스토리지

- Bucket

- Object

- Amazon CloudFront

Page 46: AWS 클라우드 입문하기

Amazon S3

Page 47: AWS 클라우드 입문하기

Amazon S3

Page 48: AWS 클라우드 입문하기

Amazon S3

Page 49: AWS 클라우드 입문하기

Amazon S3

Page 50: AWS 클라우드 입문하기

Amazon S3

Page 51: AWS 클라우드 입문하기

Amazon S3• CDN(Content Delivery Network)을 구축하고 싶다면?

Amazon CloudFront를 추가

Page 52: AWS 클라우드 입문하기

Amazon S3

Page 53: AWS 클라우드 입문하기

Amazon S3

Page 54: AWS 클라우드 입문하기

Amazon S3

Page 55: AWS 클라우드 입문하기

Amazon S3

Page 56: AWS 클라우드 입문하기

Amazon S3

Page 57: AWS 클라우드 입문하기

Amazon RDS• 관계형 데이터베이스를 쉽게 구축할 수 있도록 돕는 AWS 서

비스.

- MySQL, MariaDB, PostgreSQL, Oracle, Microsoft SQL Server, Amazon Aurora DB 엔진 지원

- DB Parameter Groups

- DB Option Groups

Page 58: AWS 클라우드 입문하기

Amazon RDS

Page 59: AWS 클라우드 입문하기

Amazon RDS

Page 60: AWS 클라우드 입문하기

Amazon RDS

Page 61: AWS 클라우드 입문하기

Amazon RDS

Page 62: AWS 클라우드 입문하기

Amazon RDS

Page 63: AWS 클라우드 입문하기

Amazon RDS

Page 64: AWS 클라우드 입문하기

Amazon RDS

Page 65: AWS 클라우드 입문하기

Amazon RDS

Page 66: AWS 클라우드 입문하기

Amazon RDS

Page 67: AWS 클라우드 입문하기

Amazon RDS

Page 68: AWS 클라우드 입문하기

Amazon RDS• DB를 백업하거나 특정 시점으로 복구하고자할 때는?

Snapshot 활용하기

Page 69: AWS 클라우드 입문하기

Amazon RDS

Page 70: AWS 클라우드 입문하기

Amazon RDS

Page 71: AWS 클라우드 입문하기

Amazon IAM• AWS 리소스에 접근할 수 있는 권한을 부여

- AWS 사용 권한 세부 부여

- 암호/액세스 키를 공유하지 않고도 권한 공유

Page 72: AWS 클라우드 입문하기

Amazon IAM

Page 73: AWS 클라우드 입문하기

Amazon IAM

Page 74: AWS 클라우드 입문하기

Amazon IAM

Page 75: AWS 클라우드 입문하기

Amazon IAM

Page 76: AWS 클라우드 입문하기

Amazon IAM

Page 77: AWS 클라우드 입문하기

Amazon IAM

Page 78: AWS 클라우드 입문하기

Amazon ElasticBeanstalk• 자동으로 AWS 리소스를 만들어 웹 어플리케이션 배포를 돕는 PaaS

- Application

- Environment

Page 79: AWS 클라우드 입문하기

• 로컬머신에서 eb 명령어를 사용하여 ElasticBeanstalk을 이용한 AWS 원격 배포 가능

Amazon ElasticBeanstalk으로 웹앱 배포하기

AWS

EC2 Instance

app

nginx-proxy

로컬 머신

$ eb init $ eb create

Page 80: AWS 클라우드 입문하기

• Flask 기반의 실습용 예제 웹 어플리케이션 배포 예제 https://github.com/iBluemind/simple_profile

Amazon ElasticBeanstalk으로 웹앱 배포하기

Page 81: AWS 클라우드 입문하기

실습용 예제 웹 어플리케이션 배포 진행 순서

1. 예제 웹 어플리케이션 Git Clone 받기 https://github.com/iBluemind/simple_profile

2. RDS 인스턴스 상에 DB 스키마 및 테이블 생성

3. S3 버킷에 Static Resources(CSS, Javascript, 이미지 등) 업로드

4. eb 명령어를 사용하여 ElasticBeanstalk을 이용한 원격 배포

Amazon ElasticBeanstalk으로 웹앱 배포하기

Page 82: AWS 클라우드 입문하기

1. 예제 웹 어플리케이션 Git Clone 받기

- Python 3 설치

$ sudo apt-get update

$ sudo apt-get -y install python3-pip

- 예제 웹 어플리케이션 소스코드 Git Clone 받기

$ git clone https://github.com/iBluemind/simple_profile

- 예제 웹 어플리케이션의 Dependencies 설치

$ cd simple_profile/

$ pip install -r requirements.txt

- Flask 쉘 환경변수 등록

$ export FLASK_APP=`pwd`/run.py

Amazon ElasticBeanstalk으로 웹앱 배포하기

Page 83: AWS 클라우드 입문하기

2. RDS 인스턴스 상에 DB 스키마 및 테이블 생성

- RDS 인스턴스 정보를 쉘 환경변수로 등록

$ export MYSQL_HOST=“RDS 인스턴스 주소”

$ export MYSQL_PORT=“RDS 인스턴스 포트”

$ export MYSQL_USER=“RDS 인스턴스 Master 사용자 이름”

$ export MYSQL_PASSWORD=“RDS 인스턴스 Master 사용자 암호”

$ export MYSQL_DATABASE=“RDS 인스턴스 데이터베이스 이름”

- Flask 명령어를 사용하여 RDS 인스턴스 상에 DB 스키마 및 테이블 생성

$ flask initdb

Amazon ElasticBeanstalk으로 웹앱 배포하기

Page 84: AWS 클라우드 입문하기

3. S3 버킷에 Static Resources(CSS, Javascript, 이미지 등) 업로드

- S3 버킷 이름을 쉘 환경변수로 등록

$ export FLASKS3_BUCKET_NAME=“생성해놓은 S3 버킷 이름”

$ git clone https://github.com/iBluemind/simple_profile

- 앞에서 생성했던 AWS IAM Key 값을 쉘 환경변수로 등록

$ export AWS_ACCESS_KEY_ID=“생성했던 IAM Access key ID”

$ export AWS_SECRET_ACCESS_KEY=“생성했던 IAM Secret access key”

- Flask 명령어를 사용하여 S3 버킷에 Static 리소스 업로드

$ flask build_compressed_assets

$ flask upload_to_s3

Amazon ElasticBeanstalk으로 웹앱 배포하기

Page 85: AWS 클라우드 입문하기

Amazon ElasticBeanstalk4. eb 명령어를 사용하여 ElasticBeanstalk을 이용한 원격 배포

- Dockerrun.aws.json 파일을 수정하여 배포 환경 설정 $ vi Dockerrun.aws.json"image": "aksmj8855/simple_profile", "environment": [ { "name": "AWS_ACCESS_KEY_ID", "value": “아까 생성했던 IAM Access key ID" }, { "name": "AWS_SECRET_ACCESS_KEY", "value": "아까 생성했던 IAM Secret access key" }, { "name": "FLASKS3_BUCKET_NAME", "value": “앞에서 생성했던 S3 버킷 이름" },

Page 86: AWS 클라우드 입문하기

Amazon ElasticBeanstalk4. eb 명령어를 사용하여 ElasticBeanstalk을 이용한 원격 배포

- Dockerrun.aws.json 파일을 수정하여 배포 환경 설정 $ vi Dockerrun.aws.json

{ "name": "MYSQL_HOST", "value": "RDS 인스턴스 주소" }, { "name": "MYSQL_PORT", "value": "RDS 인스턴스 포트" }, { "name": "MYSQL_USER", "value": "RDS 인스턴스 Master 사용자 이름" }, { "name": "MYSQL_PASSWORD", "value": "RDS 인스턴스 Master 사용자 암호" }, { "name": "MYSQL_DATABASE", "value": "RDS 인스턴스 데이터베이스 이름" }

Page 87: AWS 클라우드 입문하기

4. eb 명령어를 사용하여 ElasticBeanstalk을 이용한 원격 배포

- eb 명령어 설치

$ pip install awsebcli

Amazon ElasticBeanstalk으로 웹앱 배포하기

Page 88: AWS 클라우드 입문하기

4. eb 명령어를 사용하여 ElasticBeanstalk을 이용한 원격 배포

- eb 명령어를 위한 AWS Credential 설정

Amazon ElasticBeanstalk으로 웹앱 배포하기

Page 89: AWS 클라우드 입문하기

4. eb 명령어를 사용하여 ElasticBeanstalk을 이용한 원격 배포

- eb 명령어를 위한 AWS Credential 설정

Amazon ElasticBeanstalk으로 웹앱 배포하기

Page 90: AWS 클라우드 입문하기

4. eb 명령어를 사용하여 ElasticBeanstalk을 이용한 원격 배포

- eb 명령어를 위한 AWS Credential 설정

Amazon ElasticBeanstalk으로 웹앱 배포하기

앞에서 이전에 만들었던 User

Page 91: AWS 클라우드 입문하기

4. eb 명령어를 사용하여 ElasticBeanstalk을 이용한 원격 배포

- eb 명령어를 위한 AWS Credential 설정

Amazon ElasticBeanstalk으로 웹앱 배포하기

Page 92: AWS 클라우드 입문하기

4. eb 명령어를 사용하여 ElasticBeanstalk을 이용한 원격 배포

- eb 명령어를 위한 AWS Credential 설정

Amazon ElasticBeanstalk으로 웹앱 배포하기

Page 93: AWS 클라우드 입문하기

4. eb 명령어를 사용하여 ElasticBeanstalk을 이용한 원격 배포

- eb 명령어를 위한 AWS Credential 설정

Amazon ElasticBeanstalk으로 웹앱 배포하기

Page 94: AWS 클라우드 입문하기

4. eb 명령어를 사용하여 ElasticBeanstalk을 이용한 원격 배포

- eb 명령어로 ElasticBeanstalk 설정하기 $ eb init

Amazon ElasticBeanstalk으로 웹앱 배포하기

Select a default region 1) us-east-1 : US East (N. Virginia) 2) us-west-1 : US West (N. California) 3) us-west-2 : US West (Oregon) 4) eu-west-1 : EU (Ireland) 5) eu-central-1 : EU (Frankfurt) 6) ap-south-1 : Asia Pacific (Mumbai) 7) ap-southeast-1 : Asia Pacific (Singapore) 8) ap-southeast-2 : Asia Pacific (Sydney) 9) ap-northeast-1 : Asia Pacific (Tokyo) 10) ap-northeast-2 : Asia Pacific (Seoul) 11) sa-east-1 : South America (Sao Paulo) 12) cn-north-1 : China (Beijing) 13) us-east-2 : US East (Ohio) 14) ca-central-1 : Canada (Central) 15) eu-west-2 : EU (London) (default is 3): 9

반드시 Seoul 리전이 아닌 Tokyo 리전 선택 (아직 Seoul 리전에서

MultiContainer 배포 불가)

Page 95: AWS 클라우드 입문하기

4. eb 명령어를 사용하여 ElasticBeanstalk을 이용한 원격 배포

- eb 명령어로 ElasticBeanstalk 설정하기 $ eb init

Amazon ElasticBeanstalk으로 웹앱 배포하기

You have not yet set up your credentials or your credentials are incorrect You must provide your credentials. (aws-access-id): 아까 생성했던 IAM Access key ID (aws-secret-key): 아까 생성했던 IAM Secret access key

Page 96: AWS 클라우드 입문하기

4. eb 명령어를 사용하여 ElasticBeanstalk을 이용한 원격 배포

- eb 명령어로 ElasticBeanstalk 설정하기 $ eb init

Amazon ElasticBeanstalk으로 웹앱 배포하기

Enter Application Name (default is "simple_profile"): 기억하기 쉬운 이름 입력

Page 97: AWS 클라우드 입문하기

4. eb 명령어를 사용하여 ElasticBeanstalk을 이용한 원격 배포

- eb 명령어로 ElasticBeanstalk 설정하기 $ eb init

Amazon ElasticBeanstalk으로 웹앱 배포하기

Select an application to use 1) <아까 생성했던 Security key pair> 2) [ Create new Application ] (default is 1): 1

Page 98: AWS 클라우드 입문하기

4. eb 명령어를 사용하여 ElasticBeanstalk을 이용한 원격 배포

- eb 명령어로 ElasticBeanstalk 설정하기 $ eb init

It appears you are using Multi-container Docker. Is this correct? (y/n): y

Amazon ElasticBeanstalk으로 웹앱 배포하기

Page 99: AWS 클라우드 입문하기

4. eb 명령어를 사용하여 ElasticBeanstalk을 이용한 원격 배포

- eb 명령어로 ElasticBeanstalk 설정하기 $ eb init

Amazon ElasticBeanstalk으로 웹앱 배포하기

Select a platform version. 1) Multi-container Docker 1.12.6 (Generic) 2) Multi-container Docker 1.6.2 (Generic) (default is 1): 1

Page 100: AWS 클라우드 입문하기

4. eb 명령어를 사용하여 ElasticBeanstalk을 이용한 원격 배포

- eb 명령어로 ElasticBeanstalk 설정하기 $ eb init

Amazon ElasticBeanstalk으로 웹앱 배포하기

Do you want to set up SSH for your instances? (y/n): n

Page 101: AWS 클라우드 입문하기

4. eb 명령어를 사용하여 ElasticBeanstalk을 이용한 원격 배포

- eb 명령어로 ElasticBeanstalk 배포하기 $ eb create --single

Amazon ElasticBeanstalk으로 웹앱 배포하기

Enter Environment Name (default is simple-profile-dev): 기억하기 쉬운 이름 입력

Enter DNS CNAME prefix (default is simple-profile-dev): 기억하기 쉬운 이름 입력

Page 102: AWS 클라우드 입문하기

4. eb 명령어를 사용하여 ElasticBeanstalk을 이용한 원격 배포

- eb 명령어로 ElasticBeanstalk 배포하기 $ eb create --single

아래와 같은 메시지가 뜰때까지 10분정도 기다린다.

Amazon ElasticBeanstalk으로 웹앱 배포하기

INFO: Successfully launched environment: 앞에서 Evironment Name에 입력했던 이름

Page 103: AWS 클라우드 입문하기

4. eb 명령어를 사용하여 ElasticBeanstalk을 이용한 원격 배포

- 이제 웹브라우저로 아래와 같은 주소로 접속해본다.

http://<앞에서 DNS CNAME에 입력했던 이름>.ap-northeast-1.elasticbeanstalk.com

Amazon ElasticBeanstalk으로 웹앱 배포하기

Page 104: AWS 클라우드 입문하기

간단한 팁• Amazon VPC + OpenVPN (Docker)

- https://github.com/kylemanna/docker-openvpn

• AWS 클라우드 사용 패턴

- http://en.clouddesignpattern.org

- https://aws.amazon.com/ko/solutions/case-studies/all/

• Amazon EC2 Reserved Instance / Spot Instance

• AWS 무료 SSL/TLS 인증 서비스

- https://aws.amazon.com/ko/blogs/korea/new-aws-certificate-manager-deploy-ssltls-based-apps-on-aws/