개인 프로젝트

박형준·2024년 5월 27일

*기간 : 05.27~05.31

개인프로젝트

  • 주제 : 개인이 선정 및 설명을 PPT에 설명.

  • 사용기술 : AWS, Azuer, Asible 중 한가지는 반드시 사용 되어야 함.

    • 표지

    • 목차

    • 주제 설명 및 사용된 기술

    • 진행과정

    • QnA

  • 다음주 월요일 2명 발표

AWS

스택을 생성하기 위한 yaml 파일

파라미터

  • 목적은 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"라는 이름의 두 개의 라우팅 테이블을 정의

      • 각각의 라우팅 테이블은 "WP-VPC1-PublicRT"와 "WP-VPC1-PrivateRT"라는
        이름의 태그가 적용합니다
    • "VPC1Route1"이라는 이름의 라우트를 정의

      • 이 라우트는 Internet Gateway를 향하는 라우트로,
        0.0.0.0/0 대역을 Internet Gateway로 설정하여 인터넷으로의 트래픽을 연결됩니다
      • 이 라우트는 "VPC1RouteTable1"에 종속되어 있으며,
        Internet Gateway Attachment가 완료된 후에 생성합니다
  • 서브넷 설정

    • 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"이라는 이름의 태그가 적용되어 있습니다.

      • 또한, NetworkInterfaces를 통해 첫 번째 네트워크 인터페이스를 정의하고 있습니다. 이 인터페이스는 VPC1Subnet1에 속하며, VPC1SG1 보안 그룹을 사용하도록 설정되어 있으며, 프라이빗 IP 주소는 10.1.1.100으로 할당되어 있습니다.
      • 마지막으로, UserData를 통해 인스턴스가 시작될 때 실행되는 스크립트를 정의하고 있습니다. 이 스크립트는 호스트 이름을 AllInOne으로 설정하고, ec2-user의 .bashrc 파일에 "sudo su -"를 추가하며, 패키지를 업데이트하고 jq, htop, tree, gcc를 설치합니다.
    • VPC1 내의 두 번째 EC2 인스턴스를 정의하고 있습니다.

      • 해당 EC2 인스턴스는 LatestAmiId로 지정된 AMI를 사용하며, InstanceType 및 KeyName은 참조값을 사용하여 설정됩니다. 또한, STGLabRoleForInstances로 지정된 IAM 역할을 사용하여 인스턴스 프로필을 설정합니다.
      • 태그는 "Name: WebSrv"로 지정되어 있으며, 네트워크 인터페이스 설정에서는 VPC1Subnet2에 연결되고, VPC1SG1 보안 그룹을 적용하며, 10.1.2.200에 프라이빗 IP 주소를 할당받습니다.
  • 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)에 접근하기 위해 소스 보안 그룹

CloudFormation

  • ssh 접속 및 핑 테스트

  • 마리아 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 접속

    • mysql -uroot -pqwe12345 -h wpdb.clqu6gao8ooj.ap-northeast-2.rds.amazonaws.com( RDS 엔드포인트 )

데이터 모델링: 새로운 데이터베이스 스키마를 설계하고, 필요에 따라 테이블을 생성하거나 수정할 수 있습니다.

데이터 입력 및 조회: 데이터베이스에 데이터를 입력하고, 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 데이터 베이스에 대한 읽기 권한 제공 )

  • password: password 입력하고 select * from customer;는 되지만 DELETE FROM customer WHERE age > '29'; 삭제는 에러


Cloud watch 및 snapshot

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

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

0개의 댓글