AWS RDS

게시: by Creative Commons Licence




⌸ Amazon RDS와 PostgreSQL

RDS는 Relational Database Server의 약자이다. Amazon RDS는 AWS가 제공하는 데이터베이스 서비스이다. 공식 문서가 짱이다 !!!

  • VPC의 DB 인스턴스 - 클라우드 서비스로서 서버와 분리되어 따로 쉽게 관리된다.
    • CLI 환경에서는 AWS CLI가 제공된다.
    • GUI 환경에서는 AWS Management Console이 제공된다.
    • API 제공으로 개발자가 프로그래밍으로 접근할 수 있다.
  • 백업/복구/확장/장애감지가 쉽다.
  • 주요 DB 엔진을 제공한다. - 이 포스트에서는 PostgreSQL을 사용한다.



⍑참조

언제나 그렇듯 AWS 공식문서- RDS

  • 한글화가 매우 잘 되어 있다. 아무리 한글화가 이루어지더라도 기술문서는 어느 정도 알아야 읽힌다.
  • 공식 문서가 **엄청 잘 만들어져 있다. **
  • 여기서는 그냥 소개하는 정도에 그친다.


이한영 강사 블로그

나채원 블로그


Amazon RDS 설정

1. AWS 가입

  • https://aws.amazon.com/을 열고 [Create an AWS Account]를 선택합니다.

  • 나머지는 온라인 지시를 따른다.

AWS SignUp


AWS에서 멀티 팩터 인증(MFA)사용하기

자습서

한글 블로그 - 박상권의 삽질 블로그

  • AWS ROOT 사용자의 계정이 털리면 요금 폭탄을 맞을 수 있고, 배포 서비스가 망가질 수 있다. 그래서 password를 이중으로 두어야 한다.
  • AWS IAM의 MFA 서비스는 비밀번호뿐만 아니라 MFA(Multi-Factor Authentication)를 활용하여 2중보안을 설정하는 서비스이다. 그 중 은행의 OTP방식을 소개한다.


1) IAM 보안 자격 증명

  • IAM은 AWS Identity and Access Management의 약자로서 AWS 보안을 담당하는 서비스 중 하나이다.
  • 로그인 후 내 보안 자격 증명을 클릭하거나 IAM을 통해 아래 그림과 같이 접근한다.

AWS IAM


2) 멀티 팩터 인증(MFA) 클릭하고 [Activate MFA]

AWS IAM MFA


3) 가상 MFA 디바이스 선택 [A virtual MFA device]

AWS IAM Virtual MFA device


4) OTP 승인

AWS IAM MFA OTP


5) 앱 스토어에서 Google OTP 다운로드

AWS IAM MFA Google OTP




2. IAM 사용자 생성

  • 보안 이슈 - AWS ROOT 계정이 털리면 큰 문제이므로, IAM에서 제한된 권한을 가진 유저를 생성한다.

IAM


  • 사용자 추가(Add User)

    IAM2


  • AWS 액세스 유형 선택 ☑ 프로그래밍 방식 엑세스 (Programmatic access)

    IAM3


  • 암호 설정에서 기존 정책 직접 연결 - EC2FullAccess입력

    IAM4


  • 사용자 만들기 클릭 후 Access key IDSecret access key관리

    • 이 창을 닫기 전 csv 파일로 다운로드하는 등 보안관리를 해야한다.

    IAM5




3. DB instance 설정

AWS 공식 문서 - 1단계: RDS DB 인스턴스 만들기

AWS 공식 문서 - PostgreSQL DB 인스턴스 생성 및 PostgreSQL DB 인스턴스의 데이터베이스에 연결


1) 서비스 ➔ RDS ➔ DB인스턴스 시작 ➔ 엔진 선택 PostgreSQL ➔ 개발/테스트

aws 서비스

aws DB 인스턴스 시작

aws DB 엔진 선택

aws DB 엔진 선택


2) DB 선택 옵션 : ☑ RDS 프리 티어가 지원되는 옵션만 표시하기

aws DB detail


3) DB 세부 정보 입력

aws DB detail


4) 네트워크 및 보안 설정

aws DB network


5) 데이터베이스 옵션 설정

aws DB option


6) DB 인스턴스로 돌아와 사용 가능 상태 확인

aws DB 인스턴스


7) EC2 보안 그룹에서 RDS 보안 그룹 추가 확인

aws EC2 보안그룹




RDS와 Django를 연결하기

  • 생성한 DB 인스턴스를 Django 프로젝트에 연결하는 작업


1. settings.py

DB 인스턴스

DATABASES RDS 대시보드  
'HOST' 엔드포인트  
'PORT' 포트 '5432'
'NAME' DB 이름 'pet'
'USER' 사용자 이름 'wooltari'
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'HOST': '<엔드 포인트>',
        'PORT': '5432',
        'NAME': 'wooltari',
        'USER': 'pet',
        'PASSWORD': '*******',
    }
}


2. psycopg2 설치

➜  pip install psycopg2 


3. 연결 확인

➜  ./manage.py showmigrations

# 성공하면
admin
 [ ] 0001_initial
 [ ] 0002_logentry_remove_auto_add
auth
 [ ] 0001_initial
 [ ] 0002_alter_permission_name_max_length
 [ ] 0003_alter_user_email_max_length
 [ ] 0004_alter_user_username_opts
 [ ] 0005_alter_user_last_login_null
 [ ] 0006_require_contenttypes_0002
 [ ] 0007_alter_validators_add_error_messages
 [ ] 0008_alter_user_username_max_length
contenttypes
 [ ] 0001_initial
 [ ] 0002_remove_content_type_name
sessions
 [ ] 0001_initial


4. psql로 RDS에 접속해보기

➜  psql --host=<엔드 포인트> \
--user=pet \
--port=5432 \
wooltari


  • 기존 데이터베이스 삭제 후 새로 마이그레이션 생성하여 RDS에 적용할 경우
➜  psql --host=<RDS endpoint> --user=<RDS username> --port=5432 postgres

postgres=> DROP DATABASE deploy;
DROP DATABASE
postgres=> CREATE DATABASE deploy OWNER <username>;
CREATE DATABASE
postgres=> \q

➜  ./manage.py makemigrations
➜  ./manage.py migrate




RDS 보안그룹 인바운드 설정

  • 내 IP가 아닌 다른 IP로 RDS에 접속하려면 RDS 보안그룹 인바운드를 설정해야 한다.
  • 예를 들어 내가 생성한 EC2를 RDS에 접속하려면 RDS의 보안그룹에 EC2를 추가하면 된다.

RDS 보안그룹 인바운드 설정



개발자로서 ~

AWS 서비스를 보면서 웹 개발자는,

  1. 어떤 서비스의 API를 만들거나 다룰 수 있어야 하고
  2. 어떤 서비스의 GUI환경을 웹서비스로 만들어 볼 만하다.