 |  |
|
난이도 : 초급 Prabhakar Chaganti, CTO, Ylastic, LLC
원문 게재일 : 2008 년 10 월 14 일 번역 게재일 : 2009 년 4 월 07 일 기본적인 Amazon SDB(SimpleDB) 개념에 대해 알아보고 SDB와 상호 작용하기
위한 오픈 소스 Python 라이브러리인 boto에서 제공하는 일부 기능을 살펴보십시오. 이 "Amazon
Web Services를 사용한 클라우드 컴퓨팅" 시리즈에서는 Amazon Web Services를 사용한 클라우드
컴퓨팅에 대해 설명합니다. 신뢰할 수 있으며 확장 가능한 애플리케이션을 만들고 빌드할 수 있는
Amazon Web Services의 뛰어난 기능을 살펴보십시오. 이 기사에서는 Amazon EC2(Elastic Compute
Cloud)에서 제공하는 가상 서버에 대해 설명합니다. EC2를 통해 애플리케이션의 컴퓨팅 요구 사항을
빠르게 구성하고 수요에 따라 용량을 조정하는 방법을 살펴보십시오.
Amazon EC2
Amazon EC2(Elastic Compute Cloud)는 Amazon에서 제공하는 클라우드 컴퓨팅
환경의 기본 플랫폼이다. EC2에서는 비즈니스 니즈가 발생하거나 사용자가 원할 때 언제라도
손쉽게 가상 인스턴스를 생성하고, 실행하고, 제공할 수 있다. 인스턴스 유형과 실제 사용 시간에
따라 인스턴스 비용을 지불하면 된다. 가상 서버는 Amazon 데이터 센터의 안전한 환경 내에서
실행된다.
EC2에서 실행되는 웹 확장 애플리케이션이 얻을 수 있는 장점은 다음과 같다.
- 컴퓨팅 요구 사항을 빠르게 구성할 수 있다.
- 수요에 따라 용량을 조정할 수 있다.
이는 Yahoo의 프론트 페이지에 사이트가 올라온 후 트래픽 폭주로
인해 1시간 후에 사이트가 멈춰버릴 수도 있는 오늘날 웹 환경에서 가치를 헤아릴 수 없을 정도로 훌륭한 제안이다. 이제부터는 서버의 용량을
탄력적으로 관리할 수 있다. 이 새로운 탄력적 컴퓨팅 모델에는
다음과 같은 특징이 있다.
- 신뢰성
- EC2에서는 인스턴스를 쉽게 제공할 수 있을 뿐 아니라 더 이상 필요 없는
인스턴스를 쉽게 제거할 수도 있다.
- 단순성
- 기본 개념이 간단하기 때문에 시스템을 유연하게 설계할 수 있다. Amazon에서
필요한 빌딩 블록을 모두 제공하므로 애플리케이션의 요구 사항에 따라 빌딩 블록을 자유롭게 결합할 수
있다.
- 보안
- EC2는 높은 수준의 보안을 제공한다. Amazon의 안전한 데이터 센터 내에서
실행되는 모든 인스턴스는 방화벽 규칙을 구성하여 모든 액세스를 사용자가 신뢰하는 그룹으로 제한할
수 있다.
- 복원성
- 애플리케이션을 서로 다른 지역에 배치한 후 수명이 짧은 인스턴스와는 독립된
라이프사이클을 지닌 영구적 스토리지 볼륨을 사용하여 애플케이션의 복원성을 강화할 수 있다.
- 경제성
- EC2 서비스는 사용자의 모든 서버 요구에 효과적으로 대응하기 위해 높은
경제성과 경쟁력을 갖춘 요금 체계로 운영된다.
프레임워크
이 섹션에서는 EC2 프레임워크의 기본 개념에 대해 살펴본다.
AMI(Amazon Machine Images)
AMI(Amazon Machine Images)는 사용자가 원하는 모든 소프트웨어나 애플리케이션을
실행할 수 있는 Linux® 기반의 패키지화된 서버 환경으로, EC2에서 제공하는 탄력적 컴퓨팅
환경의 핵심 요소이다. 현재 버전의 EC2에서는 Linux 기반 AMI를 지원하며 EC2 환경에서 OpenSolaris를
운영 체제로 사용하는 데 필요한 일부 초기 지원도 제공한다.
시스템 이미지에는 다음 세 가지 유형이 있다.
| 개인용 | 사용자가 만든 이미지로 기본적으로 개인용이다. 사용자가 자신의 개인용 이미지를
시작할 수 있는 액세스 권한을 다른 사용자에게 부여할 수 있다. |
|---|
| 공용 | 사용자가 만들어서 Amazon Web Services 커뮤니티에 게시한 이미지로 누구나 이러한 이미지를
기반으로 하는 인스턴스를 실행해서 자유롭게 사용할 수 있다. Amazon Web Services Developer
Connection 웹 사이트에서 모든 공용 이미지를 볼 수 있다. |
|---|
| 유료 | 특정 기능을 제공하는 이미지를 만들어서 Amazon 비용 외에 추가로 시간당 사용 요금을
지불할 의사가 있는 사용자에게 제공할 수 있다. |
|---|
Amazon에서는 시스템 이미지를 손쉽게 만들고 관리할 수 있는 여러 가지 명령행
도구를 제공한다. 이미지 자체는 Amazon S3(Simple Storage Service)에 저장된다. EC2를 통해
이미지를 등록하면 이미지를 식별하고 이미지의 인스턴스를 실행하는 데 사용할 수 있는 고유
ID가 이미지에 할당된다. 이미지는 여러 가지 방법으로 만들 수 있다. 기존 공용 이미지를 바탕으로
자신의 이미지를 만든 후 다음과 같은 워크플로우를 사용하여 새로운 AMI를 생성할 수 있다.
- SSH(secure socket shell) 키 쌍을 사용하여 기존 AMI의 인스턴스를 실행한다.
- SSH로 인스턴스에 로그인한다.
- 원하는 대로 인스턴스를 사용자 정의한다.
- Amazon의 도구를 사용하여 실행 중인 인스턴스를 새 AMI 번들로 다시 생성한다.
- Amazon의 도구를 통해 번들을 S3에 업로드하여 저장한다.
- Amazon의 도구를 통해 새 이미지를 EC2에 등록한다.
- 이 새 이미지를 기반으로 하는 새 인스턴스를 실행한 후 만족할 때까지
사용자 정의 및 재번들링 작업을 반복한다.
EC2 커뮤니티에서 공용으로 제공하는 스크립트를 사용하여 새 AMI를 생성할 수도
있다. 스크립트를 사용하면 설계 단계부터 AMI를 생성할 수 있다. 자주 사용되는 스크립트는 다음과
같다.
- Eric Hammond가 제공하는 Ubuntu
및 Debian 기반 AMI 생성 스크립트. 사이트에
있는 사전 빌드된 이미지를 사용하거나 해당 이미지를 기반으로 새로운 이미지를 만들 수
있다.
- Ruby on Rails 애플리케이션의 기반으로 사용할 수 있는 이미지를 찾고 있는
사용자의 경우, Paul Dowman이 제공하는 스크립트를
사용하여 EC2에서 Rails 애플리케이션을 실행하기 위한 Ubuntu 기반 이미지를 만들 수 있다.
-
RightScale에서는
이미지를 설계 단계부터 만드는 데 사용할 수 있는 Ubuntu 및 CentOS
기반 스크립트를 제공한다.
인스턴스
인스턴스는 AMI를 템플리트로 사용하는 실행 중인 가상 인스턴스이다. Amazon에서
제공하는 도구를 통해 인스턴스를 실행 및 종료하고 인스턴스에 대한 세부 사항을 볼 수 있다. 또한 다양한
언어로 작성된 여러 가지 써드파티 라이브러리를 사용하여 인스턴스의 라이프사이클을 제어할 수도 있다.
인스턴스는 32비트 또는 64비트 플랫폼에 기반을 둔다. 다음 유형 중 하나일 수 있다. Amazon에서는
EC2 계산 단위로 각 인스턴스 유형에 대한 비용을 부과한다. 각 ECU(EC2 compute unit)는 해당하는 1.0 - 1.2GHz
2007 Opteron 또는 2007 Intel® Xeon™ 프로세서 용량을 제공한다. 각 인스턴스에 유형에 대한 세부
사항은 가격에서 확인할 수 있다.
- S(Small) 인스턴스(m1.small)
- 1.7GB 메모리, 1ECU(가상 코어 1개, 1ECU 적용), 160GB 인스턴스 스토리지, 32비트 플랫폼, 적정 성능의 I/O
- L(Large) 인스턴스(m1.large)
- 7.5GB 메모리, 4ECU(가상 코어 2개, 코어당 2ECU 적용), 850GB 인스턴스 스토리지, 64비트 플랫폼, 고성능 I/O
- XL(eXtra Large) 인스턴스(m1.xlarge)
- 15GB 메모리, 8ECU(가상 코어 4개, 코어당 2ECU 적용), 1,690GB 인스턴스 스토리지, 64비트 플랫폼, 고성능 I/O
- M(Medium) 인스턴스(c1.medium)
- 1.7GB 메모리, 5ECU(가상 코어 2개, 코어당 2.5ECU 적용), 350GB 인스턴스 스토리지, 32비트 플랫폼, 적정 성능의 I/O
- XL(eXtra Large) 인스턴스(c1.xlarge)
- 7GB 메모리, 20ECU(가상 코어 8개, 코어당 2.5ECU 적용), 1,690GB 인스턴스 스토리지, 64비트 플랫폼, 고성능 I/O
인스턴스 비용은 실제 사용 시간에 따라 부과되므로 애플리케이션의 현재 로드를 기반으로
필요한 계산 용량을 손쉽게 조정할 수 있다. 따라서 많은 계산 용량을 미리 예약하지 않아도 된다.
보안 그룹
EC2 환경 내에서 시작된 모든 인스턴스는 보안 그룹 내에서 실행된다. 각 보안 그룹은
해당 그룹 내에서 실행되는 인스턴스에 대한 액세스 제한을 지정하는 방화벽 규칙을 정의한다. IP 주소
또는 CIDR(Classless Interdomain Routing) 규칙에 따라 액세스 권한을 부여하거나 제한할 수 있으며
이들 규칙에서는 포트 범위와 전송 프로토콜을 지정할 수 있다. 지정된 보안 그룹에 대한 액세스 권한도
제어할 수 있으므로 해당 보안 액세스 그룹 내에서 실행 중인 모든 인스턴스에게 사용자의 인스턴스에 대한
액세스를 자동으로 부여하거나 거부할 수 있다.
보안 키 쌍
보안 키 쌍은 인스턴스를 시작할 때 지정되는 공용/개인용 SSH 키 쌍으로, 실행된
인스턴스의 콘솔에 실제로 로그인하려는 경우에 필요하다. EC2는 키 쌍의 공용 부분을 실행된 인스턴스에
추가하며, 그런 다음 사용자가 개인용 키를 사용하여 ssh를 통해 인스턴스에
로그인할 수 있다.
보안 키 쌍은 API를 통해 Amazon Web Services를 요청할 수 있는 사용자를 고유하게 식별하게 하는 데
사용되는 Amazon Web Services 액세스 키 ID 및 보안 키(계정
정보 페이지에서 제공)와 다른 키이다. 이는 일반적으로 암호를 사용하지 않고도
인스턴스에 보안 로그인이 가능하도록 지원할 때 사용된다.
가용성 영역
EC2는 장애 복원성을 제공하기 위해 서로 다른 지역에 있는 여러 데이터 센터로
구성되어 있다. 사용자는 실행할 인스턴스를 여러 지역에 배치할 수 있으며, 이러한 지역 내에는
여러 가용성 영역이 있다. 현재 버전의 EC2에서는 동부 미국에 있는 단일 지역에 대한 액세스를
제공하며, 이 지역에는 세 개의 가용성 영역이 있다. Amazon에서는 한 지역 내의 각 가용성 영역이
다른 가용성 영역에서 발생한 장애로 인한 영향을 받지 않도록 각 영역을 분리해서 관리하고 있다.
단일 위치에서 장애가 발생할 경우 별도의 가용성 영역에 있는 인스턴스를 실행하여
애플리케이션을 보호할 수 있다. 인스턴스를 시작할 때 가용성 영역을 지정하지 않더라도 현재
시스템의 상태와 용량에 따라 가용성 영역이 자동으로 선택된다.
탄력적 IP 주소
EC2에서 실행되는 각 인스턴스에는 시작 시에 개인용 및 공용 IP 주소가 자동으로
할당되며, 이때 할당된 공용 IP 주소는 인터넷을 통해 인스턴스에 액세스하는 데 사용된다. 그리고
이 주소는 인스턴스를 시작할 때마다 변경된다. 동적 DNS 맵핑을 사용하여 DNS 이름을 IP 주소에
연결하는 경우에는 변경 사항이 인터넷을 통해 전파되는 데 최대 24시간이 소요될 수 있다. EC2에서는
이 문제로 인한 영향을 줄이기 위해 탄력적 IP 주소라는 개념을 도입했다. 각각의 탄력적 IP 주소는
특정 인스턴스가 아닌 사용자의 EC2 계정에 연결된 정적 IP 주소로 사용자가 명시적으로 해제하지
않는 한 사용자의 계정에 영구적으로 연결되어 있다.
인스턴스 간에 탄력적 IP 주소를 다시 맵핑할 수도 있다. 이 방법을 사용하면 다른
인스턴스를 시작한 후 다시 맵핑하여(또는 기존 인스턴스를 사용하여) 인스턴스 장애에 신속하게 대응할
수 있다. 단일 인스턴스와 탄력적 IP 주소는 일대일로만 맵핑할 수 있다.
EBS(Elastic Block Store)
EBS는 Amazon에서 만든 새로운 형식의 영구적 스토리지로 이를 통해 사용자는
볼륨을 만들어서 실행 중인 인스턴스에 블록 레벨 장치로 연결할 수 있다. 이러한 볼륨을 바탕으로
스냅샷을 만들 수 있으며, 나중에 스냅샷을 사용하여 볼륨을 다시 만들 수도 있다. 각 스냅샷은
특정 시점의 볼륨 상태를 나타낸다. 따라서 EBS 볼륨에 있는 인스턴스의 수명이 다한 이후에도
유지할 필요가 있는 파일과 데이터를 쉽게 저장할 수 있으며 나중에 해당 볼륨을 원하는 인스턴스에
간편하게 다시 연결할 수 있다.
단, 각 EBS 볼륨은 한 번에 한 인스턴스에만 연결할 수 있다는 제한이 있다. 그러나
단일 인스턴스에는 각기 다른 볼륨을 무제한으로 연결할 수 있다. 각 EBS 볼륨은 가용성 영역에
위치하며 연결된다. 볼륨을 연결할 대상 인스턴스는 동일한 가용성 영역에 있어야 한다. EBS 볼륨은
계정당 20개로 제한되지만 더 많은 볼륨을 사용해야 하는 경우에는 Amazon Web Services에 볼륨 수를
늘려달라고
요청할
수 있다.
가격
EC2 요금은 다음 4가지 기준에 따라 계산된다.
최신 가격은 Amazon EC2에서 확인할 수 있다. 또한 Amazon Web
Services Simple Monthly Calculator를 사용하여 EC2 및 기타 Amazon Web Services에
대한 월간 사용 비용을 계산할 수 있다.
EC2 시작하기
EC2를 시작하려면 먼저 Amazon Web Services 계정을
만들어야 한다. Amazon Web Services 계정을 만드는 방법에 대한 자세한 설명은 이 시리즈의
Part 2에서
볼 수 있다. 계정을 만든 후에는 다음 단계를 수행하여 계정에 대한 Amazon EC2 서비스를
활성화해야 한다.
-
사용자의 Amazon Web Services 계정에 로그인한다.
- Amazon EC2로 이동한다.
- 페이지 오른쪽에 있는 Sign Up For This Web Service를 선택한다.
- 요청된 정보를 제공하고 등록 프로세스를 완료한다.
모든 Amazon Web Services 통신은 SOAP 인터페이스 또는 쿼리/REST 인터페이스를
통해서 이루어진다. 이 기사에서는 쿼리/REST 인터페이스를 사용하여 EC2와 통신하므로 액세스 키를 받아야
한다. 액세스 키는 Web
Services Account 정보 페이지에서 View Access Key Identifiers를 선택하여 액세스할
수 있다.
이제 Amazon Web Services를 사용할 준비가 완료되었으며 EC2 서비스를 사용할 수 있게 되었다.
EC2와 상호 작용하기
이 예제에서는 Amazon에서 제공하는 명령행 도구와 오픈 소스 써드파티 Ruby 라이브러리인
right_aws를 사용하여 EC2와 상호 작용한다. 이 기사에서 수행할 전체 작업은 다음과 같다.
- 로컬 EC2 개발 환경 설정하기
- 기존 AMI 실행하기
-
right_aws 라이브러리와 기타 필수 소프트웨어를 설치하도록 AMI 사용자 정의하기
- AMI를 재번들링하여 S3에 업로드한 후 등록하기
- 사용자 정의된 새 AMI 실행하기
- Ruby 쉘에서 간단한 코드를 실행하여
right_aws API 익히기
로컬 EC2 개발 환경 설정하기
Amazon EC2 도구를 사용하려면 Java™ 기술이 설치되어 있어야 한다.
- Amazon EC2 AMI Tools과
Amazon EC2 API Tools을 다운로드한다.
- 도구 아카이브를 원하는 디렉토리에 압축 풀기한다.
- 일부 환경 변수를 설정하고 명령행에서 실행할 때 찾을 수 있도록
도구 디렉토리를 쉘 경로에 추가해야 한다. Listing 1에서는 해당 예제를 보여 준다.
이 예제에서는
Linux용 명령을 사용하고 있으므로 Microsoft® Windows®를 사용하는 경우에는 해당
명령으로 대체해야 한다. 사용자의 계정
정보 페이지에서 EC2 X.509 인증서와 EC2 개인 키 파일을 다운로드할 수 있다.
Listing 1. EC2 개발 환경 설정하기
$ export EC2_HOME=path_to_the_directory_with_the_tools
$ export JAVA_HOME=path_to_the_directory_with_your_java_sdk
# Add the directory to your PATH
$ export PATH=$PATH:$EC2_HOME/bin
# Export variables with the paths to your private key file and X.509 certificate
$ export EC2_PRIVATE_KEY=path_to_your_private_key
$ export EC2_CERT=path_to_your_x509_certificate
|
- 다음 명령을 통해 EC2 명령행 도구의 버전을 표시하여 모든 설정이 올바르게 지정되었는지 확인한다.
Listing 2. 설정 확인하기
$ ec2-ami-tools-version
1.3-20041 20071010
|
- 명령행 쉘에서 인스턴스를 실행한 다음 연결할 때 사용할 SSH 키 쌍을
만들어야 한다. Listing 3의 명령을 실행하면 새 키 쌍이 만들어진 후 키 쌍의 이름, 해당 지문 및 개인 키 데이터가 화면에 표시된다.
Listing 3. 새 SSH 키 쌍 만들기
$ ec2-add-keypair devworks
KEYPAIR devworks 29:d1:90:7b:3d:a4:99:52:41:e0:1f:21:d5:20:97:d3:f0:33:fd:76
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAyxaeXt6nb+qzboVW/3ax7An8CUJjDqwNi/PZm4lGOAzOHGnuPlDXeh1GpJ9f
hky7Bg6VEY2VfS5G6UtmIzsGf/JlquzVl/x3uyriOzeCIw+m07aSgUOBn3qW/74IZxYYkxCYdBci
eZeKpr8Mpvuz2sfurRzQOkUeHyuEaiD1RRS7DGxxUXfpVYhGjPltfNW2xRSMLTaOZzRwRdS0cHUU
hC+GOKFDkp8nqQpd8iGUtp2G2DI1pxRN4MbeFZHWMh5tcIo1NTc7pkFPGEwrq6pO6gIsEOLqGpTL
+2AxJY5WToZQoTWieOVwLpjJU9fnufRs0Mt/M/TP6SGK/YkrQOprOwIDAQABAoIBAFj1UGvX9dnl
IbHAwInoUSlGelsH9GIB5XEvYFtr9xEoMsRpdk1flfNMjZwgn3Qxeh6+Fnf438lUkwUv3M6D1WYI
JJaJZUpM8ZlPwIcV2nBHM9k6+NOcYVQdG7VsZTvahusscssvMw+13KsLtpwSVwb3WsoDfAZ6LiaT
Jk5in20hTiipC0pz0K9DgQ//76r20ysUFpCymj4EvQrRkk5kBtsiMixsJzimpUOrSmrRHcORKEin
FKM6y/DFE33zhP8BNDQRaDLGni0Ip+/jP3EHmia41SSbnwzRcbXMfH5fL3KAyRsCE0ocHY+cjUng
HPYxl1ffdLZuEW3wJDQFuTS/v4ECgYEA9r7HVVnrS2303zclzCTGen/W/SVbpflSKEYJOZpa8RtQ
uFMOewfkTbBzfavLMVBYB8uAmcWIz5JAFSzlBaKDRCnouUeeDiDJVJd8Asbn1gCE8UVETUOthy50
R90RTtPNMmyP7AnoSMTuzsbwVORus7IJvceWHQBB4KCh652UansCgYEA0rSmvdquidkXf5iFpebc
6Wh/qy+L1dkgz7+HTZIMW7kxA4EfJFnqaQRPqJ5XYcLvk2IzxNQKJlZvtBhCfVYhPJ2uB2Yqxv0p
0LXGC01fZSyhbYGfaxVymA3HMc2ULBbaFMyhO7l7zkz+G+qkylych59zJBSoUxSFStpgNL7NhkEC
gYAPJIorLMeJ64eZo1LIgoFDx1C0XHSRbQmjuxiZ1mU6YsjDZyV+W2+hbPDJh5+CuUGNyOlthnfs
9TbFlenAPMb9iezkYgbLKyvv6xQLP5W+xm1iOTQF4d9mam1sc566TblMHOmAPONqg9t8CS16qEI6
+PQsF3GY+gkQ9gq54QPYvQKBgDgwjsrQd30xVI/lV7a/Uyg3gtxe6JaVuadNN0LbcMpBH64EkA58
oANzb97SoxDiEEuog4+40CAbKtzHH2wXPPPSROeaOkwolS8gWnkHICp19XKjf6Tp6k5cVkOUxC/h
xDSJwXGQ7FA+vgEp2NpSSjfssKLtk1ncfhNRGxjVzS9BAoGBALbBLS4Nbjs2Fco+okNQPNfJNSvW
yWV7a6ngfRzW8B+BO6V1QRIR44bwv/Z74oQ7ttt8KoZENB5yzZwaVWpFlOjSO/4Nx++Ef4pY5aPS
zNpXcXCZgUdA67qmOILvrG7bnDR60dcBZVBl7CjnpTlccg7MD4CBsFJx+hGRPD2yIV94
-----END RSA PRIVATE KEY-----
|
-----BEGIN RSA PRIVATE KEY-----로 시작하는
출력 부분을 로컬 파일에 저장한다. 이 파일은 인스턴스를 실행하고 SSH를 통해 인스턴스에 액세스할
때 개인 키로 사용된다. 따라서 이 파일은 누출되지 않도록 안전하게 관리해야 한다. 이 키를
사용하여 인스턴스를 실행한 후 나중에 키를 분실하게 되면 더 이상 쉘을 통해 인스턴스에 액세스할
수 없게 된다. 키 파일의 이름을 pk-devworks로 지정한 후 다음과
같이 파일에 대한 권한을 수정하여 보안을 강화한다.
Listing 4. 개인 키에 대한 권한 변경하기
이제 개발 환경이 설정되었다.
첫 번째 인스턴스 실행하기
이제 RightScale에서 제공하는 CentOS 기반의 공용 이미지 중 하나를 사용하여 첫
인스턴스를 실행한다. 이 이미지의 AMI ID는 ami-d8a347b1이다.
Listing 5. 인스턴스 실행하기
$ ec2-run-instances –k devworks -n 1 ami-d8a347b1
RESERVATION r-2691404f 710193521658 default
INSTANCE i-7f923516 ami-d8a347b1 pending
devworks 0 m1.small 2008-09-07T18:05:34+0000
us-east-1c aki-9b00e5f2
|
새로 실행되는 인스턴스는 항상 보류 중 상태로 설정된다. 이
인스턴스는 현재 시동 중이므로 아직 사용할 수 없다. 이 상태에서는 인스턴스에 대한 다음과 같은 세부
사항을 볼 수 있다.
- 시작 시간 — 이 인스턴스의 시작 시간이 UTC로 표시된다.
- 인스턴스 유형 — 시작할 때 인스턴스의 유형을 지정하지 않았으므로
기본 m1.small 인스턴스가 자동으로 선택된다.
- 가용성 영역 — 시작할 때 가용성 영역을 지정하지 않았으므로 현재
시스템 상태와 가용성에 따라 자동으로 가용성 영역이 선택된다.
- 커널 — 이 인스턴스에서 사용하는 Linux 커널도 표시된다. 시작할 때
커널을 지정하거나 기본적으로 사용할 커널을 AMI에 미리 구성해 놓을 수 있다.
- 보안 그룹 — 이 인스턴스는
기본 보안
그룹에 배치되었다. 고유한 보안 그룹을 작성하고 액세스 권한을 부여한 후 이러한 그룹에 인스턴스를
배치할 수 있다. 시작할 때 보안 그룹을 지정해야 한다. 인스턴스가 시작된 후에는 그룹 이름을
변경할 수 없지만 그룹에 대한 권한은 변경할 수 있다.
이제 실행 중인 인스턴스를 표시하여 인스턴스의 현재 상태를 확인할 수 있다.
Listing 6. 인스턴스 표시하기
$ ec2-describe-instances
RESERVATION r-2691404f 710193521658 default
INSTANCE i-7f923516 ami-d8a347b1 ec2-67-202-28-68.compute-1.amazonaws.com
domU-12-31-38-00-34-C8.compute-1.internal running devworks 0
m1.small 2008-09-07T18:05:34+0000 us-east-1c aki-9b00e5f
|
인스턴스가 실행 중임을 확인할 수 있으며 다음과 같은 세부 사항도 볼 수 있다.
- 공용 DNS 이름 — 인터넷을 통해 이 인스턴스에 연결하는 데 사용할 수 있는 DNS 이름
- 개인용 DNS 이름 — Amazon 데이터 센터 환경에 있는 EC2의
로컬 네트워크 내에서 이 인스턴스를 확인하는 데 사용되는 DNS 이름
SSH를 통해 첫 번째 인스턴스에 연결하기
이제 인스턴스에 대한 개인용 키와 공용 DNS 이름을 사용하여 SSH를 통해 인스턴스에 연결할 수 있다.
Listing 7. SSH를 통해 인스턴스에 연결하기
$ ssh -i pk-devworks root@ec2-67-202-28-68.compute-1.amazonaws.com
The authenticity of host 'ec2-67-202-28-68.compute-1.amazonaws.com (10.252.59.54)'
can't be established.
RSA key fingerprint is ae:e5:00:54:75:65:1c:c5:44:53:72:b9:e0:b5:26:a9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ec2-67-202-28-68.compute-1.amazonaws.com,10.252.59.54'
(RSA) to the
list of known hosts.
[root@domU-12-31-38-00-34-C8:~]
|
위에서 로그인한 후 오류 메시지가 표시되더라도 심각한 문제가 아니므로
무시해도 된다. 시동 후 AMI에서 몇 가지 사용자 정의 RightScale 스크립트가 실행되지만
여기에서는 설명하지 않는다.
인스턴스 사용자 정의 및 재번들링하기
매우 다양한 기능을 갖추고 있는 RightScale AMI는 기본 이미지로 사용하는
데 필요한 모든 기능을 제공한다. directory/home/ec2에 설치되는 EC2 명령행 도구도 포함되어
있다.
- 보안 인증서를 추가한다. 이러한 파일은 Listing 1에서 사용한 파일과 같다.
Listing 8. 인증서를 인스턴스에 복사하기
- 이 이미지를 개인용 EC2 이미지로 사용할 수 있도록 환경 변수를 설정한다. /etc/profile.d/env.sh
파일을 열고 각 변수를 설정한다. 계정 정보와 액세스 키는 Web
services account information에서 확인할 수 있으며 인증서와 개인용 키는 위 단계에서 인스턴스에 복사해 놓은
파일이다.
Listing 9. 인스턴스 환경 사용자 정의하기
$ vim /etc/profile.d/env.sh
export EC2_HOME=/home/ec2
export EC2_CERT=
export EC2_PRIVATE_KEY=
export AWS_ACCOUNT_NUMBER=
export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=
export PATH=$PATH:/home/ec2/bin/
# Turn off the rightscripts so you don’t get the error on login.
$ chkconfig --level 4 rightscale off
# Change the login message
$ echo “Welcome to my devworks test EC2 image” > /etc/motd
|
- 이 이미지에 Ruby가 이미 설치되어 있기는 하지만 이 기사에서 나중에
EC2와 상호 작용하는 데 사용할 Ruby 라이브러리를 설치해야 한다. 먼저 설치된 gem을 업데이트한
다음
right_aws gem과 기타 필요한 종속 파일을 설치한다.
Listing 10. Ruby gem 설치하기
$ gem update
$ gem install right_aws
|
- 이제 이 인스턴스를 재번들링하여 S3에 업로드한 후 EC2에 등록할 준비가
완료되었다. 먼저 인스턴스를
devworks-ec2라는 이름으로 재번들링한다.
이때 /mnt 및 /tmp 폴더는 무시한다. EC2 개인용 키, EC2 보안 인증서 및 Amazon Web Services
계정 번호도 지정해야 한다.
Listing 11. 인스턴스 재번들링하기
$ ec2-bundle-vol -d /mnt -c /home/ec2/your_ec2_x509_cert
-k /home/ec2/your_ec2_private_key -u your_aws_account_number
-e /mnt,/tmp -s 10240 -r i386 -p devworks-ec2
|
- 재번들링 프로세스가 완료되면 /mnt 디렉토리에 여러 파일이 만들어진다. 다음
예제에서는 새로 생성된 AMI의 구성 요소인 이들 파일을 S3에 업로드한다. 이미지는 사용자가 지정한
버켓에 배치된다. 아래 명령에서
–b 매개변수의 값에 이미지 파일을
저장할 S3에 있는 버켓의 이름을 지정한다.
Listing 12. S3에 이미지 업로드하기
$ ec2-upload-bundle -b your_s3_bucket -m /mnt/devworks-ec2.manifest.xml
-a your_aws_access_key -s your_aws_secret_key
|
- 이제 AMI가 S3에 안전하게 저장되었다. 이제 남은 작업은 나중에 이미지를 실행할
때 사용할 AMI ID를 받기 위해 AMI를 EC2에 등록하는 것이다.
Listing 13. EC2에 이미지 등록하기
$ ec2-register -K /home/ec2/your_ec2_private_key
-C /home/ec2/your_ec2_x509_cert your_s3_bucket/devworks-ec2.manifest.xml
IMAGE ami-58c42031
|
- SSH 세션을 끝내고 실행 중인 인스턴스를 종료한다.
Listing 14. 인스턴스 종료하기
$ ec2-terminate-instances i-7f923516
INSTANCE i-7f923516 running shutting-down
|
다음 섹션에서는 새로 생성된 AMI의 새 인스턴스를 실행하게 되며 이 기사의
나머지 부분에서는 이 인스턴스에서 right_aws 라이브러리를
사용하여 EC2를 탐색한다.
Ruby로 EC2 탐색하기
RightScale에서 제공하는 Ruby 라이브러리인 right_aws는
Ruby를 통해 Amazon의 EC2 서비스에 액세스할 수 있는 기능을 제공한다. 엄격한 테스트를 거친
이 라이브러리는 자체 제품에서 사용되고 있으며 최근에 소개된 EBS를 포함한 EC2의 모든 서비스에
액세스할 수 있다. 이 라이브러리는 강력한 재시도 및 오류 처리 기능을 제공하는 HTTP 라이브러리인
RightScale:HttpConnection과 함께
rubygem으로 패키징되어 있다. 이 기사에서는 이 라이브러리에서 제공하는 EC2의 기능 중 일부에 대해서만
설명한다. 라이브러리와 함께 제공되는 문서를 검토하여 API에 대한 종합적인 이해도를 높일 수 있다. right_aws
라이브러리와 이를 지원하는 right_http_connection 라이브러리에 대한 다양한
구성 옵션도 검토하자.
이 기사에서는 EC2 통신을 위한 기본 인터페이스를 제공하는 Rightscale::Ec2
클래스를 사용한다. 이 Ruby 라이브러리는 보통 irb 콘솔에서 사용된다. 이후 예제에서는 Rightscale::Ec2
오브젝트에 메시지를 보낸 후 EC2에서 리턴한 응답을 확인하는 방식으로 진행되므로 EC2 개념을 살펴보면서
API에 익숙해질 수 있다.
- 새 AMI의 인스턴스를 실행한다. 인스턴스가 실행 중 상태에 도달하면 SSH를 통해 인스턴스에
연결한다. 연결이 완료된 후에는 인스턴스 내에서 irb 콘솔을 사용한다.
Listing 15. 새 인스턴스를 실행하고 SSH를 통해 연결하기
$ ec2-run-instances -k devworks -n 1 ami-58c42031
RESERVATION r-5795443e 710193521658 default
INSTANCE i-1a9e3973 ami-58c42031 pending devworks 0
m1.small 2008-09-07T21:06:37+0000 us-east-1c aki-9b00e5f2
$ ec2-describe-instances
RESERVATION r-949544fd 710193521658 default
INSTANCE i-5a9d3a33 ami-58c42031
ec2-75-101-208-95.compute-1.amazonaws.com
domU-12-31-38-00-78-04.compute-1.internal
running devworks 0 m1.small
2008-09-07T21:14:27+0000 us-east-1c aki-9b00e5f2
$ ssh -i pk-devworks root@ec2-75-101-208-95.compute-1.amazonaws.com
|
- Ruby 쉘을 시작하고
Rightscale::Ec2 오브젝트를 만든다.
Listing 16. Ruby 쉘과 새 Rightscale::Ec2 오브젝트
$ irb
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'right_aws'
=> true
irb(main):003:0> @ec2 = Rightscale::Ec2.new(
ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY'])
|
이제부터는 새로 만든 변수 @ec2를 사용하여 EC2를 탐색한다. 이 예제에서는
이 라이브러리의 기본 구성을 사용하고 있다. 라이브러리와 함께 제공되는 문서에서 사용 가능한
구성 옵션 목록을 볼 수 있다.
- 인스턴스 목록을 검색하면 해시 배열이 리턴되며, 이 배열에 있는 각 해시는
각 인스턴스에 대한 관련 정보를 제공한다. 이 라이브러리의 API 호출에서는 대부분 이러한
응답 형식을 공통적으로 사용한다. Listing 17에서는 해당 예제를 보여 준다.
Listing 17. 인스턴스 설명하기
irb(main):004:0> @ec2.describe_instances()
=> [{:aws_launch_time=>"2008-09-07T21:14:27.000Z", :aws_kernel_id=>"aki-9b00e5f2",
:ssh_key_name=>"devworks", :aws_reservation_id=>"r-949544fd",
:aws_availability_zone=>"us-east-1c",
:aws_state=>"running", :aws_instance_id=>"i-5a9d3a33", :aws_groups=>["default"],
:aws_image_id=>"ami-58c42031",
:aws_product_codes=>[], :dns_name=>"ec2-75-101-208-95.compute-1.amazonaws.com",
:aws_state_code=>"16",
:private_dns_name=>"domU-12-31-38-00-78-04.compute-1.internal",
:aws_instance_type=>"m1.small",
:aws_reason=>"", :ami_launch_index=>"0"}]
|
- 이미지 목록을 검색한다.
Listing 18. 이미지 설명하기
irb(main):005:0> @ec2.describe_images_by_owner([ENV['AWS_ACCOUNT_NUMBER']])
=> [{:aws_location=>"ylastic_images/devworks-ec2.manifest.xml",
:aws_kernel_id=>"aki-9b00e5f2", :aws_state=>"available", :aws_is_public=>false,
:aws_architecture=>"i386", :aws_id=>"ami-58c42031", :aws_image_type=>"machine"}]
|
- 인스턴스를 배치할 때와 인스턴스에 대한 액세스 권한을 제한 또는 부여할 때
사용할 수 있는 보안 그룹을 만든다.
Listing 19. 새 보안 그룹을 만들고 그룹 표시하기
irb(main):006:0> @ec2.create_security_group("devworks",
"Devworks Article Security Group")
=> true
irb(main):008:0> @ec2.describe_security_groups()
=> [{:aws_group_name=>"devworks", :aws_description=>"Devworks Article Security
Group",
:aws_perms=>[]}]
|
- 새 보안 키 쌍을 만들고 사용자 계정의 모든 키 쌍을 표시한다.
Listing 20. 새 보안 키 쌍을 만들고 키 쌍 표시하기
irb(main):018:0> @ec2.create_key_pair('mykeypair')
=> {:aws_key_name=>"mykeypair",
:aws_fingerprint=>"c6:62:22:9e:99:05:6a:17:13:06:e0:86:f9:55:2a:78:ff:99:6b:fa",
:aws_material=>"-----BEGIN RSA PRIVATE KEY-----
\nMIIEpAIBAAKCAQEAyRdAvihBXDu30o2uvQ1h8xdIRLHs0RjQWK4Yw5Y5DkaS41EEjnDwjO6sEY5l\n
IXSuzVj1nkZ1VMPuVR3hIXHCMJLaAO77TaXZVC9yymIUAyTcQ1+hoVLlrCuVI3dEY21WQNTEbtkI\nlI
xMW+UhkiaKrGHmt2yYLjr754KGt7pNCpRwxPXB7brlpQ3qpapkr7XrKZppvWoG8MCmPIFx8P0K\no8Cd
mnF9lEdns6uaJZmfs4Ls9HZHpsmn0r42GbOAkJEkj7nE5zc3rXYpmCBZhjyHus0iXjS/n9oL\nHWhV0a
wagjvmsQgJPYqEsBeO5pDb2IOZq5okQie1YJTd1m8k8k7m9wIDAQABAoIBAQCK0lWssOem\nP8fAQHVg
J+v1wJ3wZpBhLWsvvUh1RbCvzUK8UQL/PrKh6Ga7W/0u4nmGY6J0mJmJYhWXhyATUZBI\nrih3uoOccC
Eff/4T/y9nmDvC+zL+xtatTA0SRdTdeu6vpPLSv1uwCUbxrbXGSnszVAbNm9dXGvsq\nMK7GCYQEB4p4
FtJolDqGZdWAj1u5/AGjbCI+PbkbCAro55Sqnl95WAlogdQFmgxljWl9TEIsbrHf\nYZHtKHlm1lvyeB
QdVmwLT9S7ufI1J/GAevRxrG2iEkx/IJWYGnQE0P2bXa6Ry90UyvWRPS6Zi/MD\nfWoFAxnB6Ryssr+S
IAfpG6SGuM55AoGBAOr7yPcvg/66f/Xd3CbpmI8lIfsXBb9xki3pIEfYAWD/\n2ToxpRYPTgrwwB1ufo
NPr7U1QfzJvAvlTXWkfp4oUnssi5sXw1okZmm01hT0j0FNvsgMG6zD8Z/9\nmgrVrH+tBxVoYqrPM/WB
dnYhQXEGQq+UF2uPqoKDbsl3DkftXTBrAoGBANsTdLfHmRidkLCRKfSj\nUrbJOSsU6RWGFuoqgD+DZL
ngKBTaBTd6TVONSR2JvpVJo5hyiAXQ/jQ1XtsPAuJR6fiiRvDfgF7j\n1lp1tsFpNYx2R4+eqoLrHgIC
Ak1Ke8tWyoD3NgQ4FO9TDfW+QHn0dpLeWdNMUd2a1GVKp4hIoJal\nAoGBAITqMryO5eyZ9XNPMQ3Zp+
+gI15xoVCunu7VJOs+ZVlGnsrp9eVKdux9TU3YiDsiQdMP8ulX\n+sQHyg63It+3EyCVC8qIYHmGiV9V
aJql0rovjbB+GNFabDwBKLbkMhRt/MnBJ75SQaOmvSkImomh\n7up9q9mtg9cbHPlcHHnW65VNAoGAKi
+Y7jrVVFQjJJ0PgzhgGSqug4lHSQnFJ9p/T7uxjcmIblt9\nXa2Dbm9qgPGhbYX8psKHRvdzvAH6/hvp
5kL31xUIrCGdyqf9AvZf9uaXlTDBnvpiw0sbQC+62b9a\nD1HrNOJl2HIkNeG8cnHsYI+etbFzgqjTqu
TBua+iiy/RHLECgYALIDqaAcd7o4V+ws+WG1G9vTlc\nJ6/sBpu3JyKMSdJYlbgIbvHgrfbKhEYuNh/H
XNdrI6oeW9eAruqHlH+OlUx0tCg4VIeQsz/b7kPS\nY14OMAswuHHyqlZIqK4Xy/R6SQmsc/CUXWPk5I
UesJk5f1V1NXIqqwv6+nlEucdjgYUd5w==\n-----END RSA PRIVATE KEY-----"}
irb(main):020:0> @ec2.describe_key_pairs()
=> [{:aws_key_name=>"mykeypair",
:aws_fingerprint=>"c6:62:22:9e:99:05:6a:17:13:06:e0:86:f9:55:2a:78:ff:99:6b:fa"}]
|
- 새 EBS 볼륨을 만든다. 이 볼륨의 가용성 영역을
us-east-1c로
지정한다. 이 볼륨을 만든 후 사용할 수 있게 되면 같은 가용성 영역에서 실행 중인 인스턴스에만
이 볼륨을 연결할 수 있다. 이 볼륨의 초기 상태는 "생성 중" 상태이다. 프로세스가 완료되면 "사용
가능한" 볼륨이 된다.
Listing 21. 새 EBS 볼륨을 만들고 볼륨 표시하기
irb(main):024:0> @ec2.create_volume('', 1, 'us-east-1c')
=> {:aws_status=>"creating", :aws_created_at=>Mon Sep 08 00:29:35 UTC 2008,
:zone=>"us-east-1c", :aws_size=>1, :snapshot_id=>nil, :aws_id=>"vol-2f34d146"}
irb(main):026:0> @ec2.describe_volumes()
=> {:aws_status=>"available", :aws_created_at=>Mon Sep 08 00:29:35 UTC 2008,
:zone=>"us-east-1c", :aws_size=>1, :snapshot_id=>nil, :aws_id=>"vol-2f34d146"}
|
-
이 볼륨을 현재 인스턴스에 블록 장치
/dev/sdj로 연결한
후 실제로 사용할 수 있도록 ext3 파일 시스템 형식으로 지정한다.
Listing 22. 새 EBS 볼륨을 연결하고 파일 시스템 만들기
irb(main):031:0> @ec2.attach_volume('vol-2f34d146', 'i-5a9d3a33', '/dev/sdj')
=> {:aws_instance_id=>"i-5a9d3a33", :aws_device=>"/dev/sdj",
:aws_attachment_status=>"attaching", :aws_id=>"vol-2f34d146",
:aws_attached_at=>Mon Sep 08 00:34:03 UTC 2008}
$ mkfs.ext3 /dev/sdj
mke2fs 1.39 (29-May-2006)
/dev/sdj is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
131072 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 39 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
|
- 새로 포맷한 블록 장치를 파일 시스템 폴더에 마운트한다.
Listing 23. 로컬 디렉토리에 볼륨을 마운트하고 사용하기
$ mount /dev/sdj /mnt/my-vol
$ echo “Hello Devworks” > /mnt/my-vol/test.txt
# cat /mnt/my-vol/test.txt
Hello Devworks
|
이제 이 EBS 볼륨을 시스템의 다른 블록 장치와 동일한 방식으로 사용할 수 있다. 즉,
볼륨에서 읽기 및 쓰기 작업을 수행할 수 있다. 볼륨 사용을 완료한 후에는 볼륨을 실행 중인 인스턴스에서
분리할 수 있으며, 나중에 언제라도 동일한 인스턴스나 다른 인스턴스에 다시 연결할 수 있다. 이
볼륨은 EC2의 유효성 수준을 획기적으로 높여준 지속적 스토리지이다. 이 자산은 다양한 방법으로
활용할 수 있다. 예를 들어, 인스턴스의 수명보다 오랫동안 유지되어야 하는 웹 서버 로그에 대한
중요 데이터베이스 데이터를 저장하는 경우 유용하게 사용할 수 있다.
EBS 볼륨의 스냅샷을 만들어서 특정 시점의 볼륨 컨텐츠를 관리할 수 있다. 스냅샷은
자동으로 S3에 저장되며 EC2에 의해 누적되는 방식으로 만들어진다. 볼륨의 첫 번째 스냅샷에는
전체 사본이 포함되지만 이후 스냅샷에는 변경된 부분만 저장된다. 현재는 Amazon Web Services
계정당 500개의 스냅샷만 허용되며 500개 이상이 필요한 경우에는 계정 제한을 늘려달라고 요청할
수 있다.
Listing 24. EBS 볼륨의 스냅샷 만들기
irb(main):007:0> @ec2.create_snapshot('vol-2f34d146')
=> {:aws_status=>"pending", :aws_volume_id=>"vol-2f34d146",
:aws_started_at=>Mon Sep 08 00:49:15 UTC 2008, :aws_progress=>"",
:aws_id=>"snap-13db3c7a"}
|
스냅샷은 EC2에서 백그라운드로 만들어진다. 모든 스냅샷을 주기적으로 표시하여 스냅샷이 성공적으로 만들어졌는지 확인할 수 있다.
Listing 25. EBS 스냅샷 표시하기
irb(main):008:0> @ec2.describe_snapshots()
=> [{:aws_status=>"completed", :aws_volume_id=>"vol-2f34d146",
:aws_started_at=>Mon Sep 08 00:49:15 UTC 2008, :aws_progress=>"100%",
:aws_id=>"snap-13db3c7a"}]
|
마지막으로 볼륨을 인스턴스에서 분리할 수 있다. 나중에 볼륨을 동일한
인스턴스나 다른 인스턴스에 다시 연결할 수 있다.
Listing 26. EBS 볼륨 분리하기
irb(main):006:0> @ec2.detach_volume('vol-2f34d146')
=> {:aws_instance_id=>"i-5a9d3a33", :aws_device=>"/dev/sdj",
:aws_attachment_status=>"detaching", :aws_id=>"vol-2f34d146",
:aws_attached_at=>Mon Sep 08 00:34:03 UTC 2008}
|
결론
이 기사에서는 Amazon의 EC2 서비스를 소개하고 기본 개념에 대해 설명했다. EC2와
상호 작용하는 데 사용할 수 있는 오픈 소스 Ruby 라이브러리인 right_aws의
일부 기능도 살펴보았다. 많은 내용을 다루기는 했지만 EC2는 방대하고 복잡한 주제이므로 Amazon
EC2 Developer Guide에서 더 많은 정보를 살펴보기를 권한다.
이 "Amazon Web Services를 사용한 클라우드 컴퓨팅"
시리즈의 Part 4에서는
클라우드에서 신뢰할 수 있는 메시징 기능을 제공하는 Amazon SQS(Simple Queue Service)에 대해 설명한다.
참고자료 교육
제품 및 기술 얻기
- IBM 평가판 제품을
다운로드하여 DB2®, Lotus®, Rational®, Tivoli® 및 WebSphere®의 애플리케이션 개발 도구 및
미들웨어 제품을 사용하자.
토론
필자소개  | 
|  | Prabhakar Chaganti는 사용자의 전체 AWS 클라우드 컴퓨팅 환경(EC2, S3, SQS 및 SimpleDB
포함)을 설계, 관리 및 모니터링하는 단일 통합 인터페이스를 만들고 있는 신생 업체 Ylastic의
CTO이다. 최근에 Xen Virtualization과 GWT Java AJAX Programming이라는 두 권의
책을 집필했으며, VMware Global Virtual Appliance Challenge에서 가장 혁신적인 가상 어플라이언스에
주어지는 커뮤니티 초이스 상을 수상하기도 했다. |
기사에 대한 평가
 |
| 이 문서 북마킹 하기
|
|  |