AWS RDS
⌸ 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에서 멀티 팩터 인증(MFA)사용하기
- AWS ROOT 사용자의 계정이 털리면 요금 폭탄을 맞을 수 있고, 배포 서비스가 망가질 수 있다. 그래서 password를 이중으로 두어야 한다.
- AWS IAM의 MFA 서비스는 비밀번호뿐만 아니라 MFA(Multi-Factor Authentication)를 활용하여 2중보안을 설정하는 서비스이다. 그 중 은행의 OTP방식을 소개한다.
1) IAM 보안 자격 증명
- IAM은 AWS Identity and Access Management의 약자로서 AWS 보안을 담당하는 서비스 중 하나이다.
- 로그인 후 내 보안 자격 증명을 클릭하거나 IAM을 통해 아래 그림과 같이 접근한다.
2) 멀티 팩터 인증(MFA) 클릭하고 [Activate MFA]
3) 가상 MFA 디바이스 선택 [A virtual MFA device]
4) OTP 승인
5) 앱 스토어에서 Google OTP 다운로드
2. IAM 사용자 생성
- 보안 이슈 - AWS ROOT 계정이 털리면 큰 문제이므로, IAM에서 제한된 권한을 가진 유저를 생성한다.
-
사용자 추가
(Add User) -
AWS 액세스 유형 선택 ☑ 프로그래밍 방식 엑세스 (Programmatic access)
-
암호 설정에서 기존 정책 직접 연결 -
EC2FullAccess
입력 -
사용자 만들기 클릭 후 Access key ID와 Secret access key관리
- 이 창을 닫기 전 csv 파일로 다운로드하는 등 보안관리를 해야한다.
3. DB instance 설정
AWS 공식 문서 - 1단계: RDS DB 인스턴스 만들기
AWS 공식 문서 - PostgreSQL DB 인스턴스 생성 및 PostgreSQL DB 인스턴스의 데이터베이스에 연결
1) 서비스 ➔ RDS
➔ DB인스턴스 시작 ➔ 엔진 선택 PostgreSQL
➔ 개발/테스트
2) DB 선택 옵션 : ☑ RDS 프리 티어가 지원되는 옵션만 표시하기
3) DB 세부 정보 입력
4) 네트워크 및 보안 설정
5) 데이터베이스 옵션 설정
6) DB 인스턴스로 돌아와 사용 가능
상태 확인
7) EC2 보안 그룹
에서 RDS 보안 그룹 추가 확인
RDS와 Django를 연결하기
- 생성한 DB 인스턴스를 Django 프로젝트에 연결하는 작업
1. settings.py
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를 추가하면 된다.
개발자로서 ~
AWS 서비스를 보면서 웹 개발자는,
- 어떤 서비스의 API를 만들거나 다룰 수 있어야 하고
- 어떤 서비스의 GUI환경을 웹서비스로 만들어 볼 만하다.