AWS CLI로 Amazon S3 다루기 - 1
Amazon S3는 AWS에서 제공하는 클라우드 스토리지 서비스입니다. AWS CLI를 이용하면 간편하게 S3 버킷을 제어하고 S3 오브젝트에 접근할 수 있으며, Unix의 파일 시스템 커맨드와 매우 유사해서 배우기도 쉽습니다. 이 번 포스팅에서는 자주 사용되는 AWS CLI의 Amazon S3 관련 커맨드을 살펴보도록 하겠습니다.
버킷 생성하기
Amazon S3에 데이터를 저장하려면 먼저 버킷(Bucket)을 생성해야 합니다. 버킷은 Amazon S3에서 파일 시스템의 최상위 디렉터리나 드라이브 정도의 역할을 하는 저장 단위 개념입니다. 마치 PC에 여러 개의 하드 디스크를 꼽을 수 있는 것 처럼 하나의 계정에 여러 개의 버킷을 생성할 수 있습니다.
새로운 버킷을 생성하는 방법은 AWS CLI의 aws s3 mb
커맨드(Make Bucket)에 s3://버킷명
을 인자로 넘겨주시면 됩니다.
$ aws s3 mb s3://fruits
make_bucket failed: s3://fruits An error occurred (BucketAlreadyExists) when calling the CreateBucket operation: The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.
Amazon S3에 fruits
라는 버킷이 이미 존재해서 거부를 당했습니다. 버킷 이름은 본인 계정 범위가 아닌 AWS 모든 계정 기준으로 유일해야 함을 주의 바랍니다.
$ aws s3 mb s3://my-fruits
make_bucket: my-fruits
my-fruits
라는 이름으로 다시 커맨드를 실행하였고 버킷 생성에 성공하였습니다.
버킷 목록 조회하기
aws s3 ls
커맨드(List)를 이용하여 자신의 AWS 계정이 가지고 있는 버킷 목륵을 조회할 수 있습니다.
$ aws s3 ls
(...생략...)
2018-06-02 10:26:35 my-fruits
파일 복사하기
방금 생성한 버킷에 로컬 파일을 복사해보도록 하겠습니다.
먼저 본인 PC의 임의의 경로에 버킷 이름과 동일한 이름의 디렉터리를 생성합니다.
$ mkdir my-fruites
그리고 그 디렉터리 내에 3개의 파일을 생성합니다.
$ cd my-fruites
$ echo 'apple' > apple.txt
$ echo 'banana' > banana.txt
$ echo 'cherry' > cherry.txt
$ ls
apple.txt banana.txt cherry.txt
aws s3 cp
커맨드(Copy)를 이용하여 로컬 파일을 하나를 버킷으로 복사합니다.
$ aws s3 cp apple.txt s3://my-fruits
upload: ./apple.txt to s3://my-fruits/apple.txt
파일 이동하기
이번에는 로컬 파일을 복사하지 않고, S3 버킷으로 아예 이동시켜 보겠습니다.
$ aws s3 mv banana.txt s3://my-fruits
move: ./banana.txt to s3://my-fruits/banana.txt
$ ls
apple.txt cherry.txt
aws s3 mv
커맨드(Move)를 이용했더니 해당 파일이 로컬 디스크에서 삭제되었습니다.
파일 목록 조회하기
aws s3 ls
커맨드에 버킷명을 인자로 넘겨주면 버킷 내의 파일 목록을 마치 로컬 파일 시스템처럼 조회할 수 있습니다.
$ aws s3 ls s3://my-fruits
2018-06-02 10:51:55 6 apple.txt
2018-06-02 10:57:19 7 banana.txt
파일 삭제하기
aws s3 rm
커맨드(Remove)를 이용하여 복사 또는 이동시켰던 파일을 S3 버킷으로 부터 삭제시킬 수 있습니다.
$ aws s3 rm s3://my-fruits/banana.txt
delete: s3://my-fruits/banana.txt
디렉터리 동기화 시키기
aws s3 sync
커맨드를 이용하여 로컬 디렉터리와 S3 버킷을 동기화 시킬 수 있습니다.
$ aws s3 sync . s3://my-fruits
upload: ./cherry.txt to s3://my-fruits/cherry.txt
이미 apple.txt
는 이동시켜 놓았기 때문에 cherry.txt
만 업로드되는 것을 확인할 수 있습니다.
—recursive 옵션
aws s3 cp
와 aws s3 mv
, aws s3 rm
커맨드는 --recursive
옵션과 함께 사용하면 하위 디렉터리까지 적용되기 때문에 편리합니다.
먼저 로컬 디렉터리에 favorites
라는 디렉터리를 생성하고, 그 안에 melon.txt
라는 파일을 생성해보겠습니다.
$ mkdir favorites
$ echo 'melon' > favorites/melon.txt
그 다음, --recursive
옵션과 함께 aws s3 cp
커맨드를 실행하면 하위 디렉터리의 파일까지 모두 복사할 수 있습니다.
$ aws s3 cp . s3://my-fruits --recursive
upload: ./cherry.txt to s3://my-fruits/cherry.txt
upload: ./apple.txt to s3://my-fruits/apple.txt
upload: favorites/melon.txt to s3://my-fruits/favorites/melon.txt
aws s3 rm
커맨드로 S3 버킷 내의 파일을 삭제할 때도 --recursive
옵션을 주면 다음과 같이 하위 디렉터리의 파일까지 모두 삭제할 수 있습니다.
aws s3 rm s3://my-fruits/ --recursive
delete: s3://my-fruits/apple.txt
delete: s3://my-fruits/cherry.txt
delete: s3://my-fruits/favorites/melon.txt
참고로 aws s3 sync
커맨드는 기본적으로 하위 디렉터리까지 모두 동기화해주기 때문에 별도로 --recursive
옵션을 제공하지 않습니다.
$ aws s3 sync . s3://my-fruits
upload: ./apple.txt to s3://my-fruits/apple.txt
upload: favorites/melon.txt to s3://my-fruits/favorites/melon.txt
upload: ./cherry.txt to s3://my-fruits/cherry.txt
버킷 제거하기
마지막으로 예제를 위해 만든 my-fruits
버킷을 제거해보록 하겠습니다. ws s3 rb
커맨드(Remove Bucket)를 사용하시면 됩니다.
$ aws s3 rb s3://my-fruits
remove_bucket failed: s3://my-fruits An error occurred (BucketNotEmpty) when calling the DeleteBucket operation: The bucket you tried to delete is not empty
S3 버킷이 비어 있지 않을 경우 위와 같이 버킷 제거가 되지 않습니다. 이럴 경우 --force
옵션을 주시면 S3 버킷 내의 모든 파일을 먼저 삭제하고 그 다음 S3 버킷을 제거합니다.
$ aws s3 rb s3://my-fruits --force
delete: s3://my-fruits/apple.txt
delete: s3://my-fruits/cherry.txt
delete: s3://my-fruits/favorites/melon.txt
remove_bucket: my-fruits
정리
지금까지 Amazon S3 다루기 위한 여러 가지 AWS CLI 커맨드들을 살펴보았습니다. 커맨드들을 최종 정리를 해보면 다음과 같습니다.
커맨드 | 용도 |
---|---|
aws s3 mb | 버킷 생성 |
aws s3 ls | 버킷/파일 목록 조회 |
aws s3 cp | 디렉터리/파일 복사 |
aws s3 mv | 디렉터리/파일 이동 |
aws s3 rm | 디렉터리/파일 삭제 |
aws s3 sync | 디레토리 간 동기화 |
aws s3 rb | 버킷 제거 |