Post on 11-Apr-2017
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/