EBS(Elastic Block Store) Volume
EBS volume은 네트워크를 통해 접근할 수 있는 드라이브로, instance에 부착하고 뗄 수 있다. Instance의 저장공간으로 작용하면서도 instance들이 terminate되더라도 데이터를 유지할 수 있도록 한다. 마치 네트워크의 USB같이 생각하면 된다.
특징
- EBS 한 개는 주로 한 instance에 부착되어있지만, 특정 EBS volume에 한해서는 여러 개의 instance에 부착할 수 있는 'multi-attatch' 기능을 제공한다.
- 한 availability zone에 제한적이다
- us-east-1a에 있는 EBS volume을 us-east-1b에 있는 인스턴스에 부착할 수 없다.
- 만약 다른 AZ로 옮기고 싶다면, snapshot을 찍어야 한다.
- 하드웨어 드라이브가 아니고 네트워크를 통해 접근/소통해야 하기 때문에 latency가 발생할 수 있다.
- 미리 설정을 정의해야 한다
- 드라이브이기 때문에 미리 얼만큼의 GB를 쓸지, 그리고 IOPS(I/O operations per second)는 어느정도로 할지를 정의해야 한다.
- 사용자가 정의한 설정대로 비용이 청구된다
- 한 인스턴스에 여러 개의 EBS volume이 부착될 수 있다
- IO
- gp2: IO increases if the disk size increases
- gp3 & io1: can increase IO independently
EBS Multi-Attatch: io1/io2 family
Multi-attach 기능은 같은 EBS volume을 같은 AZ에 있는 여러 인스턴스에 부착할 수 있는 기능을 의미한다. 각 인스턴스는 높은 성능의 volume에 full read&write 권한을 가진다. 즉, 모든 인스턴스들이 동시에 Read & write할 수 있다는 것이다.
Use-case
- achieve higher application availability in clustered linux applications (ex. Teradata)
- when applications must manage concurrent write operations
한계
- 한 EBS volume은 최대 16개의 인스턴스에만 동시 부착될 수 있따
- 다른 AZ에 있는 인스턴스에 부착할 수 없다
- cluster-aware하지 않은 파일 시스템 사용해야 한다.
Delete on termination attribute
인스턴스가 삭제될 때 EBS를 삭제할지 유지할지에 대한 설정이다. 디폴트는
- 루트 EBS volume는 삭제 (attribute enabled)
- 부착된 다른 EBS volume들은 유지 (attribute disabled)
이는 AWS consle/AWS CLI를 통해 설정할 수 있다.
EBS Snapshots
이는 EBS volume의 백업같은 것으로, 특정 시점의 EBS volume을 사진찍은 것처럼 백업본을 EBS snapshot이라고 부른다. Snapshot을 만들 때 EBS volume을 뗀 이후에 하는 것이 권장되며, AZ와 지역에 상관없이 snapshot을 복사할 수 있다.
기능
EBS Snapshot Archive
- snapshot을 'archive tier'로 옮길 수 있는데, 이렇게 하면 비용을 75% 절감할 수 있다
- 다만 아카이브에서 snapshot을 복구하는데 24 ~ 72 시간 걸린다.
Recycle Bin for EBS snapshots
- snapshot을 실수로 삭제했을 시 삭제본을 어느 기간 동안 보관하는 규칙들을 설정할 수 있다
- 유지 기간은 하루에서 1년까지 설정할 수 있다
Fast Snapshot Restore (FSR)
- snapshot을 지체 없이 바로 initialize하고자 할 때 쓸 수 있는 기능이다
- 비싸다는 단점
EBS volume을 다른 AZ로 옮기고자 할 경우
- Take snapshot
- restore snapshot to another AZ
EBS Encryption
EBS volume이 암호화되어있으면
- volume 내에 있는 데이터가 암호화되어있음
- 인스턴스와 volume 사이에 오고가는 데이터 또한 암호화되어있다
- 모든 snapshot은 암호화되어있다
암호화 및 비암호화는 AWS가 알아서 해주며(transparent), 암호화는 latency에 유의미한 변화를 주지 않기 때문에 하는 것이 좋다. 이떄, EBS encryption은 KMS(AES-256) 키를 사용한다. 한편, unencrypted EBS volume에 대해 snapshot은 항상 unencrypted이지만, 아래 방법을 통해 암호화할 수 있다.
Encrypt an unencrypted EBS volume 방법
- create EBS snapshot of volume
- encrypt EBS snapshot (using copy)
- create new EBS volume from the snapshot (the volume will also be encrypted)
- attach the encrypted volume to the original instance
AMI (Amazon Machine Image)
AMI는 가상 머신 이미지를 나타낸다. 이 이미지는 EC2 인스턴스를 시작하는 데 사용되며, 운영 체제, 소프트웨어, 설정 및 데이터를 포함한 완전한 환경을 정의한다. AMI를 사용하면 필요한 애플리케이션을 미리 설치하고 구성한 다음 해당 이미지를 사용하여 여러 인스턴스를 시작할 수 있다. 이는 애플리케이션 배포, 확장 및 복원을 단순화하고, 일관된 환경을 유지하는 데 도움이 된다.
- AMI는 특정 지역에서 만들어지고, 여러 지역에 복사할 수 있다
- AMI는 다양한 형태로 제공된다
- public AMI: AWS가 제공하여 공개적으로 사용 가능한 이미지
- your own AMI: 사용자가 만든 사용자 정의 이미지
- AWS marketplace AMI: 다른 사람에 의해 만들어진 이미지
만드는 과정
- start EC2 instance and customize it
- stop instance (for data integrity)
- buid AMI - this will also create EBS snapshots
- launch instances from other AMIs
EFS (Elastic File System)
EFS는 인스턴스에 부착할 수 있는 NFS(Network File System)이다.
NFS(Network File System)
네트워크 파일 시스템(Network File System, NFS)은 컴퓨터 네트워크를 통해 파일 및 디렉터리를 공유하는 프로토콜 및 시스템이다. NFS를 사용하면 여러 컴퓨터가 동일한 파일 시스템을 공유하고, 파일에 액세스하고, 수정할 수 있다.
이는 여러 AZ에 있는 여러 인스턴스에 부착될 수 있으며 다음과 같은 특징이 있다.
특징
- highly available
- highly scalable
- 용량이 더 필요하면, 자동적으로 scaling 해준다
- very expensive (pay per use)
- 미리 capcity 설정을 할 필요가 없지만, 매우 비쌈
- security group으로 EFS 접근을 관리함
- compatible with Linux based AMI (not windows)
- encryption at rest using KMS
- POSIX file system that has a standard file API (Linux instance에만 적용 가능)
- EFS scale
- 1000s of concurrent NFS clients, 10GB+/s throughput
- grow to Petabyte-scale network file system, automatically
- Performance mode (set at EFS creation time)
- general purpose (default): latency-sensitive use cases (web server, CMS, etc...)
- MAX I/O: higher latency, throughput, highly parallel(big data, media processing)
- Throughput mode
- Bursting
- 1TB = 50MiB/s + burst of up to 100MiB/s
- Provisioned
- set your throughput regardless of storage size (ex. 1GiB/s for 1TB storage)
- Elastic
- automatically scales throughput up or down based on your workloads
- up to 3GiB/s for reads and 1GiB/s for writes
- used for unpredictable workloads
Storage Classes
- storage tiers
- EFS에서 설정할 수 있는 기능으로, lifecycle management feature이다. 즉 며칠동안 사용되지 않은 파일은 다른 티어로 옮기는 기능이다.
- standard tier: for frequently accessed files
- infrequent access tier (EFS-IA): cost to retrieve files, lower price to store. enable EFS-IA witha Lifecycle Policy
- Availability and durability
- standard
- EFS가 높은 availability를 원한다면, EFS를 multi-AZ하는 것이 좋다. 한 AZ가 작동안해도, EFS는 작동될 수 있기 때문.
- standard storage는 이런 Multi-AZ를 지원한다
- great for production
- One Zone
- 만약 한 AZ에서만 EFS를 사용하고 있다면 One Zone-IA를 사용하면 좋다
- great for development
- backdup enabled by default
- compatible with IA(EFS One Zone-IA)
- infrequent access tier를 함께 사용하는 경우
- 비용을 대폭 절감할 수 있다.
EBS vs EFS vs Instance store
EBS
- 한 EBS는 한 인스턴스에만 부착될 수 있음(multi-attach to io1/io2 제외하고)
- multi-attach: 한 EBS volume은 최대 16개의 인스턴스에만 동시 부착될 수 있다
- 다른 AZ에 있는 인스턴스에 부착할 수 없다
EFS
- 한 EFS는 수백 개의 인스턴스에 부착될 수 있다
- 다른 AZ에 있는 인스턴스에 부착할 수 있다
- 매우 비쌈
Instance Store
- EC2에 물리적으로 부착된 저장공간
- 데이터 유지 방법이 없음: EC2가 삭제되면 instance store 데이터도 모두 삭제됨