Notice
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

정보통신공학과 노선변경기

퍼블릭 클라우드 3일차 AWS 템플릿, VPC, RDS(Mysql), 워드프레스(wordpress) 본문

Sub5_퍼블릭 클라우드

퍼블릭 클라우드 3일차 AWS 템플릿, VPC, RDS(Mysql), 워드프레스(wordpress)

HEONPOLI 2021. 7. 11. 12:08

**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의 엔드포인트)