반응형
SMALL

8장 가용성 높고 빠르게 확장 가능한 인프라 구성하기

 

1. 가용성(Availability)


가용성(Availability)

  • 가용성이란, 해당 시스템이나 서비스가 가동 및 실행되는 시간의 비율을 말한다.
  • 가용성높다는 것서비스의 가동률이 높다는 것을 의미하며, 이러한 가용성은 보통 **'9'**로 측정한다.
  • 예를 들어, 가용성 수준이 '세 개의 9(Three Ninew)' 인 서비스는 가동되어 실행되는 **99.9%**의 시간만큼 지원할 수 있다는 것을 말하며, 24 * 7 * 365 (하루 24시간/일주일 7일/일년 365일)을 기준으로 했을 때, 1년 동안 서비스 중지가 8.76 시간이라는 것을 의미한다.

다음은 인프라의 가용성 비용에 따른 서비스 가동 중지 시간을 정리한 내용이다.

  • 매우 중요한 업무 시스템이나 평상시 서비스 중지 및 다운타임을 가져갈 수 없는 시스템을 설계해야 하는 경우 인프라의 가용성극대화 할 수 있는 아키텍처로 인프라를 구성한다.
  • 이러한 시스템을 '고가용성 시스템'이라 말한다.
  • Amazon Web Services의 주요 서비스를 이용하면 손쉽게 '고가용성 시스템'을 설계하고 구현할 수 있다.

 

2. 확장성(Scalability)


확장성(Scalability)

  • 확장성이란, 서비스나 응용프로그램증가하는 성능 요구에 맞게 향상될 수 있는 정도
  • 예시) 동시 접속자가 100명인 시스템이 있다고 가정할 때 특정 시즌이나 이벤트로 인해 동시 접속자가 10배에서 100배 이상 많이 접속하는 경우 확장성이 높은 시스템은 사용자 증가에 따라 시스템의 자원이나 리소스를 손쉽게 추가/삭제할 수 있다.
  • 이러한 확장성물리적 하드웨어 환경에서 스케일 업(Scale up)과 스케일 아웃(Scale Out)이라는 두 가지의 확장성 전략을 이용하여 구현할 수 있다.

  1. 스케일 업(Scale up)은 단일 하드웨어에 대해 시스템 리소스(프로세서, 메모리, 디스크, 네트워크 어댑터 등)를 추가하거나 기존 하드웨어를 더욱 강력한 것으로 교체하는 작업이 포함되며,
  2. 스케일 아웃(Scale out)은 서버를 여러 대 추가하여 처리 능력을 향상시키는 방법이다.
  • AWS의 Auto Scaling클라우드의 이점을 살려 인프라의 증설/축소를 손쉽게 구현할 수 있어서 확장성 및 탄력성 높은 시스템을 구축할 수 있다.

 

3. Amazon Auto Scaling


  • Amazon Auto Scaling
    • Amazon Auto ScalingAmazon Web Services에서 제공하는 서비스 중 가장 클라우드답다
    • 예를 들어, 전세계 게이머를 대상으로 신규 모바일 게임을 오픈하는 경우 이벤트와 홍보를 통해 많은 사용자가 동시에 접속하게 된다.
    • 클라우드가 아니라 일반 H/W로 시스템을 구성한다면 사용자의 접속 예상 최대치를 산정하여 H/W를 구매해야 한다.
    • 비용적인 측면에서 보면 많은 초기 투자가 필요하며, 사용자가 줄어 들어 더 이상 많은 시스템이 필요하지 않더라도 구매했던 H/W를 다시 처분할 수 없다.
    • 동일한 상황에서 Amazon Web Services의 Auto Scaling을 사용한다면 초기 H/W 구매나 투자는 필요하지 않다.
    • 서비스 오픈 초기 서버사용자가 급증하면Auto Scaling을 사용하여 인스턴스늘린다.
    • 이용자가 줄어 평상시 상황이 유지되면 인스턴스자동으로 줄여 비용을 줄임

  • 이렇듯 Amazon Web Services Auto Scaling은 서버나 애플리케이션을 모니터링하고 리소스를 자동으로 조정(Scale In/Scale Out)함
  • 최대한 저렴한 비용으로 안정적이고 예측 가능한 성능을 유지할 수 있다.
구분 내용
서비스명 Amazon Auto Scaling
설명 성능과 비용을 최적화 하도록 애플리케이션 규모 조정
주요 특징 - Auto Scaling을 사용하면 애플리케이션 가용성을 간편하게 관리
- 사용자가 정의한 조건에 따라 EC2용량이 자동으로 확장/축소
-실행 중인 EC2 인스턴스의 수원하는 수준으로 유지 가능
- 수요가 급증할 경우 인스턴스의 수를 원하는 수준으로 유지 가능(Scale in)
- 수요가 적을 경우 자동으로 용량을 감소시켜 비용 낭비를 최소화(Scale Out)
- 수요 변화가 많지 않은 애플리케이션과 사용량이 시, 일, 주 단위로 변하는 애플리케이션 모두에 알맞은 상품
프리티어
(Free Tier)
Auto Scaling의 사용은 무료지만, AWS 리소스에 대한 비용과 Clouldwatch 비용은 발생됨

 

4. Amazon Auto Scaling의 구성 요소


4-1. Amazon Auto Scaling 그룹

  • Amazon Auto Scaling 그룹은 인스턴스조정 및 관리 목적으로 구성논리적 그룹으로 Auto Scaling을 수행하는 ‘인스턴스의 모음’이다.
  • 예를 들어, B2B용 웹 사이트여러 인스턴스에서 서비스한다면 애플리케이션의 성능을 향상시키기 위해  Auto Scaling 그룹사용하여 지정된 조건에 따라 자동으로 인스턴스 수를 늘리거나, 비정상적으로 동작하는 경우 고정된 수의 인스턴스유지하거나, 비용 절감을 위해  인스턴스의 수를 자동으로 조정할 수 있다.-
  • 이러한 Auto Scaling 그룹은 인스턴스수를 조건에 따라 자동 조정 및 관리하는 Amazon Auto Scaling의 핵심 기능이다.

 

4-2. 시작 구성

  • 시작 구성은 Auto Scaling 그룹에서 인스턴스를 시작하는 데 사용하는 템플릿이다.
  • 시작 구성생성하는 경우Amazon Machine Image(AMI)인스턴스 유형, 키 페어, 하나 이상의 보안 그룹EBS 등 인스턴스에 대한 정보를 지정한다.
  • 시작 구성여러 개의 Auto Scaling 그룹지정될 수 있으나,
  • Auto Scaling 그룹하나의 시작 구성만을 지정할 수 있다.
  • 또한 시작 구성한 번 생성한 이후에는 수정/변경할 수 없다.
  • 따라서 시작 구성변경하여 Auto Scaling 그룹적용하고자 한다면, 시작 구성새롭게 생성하여 Auto Scaling 그룹업데이트 해야 한다.

 

4-3. Amazon Auto Scaling 그룹 조정

  • Auto Scaling 그룹 조정은 인스턴스의 수를 늘리거나 줄이는 기능이다.
  • 조정 작업이벤트와 함께 시작되거나, Auto Scaling 그룹의 인스턴스시작하거나 종료하도록 수행하는 조정 작업과 함께 수행된다.

 

인스턴스의 조정 옵션은 다음과 같다.

1. 현재 인스턴스 수준 유지 관리 :

  • 최소 또는 항상 지정된 수의 인스턴스실행 유지 관리하도록 구성할 수 있다.

2. 수동 조정 :

  • Auto Scaling 그룹에서 최소, 최대 또는 원하는 용량의 변경 사항조정 변경할 수 있다.

3. 일정을 기반으로 조정 :

  • 예측 가능한 일정에 따라 수요가 증가하거나 감소하는 경우 일정에 따른 확장 및 축소 작업을 시간 및 날짜 함수를 통해 자동으로 수행되도록 구성할 수 있다.

4. 온디맨드 기분 조정 :

  • 리소스를 조정하는 가장 효과적인 방법으로 인스턴스CPU 사용률이 15분 동안 90% 유지될 때마다 인스턴스를 확장하도록 구성하는 정책을 생성할 수 있다.
  • 변화하는 조건에 따라 효과적으로 자원의 조정을 가능하게 한다.
  • CPU, 메모리 사용량, 네트워크의 대역폭일정 수준 이상인 경우 새로운 인스턴스시작
  • 네트워크 대역폭다시 내려가면 인스턴스를 종료하는 정책을 수립하여 적용
  • 이러한 모니터링 기반의 조정2개의(확장/축소) 정책을 통해 작업을 수행

 

5. 실습 : ELB(Elastic Load Balancing) 설정하기


 

  • Auto Scaling 서비스에 대한 동작 원리와 구성 방법을 확인하기 위한 실습이다.
  • 본 실습을 진행하기 위해 Auto Scaling에 사용될 **ELB(Elastic Load Balancing)**를 사전에 구성한다.
  • Auto Scaling은 별도로 비용이 부과되지 않는다. 다만 Auto Scaling에 사용되는 EC2와 ELB는 프리티어(Free Tier) 범위 내에서 실습 할 수 있다.

1. AWS에 [서비스] → [EC2] → [로드 밸러서]로 이동 후 [로드 밸런서] 페이지에서 [로드 밸런서 생성] 버튼을 클릭한다.

2. [로드 밸런스 유형 선택] 페이지에서 "Classic Load Balancer"를 선택 후 [생성] 버튼을 클릭한다.

 

3. [로드 밸런스 정의] 페이지에서 다음과 같이 구성한다.

  • Load Balancer 이름: WOONG-AutoScaling-ELB
  • LB 생성할 VPC : woong-test-vpc

4. Load Balance 처리할 퍼블릭 서브넷을 선택 후 [다음: 보안 그룹 할당] 버튼을 클릭한다.

5. [보안 그룹 할당] 페이지에서 "Tutorial Security Group"을 선택 후 [다음: 보안 설정 구성] 버튼을 누른다.

6. [보안 설정 구성] 페이지에서 [다음: 상태 검사 구성] 버튼을 클릭한다.

7. [상태 검사 구성] 페이지에서 [다음: EC2 인스턴스 추가] 버튼을 클릭한다.

8. [EC2 인스턴스 추가] 페이지에서 인스턴스를 추가하지 않고 Pass 후 [다음: 태그 추가] 버튼을 클릭한다.

9. [태그 추가] 페이지에서 [검토 및 생성] 버튼을 클릭한다.

10. [검토] 페이지에서 [생성] 버튼을 클릭한다.

6. 실습 : Auto Scaling 구성하기


  • Auto Scaling 구성을 위해 그룹을 생성하는 방법과 사용하게 될 인스턴스를 구성하는 방법, 구성 시 필요한 ELB자원 조정 정책 생성방법에 대해 실습 할 것이다.

 

1. [Auto Scaling 그룹]을 누른 후, [Auto Scaling 그룹 생성] 버튼을 클릭한다.

2. [Auto Scaling 그룹 생성] 페이지에서 그룹 이름을 입력하고, [시작 템플릿]으로 전환하고 시작 구성 생성을 클릭한다.

WOONG-AUTOSCALLINGGROUP

3. [시작 템플릿 생성] 페이지에서 [이름] 항목에 "AutoScalingEC2"를 입력한다.

4. AMI 는 전에 내가 만든 이미지를 넣는다.

5. 인스턴스 유형은 "t2.micro" 로 잡는다.

6. 고급 세부 정보에서 [사용자 데이터]를 아래 텍스트로 입력한다.

#!/bin/sh

yum -y install httpd php mysql php-mysql chkconfig httpd on

sudo systemctl start httpd

cd /tmp wget https://nulls.co.kr/media/post-body/2022/03/24/autoscaling-source.zip unzip autoscaling-source.zip

sudo

mv *.php /var/www/html

7. 스토리지(볼륨)은 기본으로 선택한다.

8. 보안 그룹은 "기존 보안 그룹"을 선택한다

9. 키 페어(로그인)는 기존 것으로 설정한다. 그 후, [시작 구성 생성] 버튼을 클릭한다.

10. 다시 [Auto Scaling 그룹]으로 돌아와 생성한 시작 구성을 선택하여 [다음] 버튼을 클릭한다.

11. 네트워크에서 "tutorial-vpc" 를 선택하고, 서브넷은 ...-2a 로 선택 후, [다음] 버튼을 클릭한다.

12. [Classic Load Balancer] 를 선택 후, 전에 생성한 로드 밸런서를 선택한다. 그 후, [다음] 버튼을 클릭한다.

13. 그룹 크기에서 최대 용량을 3으로 늘리고, 조정 정책 이름으로 "Scale Group Size" 로 적는다.

14. 알림을 추가한다.

15. 태그에서 [다음] 버튼을 클릭한다.

16. 검토 페이지에서 [Auto Scaling 그룹 생성] 을 클릭한다.

17. 이제 [로드 밸런서] 페이지에서 ELB를 선택하고 [상태 검사 편집] 버튼을 클릭한다.

18. Ping 경로를 변경 후 [저장] 버튼을 클릭한다.

19. [로드벨런서] 페이지에서 DNS 정보를 확인 후 복사한다.

20. ELB의 도메인으로 접속하여 페이지가 정상 로드됨을 확인한다.

woong-autoscaling-elb-414101395.ap-northeast-2.elb.amazonaws.com

조금 많이 기다려본다... 그러면 상태에 서비스 중이 인스턴스가 뜬다...

21. 생성 후, 300 초 뒤에 [Generate Load] 를 클릭해라 

생성된 index.php 코드에 문제가 있다

위 6번 내용에서 적었던 bash 코드

#!/bin/sh
yum -y install httpd php mysql php-mysql
chkconfig httpd on
sudo systemctl start httpd
cd /tmp
wget <https://s3.ap-northeast-2.amazonaws.com/cftest20180909/autoscaling-source.zip>
unzip autoscaling-source.zip
sudo mv *.php /var/www/html

위에 https://s3.ap-northeast-2.amazonaws.com/cftest20180909/autoscaling-source.zip 이곳 안에 있는 index.php 코드가 잘못되었다.

[index.php 문제점]

<dev> → <div> / 마지막 refresh 쪽 코드에 $cof 삭제 후 refresh 닫아주기

<div>
<center>
<?php
echo "<h3>CPU Load: ";
include 'getcpuload.php';
echo "</h3></br></br>";

        # Get the instance CPU Load Generation form
include 'putcpuload.php';

        # Check to see if genload session variable has been set, if so, refresh$
        session_start();
if (isset($_SESSION['genload']))echo "<meta http-equiv=\\\\"refresh\\\\">"
?>
</center>
</div>

(이거 나중에 오류 없는 코드 업로드 해야함... Auto Scaling 은 되는데 이거 코드 문제로 해당 하는 곳이 생성한 후 작동 제대로 안됨)

만약 문제를 해결하고 싶다면, 일단 코드를 받고, 알집을 다시 하여 해당 zip 주소로 6번 과정을 다시한다.

22. 인스턴스 개수가 증가 되는 게 보인다.

반응형
LIST
반응형
SMALL

7장 네트워크 트래픽을 분산시켜 주는 로드 밸런싱

 

1. 로드 밸런싱(Load Balancing)


로드 밸런싱(Load Balancing)

  • 로드 밸런싱이란, 네트워크 기술의 일종으로 네트워크 트래픽하나 이상의 서버장비분산하기 위해 사용되는 기술
  • 로드 밸런싱수행하는 소프트웨어나 하드웨어를 로드 밸런서(Load Balancer)
  • 로드 밸런싱 서비스를 통해 외부에서 발생되는 많은 인터넷 트래픽을 여러 웹 서버나 장비로 부하를 분산하여 처리

일반적인 웹 트래픽 증가대한 처리 방식은 크게 두 가지이다.

첫 번째, Scale-Up을 통해 CPU, 메모리, 디스크 등의 기능을 업그레이드 하는 방식

  • 기존보다 높은 성능을 보유한 웹 서버로 시스템을 업그레이드함으로써 문제를 해결하는 방식으로 필요로 하는 성능이 높아질수록 비용이 기하급수적으로 늘어나는 단점
  • 하나의 서버에서 웹 서비스를 제공하여 서버 중지 및 장애인해 웹 서비스 가용성에 문제

두 번째, Scale-Out을 통해 저렴한 노드 여러 개를 하나의 Cluster로 구성하는 방식

  • Cluster로 구성하는 경우 Cluster 내 하나의 노드에 문제가 발생하여도
  • 웹 서비스가 중단되지 않으므로 가용성이 높은 웹 서비스를 구성할 수 있다.
  • 로드 밸런싱은 Scale-Out 방식웹 서비스 구성에 주로 사용되며,
  • 네트워크 트래픽을 서비스의 Port 단위로 제어하고, 트래픽을 분산 처리함으로써 높은 가용성부하 분산통한 고효율 웹 서비스를 제공

 

2. 로드 밸런싱의 방식


Round Robin(RR: 라운드 로빈 방식)

  • Real 서버로의 Session 연결순차적으로 맺어주는 방식이다.
  • 연결되어 있는 Session 수상관 없이 순차적으로 연결시키는 방식으로
  • Session 에 대한 보장을 제공하지 않는다.

Hash

  • Hash 알고리즘을 이용한 로드 밸런싱 방식이다.
  • Client와 Server 간에 연결된 Session계속 유지주는 방식
  • Client특정 Server 로 연결된 이후 동일 서버로만 연결는 구조
  • Session에 대한 보장을 제공한다.

Least Connection(최소 연결 방식)

  • Session수를 고려하여 가장 작은 Session보유한 서버로 Session맺어주는 연결 방식이다.
  • Session 에 대한 보장을 제공하지 않는다.

Response Time

  • 서버 간의 Resource와 Connection차이가 있는 환경에서 사용되는 방식
  • 응답시간을 고려하여 빠른 응답시간제공하는 서버로 Session맺어주는 방식
  • Session 에 대한 보장을 제공하지 않는다.

 

3. Amazon Elastic Load Balancing


Amazon Elastic Load Balancing(ELB)

  • Amazon Elastic Load Balancing단일 가용 영역 또는 여러 가용 영역에서
  • Amazon EC2 인스턴스 및 컨테이너IP 주소 같은 동일한 서비스를 제공하기 위해
  • 준비된 여러 대상으로 애플리케이션 및 네트워크 트래픽을 자동으로 분산시킨다.
  • Elastic Load Balancing서비스의 목적에 따라 세 가지의 로드 밸런서 중 하나의 서비스를 선택하여 사용
  • 이를 통해 애플리케이션내결함성 보장을 위해 필요한 고가용성, 부하분산, 자동 확대/축소, 강력한 보안 기능을 제공한다.
    구분  내용
    서비스명 Amazon Elastic Load Balancing
    설명 확장성, 성능, 보안성을 통한 애플리케이션 내결함성을 제공하는 로드 밸런서
    주요 특징 - 수신되는 트래픽을 여러 EC2 인스턴스에 자동 배포
    - 애플리케이션의 내결함성을 확보하며, 네트워크 트래픽을 원할하게 대상으로 자동 분산 처리 기능 제공
    - 고가용성, 자동 조정 및 강력한 보안 서비스 제공
    - Application Load Balancer, Network Load Blalancer, Classic Load Balancer 중 세가지 유형의 로드 밸런서를 지원하며, 애플리케이션의 필요에 따라 로드 밸런스
    프리티어
    (Free Tier)
    - 클래식 및 애플리케이션 로드 밸런서 간에 공유되는 탄력적 로드 밸런서 750시간을 프리티어(Free Tier)제공
    - 클래식 로드 밸런서의 데이터 처리 15GB, 애플리케이션 로드 밸런서 15GB를 프리티어(Free Tier)제공

 

4. ELB의 종류 및 유형


ELB의 종류 및 유형

  • Amazon Elastic Load Balancing애플리케이션의 요구사항에 따라

1. Application Load Balancer

2. Network Load Balancer

3. Classic Load Balancer

  • 하나의 유형을 선택하여 로드 밸런싱 서비스를 사용할 수 있다.
    구분 내용 적합 서비스
    Application
    Load Balancer
    - OSI 모델 7계층(Application)에서 작용하며, HTTP, HTTPS와 같은 고급 로드 밸런싱 서비스에 적합 - 마이크로 서비스 및 컨테이너 기반 애플리케이션, 최신 애플리케이션 서비스에 최적화된 로드 밸런싱 제공, SSL/TSL 암호화 및 프로토콜 사용하여 보안성 보장 HTTP/HTTPS 서비스
    Network
    Load Balancer
    - OSI 모델 4계층(Transport Layer)에서 작동하며, TCP 트래픽의 로드 밸런싱 서비스에 적합 - 짧은 지연시간과 초당 수백만 개의 요청처리가능 가용 영역 당 1개의 정적 주소를 사용하면서 트래픽의 변동이 심한 서비스에 최적화 TCP 트래픽 로드 밸런싱짧은 지연시간
    Classic
    Load Balancer
    - OSI 모델 4계층(Transport Layer), 3계층(Network Layer)에서 작동 - EC2-Classic 네트워크 내에 구축된 애플리케이션을 대상으로 제공 EC2-Classic 네트워크 구축된 애플리케이션
  • ELB를 생성하는 것이 로드 밸런싱 서비스를 인터넷에 연결할 것인지 아닌지에 따라 Internet-facing 여부를 선택하게 된다.
  • 이 항목 선택 여부에 따라 ELB가 Internal ELBExternal ELB로 구분된다.항목 External ELB Internal ELB
    항목 External ELB Internal ELB
    인터넷 연결 연결 가능 연결 불가
    사용 가능 IP Public IP, Private IP Private IP
    접속 가능 영역 인터넷, VPC 내부 VPC 내부

 

5. ELB의 주요 특징


5-1. 상태 확인 서비스(Health Check)

  • Elastic Load Balancing(ELB)와 연결된 인스턴스의 연결 상태를 수시로 체크
  • 인스턴스의 OS애플리케이션문제로 인해 연결 장애서비스 가능 여부에 대한 Health Check지속적으로 수행한다.
  • 이러한 Health Check실패하는 경우 해당 인스턴스트래픽을 전달하지 않는다.
  • 이를 위해 HTTP와 HTTPS 상태 확인 빈도, 실패 임계치, 성공 시 응답 코드를 임의 설정 가능하며, 자세한 상태 확인과 실패 원인API를 통해 확인은 물론 AWS 콘솔에도 표시된다.
  • TCP 방식으로 Health Check를 수행하는 경우 서비스 Port의 오픈 여부 및 연결 가능 여부를 확인
  • HTTP나 HTTPS 방식은 특정 웹 페이지의 접속 시도에 따른 **응답 코드(200)**가 정상 반환 여부를 확인해서 Health Check 성공/실패 여부를 판단한다.

 

5-2. Sticky Session

  • Elastic Load Balancing을 통해 트래픽을 부하 분산하는 경우 기본적으로는 Round Robin 방식으로 트래픽을 분산한다.
  • 이 경우 한 번 연결된 Session은 다음 연결 시 그대로 연결되지 않으며,
  • 다음 번 연결 시 다른 인스턴스로 연결될 수 있어애플리케이션의 Session을 유지할 수 없게 된다.
  • 특히 세션 유지가 필요한 백오피스 웹 사이트(그룹웨어 등)의 경우 연결이 끊어지거나 웹 사이트의 로그인 및 인증 정보를 유지할 수 없게 된다.
  • Stick Session사용하면 처음 연결된 Client에 별도의 HTTP 기반의 쿠키 값을 생성하여 다음 번 연결 요청에 대해 처음 접속했던 서버로 계속 연결하도록 트래픽을 처리하게 된다.

5-3. 고가용성 구성

  • Elastic Load Balancing단일 가용 영역 또는 여러 가용 영역에 있는 **여러 대상(Amazon EC2 인스턴스, 컨테이너 및 IP 주소)**에 걸쳐 트래픽을 자동으로 분산
  • 특히 고가용성 구성을 위해 Route53와 같은 Amazon Web Services다른 서비스와의 연계를 통해 가용성 서비스를 제공할 수 있다.

5-4. SSL Termination 및 보안 기능

SSL Termination 사용 전

  • 웹 사이트에 SSL 인증서를 적용하여 HTTPS같은 방식으로 암호화 통신을 하기 위해서는 개별 웹 서버에 별도공인인증서를 구매 후 적용하여야 한다.
  • 이 경우 개별 인증서각 인스턴스에 직접 적용물론 인증서 만료에 따른 갱신 등 관리가 필요하다.
  • 또한 개별 EC2 인스턴스에서 SSL 암호화 및 복호화직접 처리하므로 인스턴스에호화 및 복호화 처리를 위한 추가 부하가 발생되게 된다.

SSL Termination 사용 시

  • ELB의 SSL Termination 기능을 사용하게 되면 개별 인스턴스에 SSL 인증서직접 설치할 필요가 없다.
  • ELB에 공인인증서 또는 ACM(Amazon Certificate Manger)에서 무료로 발급받을 수 있는 사설 인증서등록함으로써
  • SSL 인증서를 이용한 HTTPS 활용 트래픽 암호화 및 복호화 서비스를 제공할 수 있다.
  • ACM(Amazon Certificate Manager)을 사용하는 경우 추가적인 인증서 발급 비용은 무료이며 별도의 인증서 관리도 필요 없다.
  • 그리고 인스턴스의 암호화 및 복호화에 따른 부하를 줄일 수 있다.

SSL은 무엇이고 왜 중요한가요?

  • SSL 인증서란 클라이언트와 서버간의 통신을 제 3자가 보증을 해주는 문서이다.
  • 브라우저(사용자의 컴퓨터)와 서버(웹사이트) 사이의 암호화된 연결을 수립하는 데 사용됩니다.

TLS: 전송 계층 보안(Transport Layer Security)

  • TLS은 SSL의 향상된, 더욱 안전한 버전입니다.
  • SSL이 더욱 일반적인 용어이기 때문에 DigiCert는 보안 인증서를 여전히 SSL로 언급

HTTPS: 하이퍼 텍스트 전송 프로토콜 보안(Hyper Text Transfer Protocol Secure)

  • HTTPS는 SSL 프로토콜을 기반으로 돌아가는 프로토콜 중 하나다.
  • 웹사이트가 SSL/TLS 인증서로 보호되는 경우 HTTPS가 URL에 표시됩니다. 사용자는 브라우저 표시줄의 자물쇠 기호를 클릭해 발급 기관 및 웹사이트 소유자의 상호를 포함한 인증서의 세부 정보를 볼 수 있습니다

6. 실습 : 웹 서버 구성 및 웹 페이지 연결 테스트하기


  • Amazon Elastic Load Balancing의 사용 방법을 배우기 위해 2대의 웹 서버를 생성하고 로드 밸런스 테스트를 위한 웹 페이지를 작성한다.
  • 이후 ELB를 구성하고, 인스턴스를 추가하여, 특정 서버의 서비스 실패 시 Elastic Load Balancer의 동작 여부와 서비스 복구 후 동작 방식에 대해 실습을 진행한다.

 

1. AWS에서 [서비스] → [컴퓨팅] → [EC2]로 이동

2. [인스턴스] 메뉴에서 [인스턴스 시작] 버튼을 누르고 [AMI 선택] 페이지에서 "Amazon Linux 2 AMI" 선택

3. [인스턴스 유형 선택] 페이지에서 "t2.micro"를 선택 후 [다음: 인스턴스 세부 정보 구성] 버튼을 클릭

4. [인스턴스 세부 정보 구성] 페이지에서 [인스턴스 개수]를 "2"로 지정하고 [네트워트] 항목에서 "Tutorial-vpc"를 선택하고, [서브넷] 항목에서 "Tutorial Public"을 선택하고, [퍼블릭 IP 자동 할당]을 "활성화"로 선택 후, [다음: 스토리지] 버튼을 클릭

5. [스토리지 추가] 페이지에서 [다음: 태그 추가] 버튼을 클릭한다.

6. [태그 추가] 페이지에서 [다음: 보안 그룹 설정] 버튼 클릭

7. [보안 그룹 구성] 페이지에서 "기존 보안 그룹 선택"을 클릭 후 "woong-test-securitygroup" 을 선택하고 [검토 및 시작] 버튼을 클릭

8. [인스턴스 시작 검토] 페이지에서 [시작] 버튼을 클릭 후 "기존 키 페어 선택"을 선택하고 [인스턴스 시작] 버튼을 클릭

 

9. 5~10분 후 [인스턴스] 메뉴를 클릭하여 신규로 생성된 인스턴스 2개를 확인

10. SSH Client(PuTTY)를 이용하여 서버 접속 후 다음과 같은 명령을 실행하여 웹 서버를 설치하고 웹페이지를 생성

sudo yum install httpd

sudo systemctl start httpd

11. 인스턴스의 퍼블릭 DNS를 확인 후 웹 브라우저로 웹 서비스 접속 가능 여부를 확인한다.

꼭 HTTP 상태 확인하자

12. SSH Console로 이동 후 다음과 같이 chkconfig 명령을 사용하여 서버 부팅 시 웹 서버가 자동으로 시작될 수 있도록 설정한다.

sudo chkconfig httpd on

13. 로그인 중인 ec2-user로 웹 서버의 기본 루트 페이지의 파일을 수정 변경 가능하도록 설정하기 위해 /var/www 디렉터리의 소유권 및 권한을 변경한다.

  • 다음의 명령을 사용해서 www라는 그룹을 추가하고 /var/www에 대한 소유권과 권한을 부여한다.

sudo groupadd www

sudo usermod -a -G www ec2-user

exit

14. EC2를 SSH console로 다시 접속한다. SSH Client 를 이용하여 서버에 다시 접속 후, 다음과 같이 서버의 접속 권한을 수정한다.

cd /var/www

sudo chown -R root:www /var/www

sudo chmod 2775 /var/www/html

 

15. Nano Editor를 활용하여 index.html 을 신규로 생성 후 1번 서버는 "Test Website - EC2 Instance 1"을 입력 저장하고, 2번 서버는 "Test Website -EC2 Instance 2"로 입력 후 저장한다.

cd html

nano index.html

 

7. 실습 : ELB 구성하기


  • Amazon Elastic Load Balancing을 구성하고 인스턴스를 연결하여 로드 밸런싱 서비스가 어떻게 동작하는 지를 실습하고 확인한다.
  • 본 실습에 사용되는 애플리케이션 로드 밸런서는 월 750시간과 15GB 트래픽에 대해 프리티어(Free Tier)를 제공한다

 

1. AWS [서비스] → [컴퓨팅] → [EC2] 에서 [로드 밸런서] 를 클릭 후 [로드 밸런서 생성] 버튼을 누른다.

2. [로드 밸런서 유형 선택] 페이지에서 "Application Load Balancer"의 [생성] 버튼을 클릭한다.

3. [Basic configuration] 페이지 [name] 항목에 "WOONG-ELB"를 입력하고 [체계]는 "Internet-facing"을 선택 후 하단 [VPC]에서 "woong-test-vpc"를 선택하고 가용 영역을 2개 선택한다.

4. [보안 그룹]은 "woong-test-securitygroup"을 선택한다.

5. Listeners and routing 에 Create target group 을 누른다.

6. "Toturial-ELBGroup"을 Target group name 에 입력하고, Advanced health check settings 에서 Timeout 은 "2" Interval 은 "10" 으로 설정하고 [Next] 버튼을 누른다.

7. 등록된 2개의 인스턴스를 선택하고, "Include as pending below" 버튼을 클릭 후, [Create target group] 을 클릭한다.

8. 생성한 target group 을 선택 후, [create load balancer] 버튼을 클릭한다.

9. 2~5분 후, [로드 밸런서] → [대상 그룹]으로 이동 후 신규로 생성된 대상 그룹을 선택 후 [대상] 탭에서 인스턴스의 상태를 확인한다.

10. [로드 밸런서]로 이동 후 등록된 로드 밸런서를 선택하여 신규로 생성된 ELB의 DNS 이름을 확인 후 복사한다.

11. 복사한 ELB의 DNS 이름을 웹 브라우저에서 접속하여 웹 페이지가 정상적으로 접속되는지 확인한다.

 

8. 실습 : 서비스 실패 시 ELB 테스트하기


  • 서비스 중인 서버 한 대가 중지되었을 때 로드 밸런싱 서비스가 어떻게 동작하는지 확인하자.

1. [인스턴스] → [인스턴스]로 이동 후 1번 서버를 선택하여 [인스턴스 상태] → [중지]를 클릭한다.

2. [로드 밸런서] → [대상 그룹]의 [대상] → [등록된 대상] 에서 1번 서버의 상태가 "unused"로 변경됨을 확인한다.

3. ELB의 DNS 이름을 웹 브라우저에 입력하여 웹 사이트 접속 후 여러번 차례 새로고침

4. [인스턴스] → [인스턴스]로 이동 후 1번 서버를 선택하고 [인스턴스 상태] → [시작] 버튼을 클릭하여 1번 서버를 시작한다.을 수행하여 2번 서버만 연결됨을 확인한다.

5. [로드 밸런서] → [대상 그룹]의 [대상] → [등록된 대상] 에서 1번 서버의 상태가 "healthy"로 변경됨을 확인한다.

6. 다시 DNS 접속하여 EC2 Instance 1 이 나오는지 확인한다.

 

 

9. 실습 : ELB 세션 연결 고정(Sticky Session 활성화)하기


  • ELB의 도메인 DNS로 웹 페이지 접속 시 새로고침을 하면 접속되는 서버가 계속 변경됨을 확인할 수 있다.
  • 이는 기본적인 ELB 연결 방식 Round Robin 방식이므로 위와 같이 동작한다.
  • 웹 사이트의 로그인을 유지하기 위한 Sticky Session 활성화 방법을 알아보자.

1. ELB의 DNS 이름을 웹 브라우저에 입력 후 웹 사이트 접속을 한다.

2. [로드 밸런서] → [대상 그룹]에서 "Toturial-ELBGroup"을 선택 후 하단의 [속성 편집] 버튼을 클릭한다.

3. [속성 편집] 항목에서 [고정]의 "활성화"를 체크 [고정 지속 시간]은 "10분"으로 지정 후 [저장] 버튼을 클릭한다.

4. ELB의 DNS 이름으로 사이트 접속하여 새로고침을 수행하면서 웹 사이트가 고정 되는지 확인한다.

반응형
LIST
반응형
SMALL

5장 확장 가능한 데이터베이스 서버 만들기

 

1. 데이터베이스(Database)


데이터베이스(Database)

  • 여러 사람에 의해 공유되어 사용 될 목적으로 통합하여 관리되는 데이터의 집합
  • Database → ‘DB’라 한다.
  • 특정 다수의 사용자들에게 필요한 정보를 제공하는 작업을 하거나
  • 조직내 필요한 정보를 체계적으로 저장 및 보관하여 사용자들에게 제공하는 필요한 핵심 서비스

 

2. RDBMS(Relational Database Management System)


RDBMS(Relational Database Management System)

  • 관계형 데이터베이스란, 가장 많이 사용되고있는 데이터베이스의 종류이다
  • 데이터 간 사전에 정의된 관계가 있고, 연관 관계가 있는 항목들의 모음
  • 열과 행으로 이루어진 테이블(Table)로 이루어져 있다.
  • 데이터의 각 행은 기본키(Primary Key)라 부르는 고유의 식별자로 구분
  • 여러 테이블에 있는 행들은 외래키(Foreign Key)를 사용하여 상호 연결
  • 사용자와 관계형 데이터베이스연결시켜주는 표준 검색어SQL이라 한다.
  • SQL 문장관계형데이터베이스에 있는 데이터를 직접 조회, 보고서 추출에 사용

 

대표적인 관계형 데이터베이스 관리시스템(RDBMS)

 

  • Oracle - MySQL, Microsoft SQL Sever, PostgreSQL, Maira DB 등
  • AWS에서는 RDS(Relational Database Services)라는 서비스를 통해 RDBMS 제공
  • Oracle, MySQL, MSSQL, Amazon Aurora(오로라)와 같은 다양한 RDBMS 서비스 형태 제공

 

 

3. RDS(Relational Database Services)


RDS(Relational Database Services)

  • 클라우드에서 관계형 데이터베이스더욱 간편하게 설정, 운영 및 확장할 수 있는 서비스
  • 하드웨어 프로비저닝, 데이터베이스 설정, 패치 및 백업과 같은 시간 소모적인 관리 작업 자동화하여 비용 효율적이고 크기 조정가능한 데이터베이스 서비스 제공

Amazon RDS

  • 여러 데이터베이스 인스턴스 유형(메모리, 성능 또는 I/O 최적화)으로 제공
  • Amazon Aurora, PostgreSQL, MySQL, MariaDB, Oracle, Microsoft SQL Server를 비롯하여 6개의 익숙한 데이터베이스 엔진 중에서 원하는 DBMS 선택 가능
  • AWS Database Migration Services를 사용하여 기존 Amazon RDS로 손쉽게 마이그레션 가능

 

구분  내용
서비스명 Amazon RDS(Relational Database Services)
설명 주로 사용되는 6개의 데이터베이스 엔진 중에서 선할 수 있는 아마존 관계형 데이터베이스 서비스
주요 특징 - 관리 용이성 : 인프라의 프로비저닝/DB 설치 및 유지 관리 불필요
- 뛰어난 확장성 : 서비스 중단 없이 서버 및 스토리지 확장 가능
- 가용성 및 내구성 : 안정성이 뛰어난 인프라 제공 (멀티 AZ)
- 빠른 속도 : SSD 지원 스토리지 옵션 및 고성능 OLTP에 최적화된 옵션과 비용 효율적 범용 사례에서 옵션 선택 가능 - 보안 : 데이터베이스와 네트워크에 대한 액세스를 손쉽게 제어
프리티어
(Free Tier)
- MySQL, PostgreSQL, MariaDB, Oracle BYOL, SQL Server 지원 - RDS 단일 AZ db.t2.micro 인스턴스를 750시간 무료 사용 - 가입 후 12개월 후 종료됨

 

 

4. RDS의 주요 특징


4-1 Amazon 클라우드 데이터베이스 서비스의 선택 사항

  • AWS에서 데이터베이스 서비스를 사용하는 방법은 두가지로 구분 가능하다

첫번째, 직접 EC2에 데이터베이스를 설치하여 이용하는 것

  • 본인이 사용하기 원하는 DBEC2 인스턴스직접 설치하여 운영하는 방법
  • 기존 On-Premise에서 사용하는 DB를 그대로 사용 가능, 이질감 없음
  • 다만 DB 제공 벤더사에 따라서는 클라우드용 라이선스를 운영하는 경우 있음
  • EC2에 설치 운영 전 미리 파트너사를 통해 기존 라이선스를 사용 할 수 있는지 체크

두번째, AWS에서 직접 제공해주는 데이터베이스 서비스를 이용 하는 것

  • AWS 관계형 데이터 베이스 서비스Amazon RDS
  • NoSQL 기반의 중단 없는 확장성을 제공하는 Amazon DynamoDB
  • 대용량 병렬 페타바이트급 데이터웨어(DataWare) 서비스 제공할 수있는 Amazon Redshift와 같은 서비스 제공
  • 이러한 서비스 특징데이터베이스의 설치 및 운영/관리Amazon에서 직접 제공하므로
  • 별도의 운영/관리 필요 없으며, 서비스의 용도 및 사용량에 따라 원하는 형태의 리소스 선택
  • Amazon RDS의 경우 라이선스가 포함된 서비스, BYOL 라이선스용 서비스 같이 기존라이선스를 사욜할수 있는 서비스도 제공

4-2 Amazon RDS의 주요 특징

  • Amzon RDS뛰어난 확장성, 빠르게 확장 가능한 가용성높은 보안성 제공

첫번째, 유연한 인스턴스 및 스토리지 확장

  • RDS다양한 CPU/메모리 옵션제공한다.
  • Cloudwatch연계를 통해 트래픽에 따른 증설 및 사용의 축소가 가능하다.
  • DB의 데이터 저장 공간인 스토리지는 필요에 따라 유연하게 확장 가능하다.
  • 일반적인 워크로드의 경우 General Purpose(SSD)를 사용
  • 빠른 속도와 대용량의 처리가 필요한 경우 Provisioned IOPS(SSD)를 사용하여 최대 30,000 IOPS까지 I/O 성능을 조정하여 서비스를 할 수 있다.
  • 접속이 빈번하지 않은 작은 워크로드의 경우 Magnetic사용하여 저렴한 비용으로 서비스가 가능하다.

두번째, 손쉽게 사용 가능한 백업 및 복원 기능

  • RDS자동 백업 설정을 통해 손쉽게 백업이 가능하며, 특정 시점으로 손쉽게 복구할 수 있는 기능을 제공한다.
  • 데이터베이스최대 35일까지 데이터를 보존할 수 있으며, 이렇게 백업된 **스냅샷(Snapshot)**을 통해 Database를 생성할 수도 있다.

세번째, 멀티 AZ(Availability Zone)를 통한 고가용성 확보

  • **가용 영역(Availability Zone)**은 상호 간 물리적으로 분리된 독립적인 인프라제공한다.
  • RDS는 멀티 AZ 기능을 활용하여 Region 내 AZ 간 데이터베이스 동기화(Synchronization) 구성이 가능하며, 주요 장애 상황 발생 시 자동으로 데이터베이스 Failover수행할 수 있도록 고가용성을 지원한다.
  • MySQL은 읽기 트래픽을 자동 관리하는 Read Replica분산 서비스를 제공할 수 있다.
  • 이를 통해 워크로드로 발생되는 읽기 서비스(Database Select)에 대한 부하를 분산처리 할 수 있다.
  • 데이터베이스의 장애 발생 시 빠른 장애 복구가 가능하며, 리전 간 데이터 이전이 손쉽게 가능하다.

네번째, RDS 암호화(Encryption) 옵션을 통한 보안성 강화

  • 모든 RDS는 옵션을 통한 One-Click을 통해 데이터에 대한 암호화 기능을 제공하며, 이는 데이터 백업스냅샷(Snapshot)Read Replica에도 적용된다.
  • KMS를 통해 사용자가 생성하고 관리하는 키(Key) 사용이 가능하다.
  • 다만 RDS DB 생성 시, 암호화 Enable 이후 암호화 Disable은 불가능하며, 암호화 DB에서만 암호화 Read Replica를 생성할 수 있다.
  • 암호화되지 않은 백업을 암호화된 DB로의 데이터 복구는 불가능하다.

다섯 번째, Database Migration 서비스

  • RDS는 AWS Database Migration Services를 통해 동족 혹은 다른 DB 엔진으로부터 RDS데이터에 대한 Migration을 지원한다.
  • 또한 EC2 또는 RDS 간의 데이터 리플리케이션을 통해 원하는 시점에 비용 효율적인 데이터베이스에 대한 데이터 이전을 지원한다.

 

5. 실습 : MySQL용 DB 인스턴스 생성, 클라이언트를 통한 DB 연결 및 삭제하기


5-1. MySQL용 DB 인스턴스 생성, 클라이언트를 통한 DB 연결 및 삭제하기

 

1. AWS 사이트에서 [서비스] → [데이터베이스] → [RDS] 로 이동한다.

2. RDS 페이지 접속 후, 왼쪽 [데이터베이스] 메뉴를 클릭한다.

3. 화면에서 [데이터베이스 생성] 버튼을 클릭한다.

4. [데이터 베이스 생성 방식] 선택 항목에서 [표준 생성]을 선택하고 하단의 [엔진 옵션]에서 MySQL 을 선택 후, 하단의 옵션 선택 목록으로 이동

5. [템플릿] 선택 항목에서 [프리티어] 선택 후 하단의 옵션 선택 항목으로 이동.

6. [설정] 항목에서 "DB 인스턴스 식별자", "마스터 사용자 이름", "비밀번호"를 입력 후 하단의 옵션 항목으로 이동

7. [DB 인스턴스 크기] 항목에서 "DB 인스턴스 클래스"의 "버스터블클래스(t클래스 포함) 선택 후 "db.t2.micro"를 선택한다.

8. [데이터베이스 생성] 페이지에서 추가 옵션을 구성하기 위해 다음 항목에 대해 구성 작업을 수행한다.

9. 5~10분 후, [데이터베이스] 메뉴를 눌러 신규 생성한 RDS 인스턴스를 클릭하면 다음과 같이 생성 완료된 인스턴스를 확인할 수 있다.

 

5-2. SQL 클라이언트 다운로드 및 DB 연결하기

1. MySQL Workbench를 다운로드 받기 위해 아래 링크로 이동하여 본인 PC의 플랫폼과 사양에 맞는 프로그램을 선택 후 [Download] 버튼을 클릭한다.

2. [로그인] 페이지에서 하단의 "No thanks, just start my download"를 클릭한다.

3. PC로 다운받은 프로그램 설치 작업을 수행한다.

 

4. 설치 완료된 프로그램을 실행 후 [MySQl Connections] 버튼을 클릭한다.

5. [Setup New Connection] 페이지에서 RDS 연결을 위한 IP 확인을 위해 [AWS RDS] 페이지로 이동한다.

6. [AWS Console의 RDS] 페이지에서 RDS 연결을 위한 "엔드포인트"를 확인한다.

7. MySQL Workbench Connection 화면에서 [Hostname] 항목에 RDS 엔드포인트의 정보를 입력 후, [Username]에 RDS 생성 시 사용한 마스터 계정 정보와 비밀번호를 입력 후 [Test Connection] 버튼을 눌러 연결 테스트를 수행한다.

 

5-3. DB 인스턴스 삭제

1. [데이터베이스] 페이지에서 [작업] → [삭제]를 클릭

2. 삭제 확인 페이지에서 "최종 스냅샷 생성 여부"의 체크를 해지하고, "인스턴스 삭제 시 시스템 스냅샷 및 특정 시점으로 복구를 포함한 자동화된 백업을 더 이상 사용할 수 없다는 점을 인정합니다." 체크 후, 아래 항목에 "delete me"를 입력하고 [삭제] 버튼 클릭

3. 데이터베이스의 상태가 "삭제중"으로 변경되고 삭제 작업이 진행된다.

 

6. 실습 : 웹 서버에서 실행되는 PHP 애플리케이션에 MySQL 데이터 베이스 연결하기


6-3. PHP가 포함된 Apache 웹 서버 설치

  • 2장에서 생성한 EC2, 4장에서 생성된 VPC 사용

1. [서비스] → [컴퓨팅] → [EC2] → [인스턴스 시작] 버튼을 클릭하여 다음 페이지에서 Amazon Linux 2 AMI (HVM), SSD Volume Type 의 [선택] 버튼을 클릭

2. 다음 페이지에서 "t2.micro"를 선택 후, [다음: 인스턴스 세부 정보 구성] 버튼을 클릭

3. [인스턴스 세부 정보 구성] 페이지 [네트워크] 항목에서 "tutorial-vpc" 를 선택하고 [서브넷]은 "tutorial public", [퍼블릭 IP자동 할당] 은 "활성화"를 선택 후 [검토 및 시작] 버튼을 클릭한다.

4. [인스턴스 시작 검토] 페이지에서 [시작] 버튼을 누르고 [키 페어 선택] 페이지에서 "기존 키 페어 선택"을 누른 후 하단 체크박스 선택 후 [인스턴스 시작] 버튼 클릭

5. 인스턴스 생성 완료 후 마우스 오른쪽 버튼 클릭 후 [네트워크] → [보안 그룹 변경] 을 클릭한다.

7. PuTTy를 실행 후 EC2의 IP를 입력하여 접속 후 "login as: ec2-user"를 입력하여 로그인 한다.

8. 최신 버그 수정 및 보안 업데이트를 얻으려면 다음 명령을 사용하여 EC2 인스턴스의 소프트웨어를 업데이터한다.

sudo yum update -y

9. 업데이트 완료 후 "yum install" 명령을 사용하여 PHP 소프트웨어 패키지가 포함된 Apache 웹 서버를 설치한다.

sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2

sudo yum install -y httpd mariadb-server

10. 다음 명령을 사용하여 웹 서버를 실행

sudo systemctl start httpd

11. [인스턴스 접속] 페이지로 이동 후, [퍼블릭 DNS(IPv4)] 항목의 DNS 정보를 복사 후 웹 사이트 접속 여부를 확인

12. 웹 브라우저에서 EC2의 Apache 웹 서버가 정상적으로 설정되면 다음과 같이 [Test Page]가 출력

13. SSH Console로 이동 후 다음과 같이 "chkconfig" 명렬을 사용하여 서버 부팅 시 웹 서버가 자동으로 시작될 수 있도록 설정한다.

sudo chkconfig httpd on

14. 지금 로그인 중인 ec2-user 로 웹 서버의 기본 루트 페이지 파일을 수정 변경 가능하도록 설정하기 위해 /var/www 디렉터리의 소유권 및 권한을 변경해야 한다.

다음의 명령을 사용해서 www 라는 그룹을 추가하고 /var/www 에 대한 소유권과 권한을 부여한다.

이후 EC2 를 SSH console로 다시 접속한다.

sudo groupadd www

sudo usermod -a -G www ec2-user

exit

15. EC2에 재접속 후 다음 명령어를 입력하여 ec2-user 가 group 에 추가되었는지 확인 한다.

16. /var/www 디렉터리 및 해당 콘텐츠의 그룹 소유권을 www 그룹으로 변경한다.

sudo chown -R root:www /var/www

17. /var/www 및 그 하위 디렉터리의 권한을 변경해서 그룹 쓰기 권한을 추가하고, 나중에 생성될 하위 디렉터리에서 그룹 ID를 설정한다.

sudo chmod 2775 /var/www

find /var/www -type d -exec sudo chmod 2775 {} +

18. /var/www 및 하위 디렉터리의 파일 권한을 계속 변경해서 그룹 쓰기 권한을 추가한다.

find /var/www -type f -exec sudo chmod 0664 {} +

 

 

6-4. RDS DB 인스턴스에 Apache 웹 서버 연결

1. EC2 인스턴스에 계속 연결되어 있을 때 디렉터리를 /var/www 로 변경하고 inc 라는 새로운 하위 디렉터리를 생성한다.

cd /var/www

mkdir inc

cd inc

2. dbinfo.inc 라는 inc 디렉터리에서 새 파일을 생성한 다음 nano 또는 선택한 편집기를 호출하여 파일을 편집한다.

dbinfo.inc

nano dbinfo.inc

3. 다음의 콘텐츠를 dbinfo.inc 파일에 추가한다.

<? php

define('DB_SERVER', 'tutorial-db-instance.cz2pmcwnb9cz.ap-northeast-2.rds.amazonaws.com'); define('DB_USERNAME', '마스터이름');

define('DB_PASSWORD', '마스터비밀번호');

define('DB_DATABASE', 'sample');

?>

본인의 MySQL 접속 정보를 추가하여 입력 후 Ctrl + X  후, Y를 눌러 정보를 저장한다.

 

4. 디렉터리를 /var/www/html 로 변경한다.

cd /var/www/html

 

5. SamplePage.php 라는 html 디렉터리에서 새 파일을 생성한 다음 nano 또는 선택한 편집기를 호출하여 파일을 편집한다.

SamplePage.php
nano SamplePage.php

 

6. 다음의 콘텐츠를 SamplePage.php 파일에 추가한다.

  • ex

<?php

include

"../inc/dbinfo.inc"; ?>

<html>

<body>

<h1>Sample page</h1>

<?php

/* Connect to MySQL and select the database. */

$connection = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD);

if

(mysqli_connect_errno())

echo

"Failed to connect to MySQL: " . mysqli_connect_error();

 $database = mysqli_select_db($connection, DB_DATABASE);

 

/* Ensure that the Employees table exists. */

 

VerifyEmployeesTable($connection, DB_DATABASE);

 

/* If input fields are populated, add a row to the Employees table. */

 

$employee_name = htmlentities($_POST['Name']);

 

$employee_address = htmlentities($_POST['Address']);

if

(strlen($employee_name) || strlen($employee_address)) {

  AddEmployee($connection, $employee_name, $employee_address);

 

}

?>

<!-- Input form -->

<form action="<?PHP echo $_SERVER['SCRIPT_NAME'] ?>" method="POST">

<table border="0">

 

  <tr>

 

    <td>Name</td>

 

    <td>Address</td>

 

  </tr>

 

  <tr>

 

    <td>

 

      <input type="text" name="Name" maxlength="45" size="30" />

 

    </td>

 

    <td>

 

      <input type="text" name="Address" maxlength="90" size="60" />

 

    </td>

 

    <td>

 

      <input type="submit" value="Add Data" />

 

    </td>

 

  </tr>

 

</table>

</form>

<!-- Display table data. -->

<table border="1" cellpadding="2" cellspacing="2">

<tr>

 

  <td>ID</td>

 

  <td>Name</td>

 

  <td>Address</td>

 

</tr>

<?php

$result = mysqli_query($connection, "SELECT * FROM Employees");

while

($query_data = mysqli_fetch_row($result)) {

echo

"<tr>";

echo

"<td>",$query_data[0], "</td>",

     "<td>",$query_data[1], "</td>",

 

     "<td>",$query_data[2], "</td>";

echo

"</tr>";

}

?>

</table>

<!-- Clean up. -->

<?php

mysqli_free_result($result);

 

mysqli_close($connection);

?>

</body>

</html>

<?php

/* Add an employee to the table. */

function

AddEmployee

($connection, $name, $address) {

 $n = mysqli_real_escape_string($connection, $name);

 

 $a = mysqli_real_escape_string($connection, $address);

 

 $query = "INSERT INTO `Employees`(`Name`, `Address`) VALUES('$n', '$a');";

if

(!mysqli_query($connection, $query))

echo

("<p>Error adding employee data.</p>");

}

/* Check whether the table exists and, if not, create it. */

function

VerifyEmployeesTable

($connection, $dbName) {

if

(!TableExists("Employees", $connection, $dbName))

{

 

   $query = "CREATE TABLE `Employees`(

 

       `ID` int(11) NOT NULL AUTO_INCREMENT,

 

       `Name` varchar(45) DEFAULT NULL,

 

       `Address` varchar(90) DEFAULT NULL,

 

       PRIMARY KEY(`ID`),

 

       UNIQUE KEY `ID_UNIQUE`(`ID`)

 

    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1";

if

(!mysqli_query($connection, $query))

echo

("<p>Error creating table.</p>");

}

}

/* Check for the existence of a table. */

function

TableExists

($tableName, $connection, $dbName) {

$t = mysqli_real_escape_string($connection, $tableName);

 

$d = mysqli_real_escape_string($connection, $dbName);

 

 

 

$checktable = mysqli_query($connection,

 

    "SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = '$t' AND TABLE_SCHEMA = '$d'");

if

(mysqli_num_rows($checktable)> 0)

return

true

;

return

false

;

}

?>

 

7. 웹 서버를 열고, /SamplePage.php 주소에서 한번 이용한다

퍼블릭 IP주소 뒤에 SamplePage.php

 

반응형
LIST
반응형
SMALL

4장 독립적인 나만의 가상 네트워크 공간 만들기

 

1. Network


  • Net(촘촘하게 연결되어있는) + Work(일)의 합성어
  • 네트워킹을 한다 = 서로 통신(Communicaiton)을 한다’
  • 통신을 하기 위한 약속프로토콜(Protocol)

 

2. VPN(Virtual Private Network)


VPN(Virtual Private Network)

  • 큰 규모의 조직여러 곳에 분산되어 있는 컴퓨터들을 연결하는 보안성이 높은 사설 네트워트를 만듬
  • 인터넷을 활용하여 원격지 간에 네트워크를 서로 연결하고 암호화 기술을 적용
  • 안정적, 보안성이 높은 통신 서비스를 제공
  • 기존 IDC에서 서비스하던 모든 시스템을 클라우드로 이전하는 것은 매우 어려운일
  • IDC - 클라우드 간의 네트워크 연결을 통해 기존 시스템과 클라우드 시스템 간의 데이터 통신 필요하다.
  • AWS는 **VPC(Virtual Private Clould)**와, VPC Gataeway를 통해 On-PremiseVPN 장비AWS간의 VPC을 연결
  • 이를 통하여 보안성이 높은 하이브리드 클라우드 환경을 구현

 

3. VPC(Virtual Private Cloud)


VPC(Virtual Private Cloud)

  • AWS 클라우드에서 논리적으로 격리된 네트워크 공간을 할당하여 가상 네트워크에서 AWS 리소스를 이용 할 수 있는 서비스
  • VPC는 자체 IP 주소 범위, 서브넷(Subnet) 생성, 라우팅 테이블(Routing Table)네트워크 게이트웨이 구성 선택가상 네트워킹 환경을 완벽하게 제어
  • VPC에서 IPv4IPv6모두 사용하여 리소스와 애플리케이션에 안전하고 쉽게 액세스 할 수 있다.
  • 보안 그룹(Security Group) 및 네트워크 제어 목록(Network Access Control List)을 포함한 다중 보안 계층을 활용하여 각 서브넷(Subnet)에서 EC2 인스턴스에 대한 엑세스 제어
  • 기업의 데이터 센터VPC 사이하드웨어 가상 사설 네트워크연결하여, AWS클라우드 기업의 데이터 센터를 확장할 것처럼 사용 가능
구분  내용
서비스명 Amazon VPC(Virtual Private Cloud)
설명 직접 정의 가능한 가상 네트워크(Private Network)에서 AWS 리소스를 구동할 수 있는 논리적으로 격리된 네트워크 제공
주요 특징 - AWS에 사설 네트워크 구축
- 회사와 AWS 간 VPN 연결하거나 가상 네트워킹 구현
- 기존 데이터 센터와의 연결을 통해 하이브리드(Hybrid) 환경 구성
- AWS를 회사 인프라의 일부처럼 사용할 수 있으며, 내부 시스템 소프트웨어의 연동이 매우 쉬움(예 : 메일, 그룹웨어 같은 업무 시스템, 파일 서버 등)
- 세심한 네트워크 설정 가능
- 모든 리전(Region)에서 이용 가능
프리티어
(Free Tier)
VPC 자체는 비용이 발생하지 않지만, VPN 연결 시 네트워크 송/수신에 따른 종량제 비용 발생

 

4. VPC의 구성 요소


4-1 프라이빗 IP(Private IP) 주소, 퍼블릭 IP(Public)주소, 탄성 IP(Elastic IP)주소

1. 프라이빗 IP(Private IP) 주소

  • 인터넷을 통해 연결할 수 없는, VPC 내부에서만 사용할 수 있는 IP주소
  • 프라이빗 IPVPC 에서 시작된 인스턴스 서브넷범위에서 자동으로 할당되며
  • 동일 네트워크에서 인스턴스 간 통신에 사용 할 수 있습니다.
  • 기본 프라이빗 주소별도로 보조 프라이빗 IP주소라는 추가 프라이빗 주소 할당가능

2. 퍼블릭 IP(Public)주소

  • 인터넷을 통해 연결 할 수 있는 IP 주소
  • 인스턴스인터넷 간의 통신을 위해 사용 가능하다
  • EC2 생성옵션으로 퍼블릭 IP 주소사용 여부를 선택 할 수 있음
  • 인스턴스에서 퍼블릭 IP 주소수동으로 연결하거나 해제할 수 없다.
  • 인스턴스재부팅되면 새로운 퍼블릭 IP 주소할당

3. 탄성 IP(Elastic IP)주소

  • 동적 컴퓨팅을 위해 고안된 고정 퍼블릭 IP 주소
  • VPC모든 인스턴스네트워크 인터페이스에서 탄성 IP 할당 가능
  • 다른 인스턴스주소를 신속하게 매칭하여 인스턴스 장애 조치를 수행 가능
  • 탄력적 IP 주소의 효율적인 활용을 위해 탄력적 IP 주소실행중인 인스턴스와 연결되어 있지 않거나, 중지된 인스턴스 또는 분리된 네트워크 인터페이스연결되어 있는 경우 시간당 요금 부과됨
  • 사용 가능한 탄력적 IP 주소5개로 제한, 이를 절약하기위해 NAT 디바이스 사용

 

4-2 VPC와 서브넷(Subnet)

1. VPC와 서브넷

  • VPC는 사용자의 AWS 게정을 위한 전용의 가상 네트워크
  • VPCAWS 클라우드에서 다른 가상 네트워크와 논리적으로 분리되어 있음
  • Amazon EC2 인스턴스와 같은 AWS 리소스VPC에서 실행할 수 있음
  • VPC 내부의 네트워크에서도 서비스 목적에 따라 IP Block으나누어 구분 할 수 있음
  • 우리는 이렇게 분리된 IP Block의 모음을 **서브넷(Subnet)**이라고 함

2. 가용 영역과 서브넷

  • VPC리전(Region)의 모든 가용영역(AZ)에 적용되며, 각 가용영역하나 이상서브넷추가할 수 있다.
  • 하지만 서브넷단일 가용 영역에서만 생성할 수 있으며, 여러가용 영역으로 확장불가

 

4-3 VPC와 서브넷(Subnet)사이즈

  • VPC를 생성할 때 VPC에서 이용하게 될 IP 주소의 범위(예 : 10.0.0.0/16)를 지정하게 된다
  • 범위를 CIDR(Classless Inter-Domain Routing) 블록형태로 지정해야 한다

 

사용할수 있는 IP 갯수와 범위를 구하시오

  • 서브넷 개수 : 255개
  • 범위 : 192.168.0.0 ~ 192.168.0.255
  • 192.168.0.0 → 네트워크 아이디
  • 192.168.0.255 → 브로드캐스트
  • 예시) 192.168.0.0/24

 

4-4 퍼블릭 서브넷(Public Subnet)과 프라이빗 서브넷(Private Subnet)

1. 퍼블릭 서브넷(Public Subnet)

  • 서브넷 네트워크 트래픽이 인터넷 게이트웨이(Internet Gateway, IGW)로 라우팅 되는 서브넷을 퍼블릭 서브넷이라 한다.

2. 프라이빗 서브넷(Private Subnet)

  • 인터넷 게이트웨어라우팅 되지않는 서브넷을 프라이빗 서브넷이라고 한다.

정리

  • EC2 인스턴스IP를 통해 인터넷과 통신을 할 수 있게 하려면, 퍼블릭 IP(Public IP) 주소나 탄력적 IP(Elastic IP)가 있어야함
  • 일반적으로 인터넷망을 통해 서비스를 수행하는 웹서버(Web Server)는 퍼블릭 서브넷
  • 인터넷에 직접 연결할 필요 없고, 보다 높은 보안성을 필요하는 DB서버프라이빗 서브넷

 

4-5 라우팅 테이블(Routing Table)

  • 각 서브넷서브넷 외부로 나가는 아웃바운드(OutBound) 트래픽에 대해 허용된 경로를 지정하는 라우팅 테이블이 연결되어 있어야 한다.
  • 생성된 서브넷자동으로 VPC의 기본 라우팅 테이블과 연결되며, 테이블의 내용 변경 가능
  • 이러한 라우팅 테이블VPC서브넷 내에서 생성된 네트워크 패킷이 목적지 주소로 이용하기 위해 어떤 경로로 이동하는지 알려준다.

 

5. VPC의 주요 서비스


5-1 보안 그룹(Security Group)과 네트워크 액세스 제어 목록(Network ACL)

  • VPC네트워크 통신트래픽에 대해 IP와 Port를 기준으로 통신을 허용하거나 차단하기위한 기능을 제공한다.
  • 이러한 서비스를 보안 그룹(Security Group)과 네트워크 ACL(Network ACL)이라 한다.

5-2 VPC 피어링 연결(VPC Peering Connection)

  • 피어링 연결(VPC Peering Connection)은 비공개적으로 두 VPC 간에 트래픽을 라우팅 할 수 있게 하기 위한 서로 다른 VPC 간의 네트워크 연결을 제공한다.
  • VPC Peering을 통해 동일한 네트워크에 속한 것같은 서로 다른 VPC의 인스턴스간 통신 가능

 

5-3 NAT(Network Address Translation) 게이트웨이

1. NAT(Network Address Translation) 게이트웨이

  • NAT외부 네트워크에 알려진 것다른 IP 주소사용하는 내부 네트워크에서
  • 내부 IP 주소외부 IP주소변환하는 작업을 수행하는 서비스
  • NAT 게이트웨이프라이빗 서브넷(Private Subnet) 내에 있는 인스턴스를 인터넷(예 : S/W 업데이트용) 또는 다른 AWS 서비스연결하고, 외부망 또는 인터넷에서 해당 인스턴스에 연결하지 못하도록 구성하는데 사용
  • 외부에 공개될 필요가 없거나, 보안상 중요한 서비스이지만 윈도우 패치보안 업데이트, S/W 업데이트인터넷을 통해 받아야 하는경우 NAT 게이트웨이나, NAT 인스턴스사용하게된다

2. NAT(Network Address Translation) 게이트웨이 3가지 조건

  1. NAT 게이트웨이생성하기 위해 퍼블릭 서브넷(Public Subnet)을 지정
  2. NAT 게이트웨이연결할 탄력적(Elastic IP)주소 필요
  3. NAT 게이트웨이만든 후 인터넷 트래픽NAT 게이트 웨이통신이 가능하도록 프라이빗 서브넷(Private Subnet)과 연결된 라우팅 테이블(Routing Table) 업데이트

 

5-4 VPC Endpoint

  • Amazon S3인터넷망에 연결된 서비스인터넷 기반의 IP 주소와 연결 정보를 가지고 있다.
  • 이러한 공용 리소스에 대해 퍼블릭 서브넷(Public Subnet)에 위치한 인스턴스는 인터넷을 통해 문제없이 연결 가능
  • 하지만 프라이빗 서브넷(Private Subnet)에 위치한 인스턴스는터넷과 연결되어 있는 S3와 같은 공용 리소스 연결 불가
  • 이러한 경우 S3에 연결하기 위해서 NAT 게이트 웨이나, NAT 인스턴스가 필요함
  • VPC Endpoint를 이용하면 S3, DynamoDB연결 가능하다.

 

5-5 VPN(Virtual Private Network)연결

  • 기본적으로 Amazon VPC에서 서비스되는 인스턴스는 On-Premise에 있는 서버나 IDC 내의 시스템과 통신할 수 없다.
  • 물론 인터넷을 통해 강제로 통신 하도록 구성 가능하나 보안을 필요하는 중요한 데이터를 송수신하기에는 보안적으로 매우 취약하다.
  • 이렇게 AWS VPC인스턴스IDC내의 시스템간의 통신을 위해 VPC가상의 프라이빗 게이트웨이연결하고 사용자 지정 라우팅 테이블을 생성하며, 보안 그룹의 규칙을 업데이트하고, AWS 관리형 VPN 연결을 생성하여 VPC에서 원격의 네트워크에 접속가능하도록 하이브리드 클라우드 환경을 구성 가능
  • VPN 연결은 VPC와 자체 네트워크 사이의 연결을 의미한다.

 

6. 실습 : VPC 마법사를 통해 퍼블릭 서브넷(Public Subnet)과 프라이빗 서브넷(Private Subnet) 만들기


 

1. AWS에 들어가 로그인 후, [서비스] → [네트워킹 및 콘텐츠 전송] → [VPC] 로 이동한다.

2. NAT 게이트웨이에 사용할 탄력적 IP 할당을 위해 [탄력적 IP]로 이동하여 [탄력적 IP 주소 할당] 버튼을 클릭한다.

3. [탄력적 IP 주소 할당] 페이지에서 [할당] 버튼을 클릭한다.

4. 상단 [VPC 대시보드]에서 [VPC 마법사 시작] 버튼을 클릭한다.

5. [1단계 : VPC 구성 선택] 페이지에서 [퍼블릭 및 프라이빗 서브넷이 있는 VPC]의 [선택] 버튼을 클릭한다

6. VPC 구성을 위해 다음과 같이 입력 후, [VPC 만들기] 버튼을 클릭해서 VPC를 생성한다.

7. 실습 : 리전(Region) 간 VPC Peering으로 글로벌 통합 네트워크 환경 구축하기


실습 : 리전(Region) 간 VPC Peering으로 글로벌 통합 네트워크 환경 구축하기

  • 본 실습은 네트워크 테스트를 위해 각각의 리전에 EC2 인스턴스를 생성하게 된다.각 리전에 생성된 EC2 인스턴스는 실습 이후 삭제하기 바란다.
  • 실습 후, 생성된 인스턴스를 삭제하면 프리티어(Free Tier) 범위 내에서 추가적인 비용이 발생하지 않을 것이다.
  • Inter-Region VPC Peering을 테스트하기 위해 런던 리전에 VPC를 만들고, 서울 리전과 런던 리전 간에 VPC Peering을 수행한 후 각 리전 간 네트워크가 정상적으로 연결되는지 확인한다.

 

1. AWS 접속 로그인 후, 런던 리전에 VPC 구성을 구성하기 위해 오른쪽 상단의 [리전 선택] 항목에서 "유럽(런던)" 리전을 클릭한다.

2. [VPC] 페이지에서 [VPC 만들기] 버튼을 눌러 [VPC 마법사 시작] 버튼을 클릭한다.

3. [VPC 구성 선택] 페이지에서 "단일 퍼블릭 서브넷이 있는 VPC"를 선택 후 [선택] 버튼을 클릭한다.

5. VPC 구성을 위해 다음과 같이 입력한다.

생성 후 VPC ID 복사 ! vpc-0a9653054dd8c3487

6. 피어링 구성을 위해 리전을 다시 "아시아 태평양(서울)"로 전환 후 VPC로 이동한다.

7. [피어링 연결] 메뉴를 눌러 피어링 페이지로 이동 후 [피어링 연결 생성] 버튼을 클릭한다.

8. [피어링 연결 생성] 페이지에서 다음과 같이 구성을 진행 후, [피어링 연결 생성] 버튼을 클릭한다.

9. VPC 연결이 정상적으로 생성되었다. 이후 피어링 연결 승인을 위해 런던 리전으로 이동한다.

10. [피어링 연결] 페이지에서 [작업]의 [요청 수락]을 클릭한다.

11. [VPC 피어링 연결 요청 수락] 페이지에서 [예, 수락] 버튼을 클릭한다.

12. VPC 간 트래픽 통신을 수행하기 위해 [지금 내 라우팅 테이블 수정]을 클릭한다.

13. 런던 리전의 [라우팅 테이블] 페이지에서 바로 전에 생성된 라우팅 테이블을 다음과 같이 선택하고, "라우팅" 탭 클릭 후 [라우팅 편집] 버튼을 클릭한다.

14. 라우팅 편집 페이지에서 [라우팅 추가] 버튼을 클릭하고 좌측의 "대상"에서 서울 리전의 VPC 대역인 "10.0.0.6/16" 입력 후, 대상 항목에서 "피어링 연결"를 선택한다. 현재 구성된 "VPC Peering 연결"을 선택 후 [라우팅 저장] 버튼을 클릭한다.

15. 서울 리전의 [라우팅 테이블] 페이지에서 바로 전에 생성된 라우팅 테이블을 다음과 같이 선택하고, "라우팅" 탭 클릭 후 [라우팅 편집] 버튼을 클릭한다.

16. 라우팅 편집 페이지에서 [라우팅 추가] 버튼 클릭 후 좌측의 "대상"에서 런던 리전의 VPC 대역인 "20.0.0.0/16" 입력 후, 대상 항목에서 "피어링 연결"를 선택한다. 현재 구성된 "VPC Peering 연결" 선택 후 [라우팅 저장] 버튼 클릭한다.

17. 다시 런던 리전의 EC2 생성 페이지로 이동 후, "Amazon Linux 2 AMI (HVM), SSD Volume Type" 을 선택 후, 인스턴스 세부 정보 구성 페이지에서 VPC 선택 시 이전에 생성했던 VPC를 선택한다.

18. 런던 리전에서 인스턴스 생성 완료 후 세부 항목 페이지에서 등록된 "보안 그룹"을 확인하고 수정을 위해 "보안 그룹 링크"를 클릭한다.

19. 보안 그룹 페이지 하단의 "인바운드 규칙" 탭에서 [인바운드 규칙 편집] 버튼을 클릭하여 인바운드 규칙 편집 페이지로 이동 후 [규칙 추가] 버튼을 클릭하여 "유형 : 모든 트래픽, 소스 : 10.0.0.0/16(서울 리전 VPC대역)" 등록 후 [규칙 저장] 버튼을 클릭한다.

20. 서울 리전에도 런던 리전과 동일한 방식으로 신규로 생성한 VPC의 Public Subnet 을 선택하여 EC2 인스턴스를 생성하고, 보안 그룹으로 이동 후 [규칙 추가] 버튼을 클릭하여 "유형 : 모든 트래픽, 소스 : 20.0.0.0/16(런던 리전 VPC대역)" 등록 후 [규칙 저장] 버튼을 클릭한다.

.

 

반응형
LIST
반응형
SMALL

3장 무한대로 저장 가능한 스토리지 만들기

 

1. 스토리지(Storage)


  • 스토리지컴퓨터에 데이터를 저장하는 저장소 역할 수행
  • 컴퓨터의 하드디스크
  • 스토리지서버에 직접 연결할 수 있고, 대용량 데이터를 저장하기위해 별도의 스토리지용 네트워크 구성 할 수 있다.

DAS(Direct Attached Storage)

  • 서버에 직접 연결하는 방식

NAS(Network Attached Storage)

  • 스토리지를 빠른 속도의 네트워크로 연결하는 방식
  • LAN을 연결하여 SAN보단 저렴하다
  • 파일 단위데이터에 접속한다.
  • OS파일 서버로 표시된다.

SAN(Storage Attached Network)

  • 스토리지를 빠른 속도의 네트워크로 연결하는 방식
  • 확장에 용이하며, 대규모 엔터프라이즈 환경을 구성하기 적합한 고속용 전용 네트워크 구성
  • 블록 수준에서 데이터를 저장
  • OS 입장에서보면, SAN은 일반적으로 디스크로 나타나며 별도로 구성된 스토리지용 네트워크가 존재

Amazon S3(Simple Storage Services)

  • 데이터를 무한하게 저장가능
  • 대용량의 데이터를 백업 및 보관이 가능한 Amazon Glacier(글레이셔) 등 용도에 따라 다양한 스토리지 이용 가능하다.

 

2. 데이터 백업(Data Backup)


데이터 백업(Data Backup)

  • 데이터 백업이란 데이터가 손상되거나 유실되는 것을 대비하여 데이터를 복사 다른 곳에 저장
  • 저장 장소는 동일 장비 or 다른 장비의 하드디스크 or 별도의 백업 테이프

데이터 백업을 하는 경우

  1. 하드웨어(H/W) 고장, 하드디스크(HDD) 손상
  2. DB 및 S/W 손상, OS 자체 문제로 인한 데이터 손상
  3. 운영상의 데이터 유실작업자의 실수, 개발자의 실수 및 쿼리 오류

→ AWS에선 EBS 스냅샷AMI 백업 등의 기능을 활용하여 데이터 백업 서비스 제공

 

3. 스냅샷(Snapshot)


스냅샷(Snapshot)

  • 스냅샷기술적인 용어로, 특정 시간에 데이터 저장 장치의 상태별도의 파일이나 이미지로 저장하는 기술
  • 스냅샷 기능을 이용하여 데이터를 저장하면 유실된 데이터 복원과 일정 시점의 상태로 데이터 복원 가능

→ AWS에서는 EBS에 대한 스냅샷 제공함으로써 데이터 백업/복원 및 다른 EC2 또는 다른 리전로 EBS 복사 기능을 통해 인스턴스의 마이그레이션을 지원

 

4. S3와 Glacier


4-1 Amazon S3(Simple Storage Services)

  • S3는 무한대로 저장가능하며, 사용 만큼 지불하는 인터넷 기반 스토리지 서비스
  • 버킷이라는 리전내에서 유일한 영역생성하고 데이터 키-값 형식의 **객체(Object)**로 저장한다
  • S3비용이 매우 저렴하며, 간단한 정적 웹 서비스를 위한 웹사이트를 만들 수 있다.
  • S3 서비스는 스토리지 기술을 근간으로 하며, 파일 단위의 접근만 지원하기 때문에 EBS서비스를 대체할 수 없다.
구분  내용
서비스명 Amazon S3(Simple Storage Services)
설명 어디서 원하는 양의 데이터를 저장하고 검색할 수 있도록 구축된 객체 스토리지
주요 특징 - 2006년에 출시된 최초의 AWS 서비스
- 객체 기반의 무제한 파일 저장 스토리지
- URL을 통해 손쉽게 파일 공유 기능 제공
- 99.99%의 내구성
- 정적 웹 사이트 호스팅 서비스 제공 가능
프리티어 (Free Tier) - 5GB Amazon S3 표준 스토리지
- Get 요청 20,000건, Put 요청 2,000건
- 가입 후 12개월 후 종료됨

 

4-2 Amazon S3(Simple Storage Services)의 주요 특징

활용 분야 내용
백업 및 복구
(Backup & Restore)
- 뛰어난 내구성과 확장성 제공, 버전관리 기능 - 데이터 보호 기능하이브리드 구성
백업 및 복구
(Backup & Restore)
- 고객이 규제 대상 산업(금융,의료)을 위한 규정 준수
- 아카이브 요구사항을 충족할 수 있도록 다양한 스토리지 클래스 제공
빅데이터 분석을 위한 데이터 레이크 (Data Lake) - 제약 또는 재무데이터, 사진비디오 같은 멀티미디어 파일
- 어느 것 상관 없이 S3를 빅데이터 분석용 데이터 레이크로 사용
하이브리드 클라우드 스토리지 (Hybrid Clould Storage)
- AWS Storage Gateway 연게하여 On-Premise 환경에서 클라우드 스토리지 활용, 데이터 백업 및 재해복구 원활하게 수행
재해복구 (Disaster Recovery)
- 데이터 보호 및 타 리전으로 교차 리전 복제(CCR) 서비스 제공

 

Amazon S3 스토리지 클래스

 

1. S3 표준(S3 Standard)

  • 자주 엑세스하는 데이터를 위한 스토리지 클래스
  • 99.99% 내구성, 99.99% 가용성 뛰어난 객체 스토리지 서비스
  • EBS 대비 20%까지 저렴
  • 전송 데이터를 위한 SSL 및 저장 데이터 암호화 지원

 

2. S3 표준 - IA(Infrequent Access)

  • 엑세스 빈도는 낮지만 필요할 때 빠르게 엑세스 해야하는 스토리지 클래스
  • S3 Standard같은 내구성, 가용성 지원
  • S3 대비 58% 저렴함, 최근 백업 서비스에 많이 사용됨

 

3. S3 One Zone - IA (S3 One Zone Infrequent Access)

  • 엑세스 빈도는 낮지만 빠른 엑세스가 필요한 데이터를 저장하는 스토리지 클래스
  • 최소 3개의 가용영역에 데이터를 저장하는 다른 s3 스토리지 클래스가 아님
  • 단일 가용 영역에 데이터를 저장함으로써 S3-Standard-IA 대비 20% 쌈

 

4. Amazon Glacier

  • 데이터 보관을 위한 안전하고 비용이 매우저렴한 스토리지
  • S3와 같은 내구성, 가용성 보유
  • S3 Standard 대비 77%까지 쌈
  • 데이터 아카이빙장기간 데이터 보관오래된 로그 데이터에 대한 저장 용도로 알맞춤

 

4-3 Amazon Glacier

  • 데이터 아카이빙장기 백업을 위한 안전하고 안정적이며 비용이 매우 저렴한 클라우드 스토리지 서비스
  • S3의 개별 스토리지 영역인 **‘Buket’**과 유사한 **‘Vault’**라는 개별 스토리지 영역을 생성하여 데이터를 보관
  • Console을 통한 업로드 지원, 별도의 API를 이용하여 데이터에 대한 저장 기능 제공
  • 일반적으로 S3에 저장되는 데이터는 라이프 사이클 옵션을 활용하여 일정 기간 이상 지난 데이터에 대해 보다 저렴한 Glacier로 이동하여 저장하는 옵션 사용할 수 있음

 

구분 내용
서비스명 Amazon Glacier
설명 데이터 아카이빙을 위한 안전하고 안정적인 장기 객체 스토리지
주요 특징 - S3같은 내구성
- 몇 분에서 몇 시간 내 데이터 꺼내기제공
- S3 대비 최대 77% 싼 가격
- 아카이빙, 장기간 백업오래된 로그 데이터
프리티어 (Free Tier) 데이터 보관에 대해 프리티어 제공하지 않음

 

아카이빙 (Archiving)
  • 사전적 의미로 '보관'이라는 뜻을 가진 아카이빙은 개인 및 단체가 활동하며, 남기는 수많은 기록물 중 가치가 있는 것을 선별하여 보관하는 장소, 또는 그 기록물 자체를 이르는 용어를 뜻한다.
  • 파일 전송을 위해 백업용보관용 기타 다른 목적으로 한곳에 모아둔 파일, 파일 목록이거나 디렉터리 혹은 카탈로그로 된 파일들이며, 지원되는 프로그램에 따라 달라진다.
  • FTP(File Transfer Protocol) 파일 전송 프로토콜에서 많이 사용되며, 주로 기록을 위해 사용되어진다.
아카이브(Archive)
  • 아카이브(Archive)는 보관 및 참고용으로 생성한 데이터 사본이다. 필수 요소는 아니지만, 아카이브를 만든 후에는 원본 데이터를 삭제하는 경우가 많다.
  • 아카이브를 하는 목적은 여러 가지 목적이 있는데, 가장 보편적인 것은 과거의 데이터에서 일부 데이터를 회수(Retrieval)하는 것이다. 고객의 서명이 들어간 계약서의 파일이거나, 예전에 만들어졌던 내용이라 현재는 사용하지 않지만 다시 필요해졌을 경우 사용되어질 수 있는 파일들을 저장해두고 필요시 되찾을 목적으로 사용되어진다.
  • 또, 증명을 위한 이메일이나 파일 같은 것으로 현업에서 데이터 변경을 요청하여 데이터를 변경하였는데, 그로인해 문제가 발생하였을 경우 요청으로 인한 데이터 변경이였던 것을 증명할 문서가 필요할 것이다. 아카이브는 이러한 문제가 발생하였을 경우 증명의 목적으로도 사용되어진다.

아카이브는 원본파일을 그대로 복사하여 저장하는 방식이기 때문에 최신상태 그대로를 보관한다.

 

4-4 Amazon Glacier의 주요 특징

 

데이터 접근 방법 3가지

 

1. API/SDK를 이용한 Direct 연결

  • API나 SDK를 활용한 프로그램 개발을 통해 깊게 저장된 데이터를 위한 Glacier에 직접 접속

2. S3 라이프 사이클과의 통합

  • S3의 라이프 사이클통합을 통해 오래된 데이터에 대해 Glacier로 자동 이관

3. Party Tool과 AWS Storage Gateway 연동

  • 기존 Backup 인프라와 3rd Party Tool과의 연계 및 AWS Storage Gateway 통합을 통해 제공

 

5. AMI와 Market Place


5-1 AMI(Amazon Machine Image)

  • EC2 인스턴스 생성에 필요한 모든 소프트웨어 정보를 담고 있는 템플릿 이미지
  • AMI를 선택하는 화면에서 본인이 원하는 OSApplication 종류에 따라 AMI 이미지를 선택하면 OSApplicationEC2 인스턴스 생성 시 그래로 설치됨
  • 동일한 환경을 갖는 인스턴스를 손쉽게 생성 가능
  • Auto Scaling자동화 할때, EC2 인스턴스다른 리전으로 이전해야 할때
  • 상용 솔루션이 설치되어 있는 소프트웨어를 사용하는 경우 AWS Marketplace이용하기위해 AMI를 사용한다.

5-2 Amazon Marketplace

  • AWS에서 실행되는 소프트웨어를 판매 또는 구매할 수 있는 온라인 스토어
  • OS, Security, Network, Storage, BI, Database, Media

 

6. 실습 : 무한대로 저장 가능한 Amazon S3로 파일 업로드 및 삭제하기


S3로 파일 업로드 및 삭제

[서비스] &rarr; [스토리지] &rarr; [S3]
1) 버킷 만들기 클릭

 

2 ) 버킷 만들기 클릭

 

3) 퍼블릭 액세스 설정

  • 실무에서 사용할 경우에는 모든 액세스 차단혹은 ACL을 이용하여 액세스 차단해주는 것이 보안을 위해 좋음

4) 버킷버전관리, 기본 암호화

5) 버킷 생성 확인
6) 폴더만들기

 

7) 폴더 생성 확인

 

8) 업로드 시도

업로드 -> 파일/폴더 추가 -> 업로드

9) 업로드 이미지 확인하기

이름 클릭 -> 객체 URL 클릭

 

10) AccessDenied 오류 발생

업로드한 사진을 보기위해 URL접근 하였으나 access denied 발생

 

11) 퍼블릭 액세스 차단 수정

 

권한 -> 퍼블릭 액세스 차단 -> 편집 -> 체크 모두 해제 -> 변경사항 저장

 

12) 버킷 정책 편집

권한 -> 버킷정책 -> 편집 -> 버킷정책 -> 버킷 ARN 복사후 정책 생성기 클릭

.

버킷 정책 생성(1)

  • Select Type of Policy - S3 Bucket Policy 선택
  • Principal - `` 입력
  • Actions - GetObject 선택

버킷 정책 생성(2)

복사한 버킷 ARN을 붙여넣기 한 후에 /*을 추가 -> Add Statement 클릭

 

 

버킷 정책 생성(3)

 

버킷 정책 생성(4)

Policy JSON Document를 복사후 닫기

 

16) 버킷 정책 편집 적용

복사한 Json을 붙여넣은 후 -> 변경사항 저장

 

 

PC파일을 S3로 자동 백업하기
  • AWS CLI를 이용하여 S3에 액세스할 수 있도록 구성하고 윈도우 예약작업을 활용하여 설정된 일정에 자동으로 백업할 수 있도록 구성할 예정

1. S3에 접속한 후 백업을 위하여 생성한 S3버킷 내 test폴더를 생성한다

2. IAM계정 생성을 위해 서비스->보안->IAM클릭

2. IAM계정 생성을 위해 서비스->보안->IAM클릭

3. IAM에서 사용자->사용자 추가

3. IAM에서 사용자->사용자 추가

4. 사용자 이름 입력후 프로그래밍 방식 액세스 선택-> 다음:권한

4. 사용자 이름 입력후 프로그래밍 방식 액세스 선택-> 다음:권한

5. 기존 권한 정책 직접연결 -> AdministratorAccess-> 다음:태그-> 다음:검토->사용자 만들기 버튼 클릭(태그는 선택사항 바로 다음으로 넘겨도 됩니다.)

5. 기존 권한 정책 직접연결 -> AdministratorAccess-> 다음:태그-> 다음:검토->사용자 만들기 버튼 클릭(태그는 선택사항 바로 다음으로 넘겨도 됩니다.)

6. .csv 다운로드

6. .csv 다운로드

7. AWS CLI설치1. S3에 접속한 후 백업을 위하여 생성한 S3버킷 내 test폴더를 생성한다

7. AWS CLI설치

 

8. .csv파일을 열고 커멘트 창을 띄운후 aws configure를 입력한 후 각 키를 대입

  • region name : 서울이라면 ap-northeast-2
  • output format : 보통 json이다.

9. "aws s3 sync '백업할경로' 's3://버킷명/폴더명'을 입력"

  • aws s3 sync d:\AWS s3://woong-s3-buket/test

10. s3로 이동 후 파일이 동기화 됬는지 확인

11. 자동 백업을 위해 메모장을 이용해 .bat파일 만들기

12. 작업 스케줄러 -> 작업 만들기

 

13. 이름설정, 보안옵션 설정, 권한 설정

14. 트리거-> 새로만들기 선택후 시간 설정

15. 동작 -> 새로만들기 -> 찾아보기 -> .bat파일 선택

16. 작업 스케줄의 모든 설정을 확인 후 확인, 실행

 

반응형
LIST
반응형
SMALL

2장 확장성과 안정성 높은 서버 만들기

 

1. 서버와 스토리지


1-1 서버(Server)

  • 특화된 어떤 업무를 수행하기 위해 설계된 컴퓨터를 서버(Server)
  • 정보와 데이터를 저장하기 위한 저장소 역할 스토리지(Storage)
  • 서버란, 특화된 어떤 업무를 수행하기 위해 설계된 컴퓨터
  • 어떤 임무를 부여하는지에 따라 일반 노트북, 데스크톱 컴퓨터도 서버가 됨
  • 일반 컴퓨터보다 고성능 CPU, 고용량 메모리, 대용량 디스크를 요구
  • 일반 컴퓨터보다 가격이 비쌈, 서버용 OS 설치
  • 서버의 용도에 맞는 별도의 S/W 설치
  • AWS EC2라는 서비스를 이용하여 가상의 서버를 구상, 필요한 S/W 설치 사용

1-2 하드디스크

  • 알루미늄 합금 또는 강화유리 위에 자성 재료로 박막 처리된 원형디스크
  • 영구적 저장하기 위해 사용되는 장치
  • SSD(Solid-State Drive)일반 컴퓨터
  • 디스크 어레이 컨트롤러, RAID서버
  • AWS EBS(Elastic Block Storage) 서비스 이용하여 EC2에 디스크를 추가하여 서비스 사용

 

2. 보안과 방화벽


2-1 보안(Security)

  • 각종 위험으로부터 정보 및 데이터틀 안전한 상태로 유지하는 것

AWS IAM(Identity & Access Management)

  • 리소스에 대한 사용자 액세스 및 암호화 키 관리 서비스

Amazon GuardDuty

  • 관리형 위험 탐지 서비스

AWS Shield

  • DDos 보호

AWS WAF(Web Application Firewall)

  • 악성 웹 트래픽 필터링을 서비스

 

2-2 방화벽(Firewall) 

  • 방화벽은 원래 자동차에서 객실을 엔진 블록으로부터 분리하기위한 물리적 장치
  • 외부 사용자,시스템이 내부의 서버 및 자원에 접근하기 위해서는 반드시 방화벽을 거쳐야함
  • 탐지하고 방어할 수 있는 시간을 벌 수 있으며, 근본적인 공격자체를 어렵게 만들 수 있음
  • Security Group, NACL, AWS WAF(Web Application Firewall)

 

3. 클라우드 용어


3-1 리전(Region)

  • 물리적으로 위치가 다른 나라들을 대상으로 동일 서버를 사용하게 하면 재해 또는 불가항력으로 서버가 정지 되었을 때 대처할 수 없어서 서비스를 종료하거나 물리적 거리로 인해 빠른 속도를 낼 수 없다.
  • 이러한 이유로 아마존은 전세계 주요 국가에 리전(Region)을 구축하여 해당 위치에서 가장 가까운 곳에서 클라우드 서비스를 이용할 수 있도록 서비스를 제공중이다.

3-2 가용영역(Availability Zone)

  • 가용영역(AZ)란 우리가 흔히 알고 있는 데이터센터(IDC)를 말한다.
  • AWS 하나의 리전(Region)에 다수의 가용영역(AZ)룰 보유하고 있고, 가용 영역이 위치한 데이터 센터(IDC)는 같은 리전이라도 지리적으로 멀리 떨어져 있다.
  • 이렇게 떨어져 있는 이유는 하나의 가용 영역이 재해,정전,테러 화재 등 불능시 다른 가용 영역에서 서비스를 재개할 수 있도록 하기 위함

3-3 엣지 로케이션(Edge Location)

  • 엣지 로케이션이란 Amazon의 CDN의 서비인 ClouldFront를 위한 캐시서버들의 모음이다.

CDN(Content Delivery Network)

  • 콘텐츠(HTML, 이미지, 동영상, 기타 파일)을 서버와 물리적으로 사용자들이 빠르게 받을 수 있도록 전세계 곳곳에 위치한 캐시서버에 복제해주는 서비스
  • 콘텐츠를 빠르게 받기위해 멀리 떨어진 서버에서 다운하는 것이 아니라, 가까운 서버에 접속하여 다운받게 한다.

 

4. Amazon EC2(Elastic Compute Cloud)


4-1 Amazon EC2

  • Amazon EC2AWS상에서 안정적이며 크기를 조정 가능한 컴퓨팅 파워를 제공하는 웹서비스
  • 이러한 서버를 '가상화 서버’, ‘인스턴스’라고 부른다.
구분 내용
서비스명 Amazon EC2(Elastic Compute Cloud)
설명 클라우드에서 제공되는 크기를 조정할 수 있는 컴퓨팅 파워
주요 특징 - 한개에서 수천개의 인스턴스로 확장 가능
- 모든 공개된 AWS Region에서 사용 가능
- 필요에 따라 인스턴스 생성,시작,수정,중단,삭제 가능
- Linux/Windows OS에서 사용 가능, 모든 소프트웨어 설치가능
- 사용한 사용량에 대해서만 시간 단위 비용 과금
- 다양한 비용 모델(온디맨드, 스팟, 예약) 선택 가능
프리티어 - Linux/Windows 12, micro 인스턴스 월 750시간 제공
- 1GB 메모리, 32bit or 64bit 플랫폼 지원 |

 

4-2 Amazon EC2 주요 특징

  • Amazon EC2 인스턴스는 사용 목적과 비용을 지불하는 방식에 사용자가 원하는 유형을 선택

 

Amazon EC2 인스턴스 유형

  • 인스턴스 유형은 크게 범용(M 시리즈), 컴퓨팅 최적화(C 시리즈), 스토리지 최적화(I 시리즈, D시리즈), CPU 최적화(G 시리즈), 메모리 최적화(R 시리즈)로 나눌 수 있다.
구분 내용
서비스명 Amazon EC2(Elastic Compute Cloud)
설명 클라우드에서 제공되는 크기를 조정할 수 있는 컴퓨팅 파워
주요 특징 - 한개에서 수천개의 인스턴스로 확장 가능
- 모든 공개된 AWS Region에서 사용 가능
- 필요에 따라 인스턴스 생성,시작,수정,중단,삭제 가능
- Linux/Windows OS에서 사용 가능, 모든 소프트웨어 설치가능
- 사용한 사용량에 대해서만 시간 단위 비용 과금
- 다양한 비용 모델(온디맨드, 스팟, 예약) 선택 가능
프리티어 - Linux/Windows 12, micro 인스턴스 월 750시간 제공
- 1GB 메모리, 32bit or 64bit 플랫폼 지원

4-3 Amazon EBS(Elastic Block Storage)

  • EBSEC2에 연결되어있는 Block Level스토리지 서비스, 서버용 하드디스크
    구분 내용
    서비스명 Amazon EBS(Elastic Block Storage)
    설명 EC2 인스턴스용 영구 블록 수준의 스토리지 볼륨으로 안정적이고 지연시간이 짧음
    주요 특징 - 크기는 1GB 단위로 1GB ~ 1TB까지 선택 가능
    - 크기/사용 기간을 기준으로 비용 과금
    - 마그네틱의 경우 발생하는 I/O횟수에도 비용 과금
    - EC2 인스턴스와 독립적으로 사용 가능하며, 다른 EC2 인스턴스에 교체 가능
    - 데이터는 영구적으로 저장되며, 원하는 가용영역(AZ)에 생성 가능
    - 백업된 스냅샷에서 EBS 볼륨을 생성/복원 가능(다른 AZ에도 생성가능)
    프리티어 - 30GB 범용(SSD) 또는 마그네틱 원하는 대로 조합
    - 2백만 I/O (EBS 마그네틱)
    - 1GB 스냅샷 스토리지
    - 가입후 12개월 이후 종료함

    Amazon EBS 볼륨 유형
    • EBS는 서비스 타입에 따라 크게 5가지 서비스로 분류 가능하다
    • 보통 EC2 서비스는 범용성, 가성비 → ‘범용 SSD’ 사용함
    볼륨 유형 범용 SSD 프로비저닝된 IOPS 처리량 최적화 HDD 콜드 HDD 마그네틱
    설명 다양한 트렌젝션 워크로드 처리 지연 시간에 민감한 고성능 처리 자주 액세스 하며 처리량 집약적 HDD 액세스 빈도 낮은 저비용 HDD 빈도가 낮으며 성능 낮은 HDD
    사례 부트 볼륨 I/O 집약적인 NoSQL, RDBMS 빅데이터, 로그처리 일별 스캔 횟수 작업 데이터 드문 데이터 액세스
    API 이름 gp2 io1 st1 sc1 standard
    볼륨 크기 1GB~16TB 4GB~16TB 500GB~16TB 500GB~16TB 1GB~1TB
    최대 IOPS 10.000 32,000 500 250 200
    최대 처리량 160MB/초 500MB/초 500MB/초 250MB/초 4~90MB/초
  • 4-4 Amazon EBS 스냅샷 활용
    • EBS 볼륨의 데이터스냅샷으로 만들어 Amazon S3백업 및 보관할 수 있는 기능
    • 컴퓨터의 하드디스크를 통째로 백업할 수 있는 기능
    • 백업 받는 스냅샷으로 다시 EBS 볼륨을 생성하거나, 다른 EC2로 연결하여 데이터를 복원
    스냅샷의 특징
    1. EBS 스냅샷진행 과정 중에도 EBS나 EC2의 서비스 중단 없이 기존 서비스를 사용 가능하다
    2. EBS 볼륨의 크기 조정에 사용될 수 있다. 보통 Disk 크기를 늘리면 기존 Disk 스냅샷으로 백업 후 신규 장착할 EBS의 크기를 늘려서 볼륨의 사이즈를 늘릴 수 있다.
    3. 스냅샷의 공유 기능을 활용하여 권한이 있는 다른 사용자에게 공유 가능하다
    4. 다른 리전으로 복사가 가능하다.

5. Amazon 보안 그룹(Security Group)


5-1. Amazon 보안 그룹

  • 보안그룹인스턴스에 대한 인바운드, 아웃바운드네트워크 트래픽을 제어하는 가상의 방화벽 역할을 한다.
  • EC2 인스턴스를 시작할 때 각 인스터스당 최대 5개의 보안그룹을 할당할 수있다.
  • 기존의 온프라미스에서 사용되고있는 방화벽의 정책과 유사한 기능
  • 단, 네트워크 트래픽에 대한 ‘허용’만 가능
  • 차단VPC의 기능 중 하나인 ACL(Network ACL)을 통해 서브넷수준에서 네트워크 흐름 제어

 

5-2 Amazon 보안 그룹의 주요 특징

 

1. 보안그룹은 생성 가능한 보안 그룹의 숫자와 규칙에 제한이 있다

  • 하나의 VPC당 생성할 수 있는 보안 그룹 개수는 기본 한도 500개
  • 각 보안 그룹당 추가 할 수 있는 규칙(Rule)의 개수는 50개
  • 네트워크 인터페이스5개의 보안 그룹을 적용할 수 있다.

 

2. 네트워크 트래픽을 위한 ‘허용(Allow)’ 정책은 있으나 ‘차단(Deny)’정책은 없다.

  • 일반적인 방화벽에서는 네트워크 허용,차단 가능하지만 보안그룹은 차단 정책 없음
  • 차단은 VPC의 기능 중 하나인 ACL(Network ACL)을 통해 서브넷수준에서 네트워크 흐름 제어

 

3. 인바운드 트래픽과 아웃바운드 트래픽을 별도로 제어할 수 있다.

 

4. 초기 보안 그룹 설정에는 인바운드 보안 규칙이 없다.

  • 그래서 처음 EC2생성하고 다른 EC2를 통신하기 원한다면, 해당 EC2와의 통신을 위한 인바운드 규칙을 추가하여한다.

6. 실습 : EC2와 EBS를 이용해서 나만의 서버 만들기


EC2 생성

EC2 생성

  • 먼저 AWS 로그인 하면 첫 화면이 나온다.

[서비스] → [컴퓨팅] → [EC2] 클릭

  • [서비스] → [컴퓨팅] → [EC2] 클릭

이름 및 태그 입력

이름 및 태그 입력

  • ec2-test

애플리케이션 및 OS 이미지 AMI 설정

  • Amazon Linux 2 AMI(HVM) - Kernel 4.14 SSD Volume Type (프리티어)

인스턴스 유형

  • t2.mircro (프리티어)

 

키 페어(로그인)

  • key-test
  • .ppk (뿌띠 사용)

네트워크 설정

  • 보안그룹에서 보안 그릅 규칙 추가해준다
  • 0.0.0.0/0 → 모든 네트워크를 허용해준다
  • ping 확인을 위해서임

스토리지 구성

  • 프리티어에서는 30GB 까지 사용할수 있음
  • gp2 → 범용 SSD의 API

EC2 인스턴스 생성완료

  • 5~10분 기다리면 생성되어있는거 확인
  • 스토리지 구성

 

 

인스턴스 실행 확인

 

뿌디 접속

 

IP는 퍼블릭 IPv4 주소 3.36.62.226
뿌디에 키페어를 넣어보자

 

 

 

Accept 누르면

 

 

ec2-user 입력 !

 

정상적으로 확인!

 

ping 명령어를 입력해보자

반응형
LIST
반응형
SMALL

1장 클라우드와 아마존 웹 서비스

 

1. 클라우드 컴퓨팅(Cloud Computing)


 

  • 인터넷이라는 통신 서비스를 활용한 컴퓨팅 서비스 종류의 하나로 개인용 컴퓨터가 아닌 인터넷을 통하여 원격 컴퓨터를 활용하는 기술
  • 개인용 컴퓨터보다 성능이 뛰어난 컴퓨터나 저장장치 등의 컴퓨터 자원을 다른 곳에서 빌려 사용 할 수있도록 처리해주는 IT 기술
  •  

 

2. 클라우드 컴퓨팅을 배워야 하는 이유


  • 이미 많은 기업이 클라우드를 도입하였거나, 도입을 검토하고 있다.
  • H/W를 데이터 센터에 넣고 운영/관리하는 일이 점점 줄어들 것이다.

 

3. 클라우드 컴퓨팅 서비스 이용 방식


IaaS

  • 물리적 서버(CPU, Memory, OS) 네트워크, 스토리지가상화하여 다수의 고객을 대상으로 유연하게 제공하는 인프라 서비스

PaaS

  • Web 기반의 서비스 또는 애플리케이션 등의 개발 및 실행을 위한 표준플랫폼 환경을 서비스 형태로 제공하는 서비스

SaaS

  • 구글의 Gmail이나 MS Office 365 등과 같이 응용프로그램인터넷 및 웹 브라우저를 통해 제공하는 서비스

 

4. 클라우드 컴퓨팅의 장점 및 혜택


  • 클라우드 컴퓨팅의 장점 및 혜택
    1. 초기 투자비용이 발생하지 않으며, 사용한 만큼 지불하면 됩니다.
    2. 규모의 경제를 통해 지속적인 가격 인하를 실현합니다.
    3. 미래에 필요한 인프라의 용량을 추정할 필요가 없습니다.
    4. 속도 및 민첩성이 향상됩니다.
    5. 데이터 센터 운영 및 유지 관리에 비용 투자가 필요하지 않습니다.
    6. 몇 분만에 전세계에 서비를 런칭하거나 배포할 수 있습니다.

5. 아마존 웹 서비스(Amazon Web Services)


  • 아마존 웹 서비스(Amazon Web Services)
    • 1994 년 7 월 어느날 제프 베조스 는 잡지를 보다가 인터넷 시장의 규모가 1 년 새 2,300 배 성장했다는 소식을 접한 후 사표를 내고 자신의 차고에서 온라인 쇼핑몰 창업을 하게 된다.
    • 설립 초기에는 카다브라 라는 이름으로 시작하였으나, 7개월 후 아마존 으로 사명을 변경하였으며, 1995 년 7 월 아마존 웹 사이트를 통해 첫 영업을 시작하였다.
    • 서비스 시작 이후 단 기간에 폭발적인 성장세를 거두었다
    • 설립 1년만에 회원수가 1,000 만 명을 넘어 섰으며 매출 51만 달러 (5억 6,000 만 원)를 달성하며 폭발적인 성장세를 이어갔다
    • 1999 년 아마존은 3억 달러를 투자하여 미국과 유럽 등에 물류센터를 확장하여 직원수가 7,600 명까지 증가하였다.
    • 2002 년 아마존은 자사의 데이터베이스와 서비스를 오픈 API 형태로 외부에 개방했다.
    • 이를 통해 다른 웹 사이트들이 가격과 제품의 상세 설명과 같은 정보를 아마존의 DB에서 골라올리고 아마존의 결제 시스템과 장바구니를 이용할 수 있게 했다.
    • 이것이 아마존 웹 서비스의 시작이었다.
    • 2006 년 아마존의 웹 서비스를 시간 단위로 외부 기업에 임대해주는 Elastic Compute Cloud(EC2) 다른 웹 사이트나 개발자의 사진, 문서 등 컴퓨터 파일을 아마존 서버에 저장하게 해주는 Simple Storage Service(S3) 를 소개했다.
    • 이런 서비스를 통해 신규 업체들은 자체적인 전자상거래 시스템을 직접 구입하거나 운영하는 대신 웹 서비스를 사용한 만큼만 돈을 내어 사용량을 마음대로 줄이거나 늘릴 수 있게 되었다.

 

6. AWS 주요 서비스

 

6-1 컴퓨팅 서비스


 

Amazon EC2(Elastic Compute Clould)

  • 앞으로 가장 많이 사용하게 될 가상화서버, 이는 다양한 형태의 타입과 서비스에 따라 적합한 사양을 선택할 수 있으며, 사용량만큼 비용을 지불하는 컴퓨팅 서비스

Amazon Auto Scaling

  • 서버의 특정 조건에 따라 서버를 추가/삭제 할 수 있게해주는 서비스로 서버 사용량이 많은 경우 추가로 생성하고, 사용하지 않는 경우 서버를 자동으로 삭제 할 수 있게 해주는 서비스

Amazon Lightsail

  • 간단한 가상화 프라이빗 서버 (VPS; Virtual Private Server)가 필요한 개발자에게 웹 사이트웹 애플리케이션배포하고 관리하는 기능과 컴퓨팅,스토리지,네트워크를 빠르고 손쉬우며 저렴한 제공

Amazon WorkSpaces

  • 데스크톱 가상화 서비스사내 PC를 가상화로 구성하여, 문서 및 테이블를 개인 pc에 보관하지 않고 서버에서 보관 관리 할 수 있도록 해주는 서비스

 

6-2 네트워킹 서비스


 

Amazon Route 53

  • 가용성과 확장성이 우수한 클라우드 기반의 DNS 웹서비스
  • 사용자의 요청AWS에서 실행되는 다양한 인프라에 효과적으로 연결
  • 사용자를 AWS 외부의 인프라로 전달하는 서비스도 Route 53에서 사용

Amazon VPC(Virtual Private Cloud)

  • 가상 사설 네트워크 인프라클라우드 내에 생성/구성
  • 네트워크를 이용한 접근제어(Security Group, NACL), DHCP 및 VPN연결, 인터넷 게이트웨이
  • 타 VPC와 다른 리전 간 VPC Peering 구성을 통해 보안성 및 안정성 높은 네트워킹 서비스를 제공

AWS Dircet Connect

  • 기존 On-Premise의 인프라와 AWS를 연결하는 전용선을 구성하여 낮은 지연시간으로 데이터 및 정보를 공유할 수 있게 하는 서비스
  • AWS-On-Premise를 연결하는 전용선 서비스

Amazon ELB(Elastic Load Balancer)

  • L4 서비스
  • 웹 서버 및 각종 서버에 사용량과 접속자가 많은 경우 트래픽에 대한 부하 분산을 통해 네트워크 트래픽을 인스턴스로 전달

 

 

6-3 스토리지 서비스


  • 여러 가지 용도로 사용할 수 있는 범용적인 스토리지 서비스데이터 보관 이외에도 정적 웹 사이트 호스팅 및 다양한 형태의 서비스로 활용 가능한 만능 스토리지 서비스

Amazon Glacier

  • 사용 빈도가 높지 않는 데이터저렴한 비용으로 장기 보관 할 수 있게 해주는 서비스로 가격이 저렴하고 무제한으로 데이터를 보관할 수 있는 장점

Amazon EBS(Elastic Block Storage)

  • 빠른 속도로 데이터를 저장 보관할 수 있는 서비스.
  • 주로 서버에 디스크로 추가하여 데이터를 보관 제공할 수 있으며, 기본으로 SSD 를 사용하여 데이터 입출력 속도가 매우 빠르고, 고성능의 서비스를 필요로 하는 스토리지 서비스에 적합한 서비스.

AWS Storage Gateway

  • On-Premise에 있는 데이터를 클라우드로 저장 보관하기 위한 연결

AWS Snowball

  • Import / Export 서버를 통해 대량의 데이터를 AWS로 이전할 때 네트워크로 전송하지 않고 디스크나 스토리지에 저장하여 물리적으로 전달하고 이를 업로드하여 주는 서비스로 대량의 데이터를 AWS로 업로드할 떄 유용한 서비스

 

6-4 데이터베이스 서비스


Amazon RDS(Relational Database Services)

  • 관계형 데이터베이스 서비스MSSQL, Oracle, MySQL, MarinaDB, PostgreSQL RDBMS 서비스를 사용자직접 관리하지 않고 Amazon에서 제공하는 서비스를 이용하여 데이터베이스를 이용할 수 있도록 해줌

Amazon DynamoDB

  • NoSQL서비스로 대량의 데이터를 손쉽게 저장할 수 있고, 이렇게 저장된 데이터를 추가 분석 서비스와 연게 활용할 수 있도록 확장할 수 있는 서비스

Amazon ElastiCache

  • In-Memory 기반의 Cache 서비스빠른 속도를 필요로 하는 서비스와 연계하여 높은 응답속도와 신뢰성

 

6-5 분석 플랫폼


  • 대량의 데이터를 저장 분류 할 수 있는 서비스
  • 다양한 규모스토리밍 데이터비용 효율적으로 처리할 수있는 기능
  • 애플리케이션 요규사항에 따라 가장 적합한 도구를 선택할 수 있는 유연셩 제공

Amazon Redshift

  • 데이터 웨어하우스 데이터 레이크 전체에 걸쳐 간단하며, 효율적으로 비용 모든 데이터를 분석할 수 있는 빠르고 확장 가능한 데이터 웨어하우스

Amazon EMR

  • 저장된 대량의 데이터를 분류하고 분석하여 필요한 정보를 뽑아낼 수 있도록 다양한 서비스를 제공합니다.

 

 

6-6 애플리케이션 서비스


Amazon CloudSearch

  • 검색 서비스이며 , SWF는 워크플로우 서비스, SQS는 큐서비스를 활용한 대량의 데이터를 할 수 있도록 해주는 서비스

Amazon SES(Simple Emiall Services)

      • 외부의 대량의 메일을 발송하는 서비스

Amazon Elastic Transcoder

 

    • 동영상을 인코딩할 수 있는 서비스

 

7. 실습 : AWS 회원가입 및 AWS로의 항해 시작하기


  • AWS 회원가입 및 로그인
    • 회원가입 후 로그인시 루트 사용자, IAM 사용자 두개로 선택 할 수 있다. 뭔 차이일까?
    루트 사용자
    • 우리가 일반적으로 실습 환경을 구축한다거나 개인 서버를 오픈 한다고 하면 AWS 회원가입이나 로그인을 수행한다.
    • 우리가 AWS 계정으로 회원가입이나 로그인을 수행하면 우리는 모든 권한을 갖는 SSO(Single Sign In) ID로 시작하게 된다.
    • 이 말은 우리가 AWS의 모든 자원과 리소스를 이용할 수 있다는 이야기가 되며, 그 말은 모든 자원을 구매할 수 있다는 소리이다.
    • 만약 악의적인 공격자의 공격으로 우리의 계정이 탈취된다면 어떻게 될까?
    • 아마 악의적인 공격자는 돈을 벌기 위해 AWS의 아주 비싼 컴퓨터를 구매해서 엄청난 비트코인 채굴기를 설치해 채굴을 돌릴 것이다.
    • 그럼 우리는 천문학적 금액으로 해커의 비트코인을 채굴해주는 컴퓨팅 서비스를 이용하게 될 것이고, 결국 막대한 피해가 생기게 된다.
    • 그래서 AWS는 공식적으로 루트 사용자 계정을 사용하지 않는 것을 추천한다.
    IAM (Identity and Access Management)
    • AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스이다.
    • 우리는 IAM을 사용해서 각각의 행동에 따른 사용자들을 나눠 하나의 인스턴스를 이용
    1. AWS 계정의 공유 액세스

  • 우리가 팀 내에서 하나의 인스턴스를 이용한다고 생각하면 일반적인 생각은 다음과 같다.
  • 하나의 아이디와 비밀번호를 팀원끼리 공유.
  • 그럼 결국 ID PW는 보안에 취약해지게 된다.
  • 하지만 IAM을 사용한다면

  • 이렇게 IAM 증명서로 사용자들은 Root Account를 몰라도 서로 공유하는 인스턴스에 접근할 수 있게 된다.

 

2. 세분화된 권한

  • 위에 사진처럼 IAM 계정에는 한 가지의 일만 할 수 있는 것이 아니다.
  • 여러 리소스에 접근할 수 있는 권한을 서로 다르게 줄 수도 있는 것이다.

3. 무료

  • 이렇게 각각의 접근 권한을 나누는 기능은 무료이다.
  • 하지만 이런 권한을 가지고 AWS 리소스를 이용한다면 당연한 이야기지만 요금이 부과된다.
반응형
LIST
반응형
SMALL

Setting Latest AMI


data "aws_ami" "ubuntu_latest" {
  most_recent = true
  owners      = ["099720109477"] #Canonical
  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-bionic-18.04-amd64-server-*"]
  }
  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }
}

data "aws_ami" "amzn2_lastest" {
  most_recent = true
  owners      = ["amazone"]
  filter {
    name   = "name"
    values = ["amzn2-ami-hvm-*-x86_64-ebs"]
  }

aws_ami

  • AWS 내 ami를 셋팅할 수 있는 명령어입니다.

data

  • Terraform 외부에서 정의되거나 다른 별도의 Terraform 구성에 의해 정의되거나 기능에 의해 수정된 정보를 사용할 수 있습니다.

most_recent

  • 둘 이상의 결과가 반환되는 경우 가장 최근의 AMI를 사용한다는 것을 의미합니다.

owners

  • 검색을 제한할 AMI 소유자 목록. 최소 1개의 값을 지정해야 합니다.

filter

  • 필터링할 하나 이상의 이름/값 쌍입니다

 

Create EC2 (Bastion)


resource "aws_instance" "terraform_bastion" {
  ami                    = data.aws_ami.ubuntu_latsest.id
  instance_type          = "t2.micro"
  key_name               = aws_key_pair.aws_bastion_key.key_name
  vpc_security_group_ids = ["${aws_security_group.terraform_bastion_sg.id}"]
  subnet_id              = aws_subnet.terraform_public_subnet.0.id
  tags = {
    Name = "${var.company_name}-${var.project_name}-${var.environment}-bastion"
  }

}

aws_instance

  • AWS 내 EC2를 생성하는 명령어입니다.
  • AMI, Instance type, key, Subnet(첫 번째로 선택), SG 선택해줍니다.

ami

  • 인스턴스를 생성할 ami의 id입니다.

vpc_security_group_ids

  • 하나의 인스턴스에는 여러개의 SG을 넣는 것이 가능하기 때문에 배열로 생성합니다.

 

Create Launch_Config


resource "aws_launch_configuration" "asg_configuration" {
  image_id        = data.aws_ami.amzn2_lastest.id
  instance_type   = "t2.micro"
  key_name        = aws_key_pair.aws_ec2_key.key_name
  security_groups = [aws.security_group.terraform_sg.id]
  depends_on      = [aws_security_group.terraform_sg]
  lifecycle {
    create_before_destory = true
  }
  name = "${var.company_name}-${var.project_name}-${var.environment}-asg-configuration"

}

aws_launch_configuration

  • Auto Scaling을 통해 생성될 EC2, 생성할 때 각 Instance에 적용할 Launch Configuration을 생성합니다.

depens_on

  • 리소스들의 실행 순서를 정해줄 수 있는 명령어입니다.
  • depens_on을 사용 하는 이유?
  • SG이 생성되기도 전에 resource를 생성하려고 하면, 존재하지 않는다는 에러가 발생할 수 있기 때문에 이와같이 의존성을 부여하는 것입니다.

lifecycle

  • 만일 재생성되어야 한다면 새로운 인스턴스 먼저 생성후 예전 인스턴스를 지우도록 합니다. → 재생성으로 인한 downtime이 없도록 합니다.

 

Create Autoscaling Group


resource "aws_autoscaling_group" "terraform_asg" {
  launch_configuration = aws_launch_configuration.asg_configuration.id
  health_check_type    = "EC2"
  vpc_zone_identifier  = aws_subnet.terraform_private_subnet.*.id

  min_size = 2
  max_size = 5
  tag {
    key                 = "Name"
    value               = "${var.company_name}-${var.project_name}-${var.enviroment}-ec2"
    propagate_at_launch = true
  }
  name = "${var.company_name}-${var.project_name}-${var.enviroment}-asg"
}

aws_autoscaling_group

  • AWS 내 Autoscaling group을 생성하는 명령어입니다.

health_check_type

  • EC2 or ELB 로 작성 가능하며 상태 확인이 수행되는 방식을 선택합니다.

min_size/max_size

  • Autosacaling으로 생성될 인스턴스의 최소/최대 개수를 나타냅니다.

propagate_at_launch

  • ASG를 통해 시작된 Amazon EC2 인스턴스로 태그 전파 활성화

 

Create ELB


resource "aws_lb" "terraform_nlb" {
  internal           = false
  load_balancer_type = "network"
  subnets            = aws_subnet.terraform_private_subnet.*.id
  name               = "${var.company_name}-${var.project_name}-${var.environment}-nlb"

}

aws_lb

  • AWS 내 LB 생성하는 명령어입니다.

internal

  • 외부 LB인지, 내부 LB인지를 구분

load_balancer_type

  • application(default)/network/gateway

 

Create Target Group


resource "aws_lb_target_group" "terraform_lb_tg" {
  port        = 80
  protocol    = "TCP"
  vpc_id      = aws_vpc.terraform_vpc.id
  target_type = "instance"

  health_check {
    port     = "80"
    protocol = "TCP"
  }
  name = "${var.company_name}-${var.project_name}-${var.enviroment}-tg"
}

aws_lb_target_group

  • AWS 내 Target Group을 생성하는 명령어입니다.

target_type

  • Target의 대상을 설정해줍니다. (instance(default)/ip/lambda)

 

Create Listener


resource "aws_lb_listener" "terraform_lb_Listener" {
  load_balancer_arn = aws_lb.terraform_nlb.arn
  port              = 80
  protocol          = "TCP"

  default_action {
    target_group_arn = aws_lb_target_group.terraform_lb_tg.arn
    type             = "forward"
  }
}

aws_lb_listener

  • AWS 내 LB Listener 생성하는 명령어입니다.

Listerner란

  • 로드 밸런서가 등록된 대상으로 요청을 라우팅하는 방법을 결정하는 역할을 합니다.

default_action

  • 기본 작업에 대한 구성 블록입니다.

type

  • 라우팅 작업의 유형입니다.

forward

  • 받아들인 트래픽을 target group으로 전달하라는 명령어입니다.

 

Attatch Loadbalancer to AutoScaling Group


resource "aws_autoscaling_attachment" "name" {
  utoscaling_group_name = aws_autoscaling_group.terraform_asg.id
  alb_target_group_arn  = aws_lb_target_group.terraform_lb_tg.arn

}

  • 생성한 asg과 lb를 연결시킵니다.

 

 

Troubleshooting

  • apply 를하고 destory를 진행하지 않아 생김
  • destory → apply 시 해결

  • key-pair 생성 후 커멘드창에서 aws로 전송하는 작업을 진행하였음
  • 테라폼에서 전송해주므로 따로 aws를 전송할 필요는 없었음
반응형
LIST

'Clould > Terraform' 카테고리의 다른 글

Terraform 실습 #2  (0) 2022.07.28
Terraform 실습 #1  (0) 2022.07.28
Terraform 설치  (0) 2022.07.28

+ Recent posts