AWS

AWS

클라우드 서비스

물리적 자원 혹은 논리적 자원을 대여하는 것

만약 서버를 하나 구축한다고 가정했을 때

  1. 자신의 집에 장비를 직접 구축
  2. 클라우드 서비스에서 자원을 대여받는 것
    • 클라우드 서비스의 장점
  3. 장비가 필요없음 따라서 구매나 관리가 필요없음
  4. 서버의 확장 또는 축소에 대응하기 좋다.

애플리케이션 구축에 필요한 서비스들을 돈을 주고 대여하는 것

비용절감에 매우 효과적이다.

시작 전 계정 생성 및 계좌 등록 진행

1. EC2

Elastic Compute Cloud의 약자이며 물리적인 자원을 대여해주는 것

특징

  • 원하는 만큼 CPU ,디스크 등 자원을 선택하여 대여할 수 있음
  • 여러가지 OS 선택이 가능하다.

EC2 요금

  • 온디맨드 : 쓰는만큼 돈을 내는 것 운영체제와 지역에 따라 금액이 달라지니 확인 필
  • 인터넷에서 Amazon EC2로 데이터 전송 시 무료
  • Amazon EC2에서 인터넷으로 데이터 전송 시 1GB/월 무료 이후 참고
  • 저장공간 , 고정IP등 추가적인 요금 확인

EC2의 자원 생성

인스턴스 1개가 컴퓨터 1개라고 생각
프리 티어 사용가능으로 셋팅
  1. AWS 웹 브라우저 접속 후 아시아 태평양(서울)로 지역설정
  2. 서비스에서 EC2를 찾은 후 인스턴스 탭에서 인스턴스 시작 클릭
    • Quick start -> Amazon Linux(OS)로 선택
    • 키 페어 설정 저장 된 파일을 잘 보관해야 함
    • 나머지 기본 값으로 진행

EC2의 어플 배포

Node.js 어플

  1. 생성한 인스턴스 우측 하단에 Iv4 퍼블릭 IP주소를 복사
  2. 터미널 실행
    • 다운로드 받은 keypair가 있는 폴더로 이동
      chmod 400 testKey.pem
      
    • 위 명령어로 400권한으로 조정
      원격 제어
ssh -i testKey.pem ec2-user@13.124.89.173
  • ssh -i 키페어파일 ec2-user@IV4 퍼블릭 IP
  • 이후 등록 확인 메시지 yes 입력
  1. NVM(Node Version Manager).sh 설치

Github_link

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
  • ssh 터미널 창에서 아래 명령어로 설치
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
  • 환경변수 설정
nvm install --lts
  • –lts (안정적인 버전 사용)을 사용하여 노드 다운로드
nvm use --lts
  • 위 명령어로 –lts 버전으로 스위칭
  1. App 폴더 생성
    mkdir App
    cd App
    
  2. Express 패키지 설치
npm i -S express
  1. Node.js 앱 생성
vi index.js
  • vi 편집기를 이용하여 다음 코드 작성
const express = require('express')
const app = express()

app.get('', async (req, res) => {
    res.send("Hello World\n")
})

app.listen(3000, () =>{
    console.log("App is listening 3000 port")
})
  • esc -> :wq로 저장 후 닫기
node index.js 
  • index.js 파일 실행 후 확인
  1. 동일 인스턴스 내 Get 요청 보내기
  • 위 2번 과정 중 ssh명령어를 이용하여 추가로 동일한 인스턴스 접근 (터미널 2개)
curl http://localhost:3000
  • 위 명령어로 인스턴스 내 로컬호스트 get요청 후 Hello World 결과 확인
  1. 외부에서 Get 요청
  • AWS 인스터스 화면에서
    • 인스턴스 설명 -> 자신의 보안그룹 선택
  • 인바운드 규칙 편집
    • 규칙 추가
    • 3000포트 추가
    • 0.0.0.0/0
    • 설명 : node.js
    • 규칙 저장

      전세계에 3000포트 개방

  • 자신의 퍼블릭 IP 13.124.89.173:3000으로 확인

EC2 자원 삭제

  1. keypair.pem파일 삭제
  2. 아마존 콘솔 -> 인스턴스 종료
  3. 추가적으로 만든 보안그룹이 있다면 삭제
    • 인스턴스가 종료된 이후에 삭제가 가능
  4. EC2 대시보드 -> 삭제 확인
    • 바로 삭제되지 않고 어느정도 시간이 소요된 후 삭제가 될 수있다.

———————–EC2

S3

Simple Storage Service

S3는 하드디스크와 같은 저장공간이라고 생각하면 된다. 보관뿐만아니라 파일 서버로도 사용이 가능하며 자동으로 유지 기능도 제공해준다. CRUD (Create Read Update Delete)를 할 수 있도록!

S3 목적

  • 중요한 프로젝트에서 중요한 내용이 들어있는 중요한 파일을 안전하게 관리하기 위함

S3 구성요소 3인방

  1. Bucket
    • 하나의 프로젝트가 Bucket
  2. Folder
  3. Object(File)
    • S3에서는 File + 부가적인 정보를 Object라고 표현한다.
    • 쉽게 Object = file이라고 생각하자

S3 버킷(Bucket) 생성

  • 버킷 만들기 후 이름을 만들고(중복 불가) 진행
  • 버전 관라 : 수정된 과거 내용도 보관 (설정 X)
  • 서버 액세스 로깅 : 웹서버로 이용시 접근 내용을 기록 (설정 X)
  • 기본 암호화 : 파일을 업로드할 때 암호화된 상태로 보관 (설정 X)
  • 퍼블릭 액세스 설정: 파일을 공개파일로 설정
    • 새 퍼블릭 ACL 및 퍼블릭 객체 업로드 (체크 해제)
    • 퍼블릭 ACL을 통해 부여된 퍼블릭 액세스 권한 제거(체크 해제)
  • 버킷만들기
    수정 가능

S3 폴더(Folder) 생성

  • 버켓 -> 객체 탭 -> 폴더만들기
  • 이름바꾸기는 어려움

S3 객체(Object) 생성

  • 원하는 폴더 또는 파일을 드래그앤드랍
  • 중요도/속도/안정성 등에 따라 비용이 달라진다 자신의 상황에 맞게 스토리지 클래스 설정
    • 스탠다드로 진행

객체(Object) 공유

  • 객체 클릭 후 객체 개요
    • 객체 URL로 공유
  • 접근 거부 시 권한 변경 방법(1)
    • 객체 클릭 후 권한
    • 객체 소유권 - ACL 활성화
    • ACL(액세스 제어 목록) 모든 사람(퍼블릭 액세스) 읽기 체크
  • 접근 거부 시 권한 변경 방법(2)
    • 객체 클릭 후 우측 상단(객체 작업)
    • ACL을 사용하여 퍼블릭으로 설정 클릭

S3 스토리지 클래스

  • 스탠다드
    • 가장 많이 사용하며 잘 모른다면 사용
  • 스탠다드 -IA
    • 수명이 길고 자주 액세스하지 않는 데이터
  • 단일 영역 -IA
    • 스탠다드 IA와 비슷하지만 중요하지 않은 데이터
  • 중복 감소(권장 안함)
    • 권장 안함…
  • Amazon Clacier
    • 영수증 등 보관만 하는 용도 (꺼내오는데 오랜시간이 걸림) 모든 클래스는 장.단점이 존재하며 자신한테 맞는 클래스를 정하는게 중요
  • 저장공간, 사용, 전송 요금등이 다 다르다.
  • 모든 데이터 수신은 무료이다. 송신은 요금표 참조
  • 저장/GET/PUT에 따라 요금이 다름

———————–S3

CloudFront

ColudFront = Cache Server + CDN

Cache

  • 사용자에게 1번 보낸적이 있다면 그 기록을 저장해서 다음번에 그 데이터를 이용

CDN

Content Delivery Network

  • 전세계 어디에 있던지 빠르게 서비스를 제공
  • 전세계에 있는 엣지 로케이션을 통해 사용자에게 웹 서비스를 제공

EC2로 만든 웹서버를 이용하여 실습

CloudFront 생성

  1. 서비스 -> 네트워킹 및 컨테츠 전송 -> CloudFront 클릭
  • 요청 Clinet -> Cloud Front(Distribution) -> Web Server(Origin)
  • 전달 Clinet <- Cloud Front <- Web Server
  • 이후 동일한 요청에 대해서 Clinet <-> Cloud Front
  1. CloudFront 배포 생성
    • 원본 도메인 선택 : 웹서버 주소 (도메인 만)
    • HTTP Port : Origin(포트 번호) 위 2가지만 설정 후 생성

#일반적인 웹서버보다 더 빠른 서비스 제공이 가능하나 동적으로 반응하지는 못함 즉 신선도가 떨어짐!! 이를 해결해야 함

캐쉬 설정

만들어진 CloudFront 탭 -> 행동 클릭 -> Object Caching : Use Origin Cache Headers

WEB Browser -> Colud Front -> WEB Server

  • Chche-Control : max-age = 60
    • 60초동안 유효하니 Server에게 다시 요청 필요없음 WEB Browser <- Colud Front <- WEB Server

CloudFonrt는 캐쉬를 24시간동안 유지한다 이 때 웹서버에 코드에서 캐쉬 유효시간하고 맞춰주는 작업이 필요하다.

캐쉬 무효화

  • Create Invaltidation : 파일 무효화
  • index.php(무효화 하려는 파일 혹은 경로) 유료 시스템임

———————–CloudFront

RDS

Amazon Relational Database Service

데이터베이스 생성

  1. 서비스 -> 데이터베이스 -> RDS -> 인스턴스 생성
  2. RDS는 여러개의 관계형데이터베이스를 빌려줌
    • MySQL 설정 -> 프리티어 옵션만 선택(무료)
  3. DB 인스턴스 클래스
    • 데이터베이스 컴퓨터의 사양 설정
    • 프리티어로 설정했기때문에 나머지는 선택불가
    • 언제든지 업그레이드 가능
  4. 다중 AZ배포 (Availiabilty Zone)
    • 서로 다른 가용성 지역에 RDS DB 생성
    • 데이터의 유실을 방지
    • 비용 2배
  5. 스토리즈 유형
    • 데이터를 저장하는 디스크 범용(SSD)제공
    • 용량이 커지면 요금도 올라감
    • 용량이 커지면 속도도 올라감 프로지버닝된 IOPS(SSD) : 더 비싸지만 빠르며 용량과 속도를 따로 설정이 가능하다.
  6. 설정 -> 정보 입력

  7. 고급 설정 구성 -> 네트워크 및 보안
  • VPC : 외부로부터 독립된 안전한 네트워크를 구성
    • 같은 VPC안에 EC2를 사용하여 안전하게 접근가능
  • 퍼블릭 액세스 가능 : 같은 VPC안에서 허가된 인원만 접속가능
  1. 백업 보존 기간 설정 가능

퍼블릭 방식으로 접속

  1. 생성된 RDS 수정 -> 퍼블릭 액세스 가능을 즉시 적용하여 수정

  2. 엔드포인트 - > 데이터베이스 주소

  3. mysql -h 데이터베이스 주소 -u 생성시 아이디 -p -> 비밀번호 입력 후 접속

  • 접속이 안될 시 보안그룹에서 허용범위가 달라서 그럴 수 있음
    • 보안그룹 -> 인바운드 -> 유형(MySQL)선택 -> 소스(위치무관 또는 내 IP(안전)) -> 저장

비공개 상태로 접속

같은 VPC안에서 EC2인스턴스가 RDS에 접속할 수 있게하는방법 (상당히 안전)

  1. 기존 퍼블릭 액세스 가능성을 아니요를 선택 후 즉시 적용하여 수정
  2. 보안그룹 -> 인바운드 -> 모두 설정 제거 (아무것도 없게)

  3. 가장 저렴한 EC2 인스턴스를 생성
    • 네트워크 VPC를 RDS와 같은 값으로 설정
    • 퍼블릭 IP 자동 할당 -> 활성화
    • 보안그룹 : 22포트(SSH 방법)
    • 생성
  4. 퍼블릭 주소 또는 DNS 주소로 원격제어 시작
ssh ubuntu@주소 -i keypare.pem
  1. mysql 설치 필요
sudo apt update
sudo apt install mysql-clinet
  1. RDS 에서 엔드포인트 주소 복사
mysql -h엔드포인트 주소 -이름 -p 

접속 불가 -> 보안그룹 수정 필요

  1. 보안그룹 등록 (2가지 방법 존재하며 2번 추천)
      1. EC2 인스턴스 -> IP주소를 RDS 보안그룹에 등록
      1. EC2 인스턴스가 속해 있는 보안그룹 접속 후 보안그룹 아이디를 복사
    • RDS 보안그룹 -> 인바운드
    • 유형(MySQL)
    • 소스 : 복사해둔 EC2 보안그룹 등록

6번 명령어 재실행

항상 EC2를 경유해서 RDS를 접속해야한다는 불편함은 존재하지만 그만큼 안전성이 증가한다.

모니터링

RDS -> CloudWatch(컴퓨터의 하드웨어)

  • DB 연결: 클라이언트가 DB에 접속하는 횟수
  • 여유 스토리지 공간 : DB에 저장할 수 있는 공간
  • 사용 가능한 메모리 : 메모리가 꽉 차있으면 느림
  • IOPS 쓰기/읽기 : Input Output Per Second 초당 입출력

확장 모니터링(유료 서비스)

실시간으로 프로그램의 현재상황을 전달해줌 훨씬 더 정교함

———————–RDS

——————————————AWS