Skip to content
egoing edited this page Oct 27, 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 를 통해서 온라인 강의를 찾을 수 있습니다.

예제 파일

https://github.com/egoingsb/offline/tree/master/AWS

WEB 수업

WEB

예제파일

index.html

<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>
        </ul>
        Welcome Cloud
    </body>
</html>

s3.html

<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>            
        </ul>
        <h2>S3</h2>
        S3 is simple storage service.
    </body>
</html>

ec2.html

<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>            
        </ul>
        <h2>EC2</h2>
        EC2 is Elastic Compute 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 파일에 저장

SSH 연결

ssh -i key.pem ubuntu@ip

SCP 전송

scp -i key.pem * ubuntu@ip

VI

  1. ESC => 명령어 모드
    1. x => 한글자 cut
    2. dd => 한줄 cut
    3. u => undo
    4. :w => 저장
    5. :q => 종료
    6. :wq => 저장 & 종료
  2. i : 입력 모드

Middleware - PHP

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

  1. sudo apt update && sudo apt install php
  2. remote : sudo chmod -R 777 /var/www/html # 실습의 편의를 위해서 보안을 낮은 수준으로 설정했습니다. 현실에서는 이렇게 하면 안됩니다.
  3. https://github.com/egoingsb/offline/blob/master/AWS/simple.php 를 만든다.
  4. local : scp -i key.pem * ubuntu@ip:/var/www/html # 로컬의 수정 파일을 원격 저장소로 업로드 한다.
  5. tail -f /var/www/apache2/error.log : apache, php의 오류를 출력한다.

RDS - Database - MySQL

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

  2. sudo service apache2 restart : apache2 재시작

  3. index.php https://github.com/egoingsb/offline/blob/master/AWS/database.php

Scale up

  1. 더 높은 사양의 인스턴스로 교체한다. 이때 ip 주소가 변경되는 문제는 도메인 주소를 부여하는 것을 통해서 ip 주소의 변동성에 대응 할 수 있다.
  2. EC2 인스턴스를 이미지로 만든다. # 이미지가 생성될 때 접속이 잠시 끊길 수 있다.
  3. 보안 그룹이 RDS에 연결될 수 있도록 조치한다. 이전 인스턴스의 보안 그룹을 재사용하는 것이 바람직하다.

Elastic Load Balancer

  1. Scale up VS Scale out의 비교

단순한 분산 컴퓨팅

  1. EC2
    1. AMI 이미지를 이용해서 인스턴스 두개를 만든다. RDS에 접속이 가능한 보안그룹을 선택하거나 설정한다.
    2. 웹페이지의 내용을 구분할 수 있도록 각 서버의 ip address 가 출력되도록 한다. 예)
  2. Target group
    1. 타겟 그룹은 ELB에 장착될 인스턴스들을 지정한다.
    2. 타겟그룹을 생성한다.
    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. 라우팅 단계에서 대상 그룹을 기존 대상 그룹으로 지정하고, 이전 단계의 타겟그룹을 선택한다. 이 때 포트가 80인 것에 주목한다. 여기서 80은 origin 쪽의 인바운드 포트의 번호이다.
    8. ELB가 생성되었는지 상태를 확인한 후에 접속해본다. 이 때 81번 포트로 접속해야 한다. 예: http://hana-elb-578601292.ap-northeast-2.elb.amazonaws.com:81/
    9. 접속 할 때마다 인스턴스가 변경되는 것을 확인한다.

Blue/Green Deploy

  1. 타겟그룹
    1. 타겟그룹을 두개 만든다. 그룹 이름은 TG1, TG2
    2. 각 타겟그룹별로 인스턴스를 하나씩 배정한다.
  2. ELB
    1. ELB를 생성하거나 재활용한다.
    2. 리스터에 2개의 타겟 그룹을 붙인다. 리스너의 포트는 ELB의 포트와 동일하게 해야 한다. 이전 예제에서는 81번이다. 타겟그룹들의 가중치를 50%씩 부여한다.
    3. 가중치를 조절하면서 서비스되는 애플리케이션을 전환한다.

AutoScaling

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

php 코드

CPU 점유율을 기준으로 인스턴스가 조정되도록 설정하기 위해서 아래와 같은 코드를 위치시킨다. https://github.com/egoingsb/offline/blob/master/AWS/loadtest.php

jMeter

  1. jMeter 다운로드 후 실행 : https://github.com/egoingsb/offline/blob/master/AWS/jmeter-5.3.zip
  2. Thread Group > Http Request > Summary Report 추가
  3. Thread Group : Number of thread 1, Loop Count 100

AutoScaling 절차

  1. Target group 생성 : AutoScaling으로 만들어진 인스턴스가 자동으로 등록된다.
  2. ELB 생성 후 전단계의 타겟그룹을 리스터로 연결
  3. Launch Configuration
    1. 시작구성 생성
    2. 이름, AMI, 인스턴스유형 지정
    3. 보안그룹은 생성되는 인스턴스의 인바운드 트래픽을 제어하는 것이기 때문에 80번 포트를 지정한다.
  4. EC2 AutoScaling
    1. AutoScaling 생성
    2. 시작구성으로 전환, 앞에서 생성한 시작구성 지정
    3. 모든 서브넷 선택
    4. ELB설정에서 타겟그룹지정
    5. Configure advanced optionsInfo
      1. Health check type - ELB도 체크 : EC2는 인스턴스의 건강 상태를 인스턴스 자체적으로 체크하는 것이고, ELB는 ELB에서 request를 해서 정상적으로 리턴하지 않으면 건강하지 않은 것으로 간주하는 설정
    6. 원하는 용량 1, 최소 용량 1, 최대 용량 2로 지정
    7. 대상 조정 정책 : 평균 CPU 사용률 30%
    8. 설정을 완료하면 인스턴스 1개가 자동으로 생성된다. ELB와 상관없이 AutoScaling에 의해서 인스턴스는 만들어진다.
  5. ELB 에 /loadtest.php로 접속해서 로드 테스트를 진행한다.

Clone this wiki locally