제공 :
한빛 네트워크
저자 : Judith Myerson
역자 : 이대엽
원문 :
Creating Applications with Amazon EC2 and S3
소개
Amazon Compute Cloud (Amazon EC2)를 이용하여 애플리케이션을 만들기 위해서는 4가지 일을 해야 한다. 첫 번째로 Amazon Machine Image (AMI)를 만들어 여러분의 소프트웨어를 하나의 이미지로 패키지화하는데, 이 이미지에는 여러분이 사용하는 운영체제와 환경 설정, 애플리케이션, 라이브러리가 들어가게 된다. AMI에는 여러분의 소프트웨어 인스턴스를 부팅하는데 필요한 모든 정보가 포함된다.
두 번째로 이 AMI를 Amazon S3 (Amazon Simple Storage Service) 서비스의 저장소에 업로드한다. 일단 저장소에 저장되면, 여러분은 해당 AMI는 안전하게 접근하여 사용할 수 있게 된다. 이러한 S3 서비스와 상호작용하기 위해서는 SSH 클라이언트로 접근해야 할 것이다.
세 번째로 여러분이 만든 AMI를 Amazon EC2에 등록한다. Amazon EC2에 등록하면 등록된 해당 AMI에 대한 고유번호(ID)를 받게 될 것이다.
네 번째로 이 AMI ID와 이 AMI의 하나 이상의 인스턴스를 실행하고, 모니터링하며, 또는 중지시키는 Amazon EC2 웹 서비스 API를 이용한다. 이 기사의 후반부에서는 명령행 도구(command line tools)와 자바 라이브러리를 이용하는 법에 관해 설명할 것이다. 이 도구들을 사용하려면 시스템에 자바 5 버전이나 최신 버전이 설치되어 있어야 한다. 이것은 여러분이 사용할 만큼만의 대가를 지불하는 것이고, 최소한의 수수료조차 없다.
펄, 파이썬, 루비를 포함한 다른 프로그래밍 언어를 위한 웹 서비스 API는 차후에 제공될 것이다.
Amazon S3와 Amazon E2 가입하기
이미 Amazon S3 계정이 있다면 이 절을 건너뛰어도 좋다. Amazon S3에 가입하려면
Amazon S3 홈페이지를 방문한다. 다음으로 우측 상단 구석에 있는 "Sign Up for AWS" 블록에서 가입 링크를 클릭한다.
가입 안내를 따른 다음 입력 사항을 전송하여 Amazon Web Services 계정을 생성한다. 계정을 생성하고 나면 AWS에서 새 계정에 관한 이메일을 보내줄 것이다.
여러분이 받은 이메일을 열어보면 어떤 URL을 클릭해야 할 것이다. 클릭한 웹 페이지에서 여러분은 AWS Access Key Identifier를 볼 수 있을 것이다. 여러분의 AWS 계정 Access Key ID와 Secret Access Key를 복사하여 안전한 곳에 두도록 한다. 나중에 AMI에 두 키를 동봉해야 할 것이다.
Amazon EC2 서비스를 이용하기 위해 AWS 계정을 등록하려면 여러분의 AWS 계정에 로그인한 다음 좌측 패널에 있는 Infrastructure Services의 Amazone EC2 링크를 따라간다. 우측 상단 구석에 있는 Your Web Services Account 버튼을 클릭하여 메뉴 목록을 펼친다. 펼친 메뉴에서 AWS Access Identifier를 선택한다. X.509 인증서 영역으로 가서 Create New 버튼을 클릭하여 새로운 인증서를 생성하거나 Upload 버튼을 클릭하여 인증서를 업로드한다.
여러분은 AWS 계정과 연계된 인증서를 하나만 가질 수가 있다. 여러분은 Private Key 파일을 다운로드하여 안전한 곳에 저장해 두어야 한다. AWS는 여러분의 개인키 정보를 저장하지 않는다. 여러분은 언제고 여러분의 Private Key 파일을 다운로드할 수는 없을 것이다. Private Key 파일을 다운로드하지 않거나 잃어버린다면, 새로운 인증서와 개인키를 만들어야 할 것이다.
개인키 파일을 다운로드 한 다음에는 인증서 파일도 다운로드 해야 한다. 명령행 도구를 초기화할 때 두 파일이 모두 필요할 것이다.
명령행 도구 구하기
이미 명령행 도구를 갖고 있다면 이 절을 건너뛰어도 좋다.
첫 번째로
Amazon EC2 Resource Center에서 명령행 도구를 구한 다음 압축된 파일을 푼다.
두 번째로 다음과 같이 환경변수를 설정하여 명령행 도구의 위치를 지정한다:
$ export EC2_HOME=
C:> set EC2_HOME=
환경변수는 압축된 명령행 도구가 풀린 디렉터리 경로로 지정한다. 디렉터리는 ec2-api-tools-A.B-rrrr 형식의 이름을 가지며 bin과 lib라는 이름의 하위 디렉터리를 포함한다.
세 번째로 아래와 같이 bin 디렉터리를 환경변수에 추가한다:
$ export PATH=$PATH:$EC2_Home/bin
C:> set PATH=%PATH%;%ec2_HOME%bin
여러분은 명령행 도구에서 여러분의 신원을 식별하게 하여 요청에 어떤 자격증명(credential)을 사용할지 알게 해줄 필요가 있다.
먼저 다음과 같이 EC2_PRIVATE_KEY 변수를 설정하여 여러분의 개인키를 참조하게 한다.
$ export EC2_PRIVATE_KEY=~/.ec2/<여러분의 개인키>
C:> set EC2_PRIVATE_KEY=c:ec2<여러분의 개인키>
여러분의 개인키를 확인하려면 파일에 대고 오른쪽 버튼을 클릭한 다음 속성을 클릭하여 정보를 복사한다. 파일은 .pem 확장자로 끝난다.
두 번째로는 EC2_CERT 환경변수를 설정하여 여러분의 X509 인증서를 참조하게 한다. 아래는 인증서 설정 예를 보여준다:
$ export EC2_CERT=~/.ec2/<인증서>
C:> set EC2_CERT=c:ec2<인증서>
인증서 번호를 확인하려면 파일에 대고 오른쪽 버튼을 클릭한 다음 속성을 클릭하여 정보를 복사한다. 파일명은.pem으로 끝난다.
하나 이상의 인스턴스 실행하기
시작하기 전에 먼저 다음의 환경변수가 맞게 설정되었는지 확인하도록 한다:
JAVA_HOME
EC2_HOME
EC2_PRIVATE_KEY
EC2_CERT
1단계: 인스턴스 실행하기
공개 AMI를 찾지 못했거나 keypair가 생성되지 않았다면 인스턴스를 실행하고 4단계로 건너뛴다:
AMI ID의 인스턴스를 실행하려면 다음과 같이 입력한다:
PROMPT> ec2-run-instances -k gsg keypair
출력결과로 인스턴스 식별자를 얻게 되는데, 인스턴스 식별자 값은 다음과 같이 INSTANCE 태그 바로 다음에 온다:
INSTANCE i-10a64379 ami-5bae4b32 pending gsg-keypair
여러분은 이 식별자를 이용하여 인스턴스를 조작(작업이 완료되었을 때 인스턴스를 중지시키는 것을 포함해서)하게 된다.
인스턴스를 실행하게 되면 시간당 CPU 시간에 대한 비용을 지불해야 할 것이다. 언제라도 이 기사를 그만 읽게 되면 구동시킨 인스턴스를 모두 중지시키도록 한다. 인스턴스를 중지하는 법은 종료하기 절을 참고하도록 한다.
인스턴스의 상태를 확인해 보는 것도 좋은 생각이다. 잠깐 기다린 다음 다음과 같이 해보자:
PROMPT> ec2-describe-instances <인스턴스 식별자>
출력결과에서 여러분은 AMI INSTANCE TAG 다음에 인스턴스 식별자와 AMI 식별자, 그리고 해당 인스턴스의 DSN명(호스트명)을 확인할 수 있을 것이다. 여러분은 인스턴스의 상태를 keypair의 이름을 읽기 전에 확인할 수 있는데, 인스턴스가 초기화되었으며, 실행을 시작했다는 것을 확인할 수 있을 것이다. 아래에 그러한 출력결과의 예가 나타나 있다:
INSTANCE i-10a64379 ami-5bae4b32 domU-12-34-31-00-00-05.usma1.compute.amazonaws.com
running gsg-keypair
네트워크를 통해 인스턴스에 접근 가능하기 전까지 약간의 시간이 걸릴 수도 있다.
2단계: 인스턴스에 대한 네트워크 접근 권한 부여하기
인터넷상으로 인스턴스에 도달하기 전에 다음과 같이 트래픽에 대해 권한부여를 수행한다:
PROMPT> ec2-authorize default -p 22
PROMPT> ec2-authorize default -p 80
첫 번째 명령은 기본 그룹에 속한 인스턴스에 대해 표준 ssh 포트(22) 상으로 이루어지는 네트워크 접근에 권한을 부여한다.
두 번째 명령은 표준 http 포트(80)을 개방한다. 제어 네트워크 보안 그룹에 관한 상세한 내용을 확인하려면 Amazon EC2 Developer Guide를 참조하도록 한다.
3단계: 인스턴스에 연결하기
웹 브라우저를 열고 첫 번째 단계에서 ec-describe-instances 명령의 출력 결과가 가리키는 인스턴스 호스트명으로 이동한다. 웹 사이트가 시간 제한에 도달하면 인스턴스 키가 아직 구동을 완료하지 못한 것일 수도 있다. 그럴 경우 잠깐 기다린 다음 다시 시도해 본다.
root로 로그인하여 해당 인스턴스를 제어하는 연습을 모두 해본다.
PROMPT> ssh -i id_rsa-gsg-keypair root@<인스턴스 호스트명>
여러분의 머신에서 ssh 명령에 대해 다른 이름을 가지고 있거나 다른 명령줄 옵션을 사용하고 있을 수도 있으므로 여러분이 사용하는 머신과 관련된 문서를 참조하도록 한다.
연습을 완료하면 "하나 이상의 이미지 생성하기"의 다음 절로 이동한다.
4단계: AMI 찾기
인스턴스를 구동하려면, 여러분은 구동할 적절한 AMI를 찾아야 한다. 프롬프트에서 다음과 같이 입력한다:
PROMPT> ec2-describe-images
위와 같이 입력하면 공개되거나 비공개된 모든 AMI가 나타날 것이다.
출력결과에서 IMAGE 태그 중 세 번째 컬럼의 값이 ec2-public-images/getting-started.manifest.xml로 구분되는 공개 이미지를 포함하는 줄을 찾아본다. 두 번째 컬럼의 값이 IMAGE 태그에 대한 AMI ID이다.
5단계: Keypair 생성하기
공개/개인 keypair를 사용하여 여러분만이 접근하게 되리라는 것을 보장한다. 이러한 keypair의 절반은 인스턴스에 내장되어 비밀번호 없이도 나머지 절반의 keypair를 이용하여 여러분은 안전하게 로그인할 수 있다. 여러분이 생성한 모든 keypair는 이름을 필요로 하는데, 가령 아래처럼 gsg-keypair같은 이름을 주도록 한다:
PROMPT> ec2-add-keypair gsg-keypair
여러분은 id_rsa_gsg_keypair라는 이름의 로컬 파일로 반환되는 개인키를 저장해둘 필요가 있다. 파일의 상단에는 ------BEGIN RSA PRIVATE KEY------가, 하단에는 ------END RSA PRIVATE KEY-----가 포함되어 있는지 확인한다.
이 파일을 현재 디렉터리에 두지 않는다면, ssh 명령어를 사용할 때 해당 파일의 전체 경로를 지정해 주어야 한다.
만약 OpenSSH를 사용한다면 이 파일의 퍼미션을 지정하여 여러분이 해당 파일을 유일하게 읽을 수 있게 해둔다. 아래에 지금까지 설명한 예가 나타나 있다:
$ chmod 600 id_rsa-gsg-keypair; ls -l id_rsa-gsg-keypair
이 단계를 완료하고 첫 번째 단계로 돌아간다.
하나 이상의 이미지 생성하기
여러분은 사용자 정의 AMI (개인)를 생성하여 원하는 만큼의 인스턴스를 실행하는데 사용할 수 있다. 또한 새로운 AMI의 기본 틀을 구성하는데 훨씬 더 적합한 다른 공개된 AMI를 찾아볼 수도 있다.
1단계: 기존 이미지 변경하기
다음과 같이 메인 웹 페이지를 개인화하기 위해 정적 컨텐츠를 여러분의 이름으로 대체하여 메인 웹 페이지상의 이미지를 변경한다:
# sed -i -e "s/Congratulations!/Congratulations<여러분의 이름>!/" /var/www/html/index.html
여러분은 메인 페이지 파일의 날짜와 시간은 다음과 같이 확인할 수 있다:
# ls -l /var/www/html/index.html
# date
ls 명령의 출력 결과 예는 다음과 같다:
-rw-rw-r-- 1 root root 1872 Jun 21 09:33 /var/www/html/index.html
ls 명령어의 출력결과에 포함된 날짜와 시간은 date 명령어의 출력결과와 일치해야 한다.
2단계: 번들링하기(Bundling)
번들될 머신으로 개인키를 복사한다. 인증서는 필요하지 않다:
PROMPT> scp -i id_rsa-gsg-keypair <개인키> root@<인스턴스 호스트명>
여러분의 AWS 계정 ID와 사용자명을 이용하여 이미지를 번들한다.
# ec2-bundle-vol -d /mnt -k ~root/<개인키> -u -s 1536
필요한 모든 매니페스트(manifest) 파일과 이미지 구성요소가 /mnt 디렉터리에 들어있는지 확인한다:
# ls -l /mnt/image.*
3단계: Amazon S3에 업로드하기
다음과 같이 번들을 S3로 업로드한다:
# ec2-upload-bundle -b -m /mnt/image.manifest.xml -a -s
업로드가 완료될 때까지 계속해서 진행상태를 확인할 수 있을 것이다.
4단계: AMI 등록하기
여러분은 Amazon EC2를 기반으로 인스턴스를 위치시키고 실행할 수 있도록 Amazon EC2에 등록해야 한다. 다음과 같이 명령을 입력한다:
PROMPT> ec2-register /image.manifest.xml
출력결과에서 IMAGE 태그 다음에 오는 AMI 식별자 값을 확인할 수 있을 것이다:
5단계: 인스턴스 실행하기
다음과 같이 인스턴스를 실행한다:
PROMPT> ec2-run-instances
출력결과에서 INSTANCE 태그 다음에 오는 인스턴스 식별자 값을 확인할 수 있을 것이다. 아래는 그러한 출력결과의 예이다:
INSTANCE i-10a64379 ami-5bae4b32 pending
종료하기
첫 번째로 다음과 같이 AMI 등록을 해지한다:
PROMPT> ec2-register
두 번째로 다음의 명령어를 이용하여 AMI를 삭제한다:
PROMPT> ec2-delete-bundle -b -p image -a -s
세 번째로 인스턴스를 중지한다.
PROMPT> ec2-terminate-instances <인스턴스 식별자>
인스턴스를 중지하기 위해서는 약간 기다려야 하는데, 이는 여러분의 데이터를 모두 초기화해야 하기 때문이다. "하나 이상의 인스턴스 실행하기"절의 첫 번째 단계에서 했던 것처럼 인스턴스의 상태를 확인해 본다.
여러분은 인스턴스에 ssh로 로그인한 다음 shutdown -h 명령을 실행하여 인스턴스를 중지할 수도 있다. -h 옵션을 포함하는 것을 잊었다면 인스턴스는 단일 사용자 모드로 들어갈 것이다.
응용 예제
아래에 두 가지 예제가 나타나 있는데, 하나는 공개 이미지를 이용하는 것이고 다른 하나는 개인 이미지를 이용하는 것이다.
예제 1: keypair가 이미 생성되었다고 가정한 상태에서 공개 이미지 사용하기
PROMPT> ec2-run-instances -k gsg keypair
PROMPT> ec2-describe-instances <인스턴스 식별자>
PROMPT> ec2-authorize default -p 22
PROMPT> ec2-authorize default -p 80
PROMPT> ssh -i id_rsa-gsg-keypair root@<인스턴스 호스트명>
예제 2: 개인 이미지를 생성하고 이용하기
# sed -i -e "s/Congratulations!/Congratulations<여러분의 이름>!/" /var/www/html/index.html
# ls -l /var/www/html/index.html
# date
PROMPT> scp -i id_rsa-gsg-keypair <개인키> <인스턴스 호스트명>
# ec2-bundle-vol -d /mnt -k ~root/<개인키> -u -s 1536
# ls -l /mnt/image.*
# ec2-upload-bundle -b -m /mnt/image.manifest.xml -a -s
PROMPT> ec2-register /image.manifest.xml
PROMPT> ec2-run-instances
PROMPT> ec2-describe-instances <인스턴스 식별자>
PROMPT> ec2-authorize default -p 22
PROMPT> ec2-authorize default -p 80
PROMPT> ssh -i id_rsa-gsg-keypair root@<인스턴스 호스트명>
PuTTY 사용하기
PuTTY는 윈도용 무료 SSH 클라이언트이다. PuTTY에는 키 생성 프로그램인 PuTTYgen와 안전한 복사 명령어 도구인 pscp도 포함되어 있다.
개인키를 PuTTY 형식으로 변환하려면 다음 단계를 따른다:
1단계. PuTTYgen을 실행하여 id_rsa_gsg_keypair를 불러들인다("하나 이상의 인스턴스 실행하기"절을 참고한다). 개인키 파일은 개행 문자로 끝나야 한다.
2단계. 키를 id_rsa-gs-keypair.ppk로 저장한다.
PuTTY로 SSH를 이용하려면 다음 단계를 따른다:
3단계. PuTTY를 실행하고 Connection -> SSH -> Auth로 이동한다.
4단계. Authentication parameters에서 Browse...를 클릭하고 2단계에서 생성했던 PuTTY 개인키 파일을 선택한다.
5단계. Session에서 EC2 인스턴스 호스트명이나 IP 주소를 입력한다.
6단계. Open을 클릭하여 EC2 인스턴스에 연결한다.
PuTTY로 SCP를 이용하려면 다음 단계를 따른다:
7단계. "하나 이상의 이미지 생성하기" 절의 2단계와 같이 scp 명령어를 이용하여 개인키와 X.509 인증서를 복사한다.
8단계. 같은 명령어를 아래와 같이 pscp로 실행한다:
C:> pscp -i id_rsa-gsg-keypair.ppk <개인키> <인증서> root@<인스턴스 호스트명>
저자 주디스 마이어슨(Judith Myerson)은 시스템 아키텍트이자 엔지니어이다. 관심분야는 기업차원의 시스템, 데이터베이스 기술, 네트워크 및 시스템 관리, 보안, 운영체제, 프로그래밍, 데스크톱 환경, 소프트웨어 공학, 웹 개발, 프로젝트 관리이다. 전자메일 주소는 jmyerson@c2040.com이다.