AWS 클라우드 입문하기

Post on 11-Apr-2017

130 views 5 download

Transcript of AWS 클라우드 입문하기

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

AWS 클라우드 입문하기

2017.03.18 한만종(han@manjong.org)

Speaker

한만종 han@manjong.org

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

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

2. AWS(Amazon Web Services) 소개

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

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

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

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

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

클라우드 컴퓨팅이란?

클라우드 컴퓨팅이란?

클라우드 컴퓨팅이란?• 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

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

- On-demand self-service

- Broad network access

- Resource pooling

- Rapid elasticity

- Measured service

클라우드 컴퓨팅이란?

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

- Virtualization

- Multi-tenant based Architecture

- Network Fabric

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

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

- Mobile Backend as a Service

- Serverless Computing (Function as a Service)

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

- Firewall as a Service

- Container as a Service

- Loadbalancer as a Service

- Network as a Service

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

- XaaS (Anything as a Service)

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

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

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

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

- Private 클라우드

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

- Public 클라우드

AWS, Microsoft Azure, Google Cloud Platform, …

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

- Virtual Private Server

- Dedicated Server Hosting

- Web Hosting

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

AWS(Amazon Web Services)

AWS(Amazon Web Services)

AWS(Amazon Web Services)

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

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

• Availability Zone(AZ)

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

• Instance(인스턴스)

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

AWS(Amazon Web Services)

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

Amazon EC2

AmazonS3

AmazonRDS

AWS Elastic Beanstalk

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

RDS Instance

S3 Bucket

Elastic IP

AWS Region

EC2 Instance

app

nginx-proxy

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

- Amazon 머신 이미지 (AMI)

- Instance Type

- Security Key Pair

- Amazon EBS (Elastic Block Store)

- Security Group

- Elastic IP

- Virtual Private Clouds (VPC)

Amazon EC2

security group

EC2 Instance Elastic IP

Amazon EBS

Availability Zone

AMI

Amazon EC2

Amazon EC2

Amazon EC2

Amazon EC2

Amazon EC2

Amazon EC2

Amazon EC2

Amazon EC2

Amazon EC2

Amazon EC2

Amazon EC2

Amazon EC2

Amazon EC2

Amazon EC2

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

Auto Scaling Group으로 생성

Amazon EC2

Amazon EC2

Amazon EC2

Amazon EC2

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

는 오브젝트 스토리지

- Bucket

- Object

- Amazon CloudFront

Amazon S3

Amazon S3

Amazon S3

Amazon S3

Amazon S3

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

Amazon CloudFront를 추가

Amazon S3

Amazon S3

Amazon S3

Amazon S3

Amazon S3

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

비스.

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

- DB Parameter Groups

- DB Option Groups

Amazon RDS

Amazon RDS

Amazon RDS

Amazon RDS

Amazon RDS

Amazon RDS

Amazon RDS

Amazon RDS

Amazon RDS

Amazon RDS

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

Snapshot 활용하기

Amazon RDS

Amazon RDS

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

- AWS 사용 권한 세부 부여

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

Amazon IAM

Amazon IAM

Amazon IAM

Amazon IAM

Amazon IAM

Amazon IAM

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

- Application

- Environment

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

Amazon ElasticBeanstalk으로 웹앱 배포하기

AWS

EC2 Instance

app

nginx-proxy

로컬 머신

$ eb init $ eb create

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

Amazon ElasticBeanstalk으로 웹앱 배포하기

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

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

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

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

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

Amazon ElasticBeanstalk으로 웹앱 배포하기

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으로 웹앱 배포하기

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으로 웹앱 배포하기

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으로 웹앱 배포하기

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 버킷 이름" },

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 인스턴스 데이터베이스 이름" }

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

- eb 명령어 설치

$ pip install awsebcli

Amazon ElasticBeanstalk으로 웹앱 배포하기

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

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

Amazon ElasticBeanstalk으로 웹앱 배포하기

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

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

Amazon ElasticBeanstalk으로 웹앱 배포하기

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

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

Amazon ElasticBeanstalk으로 웹앱 배포하기

앞에서 이전에 만들었던 User

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

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

Amazon ElasticBeanstalk으로 웹앱 배포하기

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

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

Amazon ElasticBeanstalk으로 웹앱 배포하기

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

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

Amazon ElasticBeanstalk으로 웹앱 배포하기

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 배포 불가)

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

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

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

Amazon ElasticBeanstalk으로 웹앱 배포하기

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

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

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

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

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

Amazon ElasticBeanstalk으로 웹앱 배포하기

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

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

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

Amazon ElasticBeanstalk으로 웹앱 배포하기

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

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): 기억하기 쉬운 이름 입력

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

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

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

Amazon ElasticBeanstalk으로 웹앱 배포하기

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

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

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

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

Amazon ElasticBeanstalk으로 웹앱 배포하기

간단한 팁• 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/