[ 살펴보기 ] AWS CLI - S3 commands

[ 살펴보기 ] AWS CLI - S3 commands

·

6 min read

AWS에서 제공하는 S3 cli를 통해 bucket을 생성, 삭제 하거나 bucket에 파일을 생성, 삭제하는 작업을 수행할 수 있다.

S3 cli를 사용하기 위해선 AWS CLI가 설치되어 있어야 하고 각 명령어가 필요로 하는 권한이 다르므로 필요한 S3 작업 관련 권한을 가지고 있는 iam user 계정을 통해 명령어를 실행해야 정상적으로 작업을 수행할 수 있다.

Command line을 살펴보기 전에 S3에서 사용하는 용어를 우선 살펴보자.

  • Bucket : S3 bucket 페이지에 생성한 각각의 bucket을 말한다.

  • Prefix : 생성한 S3 bucket안에 있는 폴더를 말한다.

  • Object : 생성한 S3 bucket안에 있는 파일을 말한다.

Bucket 생성하기

aws s3 mb command를 통해 새로운 bucket을 생성할 수 있다. 해당 command를 통해 bucket을 생성하기 위해선 command를 실행하는 iam user가 s3 CreateBucket 권한을 가지고 있어야 한다.

aws s3 mb s3://bucket-name

예를 들어 test-storage라는 이름의 s3 bucket을 생성하고자 한다면 다음과 같은 명령어로 생성할 수 있다.

aws s3 mb s3://test-storage

만약 cli configuration에서 설정한 region이 아닌 다른 region으로 명령어를 실행하고 싶으면 —region option을 사용할 수도 있다.

aws s3 mb s3://test-storage --region us-east-2

aws s3 mb command와 사용할 수 있는 다른 options은 다음 documentation을 참고하자.

Bucket list 출력하기

aws s3 ls command를 통해 전체 bucket list를 조회할 수 있다. 다음은 cli configuration에서 설정한 account에게 권한이 있는 bucket list를 모두 display한다. 해당 command를 통해 모든 bucket list를 조회하기 위해선 command를 실행하는 iam user가 s3 ListAllMyBuckets 권한을 가지고 있어야 한다.

aws s3 ls

모든 bucket list가 아닌 특정 bucket안에 있는 object를 조회할 때는 aws s3 ls s3://bucket-name command를 통해 조회할 수 있다. 그리고 해당 command를 통해 특정 bucket의 object를 조회하기 위해선 command를 실행하는 iam user가 조회하는 bucket에 대한 ListBucket 권한을 가지고 있어야 한다.

다음 예제는 test-storage안에 존재하는 objects를 조회한다.

aws s3 ls s3://test-storage

bucket 뒤에 prefix ( folder )를 지정하여 특정 prefix안에 있는 objects의 list도 출력할 수 있다. 아래는 profile prefix 안에 있는 objects를 list하는 예제다.

aws s3 ls s3://test-storage/profile

Bucket 삭제하기

aws s3 rb command를 통해 특정 bucket list을 삭제할 수 있다. 해당 command를 통해 bucket을 삭제하기 위해선 command를 실행하는 iam user가 해당 bucket에 대한 DeleteBucket 권한을 가지고 있어야 한다.

aws s3 rb s3://test-storage

위의 command는 bucket이 비어있을 때 삭제할 수 있으며 만약 비어있지 않은 bucket을 지우고자 한다면 --force option을 추가해준다.

aws s3 rb s3://test-storage --force

Bucket object 삭제하기

aws s3 rm command를 통해 특정 bucket의 object를 삭제할 수 있다. 해당 command를 통해 object를 삭제하기 위해선 command를 실행하는 iam user가 해당 bucket object을 삭제할 수 있는 DeleteObject 권한을 가지고 있어야 한다.

아래는 test-storage bucket에 있는 main.css파일을 삭제하는 예제이다.

aws s3 rm s3://test-storage/main.css

만약 특정 preset ( folder )에 존재하는 모든 object를 삭제하고자 한다면 다음과 같이 --recursive option을 추가한다.

aws s3 rm s3://test-storage/temp --recursive

모든 파일을 삭제할 때 특정 파일만 제외하고 싶다면 다음과 같이 --exclude option을 통해 제외할 파일을 지정할 수 있다. 다음은 파일명이 test로 시작하는 모든 파일을 제외하고 모든 파일을 삭제한다.

aws s3 rm s3://test-storage/temp --recursive --exclude "test*"

반대로 삭제 작업을 수행할 때 특정 유형의 파일만 삭제 싶다면 --exclude option과 --include option을 함께 사용하여 처리한다. 다음은 bucket의 temp prefix( 폴더 )에서 확장자가 jpg인 파일만 모두 삭제하는 예제다. 아래의 예제와 같이 exclude option이 include option 보다 먼저 선언되어야 한다.

aws s3 rm s3://test-storage/temp --recursive --exclude "*" --include "*.jpg"

Bucket Object 이동하기

aws s3 mv command를 통해 bucket에서 local로 file을 이동할 수도 있고 또는 local에서 bucket으로 file을 이동시킬 수 있다. local에서 bucket으로 file을 이동하고자 한다면 command를 실행하는 iam user가 bucket object에 대한 PutObject 권한이 있어야 하고 bucket에서 local로 file을 이동하고자 한다면 bucket object에 대한 GetObject 권한이 있어야 한다.

mv command는 파일을 복사해서 이동 시키는 것이 아니므로 주의하자. 다음은 flower.jpg 파일을 test-storage bucket으로 이동 시키는 예제다.

aws s3 mv flower.jpg s3://test-storage

그리고 다음은 test-storage bucket에서 flower.jpg 파일을 다시 local folder로 이동시키는 예제다.

aws s3 mv s3://test-storage/flower.jpg ./

만약 현재 폴더에 존재하는 모든 파일을 s3 bucket에 이동하고 싶으면 --recursive 옵션을 사용한다. 다음은 현재 폴더의 모든 파일을 test-storage bucket로 이동시키는 예제다.

aws s3 mv . s3://test-storage --recursive

모든 파일을 이동 시킬 때 특정 파일만 제외하고 싶다면 다음과 같이 --exclude option을 통해 제외할 파일을 지정할 수 있다. 다음은 파일명이 test로 시작하는 모든 파일을 제외하고 이동 시킨다.

aws s3 mv . s3://test-storage --recursive --exclude "test*"

반대로 현재 폴더에 존재하는 모든 파일을 대상으로 bucket에 추가할 때 특정 유형의 파일만 포함시켜 이동시키고 싶다면 --exclude option과--include option을 함께 사용하여 수행한다. 다음은 확장자가 jpg인 파일만 모두 bucket에 이동시키는 예제다. 아래의 예제와 같이 exclude option이 include option 보다 먼저 선언되어야 한다.

aws s3 mv . s3://test-storage --recursive --exclude "*" --include "*.jpg"

Bucjet object 복사하기

aws s3 cp command를 통해 bucket에서 local로 file을 복사하거나 local에서 bucket으로 file을 복사할 수 있다.

Local에서 bucket으로 파일을 복사할 때 command를 실행하는 iam user가 해당 bucket objects에 대한 PutObject 권한이 있어야 하고 bucket에서 local로 파일을 복사할 때는 bucket objects에 대한 GetObject 권한이 있어야 한다.

다음은 local의 flower.jpg 파일을 test-storage bucket에 복사하는 command의 예제다. mv와는 달리 cp는 local의 파일의 복사본이 bucket에 추가되기에 command 완료 후에도 원본 파일이 사라지지 않는다.

aws s3 cp flower.jpg s3://test-storage

다음은 반대로 bucket에서 local로 copy하는 command 예제다.

aws s3 cp s3://test-storage/flower.jpg ./

만약 현재 폴더에 존재하는 모든 파일을 s3 bucket에 복사하고 싶으면 --recursive 옵션을 사용한다. 다음은 현재 폴더의 모든 파일을 test-storage bucket로 copy하는 예제다.

aws s3 cp . s3://test-storage --recursive

모든 파일을 copy할 때 특정 파일만 제외하고 싶다면 다음과 같이 --exclude option을 통해 제외할 파일을 지정할 수 있다. 다음은 파일명이 test로 시작하는 모든 파일을 제외하고 copy한다.

aws s3 cp . s3://test-storage --recursive --exclude "test*"

반대로 현재 폴더에 존재하는 모든 파일을 대상으로 bucket에 추가할 때 특정 유형의 파일만 포함시켜 copy하고 싶다면 --exclude option과 --include option을 함께 사용하여 수행한다. 다음은 확장자가 jpg인 파일만 모두 bucket에 copy하는 예제다. 아래의 예제와 같이 exclude option이 include option 보다 먼저 선언되어야 한다.

aws s3 cp . s3://test-storage --recursive --exclude "*" --include "*.jpg"

Bucket sync

aws s3 sync command를 통해 bucket과 local 폴더의 파일 또는 bucket과 bucket의 파일을 동일하게 맞출 수 있다. sync command를 실행하기 위해서 command를 실행하는 iam user가 해당 bucket에 대한 ListBucket 권한이 있어야 한다.

만약 bucket의 내용을 local folder의 내용과 동일하게 하고 싶으면 ( local folder를 기준으로 bucket을 동일하게 맞춘다 ) sync command를 통해 작업을 수행한다.

aws s3 sync . s3://test-storage

위의 command를 local folder의 파일들이 bucket에 모두 복사된 것을 확인할 수 있다. 주의할 점은 command가 실행되기 전에 bucket에 local folder에 존재하지 않는 파일이 이미 존재하는 상황이라면 해당 파일이 삭제되지는 않는다. 즉, 아무런 옵션없이 sync command를 사용하면 local folder의 내용과 bucket의 내용은 완전히 일치하지 않을 수 있다.

만약 bucket에 이미 존재하는 파일을 삭제하고 local folder의 내용과 완전히 동일하게 맞추고 싶으면 --delete option을 사용해준다.

aws s3 sync . s3://test-storage --delete

반대로 local folder를 s3 bucket과 동일하게 하고 싶으면 ( s3 bucket을 기준으로 local folder를 bucket과 동일하게 맞춘다 ) 다음과 같이 source와 target의 위치를 변경해준다.

aws s3 sync s3://test-storage . --delete

--delete 옵션을 통해 존재하지 않는 파일을 삭제할 때 특정 파일을 delete option에서 제외해야 한다면 다음과 같이 --exclude 옵션을 사용한다.

aws s3 sync s3://test-storage . --delete --exclude myimg.jpg

위의 command는 local folder에 있는 myimg.jpg라는 파일을 제외하고 delete sync를 수행한다. 만약 ./myimg.jpg와 같이 relative path를 직접 선언하면 exclude option이 정상적으로 동작하지 않을 수 있으므로 주의하자.