[AWS_2] EC2 & S3

1. create EC2 instance

  • EC2(Amazon Elastic Compute): 확장식 컴퓨팅
    • instance: 가상 컴퓨팅 환경
  • AMI(Amazon Machine Image): 서버에 필요한 OS, software 등 구성된 상태로 제공되는 template to launch instance

1) EC2 launch instance(설정 순)

  • AMI 종류: centos + compiler, centos + software, … 여러종류
  • instance type
    • Ephemeral(수명이 짧은/단명하는): virtual machine instance 파괴시 루트/임시디스크 데이터 삭제
    • Block storage(EBS, Elastic Block Storage): 영속적 디스크 영역
    • 가상 서버 리소스 ~ 블록스토리지 간 네트워크 성능
      • IOPS: 초당 input/output
      • 스루풋(Throughput): 초당 전송 대역, AWS instance type에 따름
      • SR-IOV(Single Root I/O Virtualization)
        • 각 가상NIC에서 오는 명령을 하나의 하이퍼바이저가 순차 처리하므로, 병목 현상 발생
        • before: multiple 가상머신 vs 하나의 하이퍼바이저(물리 NIC, Network Interface CARD)
        • after: vs 물리 NIC + PCI 지원
  • Network: VPC/Public & Subnet: Zone
  • Advanced Details: script to run right after lauching instance

2) EC2 instance 응용

  • key pair = ID
  • monitoring으로 CPU 상태 파악
  • template: template은 job 순서 보관
    • create template from instance > launch template
  • AMI: Drive를 image 형태로 보관 -> 인스턴스 생성
    • create image
  • spot instance: on demand 가격보다 저렴하게 사용가능한 미사용 EC2 instance
    • launch instance > configure > purchaseing option: Request Spot Instance
    • terminate 위험 있음. 항상 image 만들어 둘것

용어

  • 하이퍼바이저(hypervisor): host컴퓨터에서 다수의 운영 체제(operating system )를 동시에 실행하기 위한 논리적 platform
  • VM(virtual machine)

2. Object storage(S3): 파일 단위로 데이터 저장

  • 파일 단위로 데이터 저장하는 data store
  • HTTP/HTTPS protocol사용하는 파일 서버와 비슷
    • 내부에 HTTP 서버를 내장
    • 즉, 오브젝트 storage가 HTTP 서버/파일시스템/마운트기능 등 모두 포함
    • vs 서버-블록 storage: 서버 resource - 블록 storage 연결필요
      • 사용해서 웹사이트 구성시, 서버의 OS에 Apache,Nginx, IIS 등의 웹 서버 설치/공개할 파일 필요
  • 버킷: S3에 저장된 객체에 대한 컨테이너. $\approx$ Root 폴더
    • 모든 객체는 어떤 버킷에 포함됨
    • 버킷 이름은 globally unique
  • 객체: 버킷 안에 저장되는 파일
    • 크기: 1Byte ~ 5TB
    • 객체마다 URL 존재 $\rightarrow$ 각각의 접근 권한 설정 가능 & wget으로 다운 가능

1) 특징

  • tenant(관리자 계정 또는 IAM 사용자/그룹)는 자신에게 속한 S3 버킷을 모든 region/가용영역(AZ, AvailabilityZone: 데이터센터) 사용할 수 있음
  • 계층구조 지원 안함, 단 가상의 directory 별명을 덧붙여 파일명 수식(prefix)
    • dir02/file01: idr02는 수식어에 불과함
  • 덮어쓰기 지원 안함(삭제 후 재생성 필요)
  • 정적 컨텐츠 저장(동영상, 파일, ..)

2) Class

  • 이용빈도에 따라 class&과금이 달라짐
  • S3 standard: Disk 깨질 위험 없음 $\rightarrow$ S3 IA(Infrequently Accessed) $\rightarrow$ S3 one Zone IA

3) 생성

  • Properties
    • versioning: 저장된 obj에 버전 번호 붙어 관리. 같은 이름의 파일은 덮어쓰기 없이, 새로운 버전 번호로 저장됨
    • static website hosting: 오브젝트 storage를 간이 웹 서버처럼 사용
  • Permission
  • Management
    • Lifecycle: 오브젝트 삭제주기/ S3 class 자동 trainsition 등

4) 사용

  • select: 데이터 select. return data용량에 따라 과금.
    • 정말 급할 때만 사용

cf. Storage 종류

  • 블록 storage(EBS)
    • storage 관점에서는 block 단위로 데이터 인식
    • 서버 관점에서는 storage를 디바이스로 인식
    • 볼륨: 실제 서버에 연결되는 디스크, 영속(vs ehemeral 휘발성 디스크)
    • 스냅샷: 볼륨을 복제. 사용하려면 다시 볼륨으로 복원 후, 서버에 연결.
  • 네트워크 storage
  • 오브젝트 storage

3. Ec2 s3(버킷) mount

  • 물리적 분리되어 있으나, 논리적으로 연결
  • resource 간 연결은 IAM으로 권한 설정
  • mount 전에 꼭 IAM 권한 설정 할 것!

  • s3 mount code

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    sudo yum update -y
    sudo yum install golang fuse -y
    vi .bash_profile
    export GOROOT=/usr/lib/golang
    export GOBIN=$GOROOT/bin
    export GOPATH=/usr/local/golang
    export PATH=$PATH:$GOROOT/bin
    source .bash_profile
    1. goofys 설치
    $ sudo yum install git -y
    $ sudo go get github.com/kahing/goofys
    $ sudo go install github.com/kahing/goofys
    $ sudo su -
    # mkdir s3Temp
    # /root/go/bin/goofys <bucket> <mountpoint>
    # /root/go/bin/goofys <bucket:prefix> <mountpoint>
    # GOPATH/bin/goofys <bucket> <mountpoint>
    # GOPATH/bin/goofys <bucket:prefix> <mountpoint>
  • test code

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    [ec2-user@ip-172-31-1-106 ~]$ sudo go get github.com/kahing/goofys
    [ec2-user@ip-172-31-1-106 ~]$ sudo go install github.com/kahing/goofys
    [ec2-user@ip-172-31-1-106 ~]$ sudo su -
    [root@ip-172-31-1-106 ~]# mkdir s3Temp
    [root@ip-172-31-1-106 ~]# /root/go/bin/goofys bhr-dee2 s3Temp
    2019/02/26 13:18:57.203981 main.FATAL Unable to mount file system, see syslog for details
    [root@ip-172-31-1-106 ~]# GOPATH/bin/goofys bhr-dee2 s3Temp
    -bash: GOPATH/bin/goofys: No such file or directory
    [root@ip-172-31-1-106 ~]# cd s3Temp/
    [root@ip-172-31-1-106 s3Temp]# ls
    apart.json movies.csv
    [root@ip-172-31-1-106 s3Temp]# ls -la
    total 502
    drwxr-xr-x 2 root root 4096 Feb 26 13:18 .
    dr-xr-x--- 5 root root 127 Feb 26 13:15 ..
    -rw-r--r-- 1 root root 50402 Feb 26 13:00 apart.json
    -rw-r--r-- 1 root root 458390 Feb 26 12:55 movies.csv
    [root@ip-172-31-1-106 ~] # umount s3Temp
    [root@ip-172-31-1-106 ~]# /root/go/bin/goofys bhr-dee2:new1 s3Temp
< !-- add by yurixu 替换Google的jquery并且添加判断逻辑 -->