RDS 생성 및 EC2 인스턴스 연결하기
RDS 생성
RDS > 데이터베이스 생성 > MySQL로 생성 > 버전은 기본으로 선택(MySQL 8.0.35)
템플릿에서 프로덕션과 개발/테스트 를 선택하면 아래에 Multi AZ 기능을 사용할 수 있다.
프리티어에서는 사용 불가.
DB인스턴스 이름과 어드민 사용자 이름, 암호를 설정한다.
그다음에 인스턴스 구성을 한다. 프리티어를 선택했기 때문에 버스터블 클래스 이외에는 선택사항이 없다.
버스터블 클래스란 상황에 따라서 CPU의 성능을 버스트시킬 수 있다는 뜻이다.
스토리지 유형은 범용 SSD(gp2)로 선택한다. 스토리지 유형 목록을 보면 GP3란게 있는데, 이건 추가 비용을 냄으로써 IOPS 처리량을 늘릴 수 있다.
할당된 스토리지의 크기는 간단한 시스템을 유지하기 위해 20GIB로 설정한다.
스토리지 자동 조정 활성화란게 있는데 오토 스케일링을 뜻한다. 최대 스토리지 임계값은 디폴트(1000GIB)로 설정해준다.
EC2 인스턴스 연결
그 다음은 컴퓨팅 리소스에 대해서 묻는데, 최근 UI 업데이트를 통해 여기서 직접 EC2 인스턴스를 만들어서 RDS와 바로 연결시킬 수 있다.
여기서 RDS와 연결해줄 EC2 인스턴스를 생성해둔다.
- 인스턴스명 : aws-learner-rds-ec2-instance, 내가 가지고 있는 기존 키페어(testkey.pem) 선택
-
보안 그룹 : http 80포트와 ssh 22포트를 위치무관 접속할 수 있게 설정.
- 고급 세부 정보 > 사용자 데이터 에서 편리한 설정을 위해 EC2 인스턴스가 생성되면서 실행될 스크립트 내용을 넣어준다.
- EC2 인스턴스 생성 후 apache, php, mysql을 yes 옵션으로 설치 후 아파치 실행
- 간단한 php파일을 아파치 서버 디렉토리 내에 index.php로 저장
- wget 명령어로 S3내의 connect.php 파일을 다운로드
connect.php 파일 내용
<?php
$username = "admin";
$password = "awslearner";
$hostname = "yourhostnameaddress";
$dbname = "awslearner";
//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password) or die("MySQL에 연결할 수 없습니다");
echo "MySQL 접속 성공! username - $username, password - $password, host - $hostname<br>";
$selected = mysql_select_db("$dbname",$dbhandle) or die("MySQL DB 연결 실패... - 다시 시도해보세요!");
?>
EC2 인스턴스 생성이 완료되었으면 다시 RDS 생성 화면으로 돌아와서 방금 생성한 EC2 인스턴스를 선택해준다.
VPC는 디폴트로 만들어질것이고, DB 서브넷 그룹은 기존 항목을 선택하거나 자동설정으로 선택해준다.
VPC 보안 그룹은 선택/생성이 있는데 기존에 생성했던 ssh, http 접근이 가능한 보안그룹으로 선택해줬다.
다음으로 가용영역이 있는데, 지금은 프리티어 용이라 Multi-AZ 기능을 사용할 수 없으므로 선택 권한이 없다.
추가 구성에서 데이터베이스 포트를 지정할 수 있다. (MySQL default 포트는 3306)
다음은 데이터페이스 암호 인증을 선택할 수 있는 곳이다. 여기선 위에서 부여했던 어드민 사용자, 암호를 가지고 데이터베이스에 접속할 수 있게끔 ‘암호 인증’을 선택해 줬다.
마지막으로 추가구성에서 데이터베이스 옵션에서는 초기 데이터베이스 이름을 설정해주고 나머지는 디폴트로 설정해줬다.
EC2 인스턴스 확인
방금 RDS와 연결한 인스턴스를 퍼블릭 IP주소로 접속해보면 php 화면이 뜬다.
이제 이 EC2 인스턴스에 터미널로 접속해본다.
아까 EC2를 생성할 때 입력했던 구문중 connect.php 파일 내용 확인
/var/www/html 폴더에 wget 이동
- vi connect.php
-
hostname 값을 생성한 RDS 인스턴스의 엔드포인트명으로 바꿔준다.
수정 한 후 ec2 DNS명/connect.php로 확인해보기
확인해보면 아래와 같이 MySQL에 연결할 수 없다고 나온다.
이유는 현재 RDS 보안그룹은 RDS 인스턴스 안에서만 존재하며,
우리가 웹에서 접속한 EC2 인스턴스에서는 별개의 보안그룹이 존재한다.
두 개의 서로 다른 클라우드에서 다른 보안 그룹이 존재하므로 현재 EC2에서 RDS로 통신이 불가능한 상태이다.
RDS 보안 그룹 확인하기
생성한 RDS의 보안 그룹 > 인바운드 규칙 확인
그다음, 이 소스를 지우고 아까 EC2 인스턴스가 속해 있는 보안 그룹을 찾아서 연결해준다.
그러면 이렇게 ‘기존 IPv4 CIDR 규칙에 a 참조된 그룹 ID를 지정할 수 없습니다.’ 라는 에러가 뜬다.
위 에러를 해결하려면, 이 규칙을 삭제하고 다시 똑같이 만들어주면 지정이 된다.
다시 똑같이 만들어 준 후에 저장을 누른다.
(DB 파라미터 그룹은 따로 정리.)
다시 /connect.php 화면을 로딩해서 접속 성공 여부를 확인한다.
댓글남기기