안경잡이개발자

728x90
반응형

  AWS EC2 인스턴스를 생성한 뒤에, 거기에 접속해서 MySQL, Apache, PHP를 설치하여 연동하는 방법에 대해서 소개하겠습니다.

 

AWS EC2 인스턴스 생성

 

1. AWS EC2 관리 페이지로 이동합니다.

 

  EC2 관리 페이지: https://ap-northeast-2.console.aws.amazon.com/ec2/v2/home

 


2. [인스턴스 시작] 버튼을 눌러 [Ubuntu Server 18.04 LTS (HVM), SSD Volume Type]로 인스턴스를 생성합니다.

 


3. 무료 유형인 [t2.micro] 인스턴스 유형을 선택한 뒤 [검토 및 시작] 버튼을 누릅니다. 이후에 인스턴스를 시작할 수 있도록 하면 됩니다.

 


4. 키 페어를 생성해 저장한 뒤에 [인스턴스 시작] 버튼을 누릅니다.

 

 

인스턴스 접속


1. 아까 EC2 접속 목적의 키 페어 파일을 준비합니다.

 


2. 키 페어에 적절한 권한을 줍니다.


  1) 리눅스: 다음의 명령어로 권한을 설정합니다.

chmod 400 {키 페어 파일 이름.pem}


  2) 윈도우: 키 페어를 우클릭 한 뒤에 [속성] - [보안] [고급] - [상속 사용 안 함] - [명시적 사용] - [관리자 제외하고 모든 그룹 삭제]를 진행합니다. 이후에 관리자 권한으로 CMD를 실행합니다.

 

 

3. SSH 명령어로 서버에 접속합니다. 서버 접속 주소는 [Connect] 버튼을 누르면 나옵니다.

ssh -i "{키 페어 파일 이름.pem}" ubuntu@{AWS EC2 서버 URL}

 

 

  저는 다음과 같은 명령어를 확인할 수 있습니다.

 

 

  이제 다음과 같이 SSH로 AWS EC2 서버에 접속해보겠습니다.

 

 

MySQL 서버 설치 및 환경설정


1. AWS EC2 서버에 접속합니다.


2. MySQL를 설치하고 접속합니다.

sudo apt update # MySQL 설치를 위해 업데이트
sudo apt install mysql-server # MySQL 서버 설치
sudo mysql -u root -p # MySQL 접속

 


3. MySQL 접속 이후에 비밀번호를 설정합니다.

use mysql;
CREATE USER '{생성할 사용자 이름}'@'%' IDENTIFIED BY '{비밀번호}'; # 생성할 사용자 비밀번호 설정
GRANT ALL PRIVILEGES ON *.* TO '{사용자 이름}'@'%'; # 외부 접속이 가능하도록 설정
FLUSH PRIVILEGES;
exit;

 


4. MySQL 설정 파일을 수정합니다.

cd /etc/mysql/mysql.conf.d;
sudo vi mysqld.cnf;

 

  (이 때 만약 vi가 설치되어 있지 않다면 다음과 같이 vim을 설치합니다.)

 


5. mysqld.cnf를 수정하여 MySQL의 외부 접속을 허용합니다.

bind-address = 0.0.0.0


6. 수정 이후에 Mysql를 재시작 합니다.

sudo service mysql restart

 

MySQL 외부 접속 테스트


1. AWS EC2 보안 그룹 페이지로 이동합니다.

 

2. 보안 그룹 설정을 진행합니다. [인바운드] - [편집] - [규칙 추가] - [MySQL/Aurora] - 허용 IP로 [0.0.0.0/0]를 설정합니다.

 


3. MySQL Workbench와 같은 MySQL 관리 도구를 이용하여 접속합니다.

Hostname: {AWS EC2의 공인 IP 주소}
Username: {생성한 사용자 이름}
Password: {비밀번호}

 


4. MySQL에 접속하여 간단한 쿼리를 날립니다.

select now();

 

 

Apache 웹 서버 설치 및 환경설정


1. Apache 웹 서버를 설치합니다.

 

sudo apt-get install apache2

 

 

2. AWS EC2 보안 그룹 페이지로 이동합니다.


3. 보안 그룹 설정을 진행합니다. [인바운드] - [편집] - [규칙 추가] - [HTTP] - 허용 IP로 [0.0.0.0/0]를 설정합니다.

 


4. 공인 IP로 접속하여 웹 서버가 정상적으로 구동하는지 확인합니다.

 

 

5. apache2.conf 설정 파일을 엽니다.

sudo vi /etc/apache2/apache2.conf

 

6. 루트 디렉토리를 [/home/project]로 변경합니다.

<Directory /home/project/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

 


7. default.conf 설정 파일 열기

sudo vi /etc/apache2/sites-available/000-default.conf

 

8. 루트 디렉토리를 [/home/project]로 변경합니다.

DocumentRoot /home/project

 


9. /home/project 폴더 생성 및 index.html 파일을 생성합니다.

sudo mkdir /home/project
sudo vi /home/project/index.html


10. index.html 파일을 작성합니다.

Hello World!


11. Apache 웹 서버 재시작

sudo apachectl restart


12. 공인 IP로 접속하여 웹 서버가 정상적으로 구동하는지 확인합니다.

 

 

PHP 웹 서버 설치 및 Apache 연동

 

1. 간단히 옛날 버전의 PHP 5.6를 설치해보겠습니다.

sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install -y php5.6

 

  (이 때 만약 add-apt-repository가 설치되어 있지 않다면 다음과 같이 설치합니다.)

 


2. 설치된 PHP 버전을 확인합니다.

php -version

 


3. Apache와 PHP 연동 테스트

sudo vi /home/project/index.php


4. PHP 소개 페이지를 작성합니다.

<?php phpinfo();?>


5. 공인 IP의 /index.php로 접속하여 PHP 연동이 제대로 됐는지 확인합니다.

 

  (index.html 파일을 지워야 할 수 있습니다.)

 

 

PHP와 MySQL 연동


1. MySQL 연동 라이브러리를 설치합니다.

sudo apt install php5.6-mysql
sudo service mysql restart
sudo apachectl restart


2. 설치된 패키지를 확인합니다.

dpkg -l | grep php

 

 

3. index.php 소스코드를 작성합니다.

 

<?php
$conn = mysqli_connect(
  '{데이터베이스 IP}',
  '{사용자 이름}',
  '{비밀번호}',
  '{데이터베이스 이름}',
  '3306');
if (mysqli_connect_errno())
{
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql = "SELECT VERSION()";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_array($result);
print_r($row["VERSION()"]);
?>

 

 

4. 접속 결과를 확인합니다.

 

 

  정상적으로 MySQL, PHP, Apache가 설치되어 연동이 모두 완료되었습니다.

 

728x90
반응형

Comment +6

728x90
반응형

  AWS EC2 서비스는 말 그대로 하나의 서버를 제공하여 편하게 관리할 수 있도록 도와주는 서비스입니다. AWS EC2의 가장 큰 장점 중 하나는, 하나의 서버에 다양한 프로그램이 설치 되어있는 형태 그대로를 이미지(AMI)로 만들 수 있다는 점입니다. 그렇기 때문에 컨테이너 기술을 잘 모르는 사람들도 편하게 서버를 이미지화하여 사용할 수 있습니다.

 

  서버를 이미지화 했을 때 얻을 수 있는 가장 큰 이점으로는 서버가 정상적으로 동작했을 때의 상태를 미리 이미지로 저장해 놓을 수 있다는 겁니다. 그래서 서버에 문제가 생겼을 때는 현재의 서버를 내려 버리고, 이미지(AMI)로 만들어 놓았던 것을 그대로 AWS EC2 인스턴스로 만들 수 있습니다.

 

※ AWS EC2 인스턴스로 이미지(AMI) 만들기 ※

 

  실제로 AWS EC2 서버 중 하나를 선택하여 이미지로 만들어 보도록 하겠습니다.

 

 

  이미지로 만들어 놓고자 하는 AWS EC2 인스턴스(Instance)를 클릭한 뒤에 [작업] - [이미지] - [이미지 생성]을 눌러 이미지로 만들어 주세요.

 

 

  이미지를 생성하실 때에는 생성하고자 하는 이미지의 이름을 설정한 뒤에 크기 등을 설정하여 생성하시면 됩니다.

 

 

  그러면 이미지 생성 요청이 완료되었다는 메시지가 출력됩니다.

 

※ 이미지(AMI)로 AWS EC2 인스턴스 만들기 ※

 

 

  이제 [이미지] 탭의 [AMI] 탭으로 가서 우리가 만든 이미지로 인스턴스를 생성해 봅시다. 원하는 이미지를 클릭한 뒤에 [시작하기] 버튼을 누르시면 됩니다.

 

 

  이제 원하는 인스턴스 유형으로 [검토 및 시작] 하시면 됩니다.

 

 

  실제로 인스턴스를 생성해보겠습니다.

 

 

  인스턴스 생성 이후에는 다음과 같이 바로 인스턴스가 시작되는 것을 확인할 수 있습니다.

 

728x90
반응형

Comment +0

728x90
반응형

  AWS EC2는 재미있는 특징이 있습니다. 그것은 바로 기본적으로 EC2 인스턴스를 생성하여 서버를 구동시키면 그것은 고정 IP가 아니라는 점입니다. 따라서 탄력적 IP(Elastic IP)를 이용해 고정 IP를 할당 받아서 사용할 수 있습니다. 탄력적 IP를 이용하지 않으면, 인스턴스(서버)를 중지하고 다시 실행시키면 IP가 변경되어 버리는 대참사가 일어납니다.


  실제로 운영 중인 서버인 경우, 서버를 중지(STOP) 했다가 다시 켰을 때 IP가 변경되어 버리면 매우 귀찮은 일이 발생할 수 있습니다. 따라서 일반적으로 고정 IP를 할당 받기 위해서 탄력적 IP라는 것을 이용합니다. 탄력적 IP를 만들어 놓기만 하고, 사용하지 않더라도 과금이 되기 때문에 탄력적 IP는 꼭 필요한 만큼만 생성하여 바로 사용할 수 있도록 해야 합니다.


  따라서 한 번 실제로 구동 중인 AWS EC2 인스턴스에 탄력적 IP를 적용해보도록 하겠습니다. 현재는 탄력적 IP가 배정되지 않고, AWS가 임시로 할당해 준 퍼블릭 IP가 사용되고 있는 것을 확인할 수 있습니다.



  탄력적 IP를 할당 받아 사용하기 위해서는 [탄력적 IP] 탭으로 이동하여 [새 주소 할당] 버튼을 누르시면 됩니다.



  바로 한 번 할당을 진행하겠습니다.




  할당 이후에는 해당 탄력적 IP를 선택하신 뒤에 [주소 연결] 버튼을 눌러서 특정한 EC2 인스턴스에 연결할 수 있습니다.



  이후에 기존에 존재하던 AWS EC2 인스턴스를 선택하여 해당 탄력적 IP를 적용할 수 있도록 하겠습니다.




  결과적으로 다음과 같이 탄력적 IP가 적용된 것을 확인할 수 있습니다.


728x90
반응형

Comment +0

728x90
반응형

  AWS EC2를 이용하다 보면 볼륨(Volume)이 초과되어 새로운 라이브러리 등을 설치하는 데에 제약이 생길 수 있습니다. 이번 시간에는 정해진 서버 용량인 볼륨(Volume)이 부족할 때 볼륨의 용량을 늘리는 방법에 대해서 소개하고자 합니다.


  따라서 가장 먼저 AWS EC2 관리 페이지로 이동하여 [볼륨] 탭으로 이동하시면 됩니다.



  이후에 자신이 늘리고자 하는 인스턴스의 [볼륨]을 찾으셔서 [작업] - [볼륨 수정]에 들어가시면 됩니다. 저는 크기가 8GB인 볼륨을 16GB로 늘려보도록 하겠습니다.




  이후에 볼륨을 원하는 크기로 증가시키시면 됩니다. 정말 간단합니다.



  수정 내역이 반영되기까지는 일반적으로 10분 ~ 1시간 내외의 시간이 소요될 수 있습니다.




  결과적으로 다음과 같이 처리가 진행 인 것을 확인할 수 있습니다.



  저는 약 10분의 시간이 흐른 뒤에 다음과 같이 초록색으로 볼륨 증가 완료 처리 되었습니다.



  이제 인스턴스를 재부팅 해주시면 안정적으로 적용됩니다.



  다시 서버에 접속하여 다음의 명령어로 볼륨 내의 용량이 어떻게 배정되어 있는지 확인할 수 있습니다. 저는 성공적으로 기존의 8GB의 디스크 용량이 16GB로 증가한 것을 확인했습니다.


  df -Th


728x90
반응형

Comment +1

728x90
반응형

  이번 시간에는 AWS EC2에 AWS RDS를 연동하는 방법에 대해서 알아보도록 하겠습니다. 기존에 운영하는 AWS EC2 서비스가 있을 때 이에 안전한 방법으로 데이터베이스를 연결해야 하는 경우가 존재할 수 있습니다. 따라서 그럴 때를 대비하여 한 번 AWS EC2에 AWS RDS를 연동해보도록 하겠습니다.


※ AWS EC2 인스턴스의 VPC 정보 확인 ※


  일단 자신이 현재 가지고 있는 AWS EC2 정보를 먼저 파악하는 것이 중요합니다. 우리는 이 EC2에 AWS RDS 서비스를 연결할 것이기 때문에 EC2와 동일한 VPC에 AWS RDS를 설치해야 해요. 그러므로 VPC ID를 확인하는 것이 첫 번째입니다. 이후에는 [보안 그룹]을 확인합니다. 현재 제 AWS EC2 인스턴스의 보안 그룹은 launch-wizard-2입니다.



※ DB 보안 그룹 설정하기 ※


  따라서 [보안 그룹] 탭으로 이동해보도록 합시다. 그러면 아까 확인했던 launch-wizard-2라는 이름의 보안 그룹이 눈에 보입니다. 이 보안 그룹의 ID 값을 기록하세요. 우리는 이 보안 그룹에서만 DB에 접근할 수 있도록 설정할 것입니다. 이후에 [보안 그룹 생성] 버튼을 눌러보도록 합시다. 



  이제 DB Security Group이라는 이름으로 우리가 만들 DB가 들어갈 보안 그룹을 만들어 주시면 됩니다. 이 때 [인바운드] 보안 그룹 규칙으로 방금 우리가 확인했던 EC2의 보안 그룹에서만 접근할 수 있도록 설정해주시면 됩니다. 이 때 저는 MySQL DB를 사용할 것이므로 MySQL 포트인 3306으로 설정했습니다.



※ DB 서브넷 그룹 설정하기 ※


  이제 AWS RDS의 [서브넷 그룹] 탭으로 이동하여 [DB 서브넷 그룹 생성] 버튼을 눌러서 서브넷 그룹을 만들어 보도록 하겠습니다.



  다음과 같이 DB Subnet Group이라는 이름으로 서브넷 그룹을 만든 이후에 EC2와 동일한 VPC를 선택합니다.  그리고 [이 VPC와 관련된 모든 서브넷 추가] 버튼을 누르시면 됩니다.




  결과적으로 DB 서브넷 그룹을 생성해주시면 됩니다. 그러면 다음과 같이 하나의 서브넷 그룹 생성이 완료됩니다.



※ DB 한글 설정을 위한 파라미터 그룹 설정하기 ※


  MySQL 데이터베이스는 기본적으로 한글을 지원하지 않습니다. 그래서 [파라미터 그룹] 탭으로 이동하여 한글 지원을 위한 [파라미터 그룹 생성]을 진행하셔야 합니다.



  다음과 같이 MySQL 5.6 버전의 파라미터 그룹을 만들어 줍시다.



  이제 만들어진 파라미터 그룹으로 들어가 편집을 수행합니다.



  가장 먼저 [char]를 검색하여 모든 캐릭터 인코딩 관련 값을 UTF8으로 변경해주세요.



  이후에 [collation]을 검색하여 모든 값을 utf8_general_ci로 변경해 주시면 됩니다.




  이후에는 꼭 [변경 사항 저장] 버튼을 눌러서 저장해 주시면 됩니다.



※ AWS RDS 데이터베이스 생성하기 ※


  이제 실질적으로 MySQL 데이터베이스를 생성해보도록 하겠습니다. 그리고 AWS EC2에서만 접속이 가능하도록 설정할 것입니다.



  다음과 같이 MySQL 엔진을 선택하여 [RDS 프리 티어에 적용되는 옵션만 사용]을 체크해주세요. 무료로 이용하는 편이 좋을 거예요.



  결과적으로 다음과 같이 MySQL 5.6을 선택하여 만들어 주시면 됩니다.




  다만 고급 설정 구성을 하실 때에는 서브넷 그룹으로는 우리가 만들었던 DB Subnet Group을 선택한 뒤에, 보안 그룹도 마찬가지로 우리가 만들었던 DB Security Group을 선택하시면 됩니다. 그리고 [퍼블릭 액세스 가능성]아니요로 선택해주셔야 VPC 내부의 EC2에서만 접근이 가능합니다.



  결과적으로 데이터베이스 옵션으로는 아까 만들었던 한글 전용 파라미터 그룹을 선택하시고, 나머지는 기본 설정으로 데이터베이스를 생성해주시면 됩니다.




  결과적으로 다음과 같이 DB 인스턴스가 생성되었습니다.



※ AWS RDS에 연결하기 ※


  이제 만들어진 데이터베이스의 정보를 확인해보도록 합시다.



  다음과 같이 [연결] 탭에서 엔드포인트를 확인하시면 됩니다. 이 엔드포인트 주소로 접속할 수 있어요.



  이제 한 번 접속을 해봅시다.


  ▶ MySQL 접속 명령어: mysql -u empo -p --host empo.crtzcfwok2ed.ap-northeast-2.rds.amazonaws.com


  다음과 같이 외부 IP에서 해당 MySQL에 접속하려고 하면 연결 오류 메시지가 출력됩니다. 보안 그룹이 우리를 지켜주고 있는 거예요.



  하지만 같은 VPC 내에 있는 EC2에서 접근을 시도하면 다음과 같이 성공적으로 연결이 이루어지는 것을 확인할 수 있습니다.



  따라서 성공적으로 AWS EC2에 AWS RDS를 연동하게 된 것입니다.

728x90
반응형

Comment +2

  • CNOO 2019.09.17 16:55

    정말 감사드립니다. 덕분에 잘 해결해서 RDS서비스 사용하게 되었습니다!
    제 블로그에 참고하여 메모용 글 작성해도 될까요?
    출처는 당연히 남깁니다!

  • jpjpjp 2020.03.27 18:33

    putty를 통해서 ec2로 접근하는데 ERROR 1045 (28000): Access denied for user ..... 이런 오류가 뜹니다 ㅜㅜ 패스워드가 맞아도 뜨고 안맞아도 뜨네요 이유가 뭘까요..?

728x90
반응형

※ AWS VPC 서비스를 이용해 AWS EC2와 RDS를 관리하는 방법 ※


  이번 시간에는 AWS VPC 서비스를 이용해 AWS EC2와 RDS를 안전하게 관리하는 방법에 대해서 알아보도록 하겠습니다. 우리는 일반적으로 AWS EC2를 이용해 웹 서버를 구동시키고, MySQL과 같은 데이터베이스는 AWS RDS 서비스를 이용하여 별도의 독립된 공간에서 관리합니다. 이 때 EC2는 웹 서버가 있다는 점에서 퍼블릭(Public) 상태여야 하며 RDS는 EC2에서만 접근할 수 있는 프라이빗(Private) 상태여야 해요.


  다시 말해 다음과 같이 시스템을 구성하는 것이 안전하며 효과적입니다.



  말 그대로 외부에서는 EC2에만 접근할 수 있으며 AWS RDS 데이터베이스는 EC2를 거쳤을 때만 이용할 수 있습니다. 그래서 외부에서 바로 DB에 접근할 수 없다는 점에서 중요한 정보를 안전하게 보관할 수 있다는 것입니다. 이는 가장 간단하면서도 보편적인 시스템 구성도입니다. 결과적으로 VPC라는 것을 이용해 AWS EC2와 AWS RDS를 감싸야 합니다. 따라서 가장 먼저 AWS VPC를 만들어 보도록 하겠습니다.


※ VPC 만들어보기 ※


  ▶ VPC 관리: https://console.aws.amazon.com/vpc/


  VPC는 해당 사이트에 접속해서 생성할 수 있습니다. 바로 [VPC 만들기] 버튼을 눌러 이동합니다.



  우리는 2번째 옵션인 [퍼블릭 및 프라이빗 서브넷이 있는 VPC]를 선택하면 됩니다. 외부에서 접속 가능한 퍼블릭(Public) 서브넷을 반드시 열어 두어야 합니다. 이후에 Public Subnet이라는 이름으로 외부에서 접속 가능한 서브넷을 만들 예정입니다.



  다음과 같이 퍼블릭 서브넷(Public Subnet)프라이빗 서브넷(Private Subnet)의 이름을 설정하면 됩니다. 이 때 프라이빗 서브넷의 가용 영역을 기억해두시면 좋습니다. 나중에 프라이빗 서브넷을 하나 더 만드는데, 그 프라이빗 서브넷의 설정에 있어서 필요한 정보이기 때문입니다. 그리고 NAT 게이트웨이로 NAT 인스턴스를 사용하시면 됩니다. 어차피 저는 NAT 인스턴스 사용 설정만 해 놓고, 실제로는 사용하지 않을 생각입니다.



  그러면 NAT 인스턴스의 세부 정보를 설정할 수 있습니다. 저는 가장 기본적인 인스턴스인 t2.nano를 이용했습니다. 어차피 NAT 인스턴스는 지운 다음에 다시 만들어 줄 생각이에요. 이후에 [VPC 만들기] 버튼을 눌러서 VPC를 생성하시면 됩니다.



  이후에 [서브넷] 탭으로 이동해 보시면 다음과 같이 방금 우리가 만들었던 Public Subnet과 Private Subnet이 존재하는 것을 확인할 수 있습니다. 다만 VPC의 정상적인 동작을 위해서는 한 개의 Private Subnet을 더 만들어야 합니다. 따라서 [서브넷 생성] 버튼을 누를 수 있습니다.



  서브넷을 생성할 때는 아까 우리가 생성했던 VPC를 대상 VPC로 설정해주시면 됩니다.



  다만 이번에 만드는 두 번째 프라이빗 서브넷은 처음에 만들었던 프라이빗 서브넷과 다른 [가용 영역]을 사용해야 합니다. 만약 같은 가용 영역을 사용하시는 경우, 나중에 최종 단계에서 가용 영역이 최소 2개 이상 필요하다는 오류 메시지를 만나게 될 거예요. 또한 IPv4 CIDR 블록으로는 10.0.2.0/24를 사용하시면 됩니다. 이후에 [생성]을 진행해주시면 됩니다.



  이제 다음과 같이 Private Subnet이 2개 존재하는 것을 확인할 수 있습니다. 이 두 개의 프라이빗 서브넷이 동일한 라우팅 테이블을 가지는지 확인해주시면 됩니다. 다음 사진과 같이 각 서브넷을 클릭해서 [라우팅 테이블] 탭에서 확인하시면 됩니다.



※ 보안 그룹 설정하기 ※


  이제 실제로 어떠한 프로토콜을 이용해서 우리의 VPC에 접근할 수 있는지를 설정하기 위해서 [보안 그룹] 탭으로 이동해서 [Create Security Group] 버튼을 눌러서 보안 그룹을 만들어 주시면 됩니다.



  기본적으로 외부에서 접속이 가능한 보안 그룹으로 Security Group을 생성합니다. 마찬가지로 대상 VPC로는 처음에 만들었던 VPC를 넣어주신 뒤에 [Create] 버튼을 눌러서 생성해주시면 됩니다.



  보안 그룹을 만든 이후에는 다음과 같이 만들어진 보안 그룹을 클릭하여 [Edit Rules] 버튼을 눌러서 규칙(Rule)을 추가하시면 됩니다.



  이후에 다음과 같이 SSH와 HTTP 프로토콜을 열어서 외부에서 접속할 수 있도록 설정하시면 됩니다.



  결과적으로 다음 그림과 같이 인바운드 규칙(Inbound Rule)을 확인해 보시면 80번 포트 및 22번 포트로는 외부에서 접속이 가능한 것을 확인할 수 있습니다. 이제 내부망에서 DB에 접속할 수 있는 보안 그룹 또한 만들어주도록 하겠습니다.



  이후에 다음과 같이 DB Security Group이라는 이름으로 보안 그룹을 만든 뒤에 대상 VPC를 설정해주시면 됩니다.



  이번에 만들어진 보안 그룹도 마찬가지로 [Edit Rules]를 눌러서 규칙을 추가할 수 있습니다. 이 때, 아까 만들었든 Security Group의 그룹 ID를 저장해 두시면 됩니다.



  다음과 같이 3306 포트로만 접속할 수 있도록 설정하시면 됩니다. 이 때 [소스] 탭으로는 아까 만들었던 Security Group의 그룹 ID를 넣으시면 됩니다. 그러면 Security Group에 속해 있는 컴퓨터만 DB Security Group에 접근할 수 있게 됩니다.



※ 데이터베이스 서브넷 설정 ※


  이제 하나의 데이터베이스를 만들어서 설정을 해보도록 하겠습니다. 가장 먼저 [서브넷 그룹] 탭으로 이동해서 [DB 서브넷 그룹 생성] 버튼을 누르시면 됩니다.



   이후에 다음과 같이 DB 서브넷 그룹을 만들어 주세요. 만드실 때는 처음에 생성했던 VPC로 설정하시고 [이 VPC와 관련된 모든 서브넷 추가] 버튼을 눌러서 VPC와 관련된 서브넷을 모두 추가하시면 됩니다.



  결과적으로 모든 서브넷이 추가된 것을 확인할 수 있습니다.



※ 데이터베이스 만들기 ※


  결과적으로 [데이터베이스] 탭으로 이동해서 [데이터베이스 생성] 버튼을 눌러서 데이터베이스를 만들어 보도록 하겠습니다.



  다음과 같이 프리 티어로 MySQL을 만들어 보도록 하겠습니다.



  이후에 다음과 같이 DB 세부 정보를 지정할 수 있습니다. 저는 MySQL 5.6으로 설정하고 기본 설정 그대로 진행했습니다.



  이후에 고급 설정 탭에서 VPC의 세부 설정을 진행하시면 됩니다. 다음과 같이 아까 만들어 주었던 DB Subnet Group과 DB Security Group으로 설정을 해주시면 됩니다. 그러면 동일한 VPC에 있는 Security Group에서만 이 DB에 접근할 수 있게 됩니다.



  이후에 나머지 설정을 해주시고 DB 인스턴스를 만들어 주시면 됩니다.



※ AWS EC2 인스턴스 만들기 ※


  이제 AWS EC2 인스턴스를 만들어서 퍼블릭(Public)한 접근이 가능하도록 설정하겠습니다. 따라서 AWS EC2 관리 페이지의 [인스턴스] 탭에서 [인스턴스 시작] 버튼을 눌러 인스턴스를 만들어 보도록 하겠습니다.



  저는 우분투(Ubuntu) 서버로 생성을 진행하여 인스턴스까지 설정해보도록 하겠습니다.




  이후에 인스턴스 세부 정보를 편집하여 VPC 설정을 진행하도록 하겠습니다.



  다음과 같이 처음에 만들었던 VPC로 설정을 진행하시면 됩니다. 또한 서브넷 설정에 있어서 만들었던 Public Subnet으로 설정하시면 됩니다.



  이후에 [보안 그룹 구성] 탭으로 이동하여 아까 만들었던 Security Group으로 설정하여 외부에서 접근 가능하도록 설정합니다.



  이후에 인스턴스를 시작해주시면 됩니다.



  또한 해당 인스턴스에 접근하기 위하여 키 페어를 설정합니다.



  이제 인스턴스가 생성되었습니다.



  다만 이렇게 만들어진 인스턴스는 기본적으로 공인 IP가 할당되어 있지 않습니다. 따라서 탄력적 IP(Elastic IP)를 설정해줍니다.



  하나의 탄력적 IP를 선택해 [주소 연결] 기능을 눌러 다음과 같이 방금 생성했던 인스턴스를 설정해주시면 됩니다.



  이제 이 인스턴스에 해당 퍼블릭 IP로 접속할 수 있습니다.



  실제로 접속을 해보면 다음과 같습니다.



※ VPC 내부의 MySQL 접속하기 ※


  이제 VPC 내부에 있는 MySQL에 접속해보도록 하겠습니다. AWS RDS 서비스로 가서 아까 만들었던 DB를 확인합니다. 그러면 해당 DB에 접속할 수 있는 URL이 보입니다.



  이제 외부에서 여기에 접속하려고 하면 접속 실패 메시지가 뜨는 것을 확인할 수 있습니다.



  따라서 EC2에서 MySQL을 설치해서 EC2에서 해당 MySQL 서버에 접속해보도록 하겠습니다.


  ▶ APT 업데이트: sudo apt-get update

  ▶ MySQL 설치: sudo apt install mysql-client-core-5.7


  다음 사진과 같이 동일 VPC 내의 EC2에서 접속했을 때 비로소 접속이 되는 것을 확인할 수 있습니다.


  ▶ MySQL 접속하기: sudo mysql -u user -p --port 3306 --host db.crtzcfwok2ed.ap-northeast-2.rds.amazonaws.com



  이로써 VPC 내부에서만 접속이 가능한 MySQL 데이터베이스가 구축이 되었습니다. 반면에 EC2는 퍼블릭(Public)한 공간에 있기 때문에 누구나 언제든지 접속이 가능합니다. 이와 같은 구성이 많이 사용되는 이유는 EC2에 MySQL을 설치하는 것보다 RDS 서비스로 따로 분리하는 것이 더 효과적인 DB 관리가 가능하기 때문이에요.


728x90
반응형

Comment +0