ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AWS RDS 구축하기
    프로젝트/게시판 프로젝트 2022. 6. 11. 00:01

    AWS 가입 및 EC2 인스턴스 생성(1)

    EC2 자바 11 설치 및 타임존 설정(2)

    AWS RDS 구축하기(3)

    AWS EC2에 스프링부트 프로젝트 배포하기(4)

     

    "AWS RDS 사용하기" 시작하겠습니다

     

    RDS란?

    AWS에 데이터베이스를 직접 설치하게 되면 모니터링, 알람, 백업 , HA 구성등을 모두 직접 하게 됩니다.

     

    이러한 작업들이 번거롭기 때문에 AWS에서는 위에 언급한 작업들을 모두 지원하는 Relational Database Service를 제공합니다.

     

    RDS는 AWS에서 지원하는 클라우드 기반 관계형 데이터베이스입니다.

     

     

    데이터베이스를 다룰 때 RDS VS EC2에 대해 조금 더 자세하게 알고 싶으시다면 다음 글을 참고하시면 좋을 것 같습니다.

    https://junuuu.tistory.com/183?category=994445 

     

    AWS RDS vs EC2 차이점

    AWS RDS란? Amazon Relational Database Service의 약자로써 Amazon RDS라고 불립니다. 클라우드에서 관계형 데이터베이스를 간편하게 설정, 운영 및 확장할 수 있습니다. 데이버베이스 인스턴스라고 불리는 가

    junuuu.tistory.com

     

     

    1단계 RDS 인스턴스 생성

    여러가지 옵션들이 있지만 Amazon Aurora는 프리티어 대상이 아니며 책에서는 MariaDB를 추천하고 있지만 많이 다루어 보았고 이미 팀적으로 협의된 MySQL을 선택하겠습니다.

     

    제 Local에 설치되어 있는 MySQL Version과 동일한 8.0.21로 설정하였습니다.

    템플릿은 프리 티어로 설정합니다.

    설정에서는 DB 인스턴스 식별자 / 마스터 사용자 이름/ 마스터 암호를 설정할 수 있습니다.

    추후 사용자 정보로 DB에 접근하게 되니 어딘가에 꼭 메모해주세요.

     

    인스턴스 구성은 가장 낮은 가격인 db.t2.micro를 선택했습니다.

     

    연결에서는 퍼블릭 액세스를 예로 변경합니다

    이후 보안 그룹에서 보안을 위해 지정된 IP만 접근하도록 막을 예정입니다

    (DB주소가 털리더라도 다른곳에서는 접속 불가능합니다)

    데이터베이스 인증은 암호 인증으로 그대로 두었습니다.

     

    추가 구성을 선택하여 초기 데이터베이스 이름을 설정합니다

     

    이후에 데이터베이스 생성 버튼을 눌러줍니다.

     

    데이터베이스의 상태가  조금 기다리면 생성중 -> 사용 가능으로 변합니다.

    2단계 : RDS 운영환경에 맞는 파라미터 설정하기

    파라미터 그룹으로 이동

    파라미터 그룹 편집 -> time_zone 검색 -> Asia/Seoul로 설정

     

    이때 다음과 같은 에러가 발생할 수 있습니다.

    default 파라미터 그룹은 수정할 수 없도록 되어 있기 때문에 새로운 파라미터 그룹을 생성한 다음 설정을 변경해야 합니다.

     

    파라미터 그룹 생성

    다음으로 char로 검색합니다.

    모두 utf8m64로 바꿔줍니다.

    utf8m64와 utf8의 차이점은 이모지 저장 가능 여부입니다.

    utf8m64는 이모지 저장이 가능하기 때문에 보편적으로 사용됩니다.

     

    utf8m64 설정 목록

    character_set_client

    character_set_connection

    character_set_database

    character_set_filesystem

    character_set_results

    character_set_server

     

    utf8mb4_general_ci 설정목록

    collatcion_connection

    collatcion_server

     

    max_connections를 150으로 설정합니다.

     

    3단계 : 생성된 파라미터 그룹을 데이터베이스에 연결

    데이터베이스 -> 수정 -> 추가구성 -> DB 파라미터 그룹을 설정한 이름으로 변경

     

    즉시 적용

    만약 파라미터 그룹이 제대로 반영되지 않는다면 재부팅을 진행해주면 됩니다.

    작업 -> 재부팅

     

    4단계 : 내 PC에서 RDS에 접속하기

    1.EC2 -> 인스턴스 -> 보안 -> 설정되어 있는 보안 그룹 선택

    https://kitty-geno.tistory.com/30

    2. 보안 그룹 ID 복사

    3. 데이터베이스(RDS) -> 연결&보안 -> VPC 보안 그룹 선택

     

    로컬 PC에서 RDS로 접근하기 위해서 RDS의 보안 그룹에 보인 PC의 IP를 추가해야 합니다.

    RDS 세부정보 페이지에서 보안 그룹 항목을 클릭합니다.

    그러면 EC2 Management Consolg창으로 이동하며 보안 그룹이 보입니다.

     

    4. 인바운드 규칙 편집을 선택합니다.

     

    4-1. 유형 MYSQL/Aurora 내 IP선택

     

    4-2. 복사한 EC2 보안 그룹 ID를 인바운트 규칙에 추가 후 저장

    https://kitty-geno.tistory.com/30

     

     

     

    5단계 : local에서 원격 데이터베이스로 접근

    Workbench, SQLYog, Sequal Pro, DataGrip , Database 플러그인 등 다양한 방법이 존재합니다.

    Workbench가 설치되어 있기 때문에 Workbench로 접근해 보겠습니다.

    상단 옵션에 있는 Database -> Connect to database를 선택합니다. (윈도우 기준 단축키 Ctrl + U)

     

    데이터베이스 상세보기로 들어가면 연결 & 보안 쪽에 엔드포인트를 확인할 수 있습니다.

    이 부분을 복사하여 Host부분에 RDS의 엔드 포인트를 등록합니다.

    https://rimkongs.tistory.com/219

    Username과 Password는 아까 설정했던 값을 입력해주시면 됩니다.

     

    정상적으로 DB연결이 완료됩니다.

     

    show variables like 'c%'

    위의 명령어로 현재의 character_set, collation 설정을 확인합니다.

    아까 설정했던 것과 조금씩 다른 게 있는데 그냥 넘어가 보겠습니다.

     

    select @@time_zone, now();

     

    위의 명령어로 DB의 타임존을 확인해봅니다.

    Asia/Seoul로 설정했는데 UTC로 되어있습니다.

     

    select @@global.time_zone, @@session.time_zone;

     

    위의 명령어로 time_zone을 확인해봅니다.

    모두 UTC로 나옵니다.


    SET GLOBAL time_zone = 'Asia/Seoul';
    SET time_zone = 'Asia/Seoul';

     

    GLOBAL 명령어 같은 경우는 1227 에러가 발생합니다.

    AWS RDS같은 경우에는 RDS에서 직접 타임존 설정을 해야 한다고 합니다.

     

    아까 위에서 설정했는데 적용이 안된 것이기 때문에 데이터베이스 재부팅을 실행해보겠습니다.

     

    데이터베이스 재부팅하니까 해결됐습니다..

     

    6단계 : 테이블 생성 insert 쿼리 테스트

    CREATE TABLE test(
    	id bigint(20) NOT NULL AUTO_INCREMENT,
        content varchar(255) DEFAULT NULL,
        PRIMARY KEY(id)        
    )ENGINE=InnoDB;
    
    insert into test(content) values ('테스트');
    select * from test;

    간단하게 테이블을 생성하고 한글명이 잘 들어가는지 테스트하겠습니다.

    정상적으로 잘 되는 것 같습니다.

     

    7단계 : EC2에서 RDS에서 접근 확인

    Putty로 EC2에 접속합니다.

     

    yum list mysql*

     

    yun list에 mysql server가 존재하지 않습니다.

     

    다음 명령어로 현재 나의 linux 환경에 맞는 버전 다운로드 및 설치를 합니다.

     yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

     

     

    완료 후 다음 명령어를 통해 설치합니다.

    yum install mysql-community-server

    만약 다음과 같은 에러가 발생한다면 다음 명령어를 입력해주세요

    sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

     

    이후에 다시 yum install mysql-community-server 명령어를 입력하면 설치가 잘 됩니다.

     

    다음 명령어를 통해 설치를 진행합니다.

    mysql -u 계정 -p -h Host주소
    
    예시 명령어
    mysql -u jojoldu -p -h freelac-springboot2-webservice.crbgmuixrqqb.ap-northeast-2.rds.amazonaaws.com

    비밀번호를 입력하는 메시지가 나오고 패스워드를 입력합니다.

     

     

    만약 계속 대기가 일어난다면 보안 그룹이 제대로 설정되지 않은 것 같습니다.

     

    보안그룹이 제대로 설정되었다면 실패, 성공메시지가 바로바로 나옵니다.

     

    이후 RDS로 접속이 되면 실제로 생성한 RDS가 맞는지 간단한 쿼리를 실행해 보겠습니다.

    생성했던 anthill DB가 존재합니다.

     

    혹시 몰라서 테이블까지 확인하고 쿼리 찍어보기

     

     

    참고자료

    스프링 부트와 AWS로 혼자 구현하는 웹 서비스(책)

    https://goddaehee.tistory.com/292

     

    [AWS] 10-1.EC2 MySQL 설치

    [AWS] 10-1.EC2 MySql 설치 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ [AWS] EC2에 MySql 설치하기 ] 입니다. : ) 1. MySql 직접 설치 1. 설치 가능 여부 확인 sudo yum list mysql*  - yum list를 확인..

    goddaehee.tistory.com

    https://kitty-geno.tistory.com/30

     

    AWS | EC2에서 RDS 접근을 위한 보안 그룹 인바운드 설정하기

    AWS | 데이터베이스(RDS) 생성 ※ RDS란? RDS(Relational Database Service)는 AWS에서 지원하는 클라우드 기반 관계형 데이터베이스이다. 하드웨어 프로비저닝, 데이터베이스 설정, 패치 및 백업과 같이 잦은

    kitty-geno.tistory.com

     

    댓글

Designed by Tistory.