Skip to content
egoing edited this page Oct 23, 2020 · 78 revisions

https://bit.ly/_AWS_ 을 브라우저에 입력해서 이곳으로 올 수 있어요.

준비작업

  1. aws에 회원가입합니다.
  2. git을 설치합니다. https://git-scm.com/
  3. vscode( https://code.visualstudio.com/ )를 설치합니다. portable 버전은 설치하지 마세요.

혼자 학습하기

https://seomal.org 를 통해서 온라인 강의를 찾을 수 있습니다.

WEB 수업

WEB

<html>
    <body>
        <h1><a href="index.html">CLOUD</a></h1>
        <ul>
            <li><a href="s3.html">S3</a></li>
            <li><a href="ec2.html">EC2</a></li>
            <li><a href="cf.html">CF</a></li>
        </ul>
        Welcome Cloud
    </body>
</html>

IaaS, PaaS, SaaS

S3

  • PaaS에 대한 이해
  • 클라우드의 편의성에 대한 공감
  1. 버킷을 생성한다.
  2. 버킷으로 파일을 업로드 한다.
  3. 파일을 다운로드 한다.
  4. 파일을 누구나 다운로드 할 수 있도록 한다. => 권한 : 모든 퍼블릭 엑세스 차단 해제 => 퍼블릭으로 지정
  5. 웹서버로서 s3를 사용한다.
  6. 요금체계 : https://aws.amazon.com/ko/s3/pricing/
  7. 클래스별 요금 체계 : https://docs.google.com/spreadsheets/d/114szGETmz8zKz0gPPaHBPmx5n0CO5fMzcNbmO0zOc4k/edit?usp=sharing
  8. 가용성과 내구성
  9. S3의 클래스 변경

EC2

  • IaaS에 대한 이해
  • 컴퓨터를 임대하는 개념에 대한 이해
  1. CLI 학습 - https://opentutorials.org/module/3747
  2. 인스턴스를 생성한다. (ubuntu 20 이상 버전을 사용해야 EC2 instant connect를 설정없이 사용할 수 있습니다)
  3. EC2 instance connect로 접속한다.
  4. sudo apt update; sudo apt install apache2 : Apache2 설치
  5. cd /var/www/html : 웹페이지가 위치하는 폴더로 이동한다.
  6. 웹사이트에 접속해본다. => 접속이 안된다.
  7. Security Group을 설정한다. => http, https의 인바운드를 80번 포트로 변경한다.
  8. 웹서버에 접속한다. => 접속이 된다.
  9. sudo rm index.html : 웹페이지를 삭제해본다. => 페이지를 찾을 수 없다고 나온다. 이 파일이 홈페이지임을 확인한다.
  10. sudo nano index.html : 웹페이지를 만들고 다시 접속해본다.
  11. EC2의 가격 정책을 확인한다.

CloudFront

https://github.com/egoingsb/offline/blob/master/cloudfront.png?raw=true

Visual Studio Code Remote Development

  1. sudo chmod 400 key.pem : 윈도우 외의 경우 key.pem 파일의 권한을 400으로 한다.
  2. remote development 확장 기능을 설치한다. https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack
  3. 왼쪽 하단의 >< 를 클릭한다.
  4. Remote-SSH : Connect Current Window to Host... 를 선택한다.
    • Add New SSH Host ... 를 선택한다.
  5. /Users/username/.ssh/config 파일을 선택한다.
  6. ssh -i key.pem ubuntu@ip -A 입력 후 엔터
  7. /User/username/.ssh/config 파일에 저장

Middleware - PHP

backend, middle, php, application server의 개념을 이해한다.

  1. tail -f /var/www/apache2/error.log : apache, php의 오류를 출력한다.
<html>
    <body>
        <h1><a href="/index.php">CLOUD</a></h1>
        <ul>
            <li><a href="index.php?id=S3">S3</a></li>
            <li><a href="index.php?id=EC2">EC2</a></li>
            <li><a href="index.php?id=CF">CF</a></li>
        </ul>
        <?php
        if(empty($_GET['id'])){
        ?>
            Hello is ..
        <?php
        } else if($_GET['id'] === 'S3'){
        ?>
            S3 is ...
        <?php
        } else if($_GET['id'] === 'EC2'){
        ?>
            EC2 is ...
        <?php
        } else if($_GET['id'] === 'CF'){
        ?>    
            CF is ..
        <?php
        } 
        ?>
    </body>
</html>

RDS - Database - MySQL

  1. RDS 인스턴스 생성
    • 제품 : MySQL
    • 모드 : 프로덕션
    • 마스터 사용자 이름과 마스터 암호 입력 - admin, qwertyuiop 권장 (절대로 실제 서비스에 이런 아이디/비밀번호를 이용하면 안됩니다)
    • DB 인스턴스 크기 : 버스터블 클래스 - micro
    • 스토리지 : 마그네틱
    • 가용성 및 내구성 : 대기 인스턴스를 생성하지 마십시오.
  2. 접속
    • apt install mysql-client : mysql client 설치
    • EC2 인스턴스의 보안그룹 이름을 RDS VPC 보안 그룹의 허용 엑세스 포인트로 등록
    • mysql -uadmin -p -hdatabase-1.cdbrt00yi2pa.ap-northeast-2.rds.amazonaws.com
  3. 데이터베이스 생성
    • CREATE DATABASE mydb;
  4. 테이블 생성
    • CREATE TABLE topic(id int NOT NULL, title char(20) NOT NULL, description TINYTEXT);
  5. 데이터 입력
INSERT INTO topic VALUES(1, 'S3', 'S3 is ..');
INSERT INTO topic VALUES(2, 'EC2', 'EC2 is ..');
INSERT INTO topic VALUES(3, 'CF', 'CF is ..');


# PHP & MySQL 
1. sudo apt install php-mysql : php & mysql 연동
1. sudo service apache2 restart : apache2 재시작 
  1. index.php
<?php
$conn = mysqli_connect('database-1.cdbrt00yi2paz.ap-northeast-2.rds.amazonaws.com', 'admin', 'qwertyuiop', 'mydb');
$sql = 'SELECT * FROM topic';
?>
<html>
    <body>
        <h1><a href="/index.php">CLOUD</a></h1>
        <ul>
            <?php
            $query = mysqli_query($conn, $sql);
            while($row = mysqli_fetch_array($query)){
            ?>
                <li><a href="index.php?id=<?php echo $row['id'];?>"><?php echo $row['title'];?></a></li>
            <?php
            }
            ?>
        </ul>
        <?php
        if(empty($_GET['id'])){
        ?>
            Hello is ..
        <?php
        } else {
            $query = mysqli_query($conn, "SELECT * FROM topic WHERE id = ".$_GET['id']);
            $result = mysqli_fetch_array($query);
        ?> 
            <h1><?php echo $result['title'];?></h1>
            <?php echo $result['description']; ?>
        <?php
        } 
        ?>
        <?php
            print($_SERVER['SERVER_ADDR']);
        ?>
    </body>
</html>

Scale up

  1. EC2 인스턴스를 이미지를 만든다.
  2. 더 높은 사양의 인스턴스로 교체한다. 이때 ip 주소가 변경되는데 도메인 주소를 부여하는 것을 통해서 ip 주소의 변동성에 대응 할 수 있다.

Elastic Load Balancer

  1. Scale up VS Scale out의 비교

단순한 분산 컴퓨팅

  1. EC2
    1. AMI 이미지를 이용해서 인스턴스 두개를 만든다.
    2. 웹페이지의 내용을 구분할 수 있도록 하나는 1, 하나는 2가 웹으로 출력되도록 한다.
  2. Target group
    1. 타겟그룹을 생성한다.
    2. 타겟 그룹은 ELB에 장착될 인스턴스들을 지정한다.
    3. 그룹의 이름을 지정한다.
    4. 인스턴스 2개를 타켓으로 지정한다.
  3. Elastic Load Balancer
    1. ELB 생성버튼을 누른다.
    2. Application Load Balancer를 선택한다.
    3. ELB의 이름을 지정한다.
    4. Listener의 포트를 81로 지정한다. : 80번 포트를 여러 요소에서 쓰고 있으므로 차이를 비교 할 수 있게 일부러 80번 포트를 쓰지 않았다.
    5. VPC는 기본, 기용 영역은 모든 곳을 지정한다.
    6. 새로운 보안 그룹을 생성한다. 이떄 81번 포트가 개방되어 있는지 확인한다.
    7. 라우팅 단계에서 대상 그룹을 기존 대상 그룹으로 지정한다.
    8. 타겟그룹을 지정한다. 이 때 포트가 80인 것에 주목한다. 여기서 80은 origin 쪽의 인바운드 포트의 번호이다.
    9. ELB가 생성되었는지 상태를 확인한 후에 접속해본다. 이 때 81번 포트로 접속해야 한다. 예: http://hana-elb-578601292.ap-northeast-2.elb.amazonaws.com:81/

Blue/Green Deploy

  1. 타겟그룹
    1. 타겟그룹을 두개 만든다. 그룹 이름은 TG1, TG2
    2. 각 타겟그룹별로 인스턴스를 하나씩 배정한다.
  2. ELB
    1. ELB를 생성한다.
    2. 리스터에 2개의 타겟 그룹을 붙인다. 이때 가중치를 50%씩 부여한다.
    3. 가중치를 조절하면서 서비스되는 애플리케이션을 전환한다.

AutoScaling

자동으로 인스턴스의 숫자가 변경되도록 하는 기능

  1. Launch Configuration

    1. 시작구성 생성
    2. 이름, AMI, 인스턴스유형 지정
    3. 보안그룹은 생성되는 인스턴스의 인바운드 트래픽을 제어하는 것이기 때문에 80번 포트를 지정한다.
  2. EC2 AutoScaling

    1. AutoScaling 생성
    2. 시작구성으로 전환, 앞에서 생성한 시작구성 지정
    3. 모든 서브넷 선택
    4. Configure advanced optionsInfo
      1. Health check type - ELB도 체크 : EC2는 인스턴스의 건강 상태를 인스턴스 자체적으로 체크하는 것이고, ELB는 ELB에서 request를 해서 정상적으로 리턴하지 않으면 건강하지 않은 것으로 간주하는 설정
    5. 원하는 용량 1, 최소 용량 1, 최대 용량 2로 지정
    6. 대상 조정 정책 : 평균 CPU 사용률 50%
  3. Launch configuration을 생성한다. - 자동으로 만들어지는 인스턴스의 성능을 설정하는 기능이다.

    • 인스턴스 유형은 nano를 사용한다.
    • 보안그룹은 특별한 설정을 하지 않는다.
    • 키페어를 선택한다.
  4. Auto Scaling Group을 생성한다.

    • 시작 템플릿으로 되어 있다면 시작구성(launch configuration)으로 전환해서 위에서 만든 Launch configuration을 지정한다.
    • 서브넷은 모두 선택한다.
    • 원하는 용량은 1, 최소 용량은 1, 최대 용량은 2로 한다.
    • 조정정책 => 대상 추적 조정 정책 : 지표유형 평균 CPU 사용률, 대상값 50
    • 설정을 완료하면 인스턴스 1개가 자동으로 생성된다. ELB와 상관없이 AutoScaling에 의해서 인스턴스는 만들어진다.

Clone this wiki locally