이번 실습에선 RDS와 EC2 서비스릃 활용하여 Wordpress를 구축해보자.
이 때, EC2는 퍼블릭 서브넷에 구성하고 Database를 프라이빗 서브넷에 구성하여
2-Tier 아키텍처로 구성한다.
Overview
1. VPC 구성하기
2. RDS 인스턴스 생성하기
3. EC2 인스턴스 생성하기
Step1. VPC 구성하기
아래와 같이 새로운 VPC를 생성해준다.
서브넷을 생성해준다.
위와 같은 방식으로 총 4개의 서브넷을 생성해준다.
생성된 서브넷 4개를 확인한다.
이제 라우팅 테이블을 생성해주자.
아래와 같이 PublicA, 그리고 PublicC 두 개의 라우팅 테이블을 생성한다.
이제 Public 서브넷에 위치한 인스턴스의 인터넷 접속을 위한 인터넷 게이트웨이를 생성해주자.
아래와 같이 Internet Gateway를 생성해준다.
생성했던 인터넷 게이트웨이는 조금 전 생성했던 vpc와 연결해준다.
VPC와 연결해주고 PublicA와 PublicC의 [라우팅 편집]에서 각각 인터넷 게이트웨이를 추가해준다.
PublicA의 [서브넷 연결 편집]에서 처음 생성했던 Public-A 서브넷을 연결한다.
마찬가지로 PublicC의 [서브넷 연결 편집]에서 Public-C 서브넷을 연결한다.
이제 보안그룹을 생성할 단계이다.
아래와 같이 세 개의 보안그룹을 생성해주자.
이제 WebALBSecurityGroup의 인바운드 규칙을 설정한다.
해당 보안그룹을 선택하고 [인바운드 규칙] - [Edit inbound rules]를 클릭한다.
로드 밸런서의 경우 웹 접속을 위한 http 80 포트를 허용해준다.
이제 WebSecurityGroup의 설정을 변경해주자.
Load Balancer에서 오는 HTTP 포트와, 외부 SSH 접속을 위한 인바운드 규칙을 추가해준다.
80포트는 WebALBSecurityGroup을 선택해주면 된다.
마지막으로 RDS의 보안그룹은 웹에서만 접속할 수 있도록 80 포트만 허용해준다.
이것으로 VPC 구성이 완료됐다.
Step2. RDS 생성하기
RDS 서비스로 이동한다.
이동 후 아래의 3개의 그룹을 생성해야 한다.
1. 서브넷 그룹
2. 파라미터 그룹
3. 옵션 그룹
먼저 서브넷 그룹을 생성해보자.
[RDS] - [서브넷 그룹] - [DB 서브넷 그룹 생성]을 클릭한다.
[이름]과 [설명]은 wordpress를 적어주고 사용 중인 VPC를 선택한다.
가용영역은 ap-northeast-2a, ap-northeast-2c를 선택하고 조금 전 생성했던 Private Subnet 두 개를 선택한다.
(실습과 동일하게 설정했다면 10.20.2.0/24, 10.30.3.0/24 두 개이다)
이제 파라미터 그룹을 생성할 차례이다.
파라미터 그룹이란 DB 옵션을 설정하기 위해 AWS 에서 제공하는 기능이다.
파라미터 그룹을 생성하면 DB 버전에 맞는 프로퍼티 값들을 제공하기 때문에, 사용자는 이 값을 수정하여 DB 의 옵션을 변경할 수 있다.
[파라미터 그룹] - [파라미터 그룹 생성]을 클릭한다.
이제 옵션 그룹을 생성해주자.
생성한 옵션 그룹과 DB 인스턴스를 연동시키면 보안을 강화한 추가 기능을 사용할 수 있다.
아래와 같이 옵션 그룹을 생성한다.
이제 RDS 인스턴스를 생성해주자.
MySQL 엔진을 선택하고 버전을 선택한다.
database 접속을 위한 계정정보를 입력해준다.
RDS_handson 과 같이 최소한의 실습을 위해 아래와 같이 스펙을 설정해준다.
마찬가지로 "다중 AZ 배포" 기능은 비활성화 시켜준다.
아래와 같이 네트워크를 설정해준다.
생성했던 파라미터 그룹과 옵션 그룹을 [추가 구성]에서 설정해준다.
이번 실습에선 [자동 백업 활성화]와 [모니터링] 옵션은 비활성화 시켜준다.
추정 요금을 확인하고 [데이터베이스 생성]을 클릭한다.
데이터베이스가 생성 중인 것을 확인하며 이제 EC2 인스턴스를 생성해보자.
Step3. EC2 인스턴스 생성하기
먼저 실습에 사용할 데모키를 생성해준다.
아래 단계를 거쳐 EC2 인스턴스를 생성해준다.
4단계 [스토리지 추가]는 기존 설정으로 두고 넘어간다.
마지막으로 생성했던 DemoKey를 선택해주고 [인스턴스 시작]을 클릭한다.
이제 로드 밸런서를 생성해주자.
[로드 밸런싱] - [대상 그룹]에서 [대상 그룹 생성]을 클릭한다.
그룹 이름과 VPC를 선택한다.
[대상 등록] 탭에서 아래 인스턴스를 추가한 후 대상 그룹을 생성한다.
이제 로드 밸런서를 생성해준다.
[로드 밸런싱] - [로드 밸런서] - [Load Balancer 생성]을 클릭한다.
유형은 [Application Load Balancer]를 선택한다.
가용 영역에서 myVPC를 선택하고 각각의 가용영역에 맞는 서브넷을 선택한다.
2단계 [보안 설정 구성]은 넘어간다.
[보안 그룹 구성]에서 [기존 보안 그룹 선택]을 클릭한 후 "WebALBSecurityGroup"을 선택한다.
[라우팅 구성]에서 "기존 대상 그룹"을 클릭하여 조금 전 생성했던 wordpress 대상 그룹을 선택한다.
[검토]를 거친 후 [생성]을 클릭하여 로드 밸런서를 생성한다.
이제 퍼블릭 IP를 사용하여 EC2 인스턴스에 접속해보자.
아까 생성했던 key pair를 사용하여 인스턴스에 접속한다.
웹 서버와 mysql 패키지를 설치해준다.
[root@ip-10-20-0-32 ~]# yum -y install httpd* mysql
퍼블릭 IP로 웹에 접속할 경우 아래와 같이 접속되지 않는다.
그 이유는 현재 인바운드 규칙에서 http 80포트를 허용하는 대상이 ALBGroup이기 때문이다.
아래 명령어를 통해 php 패키지를 설치한다.
[root@ip-10-20-0-32 ~]# yum -y install php* --skip-broken
php -v 명령어를 통해 버전을 확인한다.
[root@ip-10-20-0-32 ~]# php -v
PHP 5.4.16 (cli) (built: Oct 31 2019 18:34:05)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
/var/www 디렉토리에서 wordpress 최신 버전의 압축 파일을 다운로드 받는다.
[root@ip-10-20-0-32 ~]# cd /var/www
[root@ip-10-20-0-32 www]# ls
cgi-bin html
[root@ip-10-20-0-32 www]# wget https://wordpress.org/latest.zip
--2021-08-14 08:03:35-- https://wordpress.org/latest.zip
Resolving wordpress.org (wordpress.org)... 198.143.164.252
Connecting to wordpress.org (wordpress.org)|198.143.164.252|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 16480644 (16M) [application/zip]
Saving to: ‘latest.zip’
100%[====================================================================>] 16,480,644 5.07MB/s in 3.9s
2021-08-14 08:03:39 (4.06 MB/s) - ‘latest.zip’ saved [16480644/16480644]
zip 파일을 압축해제 한 후에 기존 php의 html을 삭제하고 다운받은 wordpress 디렉토리를 html로 변경한다.
[root@ip-10-20-0-32 www]# unzip latest.zip
..
[root@ip-10-20-0-32 www]# rm -rf html/
[root@ip-10-20-0-32 www]# mv wordpress html
설정 샘플파일을 복사해준다.
[root@ip-10-20-0-32 www]# cd html/
[root@ip-10-20-0-32 html]# ls
index.php wp-admin wp-content wp-load.php wp-signup.php
license.txt wp-blog-header.php wp-cron.php wp-login.php wp-trackback.php
readme.html wp-comments-post.php wp-includes wp-mail.php xmlrpc.php
wp-activate.php wp-config-sample.php wp-links-opml.php wp-settings.php
[root@ip-10-20-0-32 html]# cp wp-config-sample.php wp-config.php
vi 편집기로 wp-config.php 파일을 아래와 같이 수정해준다.
DB_HOST는 RDS의 엔드포인트 부분을 넣어준다.
이제 systemctl restart httpd 명령어를 통해 웹 서버를 다시 실행시켜주고 ALB의 엔드포인트 주소로 접속해보자.
[root@ip-10-20-0-32 html]# systemctl restart httpd
ALB의 주소는 아래 DNS 이름을 확인하면 된다.
아래와 같이 버전정보가 표시되며 접속이 안되는 경우엔 아래 명령어를 통해 php 버전을 업그레이드 시켜준다.
먼저 php와 httpd 패키지를 삭제한 후 7.2 버전 설치를 위한 패키지를 설치한다.
[root@ip-10-20-0-32 www]# yum remove php*
[root@ip-10-20-0-32 www]# yum remove httpd*
[root@ip-10-20-0-32 www]# sudo amazon-linux-extras install epel
[root@ip-10-20-0-32 www]# yum install epel-release
[root@ip-10-20-0-32 www]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
[root@ip-10-20-0-32 www]# yum install mod_php72w php72w-cli
[root@ip-10-20-0-32 www]# yum install php72w-bcmath php72w-gd php72w-mbstring php72w-mysqlnd php72w-pear php72w-xml php72w-xmlrpc php72w-process
설치가 완료된 후 php 버전을 확인한다.
[root@ip-10-20-0-32 html]# php -v
PHP 7.2.34 (cli) (built: Oct 1 2020 13:37:37) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
후에 아래 명령어를 통해 wordpress를 다시 설치해준다.
wget https://wordpress.org/latest.zip
unzip latest.zip
rm -rf html/
mv wordpress html
cd /var/www/html/
ls
cp wp-config-sample.php wp-config.php
vi 편집기를 통해 wp-config.php를 다시 수정해준다.
아래 오류가 발생할 땐 yum install php72w-mysql 명령어를 실행한 후
systemctl restart httpd 명령어를 통해 웹 서버를 재구동 시켜준다.
+ [보안 그룹]에서 RDS를 위한 Security Group에서 [인바운드 규칙]에 3306 포트를 허용하는 규칙을 추가한다.
다시 Load Balancer의 DNS 주소로 접속하면 아래와 같이 Wordpress 초기 페이지를 확인할 수 있다.
[Username]과 [Password]를 설정하고 [Install Wordpress]를 클릭
아래 로그인창에서 아이디와 패스워드를 입력한다.
Wordpress 대시보드가 표시되면 무사히 실습을 완료한 것이다.
이제 생성했던 EC2 인스턴스, RDS 인스턴스를 삭제해준다.
'AWS' 카테고리의 다른 글
error: You must be logged in to the server (Unauthorized) 오류 해결 (0) | 2021.10.07 |
---|---|
AWS Fargate (0) | 2021.08.24 |
RDS_hands-on (0) | 2021.08.14 |
CloudFront를 활용한 S3 앱 배포하기 (0) | 2021.08.12 |
VPC를 구성하고 Load Balancing과 Auto Scaling 적용하기 (0) | 2021.08.11 |