본문 바로가기

Public Cloud/AWS

AWS 자습 노트 - 4. RDS Instance 생성 및 확인

반응형

이번 포스팅에서는 AWS에서 제공하는 DB 서비스인 RDS를 이용해 DB를 생성하려고 한다. 먼저 AWS Management Portal에 로그인 한 후에 Database > RDS로 진입하면 <Pic 1>과 같은 화면이 나온다.

Pic 1. AWS Management Portal내 RDS 서비스 진입 화면

이 화면 상단에 위치한 '데이터베이스 생성' 버튼을 누르면 어떤 데이터 베이스를 사용할 지 선택하는 <Pic 2>와 같은 화면으로 이동하게 된다.

Pic 2. Database Engine 선택 화면

DB Engine은 Amazon Aurora, MySQL, MariaDB, PostgreSQL, Oracle DB, MS SQL Server 중에서 하나를 선택할 수 있고, DB에 따라 License 비용이 다르다. 프리 티어 사용자를 위해 필터링을 할 수 있는 Check-Box가 중간에 있는데 이걸 선택하면 Amazon Aurora를 선택할 수 없다는 점을 참고해 둘 필요가 있고 (위와 같이 회색으로 표기되면서 선택할 수가 없다.) 필자는 PostgreSQL을 선택하고 다음 단계로 넘어갔다.

 

Pic 3. DB Instance 상세 설정 화면

<Pic 3>은 앞서 선택한 DB Engine의 버젼과 DB가 탑재될 가상 머신의 Spec을 정하는 화면을 보여주고 있다. 2019년 5월 14일 현재 PostgreSQL은 version 11 까지 선택(필자는 9.6을 선택)할 수 있다. 프리티어 사용자의 경우 페이지 중간에 위치한 'RDS 프리 티어에 적용되는 옵션만 사용'을 체크해야 하고, 이 경우 t2.micro 사양(1 vCPU, 1G RAM)의 가상머신만 선택가능 하고 HA를 위해 다른 AZ에 복제본을 저장하는 것도 지원하지 않는다.

 

Pic 4. t2.micro RDS Instance의 비용

위의 프리티어 옵션을 제거하게되면 RDS Instance에 대한 비용 계산이 가능해 지는데, 동일한 Spec으로 Instance를 생성하더라도 프리티어가 아닐 경우에는 <Pic 4>와 같이 약 23$/month로 계산되니 프리티어 사용자들은 주의해야 할 것 같다.

 

Pic 5. RDS Instance 설정 화면

다음 단계로 넘어가면 Pic 5와 같은 화면을 확인할 수 있다. <Pic 5>에서 'DB 인스턴스 식별자'는 AWS내의 다른 Resource들과 구분하기 위해 사용하는 Resource Name이고, '마스터 사용자 이름'은 DB에 Root 계정을 의미한다. 원래 PostgreSQL에서는 'postgres'가 default root 계정으로 생성되지만, AWS에서는 여기서 정의된 값으로 Root 계정이 만들어진다.

 

Pic 6. 데이터베이스 옵션 설정 화면

<Pic 6>은 RDS Instance내에 생성될 Database Instance 이름과 접속 Port등을 설정한다. 'browndwarf'라는 이름으로 Database를 만들었다.

 

Pic 7. DB 보안 설정

마지막으로 보안 그룹을 만드는 단계이다. AWS 내부 Resource에서만 DB에 접근 시키고자 하면 페이지 중간의 '퍼블릭 액세스 가능성'을 '아니오'를 선택해야 하지만, 필자는 외부에서 Test하기 위해 '예'로 설정 하였다. Public Access가 가능하더라도 RDS Instance는 EC2 Instance와 같이 SSH를 통한 접근은 불가하며, DB Client Application을 통한 접근만 가능하다.

 

Pic 8. 생성 중인 Database Instance

그 이후 <Pic 8>와 같이 RDS Instance 상태를 확인할 수 있는데 RDS Instance는 생성에 꽤 많은 시간이 소요된다. 한참동안 '생성 중' 상태에 머물렀고 그 이후 <Pic 9>와 같이 '사용 가능'한 상태가 되었다. (약 5분 이상 소요)

Pic 9. 생성완료된 DB Instance

생성된 것을 확인한 후에 RDS > 데이터베이스 > {DB Instance 식별자}의 내용을 확인하면 Resource 활용도, DB 엔진, Instance Type 들과 접속정보, 보안 정보등을 확인할 수 있다. 이 가운데 빨간색으로 표기된 엔드포인트 및 포트 정보를 이용해서 DB에 접속하면 된다.

Pic 10. 생성된 Database 정보

외부에서 psql을 이용해 접속하려면 Host Name으로 엔드포인트 정보를, User Name으로 RDS Instance 생성 단계에서 정의한 마스터 사용자 이름을 입력하면 접속이 가능하다. (SSH를 통해 EC2 Instance에 접속할 떄와 달리 Key 파일은 필요하지 않다.)

...
[root@localhost Downloads]# psql -h browndwarfpostgresex.cnyrgflh0tpc.ap-northeast-2.rds.amazonaws.com -U browndwarf
Password for user browndwarf: 
psql (9.6.12)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.      
browndwarf=>

접속한 이후 Database에 등록된 User를 확인하면 아래와 같다. PostgreSQL을 설치했을 때 Default로 생성되는 Master User가 'postgres'에서 'rdsadmin'으로 생성된 것처럼 보이고, Master User로 입력한 'browndwarf'가 생성되어 있음을 확인할 수 있다.

...
browndwarf=> SELECT * FROM PG_USER;
  usename   | usesysid | usecreatedb | usesuper | userepl | usebypassrls |  passwd  | valuntil | useconfig                                                     
------------+----------+-------------+----------+---------+--------------+----------+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 browndwarf |    16389 | t           | f        | f       | f            | ******** | infinity | 
 rdsadmin   |       10 | t           | t        | t       | t            | ******** | infinity | {TimeZone=utc,log_statement=all,log_min_error_statement=debug5,log_min_messages=panic,exit_on_error=0,statement_timeout=0,role=rdsadmin,auto_explain.log_min_duration=-1,temp_file_limit=-1,pg_hint_plan.enable_hint=off,default_transaction_read_only=off,"search_path=pg_catalog, public"}
(2 rows)
...

Default로 만들어진 Database Instance를 확인하니 rdsadmin이라는 DB Instance가 만들어져 있고, 'postgres'의 Owner가 'browndwarf'로 되어 있는 점이 특이했다. ('rdsadmin' Account가 'postgres'를  대체한 것이라면 postgres DB의 Owner가 'rdsadmin'일 것이라고 예상했다.) 그리고 RDS Instance 생성 중에 정의했던 DB인 browndwarf DB도 생성됐음을 확인할 수 있고, 두 개의 template DB인 template0과 template1의 Owner가 다르다는 점도 참고할만 하다.(*)

...
browndwarf=> \list
                                     List of databases
    Name    |   Owner    | Encoding |   Collate   |    Ctype    |     Access privileges     
------------+------------+----------+-------------+-------------+---------------------------
 browndwarf | browndwarf | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres   | browndwarf | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 rdsadmin   | rdsadmin   | UTF8     | en_US.UTF-8 | en_US.UTF-8 | rdsadmin=CTc/rdsadmin
 template0  | rdsadmin   | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/rdsadmin   +
            |            |          |             |             | rdsadmin=CTc/rdsadmin
 template1  | browndwarf | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/browndwarf +
            |            |          |             |             | browndwarf=CTc/browndwarf
(5 rows)

browndwarf DB에 들어가서 Table을 확인해보면 기본적으로 만들어진 Table은 없는 것을 확인할 수 있다. 이제부터는 특별할 것 없이 이전에 설치했던 PostgreSQL DB와 동일하게 사용하면 된다.

...
browndwarf=> \c browndwarf browndwarf
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
You are now connected to database "browndwarf" as user "browndwarf".

browndwarf=> SELECT * FROM pg_tables WHERE tableowner='browndwarf';
 schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers | rowsecurity 
------------+-----------+------------+------------+------------+----------+-------------+-------------
(0 rows)
...

 

(*) RDS Instance 상에서 Database가 추가 생성되거나 삭제될 일이 얼마나 빈번할 지는 예상하기 힘들다. 실제 사용시에 기존 RDS Instance에 DB가 추가되기 보다는 별도의 RDS Instance를 생성할 것으로 예상되는데 이럴 경우 template Database는 별 의미 없는 것이 아닐까 한다.