정보통신공학과 노선변경기
퍼블릭 클라우드 3일차 AWS 템플릿, VPC, RDS(Mysql), 워드프레스(wordpress) 본문
**Template
인스턴스 시작을 효율적으로, 간소화 및 표준화
AMI를 먼저 만들고 Template을 만드는게 순서
**VPC (((diagrams.net 에서 설계도를 만들어낼 수 있다.)))
virtual private cloud('격리형')
172.31.0.0/16 ⇒ 모든 계정의 VPC 기본 IP범위

<설계한 것>
**Internet Gateway
1개의 인터넷 게이트웨이는 1개의 VPC에만 연결할 수 있다.
**Routing Table
Destination | Target |
10.0.0.0/16 | local |
0.0.0.0/0 | igw-id |
내부의 ip가 아닌 모든 ip는 internet gateway로 보내는 routing table을 설정
내부의 ip라면 local이므로 target(대상)을 내부로 보내준다.

VPC상 설정 → DNS 호스트네임 활성화
SUBNET상 설정 → 자동 할당 IP설정 수정
**인스턴스 생성시 user data(사용자 데이터) 입력
#!/bin/bash
yum install -y httpd
systemctl enable --now httpd
mkdir ~/data && cd $_
wget https://s3.ap-northeast-2.amazonaws.com/s3.heonpoli.shop/aws.tar
tar -xvf aws.tar -C /var/www/html/
인스턴스 생성시에 위와같은 쉘 스크립트를 함께 삽입 가능하다.
웹서버의 기능을 해야하므로 httpd 패키지와 wget으로 aws.tar의 받아와서
웹페이지 상에 표현할 html 파일을 /var/www/html/ 밑으로 넣어준다.
AMI에 붙어있는 스냅샷에 httpd, 이미지 등이 들어있는거지
AMI에 들어있는 것이 아니다.
**템플릿으로 인스턴스 생성
인스턴스의 이미지를 먼저 생성한다.
시작템플릿 항목으로 가서 생성된 이미지를 활용하여 시작템플릿 생성해준다.
똑같은 애 복제해서 수평적 확장을 하려고 할 때 복제하여 만들어야 하기 때문에
그 복제를 위한 표본이 되는 것이 시작템플릿
**보안그룹(Security Group)
EC2의 보안그룹과 VPC의 보안그룹은 같은 것
인바운드 규칙에서 SSH는 되도록 내ip만 들어올 수 있게 설정하는게 좋다

**ACL(Access Control List)
ACL은 막고싶은 것만 막을 수 있음
실무에서는 잘 건들지 않는 항목

Network ACL은 subnet의 바깥쪽에 위치, (반면에 SG는 서브넷 안에 위치)
⇒ ACL로 80포트를 막는다고 생각, SG에서는 80포트를 열어놓았어도 외부에서 내부의 서버,즉 인스턴스에 접근을 못하는 시나리오가 가능하다.
네트워크 ACL은 특정 ip를 막으려(deny) 할 때 많이 사용한다.
**내 공인 ip를 막아 내가 만든 웹에 접근 못하게하는 시나리오
ACL의 인바운드에 내 ip를 차단하면 될 것 같다.
218.152.123.251
터미널로 접속한 상태에서 접속한 출발지의 ip를 확인하는 명령어
curl http://checkip.amazonaws.com

규칙번호 100번 설정의 의미 ⇒ 모든 것을 다 열어주었다.
숫자 100은 우선순위를 의미한다. 100보다 작은 숫자의 규칙번호를 가져야 모든 트래픽 허용보다 앞선 규칙이 된다. ex)99
모든 것을 다 열어둔 상태에서
막으려하는 ip만 막아준다.

확인된 내 ip만 우선순위를 99로 하여 HTTP 접속거부 설정
HTTP만 거부한것이므로, 만약 UBUNTU에서 터미널로 SSH 원격접속하였다면 인스턴스와의 연결상태는 유지된다

**RDS 생성
마스터 사용자이름: admin
마스터 암호 : Jh14031403!!
가용역역 ap-northeast-2c 로 연결하여준다(2a에 웹서버를 두고 2c에 database)
스토리지 자동조정 활성화 == autoscailing
(스토리지가 부족하면 자동으로 늘려주는 것, 수직적으로 스토리지의 용량을 늘려주는 것)
*************AWS의 RDS를 사용하기전에 인스턴스를 UBUNTU AMI를 사용하고 db용 인스턴스를 만들어서 wordpress 올려주는 방식을 사용해본다***************************
**WordPress
인스턴스 생성시에 webserver 의 private ip를 소스에 기입하여 mysql 접근가능하게 해준다.

위의 과정은 데이터베이스 인스턴스를 생성하는 것
접속은 다른 서버와 똑같이 ssh 로 접근가능
ssh -i 20210623.pem ubuntu@[ public ip ]
// MariaDB 설치(ami : ubuntu18), 데이터베이스 인스턴스로 원격접속한 후에 해준 것
$ sudo apt-get -y update
$ sudo apt-get -y install mariadb-server
$ sudo mysql_secure_installation
$ sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
#bind-address = 127.0.0.1 ##만든 웹서버와의 AZ가 다르고 local이 아니므로 해당 줄을 주석처리 해줘야한다.
$ sudo systemctl restart mysql
RDS mysql 설정(db instance에서 수행해야해)
$ sudo mysql -u root -p
CREATE USER 'wpuser'@'%' IDENTIFIED BY 'wppass';
CREATE DATABASE IF NOT EXISTS wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'%';
quit
워드프레스 설치 (웹서버상에 설치해야한다)
$ sudo yum install -y httpd php php-mysql php-gd php-mbstring wget unzip
$ sudo wget https://ko.wordpress.org/wordpress-4.8.2-ko_KR.zip
$ cd /var/www/html
$ sudo unzip /root/wordpress-4.8.2-ko_KR.zip
$ sudo chown -R apache:apache wordpress
$ sudo systemctl restart httpd
$ sudo systemctl enable httpd
웹브라우저 http://본인 웹서버 ip/wordpress
(www.heonpoli.shop/wordpress) 이렇게로도 접속가능
curl http://checkip.amazonaws.com

이름은 자동지정되어있다. 사용자명은 rds mysql 설정에서 해준대로 wpuser data
데이터베이스 호스트는 내가 만든 데이터베이스 인스턴스의 private ip를 사용해준다.
wordpress/wp-config.php 파일에 아파치를 통해 받은 데이터베이스 이름, 사용자명 등이 들어가있다.
*************이제는 준비된 AWS의 RDS와 웹서버연동을 하자*******************
RDS상에서도
RDS mysql 설정
$ sudo mysql -u root -p
CREATE USER 'wpuser'@'%' IDENTIFIED BY 'wppass';
CREATE DATABASE IF NOT EXISTS wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'%';
quit
위에서 한것처럼 해줄것이다.
RDS는 SSH로 연결할 수가 없다. 따라서 웹서버에서 mysql 명령어를 통해 RDS로 접근해야한다.
**웹서버에 mysql client 필요
yum install -y mysql
RDS 콘솔에서 엔드포인트를 복사
database-1.cg3qmfpgandp.ap-northeast-2.rds.amazonaws.com
mysql -h(host의 의미) database-1.cg3qmfpgandp.ap-northeast-2.rds.amazonaws.com -u admin -p
RDS에서 마스터이름과 마스트 비밀번호 입력한것 입력해주기(마스터이름 admin)
Trouble shootinh ⇒ 접속이 안돼? 무조건 첫순서로 보안그룹을 확인한다.
RDS의 보안그룹이 현재 나의 호스트 ip를 소스로 mysql 접근을 설정해놓았다.
따라서 웹서버의 ip로 수정해줘서 웹서버 인스턴스의 ssh 접속을 한 곳에서 rds 로 접근가능하게 바꿔줘야한다.
후에 다시 웹서버에서
mysql -hdatabase-1.cg3qmfpgandp.ap-northeast-2.rds.amazonaws.com -u admin -p
명령어 수행해준다.
passwd 입력창이 뜨는데 ⇒ RDS master passwd를 입력해준다.
mysql에 접속했으니
CREATE USER 'wpuser'@'%' IDENTIFIED BY 'wppass';
CREATE DATABASE IF NOT EXISTS wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'%';
query문 3개 수행해준다.
www.heonpoli.shop/wordpress
들어가서 제대로 사용자명, 비밀번호 입력하고
host를 database-1.cg3qmfpgandp.ap-northeast-2.rds.amazonaws.com 로 입력하여준다.(RDS의 엔드포인트)
'Sub5_퍼블릭 클라우드' 카테고리의 다른 글
퍼블릭 클라우드 5일차 Azure 마무리, GCP (0) | 2021.07.11 |
---|---|
퍼블릭 클라우드 4일차 Azure 가상머신, DNS, LB, IIS (0) | 2021.07.11 |
퍼블릭 클라우드 2일차 AWS (0) | 2021.07.11 |
퍼블릭 클라우드 1일차 핵심서비스 (0) | 2021.07.11 |