[발 번역] EC2 SSH 연결 단순화 하기

해당 글은 Simplifying EC2 SSH Connenections(  http://instagram-engineering.tumblr.com/post/11399488246/simplifying-ec2-ssh-connections  ) 라는 글을 발 번역한 것입니다. 오역에 주의하세요.

Instagram의 인프라스트럭쳐는 Amazon Web Service의 EC2를 이용합니다.  새로운 장비를 추가하거나, 기존 인프라스트럭쳐의 일부분을 바꾸려고 할 때, ssh로 연결해야 할 장비의 목록도 증가합니다.

인증방법으로 공개키( EC2 장비에 SSH로 log-in 할 때 추천되는 방식) 를 이용합니다. 그러나 장비에 처음 접속할 경우, 고민해야 합니다. 일반적인 방법은 EC2 장비의 공개된 hostname(ec2-x-x-x-x.compute-1.amazonaws.com)을 이용합니다. 그러나 이 hostname 목록을 관리하는 일을 너무 지루합니다. 그래서 EC2-SSH 라는 EC2 장비로의 접속을 쉽게 도와주는 Python Script를 작성했습니다. 그리고 커뮤니티의 이익을 위해서 오픈 소스로 공개했습니다.

EC2-SSH는 EC2 장비를 태깅한다는 장점을 제공합니다. 새로운 장비를 사용할 때, 웹 콘솔을 이용한다면, 아마존에서는 미리 채워진 “Name” tag 라는 옵션 값을 제공합니다. 태그는 EC2 커맨드 라인 툴에서도 변경할 수 있습니다.

 

이미 모든 인스턴스를 이름으로 태깅했다고 가정하면, EC2-SSH를 이용해서 일반적인 호스트네임을 이용해서 SSH로 접근하는 것처럼 쉽게 접근이 가능합니다.  내부적으로 사실 그게 거의 전부입니다. 예를 들어 설명하면, 장비를 “nginx3″라는 이름으로 태깅했다고 하면,터미널에서  EC2-SSH를 이용해서 `ec2-ssh nginx3` 만 입력하면 해당 장비로 접속이 가능합니다.

EC2-SSH Amazon EC2 웹 서비스를 처음 호출 할 때, 태그된 이름(이번 경우에는 “nginx3”) 를 public DNS 주소로 요청합니다. 그 때, 태깅된 이름이 실제 hostname으로 바뀌고, 그것이 다른 argument와 parameter 들과 함게 `/usr/bin/ssh`로 전달됩니다.

`ec2-ssh` 스크립트는 실제로 다른 Python 스크립트 `ec2-host`를 호출합니다. 결과적으로는 `/usr/bin/ssh`이 호출됩니다. 해당 프로세스를 깊고 자세히 보면:

`ec2-host` 파이선 스크립트는 EC2-SSH Python 패키지 안에 배포되어 있고, 따로 사용할 수 있습니다. 사실 그게 더 유용한다는 것을 알 수 있을것입니다. 일단 사용법을 보도록 합시다.

% ec2-host --help Usage: ec2-host [-k KEY] [-s SECRET] [NAME] Prints server host name. --help display this help and exit -k, --aws-key KEY EC2 Key, defaults to ENV[AWS_ACCESS_KEY_ID] -s, --aws-secret SECRET EC2 Secret, defaults to ENV[AWS_SECRET_ACCESS_KEY]

기본적으로, 아무 Arguments 도 없습니다. `ec2-host`는 동작하는 EC2 instances 의 리스트와 관련된 공개 hostname을 리턴합니다. 종종 `ec2-host`를  grep과 연동하여, 특별한 장비나, 장비군을 찾기 위해서 사용합니다.

% ec2-host | grep django django1 ec2-x-x-x-x.amazonaws.com django2 ec2-x-x-x-x.amazonaws.com ….

장비의 “이름” 태그를 Argument로 넘겨주면, ec2-host 는 관련된 공개된 hostname을 리턴합니다. 이것이 `ec2-ssh` 스크립트를 사용하는 방법입니다.

% ec2-host nginx2 ec2-x-x-x-x.compute-1.amazonaws.com 

만약 `ec2-host` 가 어떻게 동작하는 EC2 장비들을 열거하는지 궁금하다면, 그것은 올바른 의문입니다. `ec2-ssh` 나 `ec2-host`를 이용하기 전에, AWS Key와 secret 를 제공해야만합니다.( 역자 주: AWS Key 와 secret 는 EC2 장비를 사용하기 위해서 발급되는 키값입니다. 일종의 OAuth 를 생각하면 이해가 편할 것 같습니다. ) 커맨드 라인 툴에서 다음과 같은 방법으로 전달 할 수 있습니다.

% ec2-host –aws-key  AKJASKSA1234JDSJ8123 –aws-secret B3JDJRYQ1234QWRHFJ1234AJJDAH1kjd1234

시간을 아끼기 위해서 AWS_ACCESS_KEY_ID 와  AWS_SECRET_ACCESS_KEY 를 환경 변수로 등록할 수 있습니다.

설정이 끝나면, 다음 명령을 통해서, 태그된 이름을 통해서 시스템에 접근 할 수 있습니다.

% ec2-ssh nginx3

장비명 이후의 모든 Argument는 ssh로 전달됩니다.

% ec2-ssh nginx5 date Thu Oct 13 17:25:22 UTC 2011

해당 툴은 PyPy를 이용할 수 있도록 만들었고, `easy_install ec2-ssh` 나 `pip install ec2-ssh`로 설치가 가능합니다. 만약 뭔가 도와주고 싶다면, GitHub에서 코드를 Fork 하거나 Hacker News에서 해당 포스트에 대해서 토론할 수 있습니다. 우리의 시스템을 확장하는 것을 돕는데 관심이 있다면,  당신의 얘기에 귀기울이겠습니다.