본문 바로가기

Storage&CDN/S3

Amazon S3 Client Tool 및 CLI 정리

1. Client에서 S3 사용 정리

Client에서 S3를 이용하는 방법은 두 가지가 있다. AWS CLI 혹은 3rd party solution, 기본적으로 AWS API를 기반으로 HTTP/S 통신한다.

 

3rd party solution은 다음과 같은 상황의 경우 사용한다.

FileZilla와 같은 Client Tool을 사용하길 원하시면, CloudBerry 사의 Explorer를 사용하면 된다. (Freeware)

파일 서버와 같이 S3를 사용하길 원하시면, CloudBerry 사의 Drive 혹은 TntDrive를 사용하면 된다. (Free trial 30/21 day이며 1copy에 Drive $29.99 / TntDrive $59.95)

 

가성비는 CloudBerry

 

2. CLI 정리

돈이 없으면 S3 SDK 혹은 CLI를 사용하자.

 

 

2-1. 사용법은 다음과 같다.

A. CLI 이용

 

AWS 명령줄 인터페이스

aws-shell은 명령줄 셸 프로그램으로서, AWS 명령줄 인터페이스를 사용하는 새로운 사용자와 고급 사용자 모두에게 도움이 되는 편의 기능 및 생산성 기능을 제공합니다. 주요 기능은 다음과 같습니다. 다음 항목에 대한 퍼지 자동 완료 명령(예: ec2, describe-instances, sqs, create-queue) 옵션(예: --instance-ids, --queue-url) 리소스 식별자(예: Amazon EC2 인스턴스 ID, Amazon

aws.amazon.com

접속해서 Client 환경에 맞는 CLI를 설치한다.

 

B. 설치 후에 console에 aws configure 명령어를 통해 Access 및 Secret Key를 등록한다.

C. C:\test> aws s3 cp s3://'원하는버킷'/ ./ --recursive  (현재 test 디렉터리에 타겟 S3 버킷의 오브젝트가 복사된다.)

참고

 

s3 — AWS CLI 1.16.269 Command Reference

This section explains prominent concepts and notations in the set of high-level S3 commands provided. Order of Path Arguments Every command takes one or two positional path arguments. The first path argument represents the source, which is the local file/d

docs.aws.amazon.com

 

2-2. CLI 명령어 정리

 

버킷 생성 : aws s3 mb s3://'BucketName'

버킷 삭제 : aws s3 rb s3://'BucketName' 

버킷 강제 삭제 : aws s3 rb s3://'BucketName' --force

 

로컬 to S3 파일 복사  : aws s3 cp /test.txt s3://'BucketName'/ (S3 Path에 /가 없으면 파일로 간주하여 그 이름으로 복사)

로컬 to S3 디렉터리 prefix 포함 복사(특정 디렉터리 제외)
aws s3 sync ./data/ s3://leedoing/data/ --exclude 'a/*' --exclude 'b/*' --exclude 'c/*'

S3 to 로컬 파일 복사

aws s3 cp s3://'BucketName'/'FileName' ./ (절대 경로 지정)

S3 to 로컬 파일 복사2

aws s3 cp s3://'BucketName'/ ./ --recursive (Bucket에 있는 모든 파일이 복사)

S3 to S3 복사의 경우 위 예시와 동일하며 Path만 S3 Path로 지정하면 됩니다. (t2.medium의 경우 80Mbps)

 

 

디렉터리의 경우 sync, 파일 이동의 경우 mv 명령어를 사용.

옵션은 --force 강제 /  --exclude 제외 / --include 포함이 있다.

예를 들어 aws s3 cp s3://'BucketName'/ ./ --recursive --exclude "*.log" --include "*" 의 경우 log 파일만 빼고 모든 파일이 로컬에 복사된다.

 

이상 간단하게 주로 사용되는 명령어 및 옵션에 대한 정리를 해봤다.

더 자세한 내용은 아래 참고.

 

aws — AWS CLI 1.16.269 Command Reference

Synopsis aws [options] [parameters] Use aws command help for information on a specific command. Use aws help topics to view a list of available help topics. The synopsis for each command shows its parameters and their usage. Optional parameters are shown i

docs.aws.amazon.com

 

또한 CLI는 옵션뿐만 아니라 Configuration도 설정할 수 있다. 파일 성향에 따라 다르겠지만 기본적으로 request와 queue 사이즈 증가만으로 CLI 성능을 증가 시킬 수 있다.

 

AWS CLI S3 Configuration — AWS CLI 1.16.269 Command Reference

[ aws . topics ] AWS CLI S3 Configuration The aws s3 transfer commands, which include the cp, sync, mv, and rm commands, have additional configuration values you can use to control S3 transfers. This topic guide discusses these parameters as well as best p

docs.aws.amazon.com

 

cli 쓰레드 늘리는 설정(10 -> 50~80)

aws configure set default.s3.max_concurrent_requests 20 (default 10)
aws configure set default.s3.max_queue_size 10000

 

8 core / 16 Mem CPU 100% 사용 시 평균 50~80MB/s Throughput 까지 성능이 나옴, 하루 5~7TB 업로드 가능

 

Resource로 특정 버킷 지정 시 아래와 같은 에러 메시지를 받을 수 있음. 아래 블로그 참고.

PutObject operation: Access Denied

ListObject operation: Access Denied

 

 

AWS S3 Permission Settings in IAM

To access resources stored in AWS S3 when using an IAM user, we need to define a policy containing required permissions for the user. For example, if your bucket is named as zzz.buzz, then you would need something like: { "Version": "2012-10-17", "Statemen

zzz.buzz

 

 

데이터 스트리밍 -> S3 업로드

    request = requests.get(url)
    response = BytesIO(request.content)
    bucket_name = "test.com"
    s3.upload_fileobj(response, bucket_name, file_name)