[2024.09.22]
[AWS RDS 서비스]
1. VPC 구성
오늘은 RDS 서비스 실습을 진행하기에 앞서 화면과 같이 실습 환경 구성을 진행한다
1) VPC 생성
2) DNS 호스트 이름 활성화
DNS 호스트 이름이 비활성화 상태여도 실습에는 문제가 없지만,
가끔 DNS 연결이 되지 않을 때도 있기 때문에 설정을 해 줘야 된다
3) 라우팅 테이블 확인
라우팅 테이블 및 세부 정보, 라우팅 대역이 잘 설정되어 있는지 확인한다
3. 인터넷 게이트웨이 생성 및 VPC 연결
1) 인터넷 게이트웨이 생성
생성하고 인터넷 게이트웨이가 생성되었는지 확인한다
2) 인터넷 게이트웨이 VPC 연결
아래를 펼쳐서 보면 AWS 명령이라는 게 나온다
AWS 연동하면서 명령어 기반으로
리소스를 생성 및 관리를 하게 되는 것으로 참고하면 된다
인터넷 게이트웨이(MyIGW)가 MyVPC01에 연결되었는지 확인한다
4. 퍼블릭 서브넷 생성
활성화를 체크하면 퍼블릭 서브넷 환경에서 공인 IP가 할당된다
MyPublicSubnet2의 경우도 1과 같이 설정한다
5. 퍼블릭 라우팅 테이블 생성
(퍼블릭 서브넷 연결 및 인터넷 게이트웨이 기본 경로 등록)
1) 퍼블릭 라우팅 테이블 생성
2) 퍼블릭 서브넷 연결
3) 인터넷 게이트웨이 기본 경로 등록
경로 등록이 잘 되었는지 확인하고 마무리한다
*서브넷 연결을 설정할 때는 위의 서브넷 연결 편집을 눌러야 됨
라우팅 테이블 2번의 경우도 1과 같이 생성하면 된다
6. NAT 게이트웨이 생성
1) NAT 게이트웨이 생성
생성을 누르면 생성이 되지만,
완전히 생성되기까지는 1~2분 정도 소요된다
왼쪽의 탄력적 IP를 선택하게 되면 생성된 걸 확인할 수 있는데,
이 IP를 NAT 게이트웨이가 사용한다고 보면 된다
아래의 퍼블릭 IP 주소가 탄력적 IP이며,
NAT 게이트웨이가 삭제되기 전까지는 계속 해당 IP를 사용하게 된다
이 말인 즉슨 1번에 공인 IP인 퍼블릭 IP가 설정되었고,
2번에 사설 IP인 프라이빗 IP가 설정되었다고 보면 된다
NAT 게이트웨이 자체도 게이트웨이이기 때문에
프라이빗 서브넷 쪽에서도 인터넷을 해야 되므로 NAT 게이트웨이를 통해
사설 IP를 공인 IP로 변경시키고 진행되는 것이다
7. 프라이빗 서브넷 생성
다음으로 또 서브넷 생성을 하게 되고,
서브넷 1번대의 경우 가용 영역이 모두 2a이기 때문에 2a로 설정하고 생성한다
프라이빗 서브넷의 경우 서브넷 편집 설정에서 활성화를 진행할 필요가 없다
공인 IP를 할당받을 이유가 없기 때문이다
마찬가지로 세부 정보에서 CIDR IP와 VPC, 가용 영역을 확인하면 된다
8. 프라이빗 라우팅 테이블 생성
(프라이빗 서브넷 연결 및 NAT 게이트웨이 기본 경로 등록)
1) 프라이빗 라우팅 테이블 생성
2) 프라이빗 서브넷 연결
3) NAT게이트웨이 기본 경로 등록
9. 퍼블릭 보안 그룹 생성
1) 보안 그룹 생성
차례대로 설정해 주고 태그의 경우
자동으로 설정되는 경우와 안 되는 경우가 있지만 설정해 주는 게 좋다
보안 그룹으로 들어갔을 때 태그의 키인 Name,
Name의 키 값인 이름으로 설정이 되기 때문에 설정하는 게 좋다
보안 그룹이 생성됨과 인바운드 규칙을 확인한다
10. 퍼블릭 서브넷 EC2 인스턴스 생성
1) EC2 인스턴스 구성
인스턴스 유형의 경우 프라이빗 서브넷에서 사용할 경우 t2.micro는 권장하지 않는다
연결할 때 직렬 콘솔이 존재하는데, t2 micro의 경우 직렬 콘솔을 지원하지 않는다
그렇기 때문에 가장 중요한 건 연결이기 때문에 t3.micro를 사용하면 된다
*비싼 걸 사용하지 않아도 t3.micro만 사용해도 충분하다
2) EC2 인스턴스 생성 확인
11. 퍼블릭 EC2 인스턴스 접속 및 통신 테스트
1) 'MyWeb1' EC2 인스턴스 공인 IP 주소 및 DNS 이름 확인
엔터를 누르게 되면 로그인 창이 나오면서 root를 입력하고 패스워드 toor1234.을 입력한다
기존 리눅스들과 동일하므로 명령어를 입력하면 그에 대한 정보 확인이 가능하다
라우터 정보도 확인할 수 있으며,
0.0.0.0번대의 게이트웨이 주소는 가상 라우터의 IP 주소라고 보면 된다
MyWeb2 쪽으로 ping을 보내도 정상적으로 보내지는 걸 볼 수 있다
이는 라우팅 테이블에서 10.0.0.0/16의 로컬 경로가 있기 때문에
MyWeb1에서 2로 통신이 가능하게 된 것이다
curl로도 MyWeb2로 보안 그룹을 설정해 놨기 때문에 확인이 가능하다
목적지가 10.0.0.0대가 아니기 때문에 NAT 게이트웨이로 보내서
인터넷이 잘 작동되는지 확인하는 방법이다
먼저 대상 그룹을 선택한다
대상 그룹은 로드 밸런서를 만들 때 분산 처리를 하는 대상을 만들어야 되기 때문에
로드 밸런서를 만들기 전에 대상 그룹부터 생성한다
상태 검사의 경우 헬스 체크로
로드 밸런서가 EC2가 제대로 동작이 되는지의 여부를 확인한다
그 검사를 HTTP를 통해서 root 디렉터리로 HTTP 요청 메시지를 보내 본다
요청 메시지를 보내고 응답이 왔다면 잘 동작되고 있다는 뜻이다
반면에 응답이 없을 경우 EC2가 동작이 되지 않는다는 뜻으로
로드 분사를 하기 위한 대상 그룹에서 제거시키는 것이다
이런 것을 상태 검사라고 한다
상태 검사를 뒤로 하고 다음을 누르게 되면 대상 등록이 나온다
여기에서 두 개의 인스턴스를 선택 후 '아래에 보류 중인 것으로 포함'을 누르면
아래의 대상 보기 칸에 두 개의 인스턴스가 대상 그룹에 들어가면서
로드 밸런서의 대상이며, 헬스 체크의 대상이 된다
다 됐으면 대상 그룹 생성을 누르고 생성시켜 주면 된다
Application Load Balancer는 L7, Network Load Balancer는 L4
L7 로드 밸런서는 레이어 7계층의 HTTP, HTTPS를 분산 처리를,
L4 로드 밸런서의 경우 레이어 4계층으로 TCP, UDP, TLS를 보고 분산 처리를 하겠다는 뜻이다
*그림으로만 봐도 잘 설명되어 있음
생성을 누르게 되면 4개로 작동 방식이 설명되어 있다
위에서 인터넷 경계의 설명을 읽어 보면 퍼블릭 서브넷이
필요하다고 나와 있기 때문에 퍼블릭 서브넷을 선택해 준다
로드 밸런서는 퍼블릭 쪽에 설정하는 것이기 때문에 프라이빗을 선택하면 경고창이 뜬다
로드 밸런서의 경우도 완전히 생성되려면 2~3분 정도가 소요된다
기다리면서 확인 시 현재 DNS 이름이 애플리케이션 로드 밸런서의 도메인이다
로드 밸런서가 활성화가 되면 대상 그룹으로 가서 대상을 확인한다
이때 Healthy가 나타나면 상태 검사에서 문제가 없다는 뜻이다
다음으로 로드 밸런서의 도메인으로 접속하게 되면 해당 화면이 나타난다
다시 새로고침 후 시도했을 때 MyWeb1이 나오게 되면서
분산 처리가 잘 되고 있다는 뜻으로 볼 수 있다
12. Amazon Aurora RDS 설치
1) DB 보안 그룹 생성
실습에서 사용하는 것은 Anywhere-IPv4로 설정하지만, 실제 환경에서는
해당 mydb-1이 RDS가 되기 때문에 출발지를 VPC 쪽이나 서브넷 쪽으로 해도 좋다
사용자 지정 설정으로 IP를 설정해 주는 것이 보안 상으로는 더 좋은 것은 참고하면 된다
생성 후 인바운드 규칙은 MySQL 하나만 생성된 것만 확인하면 된다
2) DB 서브넷 그룹 생성
가용 영역의 경우 2a, 2c를 선택하고 서브넷은 10.0.100.0과 10.0.200.0을 선택한다
3) Amazon Aurora RDS 생성
위 화면에서 마스터 사용자 이름의 경우 MySQL로 접속 시 사용되는 아이디다
마스터 암호의 경우에는 toor1234.으로 설정했다
인스턴스 구성은 버스터블 클래스로 설정 후 db.t3.small로 설정
확인 시 데이터베이스는 사용 가능 상태가 되지만,
인스턴스의 경우 생성되기까지 8분에서 10분 정도 소요된다
또한 라이터 인스턴스는 쓰기 가능한 인스턴스라는 뜻이다
mydb의 세부 정보를 들어가서 엔드포인트 주소를 복사하고,
이렇게 메모장에 미리 적어둔다
13. Amazon RDS DB 인스턴스 정보 확인
1) RDS에서 'MyWeb1' EC2 인스턴스 연결
그러고 나서 mydb의 작업 -> EC2 연결 설정을 들어간다
MyWeb1을 통해서 RDS를 접속할 수 있게끔 여기에서 작업을 해야 된다
그렇기 때문에 현재의 화면에서는 MyWeb1을 선택 후 계속을 누른 다음 설정한다
한 번 더 EC2 연결 설정을 MyWeb2로 설정해 준다
그렇게 되면 현재로써 MyWeb1, MyWeb2 둘 다 연결이 가능하게 된다
root로 toor1234.을 입력 후에 접속한 후 화면에 mariadb, php, mysql을 설치한다
아까 생성 과정에서 메모장에 적어 놓은
MySQL로 접속하는 명령어를 삽입하여 접속을 시도한다
먼저 testdb라는 데이터베이스를 생성하고
testdb 데이터베이스로 접속 후 users 테이블을 생성한다
3개의 유저를 생성하고
확인 시 3개 모두 정상적으로 생성된 것을 확인할 수 있다
MySQL을 빠져 나와 /var/www/html/dbconnect.php로 들어간다
<?php
$servername = "mydb.cluster-c7uc4k8ag4io.ap-northeast-2.rds.amazonaws.com";
$username = "dbadmin";
$password = "toor1234.";
$conn = new mysqli($servername, $username, $password);
if ($conn->connect_error) {
die("Mysql5.7 connection failed: " . $conn->connect_error);
}
echo "Mysql5.7 connection was successful.";
?>
처음에는 빈 화면이 나오지만 a를 누르면 insert로 입력할 수 있게 변경되고,
해당 내용을 복사 + 붙여넣기를 이용해 삽입한다
그런 다음 esc를 누르고 :wq를 누르면 저장하고 나가기가 된다
httpd를 활성화시키고
웹 페이지로 확인 시 정상적인 접근이 가능하다
Not Found가 나오는 이유는 경로를 찾지 못하거나,
dbconnect.php라는 파일을 찾지 못한다는 뜻이다
현재 Not Found가 나오는 것은 정상이다
<?php
$servername = "mydb.cluster-c7uc4k8ag4io.ap-northeast-2.rds.amazonaws.com";
$username = "dbadmin";
$password = "toor1234.";
$dbname = "testdb";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Mysql5.7 connection failed: " . $conn->connect_error);
}
$sql = "select id, name, password from users";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. " " . $row["password"]. "<br>";
}
} else {
echo "0 results";
}
$conn->close();
?>
select.php 파일에는 위의 코드를 입력하고 저장한다
select.php 파일에도 적용시켜 웹 페이지 접속 시 같은 화면이 나타나는 것까지 확인했다
2) 'MyWeb2' EC2 인스턴스에서 RDS 접속
MyWeb2에서는 따로 파일을 만들 필요 없이
wget 명령어를 이용하여 해당 파일을 다운로드받는다
ls로 확인하게 되면 정상적으로 두 개의 파일 모두 다운로드가 되어 있다
MyWeb1과 동일하게 http://로드 밸런서 DNS 이름/dbconnect.php'로 접속한다
접속 시 설정한 것들과 같이 나오는 것을 확인한 뒤 종료한다
14. RDS 리소스 삭제
데이터베이스의 경우 완전히 삭제되기까지 10분 정도 소요된다
데이터베이스가 삭제되었다면 서브넷 그룹은 바로
삭제가 가능하기 때문에 서브넷 그룹까지 삭제시킨다
NAT 게이트웨이의 경우에도 완전히 삭제되기까지 2~3분 소요된다
다음으로 탄력적 IP도 릴리스를 진행시키면 된다
EC2로 넘어가서 로드 밸런서과 대상 그룹도 삭제시킨다
EC2 인스턴스도 삭제시키고 마무리한다
그 다음으로 VPC로 넘어가서 삭제하게 되면
VPC에 포함된 아래의 것들이 모두 같이 삭제된다
[AWS EC2 Auto Scaling & RDS 이중화]
1. VPC 구성
1) VPC 생성
2. 시작 템플릿 생성
1) 시작 템플릿 생성
2) 시작 템플릿 생성 확인
현재 EC2 인스턴스를 만든 게 아니라
EC2 인스턴스를 만들 수 있는 하나의 틀을 만들었다고 보면 된다
만들고 나서는 AMI ID를 확인하면 된다
3. Auto Scaling 그룹 생성
1) Auto Scaling 그룹 생성
*서브넷의 경우 하나는 2c로 설정해야 된다
사진에서는 2a로 나왔지만 하나는 2c로 설정
알람 추가는 넘어가고 태그 추가만 진행한다
이름은 Name, 값은 리소스 이름으로 설정한다
2) Auto Scaling 그룹 생성 확인
4. Auto Scaling EC2 인스턴스 로드 밸런싱 확인
1) Auto Scaling EC2 인스턴스 확인
2) 대상 그룹 확인
대상 그룹으로 가면 4개의 목록이 생기고,
상태 확인이 Healthy로 변경된다
분산 처리를 할 수 있는 대상이 된 것이다
MyALB를 만들었을 때 생성한 주소로 접속하게 되면,
시작 템플릿에서 넣은 스크립트를 넣었기 때문에
해당 메타데이터를 인스턴스 아이디를 환경 변수로 만든 다음
환경 변수를 index.html 파일에 넣게 된다
그렇기 때문에 돌아오는 응답에 인스턴스 아이디가 표시된다
5. Auto Scaling EC2 인스턴스 장애 테스트
1) EC2 인스턴스 장애 발생
실행 중인 것을 하나 선택해서 직렬 콘솔로 연결한다
yum을 이용하여 stress 패키지를 설치한다
cpu 메모리 부하를 임의적으로 인위적으로 발생시킬 때,
또는 테스트 시에 사용한다
다음으로 htop도 설치를 진행한다
stress 명령어로 2개의 cpu를 부하를 발생시킨다는 뜻이다
&은 백그라운드로 둔다는 뜻이다
현재 htop을 실행했을 때 0, 1의 백그라운드가 100%가 된 것을 확인할 수 있다
다음으로는 ps 명령어로 해당 프로세스 아이디를 확인하고
kill 명령어를 이용하여 프로세스 아이디를 입력 후 강제 종료를 진행한다
6. Amazon Aurora RDS 설치
1) DB 보안 그룹 생성
2) DB 서브넷 그룹 생성
3) Amazon Aurora RDS 생성
중간에 태그는 mydb로 설정한다
이렇게 설정 후 데이터베이스 생성을 눌러 준다
7. Amazon RDS 이중화 구성
1) Amazon RDS 복제본 생성
둘 다 사용 가능 상태가 되었을 때 mydb를 선택하고 작업에서 읽기 추가를 진행한다
마지막으로 마이너 버전 체크 해제 후 읽기 추가를 진행한다
2) Amazon RDS 복제본 생성 확인
1에서 작업하고, 2에서는 읽기 전용이 된다
1이 문제가 생길 때에는 2가 라이터로 변경된다
Auto Scaling 그룹에서 동적 크기 조정 정책에서
Target Tracking Policy를 선택하고 삭제한다
다시 생성하기를 누르고 화면과 같이 설정 후 생성을 진행한다
EC2 인스턴스로 가서 목록 중 실행 중인 걸로 아무거나 직렬 콘솔로 연결한다
stress 명령어로 2개의 cpu를 부하를 시켜 놓고
또 다른 하나를 선택해서 직렬 콘솔로 연결한다
해당 인스턴스도 stress 명령으로 2개의 cpu를 부하시켜 놓는다
다음으로도 인스턴스 목록에서 실행 중인 것을 골라서 같은 과정을 반복한다
다시 RDS 데이터베이스로 넘어가서 mydb 인스턴스 라이터, 리더가 모두
생성된 것을 확인하고 mydb-instance-1을 삭제한다
현재 원하는 용량을 하나로 하고 최대 3개, 하나가 문제가 생기면
바로 3개가 생기는 테스트를 진행 중에 있다
시간이 조금 흐른 후에 새로고침을 하고 보게 되면
리더 인스턴스였던 2번이 현재 라이터 인스턴스로 변경되었다
현재 다시 인스턴스에 돌아가서 확인해 보면 하나가 종료된 것까지 확인할 수 있다
쿠버네티스의 경우 삭제되는 순서의 경우 먼저 생성된 것부터 차례대로 삭제되고,
aws의 경우는 6개가 생성되고 2개가 삭제된다고 가정했을 때
2개는 오래된 것부터 삭제가 진행된다고 보면 된다
강의 소감
오늘은 크게 RDS 서비스와 EC2 Auto Sacling & RDS 이중화에 대해 배웠다
아직 익숙하지 않아서 각종 VPC를 구성하는 것에 어려움이 있다
또 콘솔로 연결 후 명령어를 실행하거나
웹 페이지를 통해 작동 여부를 확인하는 것이 이 실습의 결과 같다
다 생성했지만 연결이 안 되거나 중간에 실수하게 되면
돌아가서 다시 만들기가 번거로운 점도 있지만
분명히 장점도 존재하는 것 같다
익숙하지 않은 부분들에 대해서는 충분한 연습을 통해 익혀 나가야겠다
출처 - 코리아it아카데미 김정우 강사님 제공
*중간에 나오는 교재의 단편적인 면이 아닌
아마존으로 실행하여 캡처한 것은 모두 본인이 직접 실행해 보고
캡처하여 블로그에 작성하는 것입니다
'멀티 클라우드 인프라(AWS & 테라폼)' 카테고리의 다른 글
AWS 1 (2) | 2024.10.06 |
---|