Today
Total
KoreanEnglishFrenchGermanJapaneseSpanishChinese (Simplified)
관리 메뉴

DB & AWS Knowledge

AWS CLI 를 통해 S3 관련 작업을 할 시 명령어, 자주 사용되는 옵션들 본문

AWS 및 클라우드 지식/DB 이외 AWS 서비스, 클라우드 지식

AWS CLI 를 통해 S3 관련 작업을 할 시 명령어, 자주 사용되는 옵션들

`O` 2024. 8. 13. 00:35
728x90
반응형

해당 페이지에서는 AWS S3 서비스에 대하여 CLI  를 사용시, 자주 사용되는 명령어, 옵션을 다룬다.
 
이 페이지는 AWS 공식 Document 및 외부 게시글, 이전 게시글을 참조하여 작성했다.
 
[1] https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-services-s3-commands.html
 
[2] https://inpa.tistory.com/entry/AWS-CLI-%F0%9F%93%9A-S3-CLI-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%A2%85%EB%A5%98-%F0%9F%92%AF-%EC%B4%9D%EC%A0%95%EB%A6%AC

[3] 2022.06.10 - [AWS 및 클라우드 지식/AWS RDS, Aurora 및 관련 지식] - AWS CLI 개요 및 의의



S3 CLI  작업의 용이성

 
S3 서비스는 우리가 개인 컴퓨터에서 개인파일들을 이동, 삭제 하는 것처럼 사내에서 운영 및 이용을 하다 보면 주기적으로 필요 없는 파일을 삭제하거나 옮겨야 하는 등 주기적인 일괄 작업이 필요한 서비스 중 하나다.
 
그래서 CLI 로 일괄 작업을 미리 준비 해 두면 지속적으로 매우 용이하게 쓸 수 있다.
 
참고로, 이 게시글은 사용자가 S3 사용과 관련된 권한을 부여 받았다는 가정하에 작성한 글이다. 권한과 관련된 내용은 [1] 을 참고하면 된다.



S3 에서 유용하게 쓰이는 명령어들

 
- ls, mv, rm, cp (나열, 이동, 삭제, 복제)

우리가 리눅스를 사용할 시, 자주 사용하는 명령어이며 S3 에서도 이 명령어가 그대로 사용된다. 
 
- rb
 
S3 에서 사용되는 명령어로 뒤의 b 에서 추측할 수 있듯이, 버킷을 삭제하는 명령어다. 명령어는 일반적으로 아래의 방법으로 사용된다. 
 

aws s3 rb s3://bucket-name

 
일반적으로 rb 는 버킷에 파일이 있는 경우 작동되지 않는게 기본 원칙이고, 이를 강제로 삭제하려면 옵션에 --force 를 붙이면 된다.
 
- sync

리눅스의 rsync 처럼 버킷에 있는 파일 리스트들을 동기화시키는 명령어다. 로컬로 내 pc 를 target 으로 지정 하거나 다른 S3 디렉토리를 지정 할수 있다. 단순 복제면 cp 를 사용하면 되고, 아래 예시와 같이 좀 더 복잡한 조건 옵션을 부여하려면 sync 를 쓰면 된다.
 
아래 옵션 항목에서 추가로 설명되는 --exclude, --include 를 쓰면 삭제 또는 보존 파일에 대한 추가 조건을 넣을 수 있다.
 

// S3 경로에 파일을 복제 후, 원본 디렉토리에서는 삭제

$ aws s3 sync . s3://my-bucket/path --delete
delete: s3://my-bucket/path/MyFile1.txt



S3 에서 유용하게 쓰이는 옵션들

 
- recursive
 
특정 버킷 내 파일 뿐만 아니라, 대상 버킷에 대해서도 명령어를 적용시키는 옵션이다. 예를 들어, 특정 버킷 내 파일 뿐만 아니라 대상 버킷에 대해서도 삭제를 원하면 아래의 예시를 사용하면 된다.
 

 aws s3 rm s3://my-bucket/path --recursive

 

// 회사 S3 버킷이 s3://my-bucket/path, s3://my-bucket/path2, s3://my-bucket/path3 등으로 
다중화 되어 있다면 아래의 옵션으로 명령어를 써야한다. 이렇게 쓰면 target 에서도 bucket 디렉토리
그대로 구성을 해 준다.

aws s3 cp (source) (target) --recursive

 
 
- include, exclude
 
명칭 그대로 어떤 파일을 넣어야 할 지, 어떤 파일을 작업 대상에서 제외 시킬지 설정하는 옵션이다.
위의 명령어를 그대로 쓰면 source 에서 모든 파일을 가져와야 하나, 작업을 할 때는 특정 파일들만 가져와야 하는 경우가 더 많다. 이 때 이 옵션을 통해 설정을 한다.
 
예시는 아래와 같다.
 

// 회사 S3 버킷이 s3://my-bucket/path, s3://my-bucket/path2, s3://my-bucket/path3 등으로 
다중화 되어 있는 상태에서 각 버킷별로 특정 파일 명칭으로 시작하는 파일 (target_files) 만 
가져 와야 할 때는 아래의 방식으로 사용된다.

aws s3 cp (source) (target) --recursive --exclude '*' --include '*/target_files*'

 
예시를 보면 wildcard (*) 를 통해 조절을 한 걸 볼 수 있는데, * 를 어디에 쓰느냐에 따라 세밀하게 조건을 지정 할 수 있다.
이 예시는 각 버킷 별로 특정 파일만 가져와야 하니 exclude 에 * 를 써서 모든 버킷, 파일들을 배제 하면서 (최상위 버킷에 있는 파일들도 배제 하기 위함) 각 버킷 디렉토리 및 하위에 있는 목표 파일들만 가져오도록 설정 한 것이다.
 
회사에서 버킷의 복잡도에 따라 * 또한 세밀하게 조절해야 함을 유의 하자
 
 
 - dryrun
 
CLI 에서 쓸 수 있는 매우 유용한 옵션 중 하나다. 이 옵션을 붙이면 자신이 쓴 명령어가 어떻게 작동이 될 지 실제 명령어를 수행하지 않으면서도 결과를 보여준다. 중요한 작업을 할 시에는 필수적으로 사용한다.
 

// S3 경로에 파일을 복제 후, 원본 디렉토리에서는 삭제하는 작업을 dryrun 으로 수행
결과를 보여주되, 실제로 수행되지는 않음

$ aws s3 sync . s3://my-bucket/path --delete --dryrun
(dryrun) delete: s3://my-bucket/path/MyFile1.txt

 

반응형
Comments