[AWS] S3

1. S3 란?

HTTPS 형태의 API로 데이터를 저장하거나 추출하게 해주는 웹서비스이다.

데이터를 객체로 저장하며, 객체를 담는 컨테이너를 버킷이라고 한다.

S3는 글로벌 서비스이며, 버킷명에 따라 고유한 엔드포인트가 주어지기고 각 객체마다 URL이 주어진다. 버킷명은 고유하다.

저장 용량은 무한하다고 생각하면 된다. 요금은 객체의 크기, 해당 월에 객체를 저장한 기간, 스토리지 클래스에 따라 정해진다.

1) 스토리지 클래스

One Zone_IA 를 제외한 클래스들은 모두 3개 이상의 Multi-AZ 에서 운용된다.

Standard

기본 클래스로, 자주 액세스하는 객체 저장에 용이하다.

Standard_IA, One Zone_IA

IA는 Infrequent Access의 준말로, 두 클래스는 자주 액세스하지는 않지만 즉시 액세스할 수 있는 객체를 저장한다.

단, One Zone_IA는 단일 AZ 이기 때문에 가용성 및 복원력이 떨어진다. 하지만 Standard_IA보다 요금이 20% 저렴하다.

Intelligent-Tiering

Intelligent-Tiering은 내부적으로 Frequent/Infrequent/Archive/DeepArchive Tier로 분류된다. 뒤로 갈수록 객체가 액세스되지 않은 기간이 길며 요금이 저렴하다.

AWS가 액세스 패턴을 모니터링하여 객체가 저장되는 계층을 이동하여 스토리지 비용을 절감한다.

Glacier

검색이 아닌 저장이 주 용도인 스토리지로, 앞서 말한 클래스모다 훨씬 저렴하다. 다만, 저장이 주 용도이기 때문에 검색에 3~5시간이 걸린다.

Glacier Deep Archive

가장 저렴한 클래스로, 1년에 한두번 정도 액세스하는 장기 데이터를 보관하는 스토리지다.

2) 정적 웹 호스팅

S3 버킷에 정적 웹 콘텐츠를 저장하여 호스팅할 수 있다.

image

정적 웹사이트 호스팅을 활성화하면 접속할 수 있는 DNS가 주어진다.

퍼블릭 액세스를 허용하고, 객체에 접근할 수 있도록 다음과 같은 권한을 설정한다.

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::$BucketName/*"]
    }
  ]
}

호스팅 뿐 아니라 요청을 다른 버킷 혹은 도메인으로 리다이렉션하는 기능도 제공한다.

3) 버전 관리

S3 버전 관리를 활성화하면 모든 버전의 객체를 보존, 검색, 복원할 수 있다.

객체를 삭제하더라도 버전은 보관되기 때문에 복구할 수 있다.

image

2. AWS cli를 사용한 S3

콘솔보다는 AWS CLI를 통해 S3를 사용하는 일이 더 많을 것이다.

다음 명령어들은 기본적인 S3 버킷 생성/삭제, 객체 업로드 등에 관한 명령어다.

1) S3 버킷 생성/삭제

# 버킷 생성
$ aws s3 mb s3://<버킷명> 

# 버킷 삭제
$ aws s3 rb <target> --force

cli로 생성시 퍼블릭 액세스가 허용된 Standard버킷이 생성된다.

2) 객체 업로드/다운로드

$ aws s3 <source> <target> 형식으로 사용한다.

# 객체 업로드
$ aws s3 cp <파일> s3://<버킷명>

# 버킷의 모든 객체 다운로드
$ aws s3 cp --recursive s3://<버킷명> <로컬디렉토리>

3) 객체 이동/삭제/나열

# 객체 이동
$ aws mv <source> <target>

# 객체 삭제
$ aws rm <source>

# 버킷/객체 나열
$ aws s3 ls <target> 

4) 객체 동기화

버킷과 디렉토리 또는 두 버킷의 내용을 동기화한다.

$ aws s3 sync <source> <target>

동기화했을 때 target에서 객체가 지워져야 한다면 --delete 옵션을 주어야 한다.

동기화할 때 제외하고 싶은 파일이 있다면 --exclude <파일명> 을 사용한다.

카테고리:

업데이트:

댓글남기기