1. Cloudformation으로 아래의 URL의 템플릿을 통해 스택을 구성해줍니다.
https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/Wordpress/aws-wp.yaml
2. 스택의 생성단계 맨 밑부분에 항상 체크박스에 체크해줍니다.
3. 스택이 정상적으로 생성되었다면 AWS RDS로 들어가 데이터베이스를 아래의 설정과 같이 생성해줍니다.
# 별로 언급이 없는 부분은 기본값 설정입니다!
생성 방식 : 표준 생성
엔진 옵션 : MySQL
템플릿 : 개발/테스트
DB 인스턴스 식별자 : wpdb (현재 AWS 리전에서 AWS 계정이 소유하는 모든 DB 인스턴스에 대해 유일, 각자 편하게 설정)
마스터 사용자 이름 : root
마스터 암호(암호확인) : qwe12345
DB 인스턴스 클래스 : 버스터블 클래스(t 클래스 포함) db.t2.micro (이전 세대 클래스 포함)
다중 AZ 배포 : 대기 인스턴스 생성
VPC : WP-VPC1
퍼블릭 액세스 가능 : 아니요
VPC 보안 그룹 : ##-VPC1SG3-## 포함된것 선택 , 기본 default 는 제거
추가 구성 : 클릭
- 초기 데이터베이스 이름 : wordpressdb
- DB 파라미터 그룹 : ##-mydbparametergroup-## 포함된것 선택
- 백업 보존 기간 : 1일
- Enhanced 모니터링 활성화 (Uncheck)
4. 스택이 정상적으로 생성되었다면 AWS CloudFront서비스에 하나의 서비스가 생성되고 이 주소를 알고 있어야 합니다.
5. EC2 인스턴스에 AllInOne인스턴스의 퍼블릭 IP를 웹으로 접속한 후 Wordpress를 설정해줍니다.
6. Wordpress 설정에 들어가 주소를 CloudFront의 주소로 넣어줍니다.
그후 https -> http로 수정해줍니다.
7. 다음은 EC2 AllInOne 인스턴스를 SSH로 접속후 아래의 코드로 업로드 폴더를 확인합니다.
cd /var/www/html/wp-content/uploads
# 업로드 폴더 정보 확인
[root@AllInOne uploads]# tree
.
└── 2021
└── 08
# WordPress에 아무 글과 사진을 작성한 후 다시 확인해봅니다.
[root@AllInOne uploads]# tree
.
└── 2021
└── 08
├── icando-150x150.jpg
├── icando-300x300.jpg
└── icando.jpg
8. 이제 업로드 저장소를 S3로 변경하기 위해 워드프레스 -> 플러그인 -> 새로추가 -> 키워드 WP Offload Media Lite검색 -> 지금 설치 -> 활성화 -> settings를 클릭합니다.
9. 아래의 next를 클릭후 create new bucket을 누른 후 Seoul 리전에 나만의 이름으로 버킷을 생성합니다.
10. 그 후 이부분을 체크하고 저장합니다.
11. 새로운 글을 작성해보고 아래의 코드로 자신이 금방 작성한 글이 어디로 저장되어있는지 확인합니다.
# 기존 파일만 존재
tree /var/www/html/wp-content/uploads
# S3 버킷에 저장된 내용 확인
aws s3 ls s3://<자신의 버킷 이름> --recursive
aws s3 ls s3://dogyuwp --recursive
12. 현재의 구성을 아래와 같습니다. 확인이 끝나면 AllInOne 인스턴스는 중지 또는 삭제하시면 됩니다.
13. AWS RDS에서 데이터베이스가 정상적으로 생성되었으면 RDS의 엔드포인트를 알아둡니다.
14. EC2의 대상그룹메뉴에 들어가 register targets를 클릭합니다.
15. WebSrv-Leader에 체크한 후 추가하고 설정해줍니다.
16. 그 후 EC2 WebSrv에 퍼블릭 IP를 Xshell로 접속해주고 아래의 코드를 입력하면서 내용들을 확인합니다.
sudo su -
# EFS 파일시스템 마운트 확인
df -hT |egrep '(File|nfs)'
Filesystem Type Size Used Avail Use% Mounted on
fs-994be0f9.efs.ap-northeast-2.amazonaws.com:/ nfs4 8.0E 64M 8.0E 1% /var/www/wordpress
# 자신의 RDS 엔드포인트를 변수에 지정
RDS=wpdb.cfd4iq95pfdk.ap-northeast-2.rds.amazonaws.com
# wp-config.php 파일에 DB 주소를 RDS 엔드포인트로 설정
sed -i "s/localhost/$RDS/g" /var/www/wordpress/wp-config.php
grep -n DB_HOST /var/www/wordpress/wp-config.php
# DB 접속 테스트
mysql -h $RDS -uroot -pqwe12345 -e 'show databases;'
mysql -h $RDS -uroot -pqwe12345
exit
# dig 조회
dig +short $RDS
17. EC2 Web-Srv 인스턴스의 퍼블릭 IP를 웹을 통해 접속하여 Wordpress를 설정해줍니다.
18. 마찬가지로 6번과 같이 CloudFront의 주소로 바꿔줍니다.
19. 이렇게 설정을 저장하고 글을 올리면 아래와 같은 인프라의 구성이 완료된것입니다.
20. 다음 실습을 위해 EC2 대상 그룹 메뉴에서 WebSrv의 체크를 한 후 Defegister해줍니다.
21. EC2의 시작 템플릿을 아래와 같이 생성해줍니다.
시작 템플릿 이름 : WPEC2LaunchTemplate
설명 : Wordpress Web Auto Scaling v1.0
Auto Scaling 지침 : 체크
AMI : Amazon Linux 2 AMI(HVM), SSD Volume Type - 아키텍처 : 64비트(x86)
인스턴스 유형 : t2.micro
키 페어 : (각자 자신의 SSH 키페어 선택)
네트워킹 플랫폼 : VPC
보안 그룹 : ###-WP-VPC1SG-### 포함된것 선택
리소스 태그 : 키(Lab) , 값(WPLab)
고급 세부 정보 ← 클릭
- IAM 인스턴스 프로파일 : WPLabInstanceProfile
- 세부 CloudWatch 모니터링 : 활성화
- 사용자 데이터 : 아래 내용 복붙!
#!/bin/bash
amazon-linux-extras install lamp-mariadb10.2-php7.2 php7.2 -y
yum install httpd htop amazon-efs-utils tree -y
systemctl start httpd && systemctl enable httpd
yum install gcc php-xml php-mbstring php-sodium php-devel php-pear ImageMagick-devel ghostscript -y
cat <<EOT> /etc/php.d/40-imagick.ini
extension = imagick.so
EOT
printf "\n" | pecl install imagick
sed -i 's/^upload_max_filesize = 2M/upload_max_filesize = 64M/g' /etc/php.ini
sed -i 's/^post_max_size = 8M/post_max_size = 64M/g' /etc/php.ini
sed -i 's/^max_execution_time = 30/max_execution_time = 300/g' /etc/php.ini
sed -i 's/^memory_limit = 128M/memory_limit = -1/g' /etc/php.ini
mkdir -p /var/www/wordpress/
mount -t efs 자신의EFS파일시스템ID:/ /var/www/wordpress
#mount -t efs fs-e4c64a84:/ /var/www/wordpress
chown -R apache:apache /var/www
chmod 2775 /var/www
find /var/www -type d -exec chmod 2775 {} \;
find /var/www -type f -exec chmod 0664 {} \;
chmod u+wrx /var/www/wordpress/wp-content/*
echo 'ServerName 127.0.0.1:80' >> /etc/httpd/conf.d/MyBlog.conf
echo 'DocumentRoot /var/www/wordpress' >> /etc/httpd/conf.d/MyBlog.conf
echo '<Directory /var/www/wordpress>' >> /etc/httpd/conf.d/MyBlog.conf
echo ' Options Indexes FollowSymLinks' >> /etc/httpd/conf.d/MyBlog.conf
echo ' AllowOverride All' >> /etc/httpd/conf.d/MyBlog.conf
echo ' Require all granted' >> /etc/httpd/conf.d/MyBlog.conf
echo '</Directory>' >> /etc/httpd/conf.d/MyBlog.conf
systemctl restart php-fpm
systemctl restart httpd
특히 중간에 자신의 EFS주소를 넣는 칸에는 주의해서 적도록 합니다.
22. 그 후 시작템플릿에서 작업메뉴 중 Auto Scaling 그룹을 생성합니다.
23. 아래의 설정을 따라서 천천히 생성해줍니다.
<1단계>
Auto Scaling 그룹 이름 : FirstEC2AutoScalingGroup
시작 템플릿 : WPEC2LaunchTemplate
<2단계>
인스턴스 구매 옵션 : 시작 템플릿 준수
네트워크 - VPC : WP-VPC1
네트워크 - 서브넷 : WP-VPC1-Subnet-1, WP-VPC1-Subnet-2
<3단계>
로드 밸런싱 : 기존 로드 밸런서에 연결
로그 밸런서 대상 그룹에서 선택 : 선택
기존 로드 밸런서 대상 그룹 : ALB-TG
상태 확인 유형 : ELB (Check)
상태 확인 유예 기간 : 60초
모니터링 - CloudWatch 내에서 그룹 지표 수집 활성화 : 체크
<4단계>
원하는 용량 : 2
최소 용량 : 2
최대 용량 : 4
조정 정책 : 대상 추척 조정 정책
조정 정책 이름 : Scale Out Policy
대상 값 : 30 → 3분 동안 3번 연속 CPU 30% 경우(1분 마다 기록)
인스턴스 요구 사항 : 60초 → 지표에 포함하기 전 워밍업 시간(초)
확대 정책만 생성하려면 축소 비활성화 : Check → 축소 설정하지 않음
인스턴스 축소 보호 활성화 : UnCheck
<5단계> -> <6단계> 태그 : 키(Name) , 값(WebServers) -> <7단계> -> Auto Scaling 그룹 생성 클릭
24. 이렇게 생성을 다 하셨으면 아래와 같은 인프라가 구성됩니다.
25. 자원들을 삭제하실때는 꼼꼼히 확인하시고 다 삭제되더라도 한번 더 확인하시길 바랍니다.
- RDS 삭제 → delete me 입력 후 삭제
- EC2 AutoScalingGroup 삭제
- S3 버킷 → 삭제 → 비우기 → 삭제
- EC2 시작 템플릿(Launch Templates) 삭제
- (위 자원들 전부 삭제를 확인 후) CloudFormation 스택 삭제
10주차를 마지막으로 실습이 끝났는데 후반의 많은 서비스들이 CloudFormation을 통해 자동으로 만들어졌기에 세세하게 설정하는 법에 대해선 이해하기 어려우실수도 있습니다.
저또한 마찬가지이지만 이 실습들을 통해 큰 틀을 잡으시고 어떠한 서비스들이 어떻게 상호작용하여 동작되는지를 확인하시는 것이 좋다고 생각합니다.
앞으로 계속해서 저 나름대로의 프로젝트 및 실습들을 해나가면서 계속해서 리뷰하도록 하겠습니다.
'AWS > 실습(입문)' 카테고리의 다른 글
AWS-입문(9주차) Wordpress & Woocommerce (0) | 2021.08.17 |
---|---|
AWS-입문(8주차) EC2 Auto Scaling (0) | 2021.07.31 |
AWS-입문(7주차) 네트워크 부하분산 서비스 (0) | 2021.07.23 |
AWS-입문(6주차) 데이터베이스 서비스 (1) | 2021.07.15 |
AWS-입문(5주차) 보안 서비스 (0) | 2021.07.12 |