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

클라우드 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의 엔드포인트)

from http://ictssp04046.tistory.com/31 by ccl(A) rewrite - 2021-07-11 12:25:03