boto의 profile_name 설정으로 여러개의 Credential 사용하기

[markdown]
# boto의 profile_name 설정으로 여러개의 Credential 사용하기

### 주의
AWS_CREDENTIAL_FILE 이 환경변수로 있는 경우에는 자동으로 해당 파일을 `boto`에서 인식하므로 여러개의 credential 설정을 사용할 수 없다. 이 경우에는 해당 설정을 삭제해야한다.

`boto`의 환경설정 파일로 인식되는 경로로 아래의 3가지가 있다.

* /etc/.boto : 모든 유저가 공유하는 세팅
* ~/.boto : 각 유저별 세팅
* ~/.aws/credentials : aws SDK와 공유하는 설정

우리가 만저볼 것은 `~/.boto` 파일로 각 유저별롤 세팅가능한 설정인데 profile 을 설정함으로서 여러개의 credential을 사용할 수 있다.

“`text
[Credentials]
aws_access_key_id = access_key_id1
aws_secret_access_key = secret_access_key1

[profile test]
aws_access_key_id = access_key_id2
aws_secret_access_key = secret_access_key2
“`

아래는 테스트 코드이다. `.boto` 파일에 설정한 내용에 따라 다른 AWS계정의 credential을 사용하게 될 것이다.

“`python
import boto.ec2

# 기본 Credentials 로 되어 있는 설정을 사용
conn = boto.ec2.connect_to_region(‘ap-northeast-1’)
conn.get_all_addresses()

# test 라고 되어 있는 설정을 사용
conn = boto.ec2.connect_to_region(‘ap-northeast-1′, profile_name=’test’)
conn.get_all_addresses()
“`
[/markdown]

AWS RDS의 타임존 변경하기

[markdown]

최근까지 N모사의 클라우드 서비스를 사용하다가, 혼자서 서버를 관리해야하는 부담 때문에 AWS로 넘어왔다. 그러면서 기존에 구상해 두었던, 서버 아키텍쳐를 AWS로 다 옮기는 중에 있는데, 그중에 하나는 Mysql-cluster를 RDS로 옮기기로 한 결정이었다. 그래서 RDS 인스턴스를 만들어보고 테스트 중에 있는데, 아니 타임존이 UTC로 되어 있어서 시간이 내가 의도한대로 나오지 않는 것이었다!

이걸 고치는 법을 아마존에서 공식적으로 지원하지는 않는 것으로 보이고(오라클은 최근에 지원이 되기 시작했다!) 뭔가 다른 방법으로 해야될 것 같아서 찾아보니 DB프로시져를 이용하는 방법이 있었다.

간단히 단계를 살펴보자면 아래와 같다.

1. 스토어드 프로시져의 작성
2. Parameter Group의 작성
3. RDS에 Parameter Group을 적용
4. RDS 인스턴스 재시작

이 작업을 하면서 주의해야될게 하나 있는데 `rdsadmin` 이라는 유저는 AWS쪽에서 DB인스턴스 관리용으로 사용되는 녀석으로 타임존을 건드리면 이상하게 동작할 것 같으니 이녀석의 타임존은 안건드려야 한다는 것이다.

이제 스토어드 프로시져부터 만들어보자

### 1. 스토어드 프로시져 만들기

프로시져 명을 `mysql.store_time_zone`이라고 했는데, `mysql`에는 실제로 사용할 DB의 이름을 넣도록 하자. 귀찮으면 그냥 둬도 상관은 없다.

“`sql
DELIMITER |
CREATE PROCEDURE mysql.`store_time_zone`()
IF NOT (POSITION(‘rdsadmin@’ IN CURRENT_USER()) = 1) THEN
SET SESSION time_zone = ‘Asia/Seoul’;
END IF |

DELIMITER ;
“`

### 2. Parameter Group 만들기

RDS에서는 MySQL의 파라메터를 `Parameter Group`으로 그룹단위로 관리하고 있다. mysql의 세션이 최초 접속시에 위에서 만들어둔 프로시져를 실행하도록 `init_connect`파라메터를 설정하기 위한 `Parameter Group`을 만들자.

RDS의 Parameter Groups에 들어가서 `Create DB Parameter Group`을 클릭한다.

![그림1](http://gyus.me/wp-content/uploads/2014/10/1-1-1.png)

`Yes, Create`를 클릭!

![그림2](http://gyus.me/wp-content/uploads/2014/10/2-1-1.png)

store-time-zone을 선택후 `Edit Parameters`를 클릭하자.

엄청 많은 파라메터들이 있는데 `init_connect` 파라메터를 찾아서 아래의 `CALL` 명령어를 입력하자

“`sql
CALL mysql.store_time_zone
“`

![그림3](http://gyus.me/wp-content/uploads/2014/10/31-1-1.png)

설정이 끝났으면 위로 올라와서 `Save Changes`를 클릭해서 설정을 저장한다.

![그림4](http://gyus.me/wp-content/uploads/2014/10/4-1-1.png)

### 3. RDS에 파라메터 그룹을 설정하기

![그림5](http://gyus.me/wp-content/uploads/2014/10/5-1-1.png)

RDS instance메뉴로 가서 DB Instance를 선택한다음 마우스 오론쪽을 클릭해서 `Modify` 메뉴로 들어가자.

`Parameter Group`을 위에서 작성한 그룹으로 변경하고 `Apply Immediately`를 체크하고 변경하자.
![그림6](http://gyus.me/wp-content/uploads/2014/10/6-1-1.png)

### 4. DB인스턴스의 재시작

적용후 DB인스턴스를 재시작해주면 된다.

잘 적용 되었는지 DB에 접속해서 확인을 해보자. 아래와 같이 쿼리를 날리면 아마 바뀌어진 타임존으로 시간이 나올 것이다.

적용전/적용후를 알 수가 없지만, 이 글을 포스팅한 시간이 2014년 10월 10일 오후 5시 50분경이니 잘나오는거라고 보시면 된다. ^^;

“`sql
mysql > select now();
“`

![그림7](http://gyus.me/wp-content/uploads/2014/10/7-1-1.png)

### Tip 커맨드라인으로 변경하기
** ※ `AWS RDS API`는 사용가능 한 상태임을 가정한다. **

앞서 본것 처럼 웹콘솔에 들어가서 작업을 해도 되지만, API로 하는 방법도 있다.
단계는 동일한데 단순히 API를 쓴다는 것만 다르다.

– 프로시져를 만든다.
– 파라메터 그룹을 만든다.
– RDB인스턴스의 파라메터 그룹 설정을 변경한다.
– RDB인스턴스 재시작

`프로시져는 위에서 만들어 봤으므로 생략하겠다`

#### 파라메터 그룹 만들기

아래의 커맨드로 그룹을 쉽게 만들 수 있다.

“`shell
$ rds-create-db-parameter-group store-time-zone –db-parameter-group-family mysql5.6 –description “change time zone” –region “ap-northeast-1”
“`

#### 파라메터 그룹 설정 적용하기

아래의 커맨드로 만든 그룹에 대한 설정을 하고 적용을 바로 할 수 있다.

“`shell
$ rds-modify-db-parameter-group PARAMGROUP –parameters “name=init_connect, value=’CALL mysql.store_time_zone’, method=immediate”
“`

#### 재시작도 해보자

**※ rdb 인스턴스 명을 알고 있어야 한다.**

“`shell
$ rds-reboot-db-instance {rdb instance 명}
“`

[/markdown]

NCloud에서 AWS로 이전하면서 한 삽질

[markdown]
###왜 변경하나
– 더 기능이 많고 더 싸다
– 오토스케일링 가능
– SSD가 기본 장착이라 IO가 좀 더 많이 나온다
– 돈계산도 복잡하다. 그렇지만, NCloud보다 약간! 싸다

###아쉬운점은
– 고정아이피 할당이 복잡하다
– 속도가 국내 IDC에 비해서는 확실히 느리다
– SSD가 기본 장착이라 용량이 적다
– 기능이 많아서 공부를 많이 해야한다.

###변경되는 점
– 패스워드 & 공용키로 로그인 => AWS에서 제공해주는 키파일로 로그인 (이거 유출되면 큰일남)
– 기존에는 www유저를 생성해서 웹서버를 운영했는데, 기본 ubuntu유저로 해도 되지 않을까라는 안이한 생각이 든다.
– 방화벽 관련 코드는 실행하면 안된다. (에러남)

###하면서 삽질한 거
– 기존의 방화벽 관련 코드를 다 삭제해야 했다.
– root로 로그인 하던 것들을 모두 수정해야했다
– 자동으로 로그인 하는 코드를 삭제
– chef server 설치중 메모리가 모자라서 인터럽트 걸림 (1기가에서 2기가로 올리니 괜찮아짐)
– chef server 설치후 레시피 업로드 중 용량이 부족하여 인스턴스를 끄고 이미지를 뜬후 용량을 증설하여 다시 시작.
– terminate했는데, 인스턴스가 바로 안 없어져서 당황
– 고정아이피는 VPS 설정을 해야만 설정할 수 있어서 또 당황
– 가입시 기본 인스턴스 생성 가능 숫자제한이 있음 (20개)
– 고정아이피도 할당 가능한게 제한이 있음(5개)
– fabric에서 리모트 명령 실행시 root로 실행해야 하는게 있는데, 기존 방식과 달라져서 sudo 옵션을 찾기까지 또 삽질

###VPC설정 (해야할게 많다)
– 인터넷 게이트웨이 설정
– 서브넷 설정
– 라우팅 테이블 설정
[/markdown]