-
[29일차_02] 스토리지 & RDS교육/코드스테이츠 2023. 1. 5. 15:37
https://aws.amazon.com/ko/ AWS 스토리지 서비스
- 객체 스토리지(Object Storage)
여기서 객체란 문서, 이미지, 비디오 등 비교적 단순한 구조에 메타데이터를 포함하고 있는 데이터를 의미하며, 인터넷으로 연결된 API를 통해 데이터를 애플리케이션에 제공한다.
파일 스토리지와 대조적으로, 오브젝트는 폴더 계층 구조 없이 단일한 평면 구조로 저장된다.
오브젝트 스토리지는 클라우드 기반 저장소에서 꽤 일반적이며, 매우 높은 확장성과 신뢰성을 바탕으로 콘텐츠의 관리, 처리 및 배포에 사용할 수 있다.
- 블록 스토리지(Block Storage)
블록 스토리지에서 데이터는 서버 인스턴스에 디스크 볼륨의 형태로 제공되는 데이터를 의미한다. 이를 통해 EC2 인스턴스에 포함된 볼륨에 고속으로 접근 가능하다. 대표적인 서비스인 EBS는 EC2 인스턴스를 위한 부트 볼륨 및 데이터베이스로 널리 사용된다.
- 파일 스토리지(File Storage)
파일 스토리지에서 데이터란 서버 인스턴스에 파일 시스템 인터페이스 방식으로 제공되는 데이터를 의미하며, 서버 인스턴스에 파일 스토리지를 추가하면 로컬 파일 시스템처럼 작동한다. 대표적으로 EFS(Elastic File System)는 고속으로 다수의 EC2 인스턴스를 통해 데이터에 접근할 수 있도록 한다.
파일을 폴더와 하위 폴더의 계층 구조로 체계화하고, 폴더/파일 경로를 사용해 접근할 수 있다.
Simple Storage Service, S3
AWS의 대표 스토리지로서 객체 스토리지로 데이터 백업, 정적 웹사이트 호스팅, 애플리케이션 호스팅, 재난 복구, 콘텐츠 배포, 데이터 레이크, 프라이빗 저장소 등에 활용할 수 있다.
- Amazon S3 작동 방식
Amazon S3는 데이터를 버킷 내의 객체로 저장하는 객체 스토리지 서비스이다.
객체는 해당 파일을 설명하는 모든 메타데이터이며, 버킷은 객체에 대한 컨테이너이다.
Amazon S3에 데이터를 저장하려면 먼저 버킷을 생성하고 버킷 이름 및 AWS 리전을 지정해야 한다
그런 다음 Amazon S3에서 객체로 해당 버킷에 데이터를 업로드한다.
각 객체에는 키(또는 키 이름)가 있으며, 이는 버킷 내 객체에 대한 고유한 식별자이다.
S3는 특정 사용 사례를 지원하도록 구성할 수 있는 기능을 제공한다.
ex) S3 버전 관리를 사용하여 동일한 버킷에 여러 버전의 객체를 보관하고, 실수로 삭제되거나 덮어쓰기된 객체를 복원할 수 있다.
Bucket
버킷은 Amazon S3에 저장된 객체에 대한 컨테이너다. 버킷에 저장할 수 있는 객체 수에는 제한이 없으며, 계정에 버킷을 최대 100개까지 포함할 수 있다. 증가를 요청하려면 Service Quotas 콘솔을 방문해 신청 가능하다.
버킷 생성 시 주의해야 할 점은 버킷 이름을 붙일 때 여러 리전에서 유일무이한 이름을 사용해야 한다 그래야 사용자가 버킷 URL을 통해 해당 데이터에 접근할 수 있다.
객체
앞서 언급했듯 객체란 문서, 이미지, 비디오 등 비교적 단순한 구조에 메타데이터을 포함하고 있는 데이터로, 버킷에 저장한 모든 것을 객체라고 부른다. 객체는 이름, 키 또는 버전 ID를 통해 식별할 수 있으며, 키를 통해 버킷에서 유일한 것으로 식별한다. 따라서 버킷에 존재하는 모든 객체는 단 하나의 키를 가진다.
버킷 정책
- Resource-based policies
버킷 정책이란 버킷 레벨에서 생성한 정책을 의미하며, S3 버킷을 세분화된 방식으로 제어할 수 있도록 한다.
대표적인 버킷 정책의 사례는 특정 버킷에 있는 객체에 대한 익명의 사용자로부터의 리드 온리 접근을 허용하는 케이스입니다. 이는 S3 리소스 기반의 정적 웹 사이트를 운영하거나, 웹을 통해 불특정다수의 접근을 허용할 때 자주 사용되는 방법으로 버킷에 GetObject 액세스 권한을 부여하면 됩니다.
다음의 예시는 devopscodestates를 위한 S3 버킷 정책이다.
ID : 정책의 ID 값으로, UUID를 사용하기를 권장한다.
SID : Statement ID로 statement 를 구분하기 위해서 사용한다.
Effect : 정책의 효과를 나타내며, 허용할 것인지 거부할 것인지를 선택할 수 있다.
Principal : 대상 및 주체를 지정합니다. Users, Services 등이 될 수 있다.
Action : 정책을 통해 승인 혹은 거절할 동작을 의미한다.
Resource : Action이 영향을 미치는 리소스 리스트를 지정한다.
Condition : 조건이 충족되는 경우에는 해당 정책을 적용시킬 수 있다.
정책은 사용자, 그룹, 및 롤에 할당하는 IAM 정책인 Identity-based policies 와 S3 Bucket, SES Queue 등 AWS 자원에 할당되는 정책인 Resource-based policies로 나뉘어 작성된된다.
이 둘을 구분하기 위해서는 필드에 Principal이 있는지 확인해보면 됩니다. AWS 자원에 할당되는 정책에는 Principal 항목이 포함되어 있고, IAM 정책에는 Principal 항목이 포함되어 있지 않는다.
S3의 보안 Best Practice
보통의 경우 S3 버킷에 대한 퍼블릭 액세스를 허용해서는 안된다. S3 버킷을 퍼블릭 액세스 할 수 있다는 말은 모든 파일이 아무에게나 노출될 수 있다는 의미이다.
최소한의 접근 권한 전략으로, S3 버킷에 접근해야 하는 사람에게도 관련 작업에 해당하는 만큼만 권한을 부여하고, 그외 사람에게는 접근 거부 정책을 적용한다. 다중인증(MultiFactor Authentication, 이하 MFA) 시스템을 활용합니다. MFA Delete를 설정하여 데이터 삭제 권한이 없는 사람은 삭제 할 수 없도록 제한합니다.
S3 스토리지 클래스
EBS
Elastic Block Store, EBS는 EC2 인스턴스에 사용할 수 있는 블록 수준 영구 스토리지 볼륨이다. 영구 스토리지는 EC2 인스턴스의 수명주기를 넘어서서 존재할 수 있는 스토리지의 의미입니다. EBS 볼륨은 형식이 지정되지 않은 원시 블록 디바이스처럼 동작한다. 이러한 볼륨 위에 파일 시스템을 생성하거나 하드 드라이브와 같은 블록 디바이스를 사용하는 것처럼 볼륨을 사용할 수 있다. 인스턴스에 연결된 볼륨의 구성을 동적으로 변경할 수 있다.
EBS 볼륨은 EC2 인스턴스의 로컬 스토리지에 비해 훨씬 높은 수준의 견고성을 제공하며, 볼륨에 대한 특정 시점의 스냅샷을 지속적으로 작성해 S3에 저장하는 방식으로 다수의 AZ에서 자동 복제 기능을 제공한다. 이렇게 생성된 스냅샷은 또 다른 EBS 볼륨 생성을 위한 시작점으로 활용할 수 있으며, 장기간 서버와 관련된 데이터를 안전하게 보호할 수 있다. 이 스냅샷은 리전 간 복제해서 사용할 수도 있으므로 재난 복구, 데이터센터 마이그레이션 등에도 편리하게 사용할 수 있다.
EFS
Elastic File System, EFS는 서버를 사용하지 않는 간단한 탄력적인 파일 시스템을 제공한다. EFS로 파일 시스템을 생성하고 EC2 인스턴스에 파일 시스템을 탑재한 후 파일 시스템에 데이터를 작성하거나 파일 시스템에서 데이터를 읽을 수 있다.
애플리케이션을 중단하지 않고 온디맨드 방식으로 페타바이트 규모까지 확장되도록 구축되어, 사용자가 파일을 추가하고 제거할 때 자동으로 확장/축소되므로 데이터 증가에 맞춰 용량을 프로비저닝 및 관리할 필요가 없다. EFS 는 파일 시스템을 빠르고 쉽게 만들고 구성할 수 있는 간편한 웹 서비스 인터페이스를 제공한다. 이 서비스에서 모든 파일 스토리지 인프라를 관리해 주므로 사용자는 복잡한 파일 시스템 구성을 배포, 패치 및 유지 보수하는데 따르는 복잡성에서 벗어날 수 있다.
Amazon RDS
AWS는 관계형 데이터베이스 호스팅 및 관리 서비스인 Amazon Relational Database Service(RDS)를 제공하며, 다음과 같은 RDBMS 엔진을 사용할 수 있다.
Aurora MySQL, Aurora PostgreSQL, Oracle, SQL Server, MySQL, PostgreSQL, MariaDB
Amazon RDS를 이용해 데이터베이스를 호스팅 하면, AWS가 데이터베이스 설치부터 업그레이드 등, 데이터베이스 호스팅과 관련된 모든 복잡한 업무를 대신 처리하여 사용자는 애플리케이션 최적화에만 집중하면 된다.
RDS에서 실행되는 데이터베이스의 확장성을 관리 할 수 있는 다양한 방법
- 애플리케이션 호환성
RDS는 다양한 데이터베이스 엔진을 지원하므로 업계에서 널리 사용되는 데이터베이스 애플리케이션, 커스텀 코드, 기업에서 이미 사용 중인 데이터베이스 도구 등과 완벽하게 호환된다.
- 고가용성
RDS를 이용해 멀티 AZ 환경에 데이터를 프로비전하면, RDS는 동기적으로 데이터를 복제해 다른 AZ의 대기 인스턴스에 저장한다.
멀티 AZ 아키텍처의 경우 마스터 데이터베이스라고 부르는 기본 데이터베이스가 모든 트래픽을 처리하고, 스탠바이 데이터베이스는 애플리케이션이 실행되고 있는 기본 데이터베이스가 셧다운되는 상황을 대비해 가동 가능 상태에서 대기 하게 된다.
RDS는 기본 데이터베이스는 정상 상태를 유지하도록 하고, 대기 데이터베이스는 즉시 복구가 가능하도록 대기 상태를 유지하도록 한다.
이때 대기 데이터베이스는 대기라는 상태에 있는 한 작동시킬 수 없고, 기본 데이터베이스와 대기 데이터베이스에 동시에 트래픽을 분산시킬 수는 없으며 이는 액티브 및 패시브(active/passive) 데이터베이스 모델과 비슷한 개념이다. 기본 데이터베이스의 데이터는 동기적으로 대기 데이터베이스의 스토리지에 복제된다.
RDS는 장애 발생 시 다양한 유형의 대응 방식을 자동으로 적용해, 호스트 인스턴스 셧다운, 스토리지 장애, 기본 인스턴스의 네트워크 연결 단락, AZ 자체 셧다운 등의 장애 상황에 대처 가능하다.
장애 대응 상황이 발생하면, 대기 데이터베이스가 기본 데이터베이스의 역할을 이어 받아서 새로운 기본 데이터베이스로서 모든 애플리케이션의 트래픽을 처리하게 된다. RDS의 멀티 AZ 아키텍처에서 애플리케이션은 장애 발생 시 자동으로 DNS 장애 대응 기능을 활성화시켜, 기본 인스턴스와 대기 인스턴스를 맵핑한 DNS 엔드포인트를 이용해 데이터베이스에 연결된다. 따라서 사용자는 장애 대응을 위해 애플리케이션을 새로운 기본 데이터베이스에 연결할 필요가 없다.
- 보안 유지
RDS는 대기 상태 데이터 및 이동 상태 데이터의 암호화를 지원하며, 이를 이용해 대기 상태의 데이터를 암호화 할 수 있고, SSL 기법을 이용해 전송 상태의 데이터를 암호화 할 수 있다.
- 인스턴스 타입 변경
확장성 조절을 위한 가장 간단한 방법은 데이터베이스 인스턴스 타입을 변경하는 것입니다. 하나의 인스턴스 클래스에서 다른 인스턴스 클래스로 변경함으로써 스케일업 또는 스케일 다운 할 수 있다.
이러한 변경 사항을 즉시 적용하면, 인스턴스 클래스 변경에 따라 약간의 가동 정지시간(downtime)이 발생할 수 있으므로, 애플리케이션이 이러한 가동 정지시간에 영향을 받지 않도록 확인해야한다.
- 읽기 사본 활용
읽기 사본은 마스터 데이터베이스의 Read-Only 복사본으로 마스터베이스와 동기화 상태를 유지하며, RDS는 RDBMS 엔진에 따라 최대 15개의 읽기 사본을 지닐 수 있다. 읽기 사본은 read-only 쿼리의 부담을 줄여주며, 결과적으로는 마스터 데이터베이스의 워크로드를 감소 시키는 장점이 있다.
또 읽기 사본은 고가용성 구현 매커니즘으로 사용할 수 있다. 예를 들어 마스터 데이터베이스와 읽기 사본을 운용 중인 상황에서 마스터 데이터베이스가 다운되면 읽기 사본이 마스터로 승격될 수 있다. 이때 데이터가 비동기적으로 복제되므로 데이터의 손실 가능성이 존재하기 때문에 데이터 손실에 주의해야 한다.
https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html
Bucket naming rules - Amazon Simple Storage Service
Before March 1, 2018, buckets created in the US East (N. Virginia) Region could have names that were up to 255 characters long and included uppercase letters and underscores. Beginning March 1, 2018, new buckets in US East (N. Virginia) must conform to the
docs.aws.amazon.com
https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/access-bucket-intro.html
버킷에 액세스하기 위한 메서드 - Amazon Simple Storage Service
가상 호스팅 방식 및 경로 방식의 요청은 S3 점(.) 리전 엔드포인트 구조(s3.Region)를 사용합니다(예: https://my-bucket.s3.us-west-2.amazonaws.com). 그러나 일부 이전 Amazon S3 리전은 S3 대시(-) 리전 엔드포인트
docs.aws.amazon.com
https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/storage-class-intro.html
Amazon S3 스토리지 클래스 사용 - Amazon Simple Storage Service
S3 Glacier Flexible Retrieval 또는 S3 Glacier Deep Archive 스토리지 클래스를 선택하면 객체가 Amazon S3에 그대로 유지됩니다. 별도의 Amazon S3 Glacier 서비스를 통해 객체에 직접 액세스할 수 없습니다.
docs.aws.amazon.com
'교육 > 코드스테이츠' 카테고리의 다른 글
[32일차] HTTPS를 이용한 서버 배포 (0) 2023.01.10 [30일차] 정적 웹 호스팅 (0) 2023.01.06 [29일차_01] 클라우드 서비스 & EC2 (0) 2023.01.05 [27일차] 컨테이너 & Docker (0) 2023.01.03 [26일차] yaml파일 작성 (0) 2023.01.02