35/120

김건호·2022년 3월 31일
0

VPC Peering

VPC피어링이란?
두 VPC 간에 트래픽을 라우팅할 수 있도록 하기 위한 두 VPC 사이의 네트워킹 연결

지원되지 않는 Peering
1. IPv4 CIDR 블록이 같을 경우
2. 여러개의 VPC 하려면 각각 피어링을 해줘야함

B와 C가 통신하려면 B C를 연결해야함. A를 통한 피어링 불가
3. 게이트웨이 또는 프라이빗 연결을 통한 엣지 간 라우팅 불가

VPC Peering 연결

  • 다른 리전간 VPC 연결을 위해 2개의 리전 선택
  1. 캘리포니아(10번대) 2. 오레곤(20번대)
  • 캘리포니아 리전에서 VPC 마법사 시작


    가용 영역은 한 개만 해도 되는데, 이 다음에 실습할 데이터베이스에서는 가용영역이 두 개 필요하기때문에 미리 만들어둘게요

    private 서브넷에 연결해둘 NAT 게이트웨이도 설정
  • VPC 생성
  • 오레곤 리전에서도 똑같이 만듭니다

    다른 부분은 다 같지만 IPv4 CIDR 블록이 같은면 피어링이 되지 않으므로 다른 블록을 지정합니다
  • 리전 A(캘리포니아)에서 피어링 요청을 합니다



    피어링할 로컬 VPC로 캘리포니아의 VPC를 설정하고, 다른 리전(오레곤)에 있는 VPC에 연결 요청을 보냄
  • 오레곤에서 수락하기

  • 피어링 연결은 끝났지만, 통신을 위한 보안 정책을 설정해야 함
    A의 public 라우팅 테이블은 자신의 IP는 local로 다른 모든 IP는 인터넷 게이트웨이로 보내도록 설정 되어 있음
    피어링 연결을 위해 20.0.0.0/16(B의 VPC)는 피어링 연결을 설정해야함
  • public 라우팅 테이블 선택 후, 라우팅 편집으로 이동

    피어링 연결을 선택하면 연결해둔 피어링 목록이 나옴
    변경 사항 저장
  • B리전에서도 A리전으로 통하도록 똑같이 라우팅 테이블 편집
  • public rtb 2에도 해줍니다
  • 통신확인을 위한 인스턴스를 생성합니다(캘리포니아 1개, 오레곤 1개)
  • 단계 3 인스턴스 세부 정보 구성 중요

    디폴트 VPC가 아니라 만들어둔 VPC로 선택하고
    외부접속이 가능해야하니 퍼블릭 서브넷으로 설정해둡니다(VPC이름 저처럼 길게하지마세요.. 서브넷 짤려서 신경쓰이네요)
    퍼블릭 서브넷이니 퍼블릭 IP 자동으로 할당해줍니다
  • 보안그룹 설정

    ssh는 자신의 IP접속으로 설정
    연결 확인은 웹으로 진행할 것이기 때문에 HTTP 포트를 리전 B의 VPC인 20.0.0.0/16에 허용해줍니다
  • 키 만들어주고 시작합니다
  • 리전 B에서도 똑같이 만들어줍니다

    VPC B의 퍼블릭 서브넷으로 설정합니다
  • 보안 그룹도 전과 같지만 HTTP는 VPC A인 10.0.0.0/16으로 지정
  • 키 만들어주고 시작
ssh -i A인스턴스 키 ec2-user@A의 인스턴스 퍼블릭 IP
ssh -i B인스턴스 키 ec2-user@B의 인스턴스 퍼블릭 IP
  • B인스턴스에서 웹 서비스 시작을 합니다
sudo yum -y install httpd
$ sudo systemctl start httpd
$ sudo systmectl enable httpd
$ echo "TEST" > index.html
$ sudo cp index.html /var/www/html
  • A에서 B로 요청을 보내고 응답을 확인합니다
$ curl B인스턴스의 private IP
TEST
  • 지금까지 피어링 연결과 확인이였습니다

Amazon RDS

백업, 소프트웨어 패치, 모니터링, 크기 조정, 복제 같은 시간 소모적인 데이터베이스 관리 태스크를 자동으로 관리해주는 서비스
EC2의 인스턴스를 이용하는 경우 백업, 업데이트 같은 부분은 사용자가 직접해야하지만 RDS사용시 자동으로 해주기 때문에 편리한 부분이 있음

AWS에 의한 관리

  • 하드웨어 프로비저닝(사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것) => 입출력이 빨라짐
  • 데이터베이스 설정
  • 패치/백업
  • 장애대응/재해복구
  • migration (온프레미스에서 클라우드로, 클라우드에서 온프레미스로 데이터를 옮길 때 사용)

스케일 업, 스케일 아웃

서버 확장을 위한 방법으로


스케일 업 : 서버를 여러 대 추가하여, 시스템을 확장
'로드밸런싱’이 필수적으로 동반
모든 서버가 동일한 데이터를 가지고 있어야 하므로, 데이터 변화가 적은 ‘웹 서버’에 적합한 방식


스케일 아웃 : 고성능의 부품, 서버로 교환하는 방법
한 대의 서버에서 모든 데이터를 처리하므로 데이터 갱신이 빈번하게 일어나는 ‘데이터베이스 서버’에 적합한 방식

Amazon Aurora
새로나온 기술

public-webserver, private-dbserver 구성

데이터베이스 서버는 데이터의 보안을 위해 외부 사용자가 접근할 수 없도록 private에 구성해야 함

RDS 없이 EC2 인스턴스로만 구성해보기

위에서 만든 VPC A에서 만든 인스턴스를 public-webserver로 사용하고, 새로운 인스턴스를 생성해 VPC A의 private subnet에 연결해서 사용

  • 인스턴스 구성 시 VPC A의 prviate 연결, private이기 때문에 퍼블릭 IP 비활성화
  • 웹서버에서 데이터베이스로 접속하기 때문에 ssh와 3306 포트 10번대 주소로 지정
  • 키는 웹서버에 사용한 키 그대로 쓰기
    키 파일 메모장으로 열고 복사해두기
  • 웹 서버 접속
ssh -i 키파일 ec2-user@웹서버의 퍼블릭 IP
  • 웹 서버에서 데이터베이스 서버 접속
[webserver ~]$ ls -al
total 16
drwx------ 3 ec2-user ec2-user  95 Mar 31 10:50 .
drwxr-xr-x 3 root     root      22 Mar 31 10:39 ..
-rw------- 1 ec2-user ec2-user  16 Mar 31 10:50 .bash_history
-rw-r--r-- 1 ec2-user ec2-user  18 Jul 15  2020 .bash_logout
-rw-r--r-- 1 ec2-user ec2-user 193 Jul 15  2020 .bash_profile
-rw-r--r-- 1 ec2-user ec2-user 231 Jul 15  2020 .bashrc
drwx------ 2 ec2-user ec2-user  29 Mar 31 10:39 .ssh
[webserver ~]$ vim .ssh/key
[webserver ~]$ ls -l .ssh/key
-rw-rw-r-- 1 ec2-user ec2-user 1675 Mar 31 11:35 .ssh/key
[webserver ~]$ chmod 400 .ssh/key
[webserver ~]$ ssh -i .ssh/key ec2-user@db서버의 프라이빗 IP
  • 데이터베이스 서버에서 mariadb-server, mariadb(client) 패키지 설치 및 서비스 시작
$ sudo yum -y install mariadb-server mariadb
$ sudo systemctl start mariadb
$ sudo systemctl enable mariadb
  • 데이터베이스 기본 세팅
$ mysql_secure_installation

mysql_sercure_installation 설정 참조

  • 10번대 주소에 대한 외부 접속 허용
MariaDB [mysql]> grant all privileges on *.* to root@'10.0.%' identified by '1';
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
  • 데이테베이스 서버 연결 해제
MariaDB [mysql]> exit
Bye
dbserver $ exit
logout
Connection to dbserver closed.
  • 웹서버에 mariadb 설치 및 서비스 시작
  • 웹서버에서 데이터베이스 접속
webserver $ mysql -u root -p -h 데이터베이스의 프라이빗 IP
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 5.5.68-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

RDS 사용하여 구성하기

  • 데이터베이스 생성시 서브넷 그룹이란게 자동으로 생성 됨
    그치만 수동으로 만들어봄

    데이터베이스서버이기 때문에 프라이빗 서브넷으로 연결
  • 디비 만들기


    버전은 앱을 만들것이 아니라 상관없음
  • 템플릿은 프리티어
  • 사용자 이름과 비밀번호 설정
  • 인스턴스 클래스 프리티어 가능한 t2로 변경
  • VPC A에 연결, 생성한 서브넷 그룹에 연결
  • 데이터베이스 생성
  • 웹서버에서 접속시도
$ mysql -u admin -p -h RDS 엔드포인트

접속이 되지않음
보안그룹의 IP가 자신의 IP로 자동설정되어있음

  • 웹서버에서 들어올 수 있도록 수정
  • 재접속시 접속완료
$ mysql -u admin -p -h RDS 엔드포인트
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 8.0.28 Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]>

웹에서 실제 데이터베이스 연결하기

보안규칙 중첩

웹 서버에 접속한 연결에 대해서만 데이터베이스 연결을 허용

  • 웹 서버에 대한 보안규칙 생성 VPC A에 연결
  • 웹 서버 보안 규칙을 통과한 연결만 허용되도록 3306 포트 web-allow-2 보안 규칙을 소스로 지정
  • 사용할 데이터베이스 생성

    웹 앱을 생성하기 때문에 버전을 맞춰줘야함
  • 만들어둔 서브넷 그룹과 보안그룹 지정
  • 추가 구성 탭에서 sample 데이터베이스 생성
  • php사용할 웹서버 생성, 버전을 맞추기 위해 커뮤니티 AMI 사용


    퍼블릭에 활성화
  • 만들었던 보안 정책 지정
  • 버전에 맞는 apache php설치
$ sudo yum update -y
$ sudo yum install -y httpd24 php56 php56-mysqlnd
$ sudo service httpd start
$ sudo chkconfig httpd on
  • 소유그룹 변경
$ sudo groupadd www
$ sudo usermod -a -G www ec2-user
  • 재접속후 그룹확인
$ groups
ec2-user wheel www
  • /var/www/ 및 하위 디렉토리의 권한 변경
$ sudo chown -R root:www /var/www
$ sudo chmod 2775 /var/www
$ find /var/www -type d -exec sudo chmod 2775 {} \;
$ find /var/www -type f -exec sudo chmod 0664 {} \;

inc,php 샘플

  • db저장할 inc파일 설정
$ cd /var/www
$ mkdir inc
$ cd inc
$ sudo vim dbinfo.inc
    
<?php
define('DB_SERVER', 'rds 엔드포인트');
define('DB_USERNAME', 'tutorial_user');
define('DB_PASSWORD', '비밀번호');
define('DB_DATABASE', 'sample');
?>
  • sample페이지 설정
$ cd /var/www/html
$ sudo vim index.php
# 다운받은 파일 붙여넣고 저장
  • 웹브라우저 퍼블릭 IP 접속 성공
profile
Ken, 🔽🔽 거노밥 유튜브(house icon) 🔽🔽

0개의 댓글