10/14(금) 클라우드2

Yuri JI·2022년 10월 14일
0

Kakao Cloud School

목록 보기
20/27
post-thumbnail

🐳 Infrastructure

선택기준

리전이 해안가에 몰려있는 이유: 해저 광 케이블 때문

  • Region : 최종 사용자에게 더 가까운 위치에 특정
    • 고객의 위치를 파악하여 근접 지역을 선택
    • 전송 비용 최소화
      • 서비스 관점에서 클라우드는 전송 비용(= 네트워크 비용)이 중요하다.
    • 규정 준수 및 데이터 보존
      • 리전으로 선택한 나라의 데이터 관련 규정을 찾아봐야한다.
    • 서비스 가용성
      • 지리학적, 지정학적 문제도 고려해야한다.

✍ ec2

📕 실습

  • case1 ) local
    • Route 53 (DNS -> Domain) ----- S3 (정적 웹 호스팅)
  • case2) global
    • Route 53 (DNS -> Domain) ----- CloudFront -----S3 (정적 웹 호스팅)
    • CDN
  • webapgetest.org
    • 우리가 만든 (S3) URL, CDN의 URL의 속도 비교해보기

📘 인스턴스 생성

  • 인스턴스 시작
    • 이름 : APM-EC2
    • AMI 및 인스턴스 유형은 사진과 같이 선택
      • 더 많은 AMI를 눌러 여러가지 AMI 찾아보기
        * (Marketplace에는 AMI를 판매하고 있다.)
    • 새 키 페어 생성 (.pem)
      • window 사용자 -> PuTTy Key Generator로 .pem 키를 .ppk로 만들어주기
    • 네트워크 설정 > 보안그룹(= 방화벽 규칙)
      네트워크에 보면 vpc-xxxx 가 할당되어있는데 VPC를 확인하면 나에게 해당된 VPC가 보인다.

      VPC는 계정 별로 할당되어있다.
      서브넷도 확인해보면 4개가 붙어있다. 서브넷은 VPC 안에서 IP가 할당된다.

      sg="secret group" 일반적인 naming

      * 아래와 같이 보안그룹 생성 후 적용
    • 스토리지 구성
      • 1x : 10, GiB: gp2
    • 고급 세부 정보
      • 맨 아래의 사용자 데이터에 아래 명령 추가
      #!/bin/bash
      yum update -y
      amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2
      yum install -y httpd mariadb-server
      systemctl start httpd
      systemctl enable httpd
      systemctl start mariadb.service
      systemctl enable mariadb.service
      usermod -a -G apache ec2-user
      chown -R ec2-user:apache /var/www
      chmod 2775 /var/www
      find /var/www -type d -exec chmod 2775 {} \;
      find /var/www -type f -exec chmod 0664 {} \;
      echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
  • 보안그룹을 바꿔야 ssh 접속가능
    • 인바운드 규칙 추가 전
    • 인바운드 규칙을 다음과 같이 추가
    • 다시 접속
    • 사용자 데이터에 넣어놓은 명령어가 잘 실행되어서 systemctl status httpd를 입력했을 때 actvie (running)을 확인할 수 있다.

📘 ec2 instance에 설치된 mariaDB를 로컬 workbench에 연결하기

[ec2-user@ip-172-31-1-108 ~]$ vi index.php
[ec2-user@ip-172-31-1-108 ~]$ sudo cp index.php /var/www/html/index.php
  • index.html
<html>
 <head>
  <title>AWS EC2 http Running Sample App</title>
   <style>body {margin-top: 40px; background-color: #333;} </style>
  <meta http-equiv="refresh" content="3" >
 </head>
 <body>
  <div style=color:white;text-align:center>
   <h1> AWS EC2 http Application. </h1>
   <h2> Great Works! </h2>
    <p>Application is now good running on a AWS EC2 http.</p>
  </div>
 </body>
</html>

👻 EC2의 MySQL을 워크벤치로 연결하자 
[ec2-user@ip-172-31-1-108 ~]$ sudo /usr/bin/mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

Enter current password for root (enter for none): [Enter]
OK, successfully used password, moving on...

Set root password? [Y/n] Y
New password: [1234]
Re-enter new password: [1234]
Password updated successfully!

Remove anonymous users? [Y/n] Y
 ... Success!

Disallow root login remotely? [Y/n]  n
 ... skipping.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reload privilege tables now? [Y/n] Y
 ... Success!

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB! 🥳 설정 끝 !

[ec2-user@ip-172-31-1-108 ~]$ mysql -u root -p
Enter password: [1234]
Welcome to the MariaDB monitor.  Commands end with ; or \g.

🐣 이제 워크벤치 실행가능 ! 

📘 mariaDB - workbench 연결

아래와 같이 설정합니다.

📘 Test DB 생성

create database prod;
use prod;
create table product (prod_id int, prod_name varchar(30));
insert into product values (100, 'AWS');
insert into product values (200, 'GCP');
select * from product;

📘 DB + php 띄우기

📗 1) /var/www/html/index.php 작성

<?php
    $mysql_hostname = 'ip-172-31-1-108.ap-northeast-2.compute.internal';
    $mysql_username = 'root';
    $mysql_password = '1234';
    $mysql_database = 'prod';

    $connect = mysqli_connect($mysql_hostname, $mysql_username, $mysql_password, $mysql_database);

    if(!$connect){
    echo '[connection fail] : '.mysql_error().'';
    die('MySQL 접속 실패.');
    } else {
    echo "[yji Web:첫 번째 EC2 에서 MySQL 서버 접근 성공!]\n";
    }

    $sql = "SELECT * FROM product";
    $result = mysqli_query($connect, $sql);
    echo "Table query result : ";
    var_dump($result->num_rows);

    $result2 = mysqli_query($connect,"SELECT * FROM product");
    echo "<table border='1'> <tr> <th>prod_id</th> <th>prod_name</th>";
    $n = 1;
    while($row = mysqli_fetch_array($result2)){
    echo "<tr>";
    echo "<td>" . $row['prod_id'] . "</td>";
    echo "<td>" . $row['prod_name'] . "</td>";
    echo "</tr>";
    $n++;
    }
    echo "</table>";
    mysqli_close($conn);
?>

📗 2) [ec2-public IPv4]/index.php 접속

📘 실습 하나 더

  • sql문
create table books (
ISBN int(13),
Title varchar(100),
Author varchar(100),
Format varchar(100));

insert into books values (9182932465265, 'Cloud Computing Concepts', 'Wilson, Joe', 'Paperback');
insert into books values (3142536475869, 'The Database Guru', 'Gomez, Maria', 'eBook');

create table departments (
department_id int(4) PRIMARY KEY,
department_name varchar(30),
manager_id int(6),
location_id int(4));

create table employees (
employee_id int(6) PRIMARY KEY,
first_name varchar(20),
last_name varchar(25),
email varchar(25),
phone varchar(20),
hire_date date,
job_id varchar(10),
salary int(8),
commission_pct int(2),
manager_id int(6),
department_id int(4),
CONSTRAINT dept_fk FOREIGN KEY (department_id) REFERENCES departments (department_id)
);
  • 완성 !

🐣 열쇠 : PK
하늘색 마름모 : UK
주황색 마름모 : FK


✍ Instance 접근 방법

1) 임시 SSH key 발급(from root) -> 접근
2) ppk를 이용한 SSH 접근 -> 내장된 key-pair 접근 (putty~)

📕 AWS SSM(AWS Session Manager)

SSM을 이용한 사용자 계정 생성 !

  • 관리자가 IAM -> AuthN + AuthZ 제공

    • SSM을 이용해서 접근 시도 -> 이떄 서포트(제공)하는 애가 systems manager의 session manager임.
    • 이를 위해서 ssm role을 생성 후 EC2에 보안의 권한 변경
  • Audit-log

    • 누가 언제 들어가서 어떤 명령어를 쳤는지도 다 나옴
    • 1) CloudWatch에 log push(제공)
    • 2) S3의 bucket에 logfile 저장
    • 이는 법적 증거자료로 채택이 가능하다.

📘 SSM 만들기




여기까지 했으면 역할 생성 버튼 클릭

📘 역할 적용

📘 S3 버킷 생성 (S3의 bucket에 logfile 저장)

  • 기본적으로(standard) AZ 4개에 bucket을 생성함
  • 같은 region 안에서는 버킷 이름이 unique 해야한다.

여기까지하고 버킷생성

📘 CloudWatch 로그 그룹 생성

📘 SSM 기본 구성

여기서 CloudWatch랑 S3를 enable해주어야한다.

  • Session Manager 클릭




여기까지하고 생성

📘 SSM 확인

  • 기본설정페이지 클릭

📘 세션 탭에서 인스턴스 선택 후 세션을 시작할 수 있다. 인스턴스가 뜨는 데에 시간이 꽤 걸린다 !


성공 !

📘 세션매니저 성공하면 로그 남기기

이 로그가 bucket에 올라올거다(시간이 좀 걸림) -> 이 로그를 확인하는 것이 목적 !

📘 s3 권한 변경

S3 버킷에 올라온 로그를 다운받기 위해 퍼블릭 액세스 기능을 부여해야한다.

버킷 정책을 다음과 같이 수정

{
	"Version": "2012-10-17",
	"Id": "Policy1655711680123",
	"Statement": [
		{
			"Sid": "Stmt1655711673132",
			"Effect": "Allow",
			"Principal": "*",
			"Action": [
				"s3:DeleteObject",
				"s3:GetObject",
				"s3:PutObject"
			],
			"Resource": "arn:aws:s3:::[버킷명]/*"
		}
	]
}

📘 cloudwatch에서 로그 확인하기

📘 버킷에 저장된 로그 다운로드

세션에 연결한 뒤에 실행했던 명령어들이 모두 로그로 기록되어있다.

Script started on 2022-10-14 07:37:15+0000
cd

source ./.bash_profile

user=$(whoami)

echo "Welcome $user"'!'

[?1034hsh-4.2$ cd

sh-4.2$ source ./.bash_profile

]0;@ip-172-31-1-108:~[ec2-user@ip-172-31-1-108 ~]$ user=$(whoami)

]0;@ip-172-31-1-108:~[ec2-user@ip-172-31-1-108 ~]$ echo "Welcome $user"'!'

Welcome ec2-user!

]0;@ip-172-31-1-108:~[ec2-user@ip-172-31-1-108 ~]$ 
[ec2-user@ip-172-31-1-108 ~]$ 

]0;@ip-172-31-1-108:~[ec2-user@ip-172-31-1-108 ~]$ dksseeecho hello

hello

]0;@ip-172-31-1-108:~[ec2-user@ip-172-31-1-108 ~]$ 
[ec2-user@ip-172-31-1-108 ~]$ 
[ec2-user@ip-172-31-1-108 ~]$ echo helloㅓㅑdmr my yesterday~

mr my yesterday~

]0;@ip-172-31-1-108:~[ec2-user@ip-172-31-1-108 ~]$ 
[ec2-user@ip-172-31-1-108 ~]$ 
[ec2-user@ip-172-31-1-108 ~]$ 

]0;@ip-172-31-1-108:~[ec2-user@ip-172-31-1-108 ~]$ 

]0;@ip-172-31-1-108:~[ec2-user@ip-172-31-1-108 ~]$ 

]0;@ip-172-31-1-108:~[ec2-user@ip-172-31-1-108 ~]$ 

]0;@ip-172-31-1-108:~[ec2-user@ip-172-31-1-108 ~]$ 
Script done on 2022-10-14 07:37:15+0000

🥳 여기까지 하면 끝

📕 해제 작업 순서

  1. session manager
  • 1) 세션 종료
  • 2) 기본 설정 눌러서 S3, CloudWatch enable 해제
  1. s3 bucket 로그 삭제

  2. s3 bucket 버킷 삭제

  3. CloudWatch에서 로그 그룹 삭제

  4. IAM 역할 kakaoRoleforSSM 삭제

  5. ec2 종료


메모장

⭐ 📘 📗 💭 🤔 📕 📔 🐳 ✍ 🥳 ⭐ 🐣 👻

on-demand spot saving plans 예약 인스턴스의 차이점

profile
안녕하세요 😄

0개의 댓글