IT 관련/클라우드

[AWS, 프로젝트] 워드프레스 설치를 위한 설계 및 설정(3)

insu90 2024. 11. 6. 22:58

지금까지 한 내용을 정리하자면 이렇습니다.

 

1. EC2 인스턴스에 워드프레스와 MariaDB로의 연결을 위한 기반준비를 끝냈습니다.

2. RDS를 생성하고 그 안에 워드프레스 데이터베이스를 생성했습니다.

3. 둘의 연결성을 확인했습니다.

 

오늘은 오토스케일링과 오토스케일링시 RDS가 자동으로 연결되게 할 수 있도록 설정을 고치도록 하겠습니다.

 

이전 설치방법을 참고하여 아래와 같이 새로 설치합니다.

VPC - 기본세팅, VPC 등을 통해 서브넷도 함께 설정합니다.

 

이번에 EC2 인스턴스를 설치할 때는 조금 쉬운 방법을 쓰겠습니다.

 

#!/bin/bash

dnf install wget php-mysqlnd httpd php-fpm php-mysqli mariadb105-server php-json php php-devel -y

systemctl start httpd
systemctl enable httpd

 

cd /var/www/html
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
chown -R apache: /var/www/html/wordpress

RDS_ENDPOINT="RDS 엔드 포인트"
DB_ADMIN="admin"                  # DB 사용자 이름
DB_PASSWORD="사용할 비밀번호"            # RDS 비밀번호
DB_NAME="wordpress"               # 사용할 데이터베이스 이름


cd /var/www/html/wordpress
cp wp-config-sample.php wp-config.php
sed -i "s/database_name_here/$DB_NAME/" wp-config.php
sed -i "s/username_here/$DB_ADMIN/" wp-config.php
sed -i "s/password_here/$DB_PASSWORD/" wp-config.php
sed -i "s/localhost/$RDS_ENDPOINT/" wp-config.php


sed -i 's|DocumentRoot "/var/www/html"|DocumentRoot "/var/www/html/wordpress"|' /etc/httpd/conf/httpd.conf
systemctl restart httpd

 

위의 배쉬코드를 사용자 데이터항목에 적용하면 쉽게 설정을 미리 준비할 수 있습니다.

 

RDS는 만들어내면서 자체 보안그룹을 형성합니다. 이 때 보안그룹 인바운드에서는 mysql로 ec2 인스턴스의 보안그룹을 소스로 지정합니다. 

반대로 ec2에서는 아웃바운드가 모두 열려있어서 굳이 작성하진 않아도 되지만, 좀더 세세한 제어를 요구하는 분은 mysql의 sg를 소스로 하며 mysql을 아웃바운드로 열어주면 됩니다.

이 소스에 sg를 지정하지 않으면 추후 오토스케일링시 RDS에 연결되지 않음을 주의합니다.

 

추가적인 mysql 설정은 아래와 같습니다.(웹서버의 CLI에서 실행합니다)

mysql -u admin -p -h [RDS의 엔드포인트주소]
CREATE DATABASE wordpress;

GRANT ALL PRIVILEGES ON wordpress.* TO 'admin'@'%' IDENTIFIED BY '지정할비밀번호';

FLUSH PRIVILEGES;

SHOW GRANTS FOR 'admin'@'%';

 

만약 확인을 원하는 분들은 웹서버를 통해 RDS 내부로 들어가 아래에 있는 코드를 삽입하고 웹페이지에 올라왔는지 확인하는 절차를 통해 RDS와 제대로 연결되었음을 확인하는 방법이 있습니다.

순차적으로는 아래와 같습니다.

1. 웹서버의 퍼블릭 ip를 통해 웹으로 접속하여 워드프레스의 설치를 완료합니다.

2. 웹서버의 CLI로 진입하여 mysql 안으로 진입하여 wordpress 데이터 베이스를 엽니다.

4. 아래 코드를 작성합니다.

INSERT INTO wp_posts (post_title, post_content, post_excerpt, post_status, post_author, post_date, post_date_gmt, to_ping, pinged, post_content_filtered) VALUES ('Sample Post', 'This is a sample post content.', '', 'publish', 1, NOW(), NOW(), '', '', '');

5. 해당 코드는 샘플로서 웹페이지에 샘플 포스트를 생성하게 됩니다.

6. 웹페이지에 샘플 글이 올라오는걸 확인합니다.

 

이로써 직관적으로 연결을 확인 할 수 있습니다.

 

 

이제 오토스케일링을 진행해보겠습니다.

이번 목적은 설정된 웹서버를 기반으로 이미지와 템플릿을 형성하고 ALB와 함께 오토스케일링을 만드는 것입니다.

 

위와같이 완성된 EC2인스턴스를 이미지생성하겠습니다.

기본에서 크게 건드릴 사항이 없으니 그대로 만드셔도 좋습니다.

생성을 누르면 시간이 좀 소요되지만 곧 완성됩니다. EC2의 AMI 항목에서 보면 대기중에서 사용가능으로 될 때까지 기다립니다.

 

시작 템플릿을 생성하겠습니다.

 

템플릿 이름은 본인이 알기 쉽게 작성합니다.

서브넷은 별도로 설정하지 않겠습니다.

이제 생성을 누릅니다.

 

이후 ALB를 만들겠습니다.

가용영역은 퍼블릭으로 해야합니다. ELB가 퍼블릭에 있지 않으면 연결이 불가능합니다.

 

하단으로 내리다보면 대상그룹을 선택해야하는데, 대상그룹이 없습니다. 대상그룹을 만들어주겠습니다.

인스턴스로 설정하고 이름만 설정한 후 다음을 눌러줍니다.

그럼 기존에 만들어둔 인스턴스를 선택할 수 있습니다.

 

선택 후 아래에 보류중인 것으로 포함을 클릭하여 대상을 지정 후 생성합니다.

 

다시 ALB로 돌아와서 대상그룹을 방금 만든 그룹으로 한 후 생성을 해줍니다.

 

 

 

이제 오토스케일링 그룹 생성 및 연결을 하겠습니다.

EC2에서 오토스케일링 그룹으로 들어가 생성합니다.

아까 만든 템플릿을 선택해줍니다.

여기서 네트워크는 VPC는 기존에 만든것으로 하고 오토스케일링 그룹이 사용할 가용영역과 서브넷은 프라이빗으로 돌리도록 하겠습니다.

 

기존 로드밸런서 대상그룹을 통해 아까 만든 대상그룹으로 연결합니다.

 

다음은 원하는 용량과 최소, 최대양을 지정해주고 쭉 다음을 눌러서 생성을 하면 됩니다.

 

이제 EC2 인스턴스 항목으로 들어와 만들어진 내용을 점검합니다.

제 경우 프라이빗 a와 b에 인스턴스가 올라온 것을 확인할 수 있었습니다.

 

이제 이 프라이빗에 올라온 인스턴스가 RDS에 잘 연결되어 있는지 확인할 차례입니다.

만약 연결되지 않았다면 ALB의 DNS로 접속했을 때 데이터베이스를 찾을 수 없다고 나올 것입니다.

 

연결이 되지 않았습니다. 문제점을 되짚어 보겠습니다. 

기본적으로 대상그룹이 헬스체크가 되는데, 여기에 문제가 없었습니다.

웹페이지가 처음부터 뜨지 않아, ELB의 문제점으로 생각했습니다.

리스너는 80포트가 제대로 열려있습니다.

SG의 디폴트 설정으로 해 둔게 마음에 걸립니다. 이를 웹서버의 SG로 변경해주었습니다.

잘 동작됩니다. DB 문제가 발생하지 않는 것으로 보아 DB도 잘 연결된 것으로 보입니다.

무심코 모든 포트가 열려있어서 괜찮을거라 생각했던 디폴트가 문제를 일으킨 것을 보입니다.

ALB는 웹서버를 연결해주는 중계자이니 앞으로는 웹서버를 보안그룹으로 지정하는게 좋아 보입니다.

 

이상으로 오토스케일링이 끝났습니다. 추가적으로 어느 지점에서 오토스케일링이 되게 하는지는 아래와 같습니다.

1. 오토스케일링 그룹으로 들어갑니다.

2. 오토스케일링 항목의 동적 크기 조정 정책으로 들어갑니다.

3. 원하는 상태에 따라 크기 조정을 지시하면 됩니다.

이 부분은 직관적이므로 테스트해보시기 바랍니다.

 

 

 

다음 글에서는 WAF의 설정과 클라우드 와치의 설정, 그리고 SNS를 통한 설정을 하겠습니다.