*기간 : 05.27~05.31
개인프로젝트
주제 : 개인이 선정 및 설명을 PPT에 설명.
사용기술 : AWS, Azuer, Asible 중 한가지는 반드시 사용 되어야 함.
표지
목차
주제 설명 및 사용된 기술
진행과정
QnA
AWS
파라미터
목적은 EC2 인스턴스를 생성하는 것
KeyName은 기존의 EC2 KeyPair의 이름을 입력하는 것으로 보이며,
이는 SSH 액세스를 허용하기 위한 것
InstanceType은 t3.small 또는 t3.medium 중 하나를 선택할 수 있으며,
디폴트 값은 t3.medium
LatestAmiId는 Amazon Linux의 최신 AMI ID를 나타내며,
수정해서는 안 된다고 명시

AMI:
- AMI(Amazon Machine Image) ID는 Amazon EC2 인스턴스를 시작하는 데 사용되는 가상 머신 이미지의 고유 식별자입니다. AMI는 인스턴스를 시작할 때 해당 인스턴스가 실행될 환경을 정의하고, 운영 체제, 응용 프로그램 및 기타 설정을 포함합니다. AMI ID는 특정 AMI를 가리키며,
- 이를 사용하여 EC2 인스턴스를 시작하면 해당 AMI에 정의된 환경과 구성으로 인스턴스가 생성됩니다. 이전에 제공된 CloudFormation 템플릿의 LatestAmiId 파라미터는 특정 AMI ID를 나타내며, 해당 AMI를 사용하여 EC2 인스턴스를 시작할 때 사용됩니다.
VPC 리소스
VPC(Virtual Private Cloud)를 설정
VPC, 인터넷 게이트웨이, 라우팅 테이블, 서브넷 등 다양한 리소스가 정의합니다
"VPC1"이라는 이름의 VPC를 생성하고,
해당 VPC에 대한 인터넷 게이트웨이, 라우팅 테이블, 서브넷을 설정
또한 공용 및 사설 라우팅 테이블이 생성되어 있으며,
각각의 서브넷이 해당 라우팅 테이블에 연결됩니다
VPC1InternetGateway 설정
VPC(Virtual Private Cloud)와 관련된
Internet Gateway 및 VPC Gateway Attachment를 정의합니다
"VPC1InternetGateway"라는 이름의 Internet Gateway를 정의하고 있습니다.
이 Internet Gateway는 "WP-VPC1-IGW"라는 이름의 태그가 적용합니다
다음으로 "VPC1InternetGatewayAttachment"라는 이름의 VPC Gateway Attachment를 정의하고 있습니다. 이 attachment는 앞서 정의한 "VPC1InternetGateway"를 참조하고 있으며, VPC1에 연결됩니다.
이를 통해 VPC1은 외부 트래픽을 처리하기 위해 Internet Gateway를 사용할 수 있게 됩니다.
라우팅 테이블 설정
"VPC1RouteTable1"과 "VPC1RouteTable2"라는 이름의 두 개의 라우팅 테이블을 정의
"VPC1Route1"이라는 이름의 라우트를 정의
서브넷 설정
VPC(Virtual Private Cloud)와 관련된 서브넷을 정의합니다
"VPC1Subnet1"이라는 이름의 서브넷을 정의하고 있습니다.
퍼블릭 IP를 자동으로 할당하도록 설정되어 있으며, CIDR 블록은 10.1.1.0/24입니다. "WP-VPC1-Subnet1"이라는 이름의 태그가 적용됩니다.
보안 그룹 설정
VPC(Virtual Private Cloud)와 관련된 보안 그룹을 정의하고 있습니다.
"SGWebSrv"라는 그룹 설명과 "SGWebSrv"라는 이름의 태그가 적용되어 있습니다.
이 보안 그룹은 SSH(포트 22), HTTP(포트 80), ICMP 프로토콜을 모두 0.0.0.0/0으로부터 허용하도록 설정되어 있습니다.
다음으로 "VPC1SG3"이라는 이름의 보안 그룹을 정의하고 있습니다. 이 보안 그룹은 VPC1에 속하며, "SGRDS"라는 그룹 설명과 "SGRDS"라는 이름의 태그가 적용되어 있습니다. 이 보안 그룹은 MySQL 데이터베이스에 접근하기 위해 소스 보안 그룹으로 "VPC1SG1"을 참조하고 있습니다.
마지막으로 "VPC1SG4"이라는 이름의 보안 그룹을 정의하고 있습니다. 이 보안 그룹은 VPC1에 속하며, "SGEFS"라는 그룹 설명과 "SGEFS"라는 이름의 태그가 적용되어 있습니다. 이 보안 그룹은 NFS(Network File System)에 접근하기 위해 소스 보안 그룹으로 "VPC1SG1"을 참조하고 있습니다.
인스턴스 설정
EC2(탄력적 컴퓨팅 클라우드) 인스턴스를 정의하고 있습니다.
"VPC1Instance1"이라는 이름의 인스턴스를 정의하고 있습니다. 이 인스턴스는 LatestAmiId로 지정된 AMI(Image)를 사용하며, InstanceType과 KeyName을 참조하여 인스턴스의 유형과 키 페어를 정의합니다. 또한, "AllInOne"이라는 이름의 태그가 적용되어 있습니다.
VPC1 내의 두 번째 EC2 인스턴스를 정의하고 있습니다.
RDS 정의
RDS(Database) 구성을 정의하고 있습니다.
첫 번째 부분은 DBSubnetGroup을 정의하고 있는데, 이것은 VPC 내의 서브넷 그룹을 나타내며, SubnetIds에 VPC1Subnet3 및 VPC1Subnet4를 참조하고 있습니다. 이것은 DBLab-Subnet34라는 이름의 DBSubnetGroup을 생성하는 것으로 보입니다.
두 번째 부분은 DBParameterGroup을 정의하고 있는데, 이것은 MySQL 8.0을 위한 파라미터 그룹을 정의하고 있습니다. 여기에는 character_set_database 및 character_set_server와 같은 파라미터가 정의되어 있습니다.
세 번째 부분은 DBInstance를 정의하고 있는데, 이것은 "wpdb"라는 식별자를 가진 MySQL 데이터베이스 인스턴스를 생성하는 것으로 보입니다. 이 인스턴스는 db.t4g.micro 클래스를 사용하며, ap-northeast-2c 가용 영역에 위치하며, gp3 스토리지 유형을 사용합니다. 또한 VPCSecurityGroups에서 VPC1SG3 보안 그룹을 참조하고 있습니다.
EFS 정의
EFS(File System)를 생성하고 있습니다.
먼저, ElasticFileSystem은 "WebSrv-EFS"라는 이름의 파일 시스템을 생성합니다. 그리고 ElasticFileSystemMountTarget0 및 ElasticFileSystemMountTarget1은 이 파일 시스템을 위한 마운트 타겟을 생성합니다.
ElasticFileSystemMountTarget0는 VPC1Subnet1에 위치하고 있는데, 이것은 VPC1SG4 보안 그룹을 사용합니다. ElasticFileSystemMountTarget1은 VPC1Subnet2에 위치하고 있는데, 마찬가지로 VPC1SG4 보안 그룹을 사용합니다.
이 코드는 특정 VPC 내에서 EFS(File System)를 생성하고, 해당 파일 시스템을 사용할 수 있는 마운트 타겟을 설정하는 것으로 보입니다.
Output 정의
Outputs 섹션으로, 생성된 리소스의 정보를 반환하는 부분입니다.
AllInOneEC2IP는 VPC1Instance1의 PublicIp를 반환하고,
WebSrvEC2IP는 VPC1Instance2의 PublicIp를 반환합니다.
마지막으로 EfsFileSystemID는 ElasticFileSystem의 리소스 식별자를 반환합니다.
생성된 스택 리소스 확인
- VPC
- 이름: "WP-VPC1",
- IP or 연결된 곳 -> CidrBlock: 10.1.0.0/16
- 게이트웨이
- 이름: "WP-VPC1-IGW"
- 라우팅 테이블
- 이름: "WP-VPC1-PublicRT"과 "WP-VPC1-PrivateRT"
- IP or 연결된 곳 -> DestinationCidrBlock: 0.0.0.0/0
- 서브넷-1
- 이름: "WP-VPC1-Subnet1",
- IP or 연결된 곳 -> CidrBlock: 10.1.1.0/24
- 서브넷-2
- 이름: "WP-VPC1-Subnet2",
- IP or 연결된 곳 -> CidrBlock: 10.1.2.0/24
- 서브넷-3
- 이름: "WP-VPC1-Subnet3",
- IP or 연결된 곳 -> CidrBlock: 10.1.3.0/24
- 서브넷-4
- 이름: "WP-VPC1-Subnet4",
- IP or 연결된 곳 -> CidrBlock: 10.1.4.0/24
- EC2-1
- 이름: "AllInOne",
- 프라이빗 IPv4 주소 : 10.1.2.100
- EC2-2
- 이름: WebSrv,
- 프라이빗 IPv4 주소 : 10.1.2.200
- 보안그룹-1
- 이름: "SGWebSrv",
- IP or 연결된 곳 -> SSH(포트 22), HTTP(포트 80), ICMP 프로토콜
- 보안그룹-2
- 이름: "SGRDS",
- IP or 연결된 곳 -> MySQL 데이터베이스에 접근하기 위해 소스 보안 그룹
- 보안그룹-3
- 이름: "SGEFS",
- IP or 연결된 곳 -> NFS(Network File System)에 접근하기 위해 소스 보안 그룹

마리아 DB 설치 후 접속 확인
마리아 DB 관련 설치 후 설정
#amazon-linux-extras install mariadb10.5 -y ⇒ start enable
( 마리아DB 설치 )
#systemctl start mariadb && systemctl enable mariadb && systemctl status mariadb
( 시스템 시작과 영구 동작 후 정보 확인 )
#echo -e "\n n\n n\n Y\n n\n Y\n Y\n" | /usr/bin/mysql_secure_installation
( MySQL을 보안 설정하는 동안 대화형으로 진행되는 프롬프트에 자동으로 응답 )
마리아 DB 접속
데이터 모델링: 새로운 데이터베이스 스키마를 설계하고, 필요에 따라 테이블을 생성하거나 수정할 수 있습니다.
데이터 입력 및 조회: 데이터베이스에 데이터를 입력하고, SQL 쿼리를 사용하여 데이터를 조회하거나 수정할 수 있습니다.
백업 및 복원: RDS는 자동 백업을 지원하며, 수동으로 백업을 생성하고, 필요에 따라 데이터를 복원할 수 있습니다.
모니터링: RDS 콘솔을 통해 데이터베이스의 성능 지표를 모니터링하고, 성능 문제를 식별할 수 있습니다.
보안 및 권한 관리: 데이터베이스에 대한 액세스 권한을 관리하고, 데이터 암호화 설정을 구성할 수 있습니다.
확장성 관리: 필요에 따라 RDS 인스턴스의 사양을 조정하거나, 읽기 전용 복제본을 생성하여 읽기 작업을 분산시킬 수 있습니다.
이러한 작업들을 통해 RDS를 효율적으로 활용하여 안정적이고 성능 좋은 데이터베이스 환경을 구축하고 유지할 수 있습니다.
use wpdb; , ( 데이터 베이스 접속 )
MariaDB [shopping_db]> create table customer (
-> id varchar(10) not null primary key, ⇒ char은 고정길이값 문자, varchar은 가변길이값 문자
-> name varchar(10),
-> age int, ⇒ int 정수
-> address varchar(10) );
Query OK, 0 rows affected (0.003 sec) , ( 테이블 생성 )
create table purchase (
-> no int not null primary key auto_increment,
-> cust_id varchar(10),
-> date char(8),
-> product varchar(5) ); , ( 테이블 생성 )
desc customer;, desc purchase; ( 테이블 생성 확인 )
INSERT INTO customer VALUES ('hong', 'GilDong', 22, 'Ky');
INSERT INTO customer VALUES ('dang', 'Tangi', 23, 'Ch');
INSERT INTO customer VALUES ('Lee', 'PpuNi', 30, 'Se');
INSERT INTO customer VALUES ('john', 'BaNi', 28, 'Ka');
( customer 테이블에 인수 집어넣기 )
INSERT INTO purchase VALUES (null, 'hong', '20160122', 'TV');
INSERT INTO purchase VALUES (null, 'ppuni', '20160211', 'TV');
INSERT INTO purchase VALUES (null, 'john', '20160211', 'Phone');
INSERT INTO purchase VALUES (null, 'hong', '20160222', 'Phone');
INSERT INTO purchase VALUES (null, 'john', '20160311', 'Video');
( purchase 테이블에 인수 집어넣기 )
select * from customer;, select * from purchase; 로 테이블 확인
select * from customer where id='hong'; , id가 hong인 레이블 검색
AllInone에 생성한 데이터베이스가 WebSrv에 연동되어 같은 결과가 나타나는 것을 확인


SQL 쿼리 편집기를 통해 id로 데이터를 추가, 수정, 삭제 및 가져올 수 있음

데이터 삭제: DELETE FROM customer WHERE age > '29';

데이터 추가: INSERT INTO customer (id, name, age, address) VALUES ('Lee','PpuNi','30','Se');

IAM 권한 : AmazonRDSReadOnlyAccess로 only read 부여

Websrv의 권한 부여
CREATE USER 'ec2-user'@'10.1.2.200' IDENTIFIED BY 'password'; ( 비밀번호 생성 후 )
GRANT ALL PRIVILEGES ON . TO 'ec2-user'@'10.1.2.200'; ( 모든 권한 부여는 에러 )
GRANT USAGE ON wpdb.* TO 'ec2-user'@'10.1.2.200';
GRANT SELECT ON wpdb.* TO 'ec2-user'@'10.1.2.200'; ( wpdb 데이터 베이스에 대한 읽기 권한 제공 )


Cloud Watch를 통해 데이터 베이스의 RDS 데이터베이스의 CPU 사용률, 디스크 I/O, 데이터베이스 연결 수 등과 같은 지표를 실시간으로 확인할 수 있습니다. 또한 CloudWatch 경고를 설정하여 특정 임계값을 초과할 때 알림을 받을 수도 있습니다.

스냅샷 생성으로 데이터 베이스 백업 가능
