AWS CLI로 S3 사용하기

GarionNachal·2025년 4월 17일
0

AWS

목록 보기
2/5

소개

Amazon S3(Simple Storage Service)는 AWS에서 제공하는 클라우드 기반 객체 스토리지 서비스입니다. AWS CLI(Command Line Interface)는 이러한 S3 서비스를 터미널이나 명령 프롬프트에서 쉽게 사용할 수 있게 해주는 도구입니다. 이 블로그 글에서는 AWS CLI를 사용하여 S3 서비스를 활용하는 방법에 대해 알아보겠습니다.

AWS CLI 설치하기

AWS CLI를 사용하기 위해서는 먼저 시스템에 설치해야 합니다. 운영체제별 설치 방법은 다음과 같습니다.

Windows에 설치하기

  1. AWS CLI MSI 설치 프로그램을 다운로드합니다.
  2. 다운로드한 설치 프로그램을 실행하고 지시에 따라 설치를 완료합니다.
  3. 설치가 완료되면 명령 프롬프트를 열고 다음 명령어로 설치를 확인합니다:
Copyaws --version

또는 명령 프롬프트에서 다음 명령어를 사용하여 직접 설치할 수도 있습니다:

Copymsiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi

무인 설치를 위해서는 다음과 같이 /qn 플래그를 사용할 수 있습니다:

Copymsiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi /qn

macOS에 설치하기

macOS에서는 다음 방법으로 AWS CLI를 설치할 수 있습니다:

  1. 패키지 다운로드 및 설치 방법
  2. Homebrew 패키지 관리자 사용 방법
Copy# Homebrew를 사용한 설치 방법
brew install awscli

Linux에 설치하기

Linux에서는 패키지 매니저나 공식 설치 스크립트를 사용하여 설치할 수 있습니다:

Copy# Ubuntu/Debian에서 pip를 사용한 설치
sudo apt-get update
sudo apt-get install python3-pip
pip3 install awscli --upgrade --user

# Amazon Linux, RHEL, CentOS
sudo yum install awscli

설치 후에는 다음 명령어로 설치 여부를 확인합니다:

Copyaws --version

AWS CLI 구성하기

AWS CLI를 설치한 후 AWS 계정에 연결하기 위한 구성이 필요합니다. 다음 명령어를 실행하여 기본 구성을 설정합니다:

Copyaws configure

이 명령어를 실행하면 다음 정보를 입력해야 합니다:

  • AWS Access Key ID
  • AWS Secret Access Key
  • Default region name (예: us-east-1, ap-northeast-2 등)
  • Default output format (json, text, table 중 하나)

S3 명령어 기본 사용법

AWS CLI에서 S3 관련 명령어는 aws s3 형식으로 사용합니다. 명령어의 기본 형식은 다음과 같습니다:

Copyaws s3 <명령어> [인수] [옵션]

경로 인수 타입

S3 명령어에서 사용되는 경로 인수는 두 가지 타입이 있습니다:

  1. LocalPath: 로컬 파일이나 디렉토리의 경로를 나타냅니다. 절대 경로나 상대 경로로 지정할 수 있습니다.
  2. S3Uri: S3 객체, 접두사 또는 버킷의 위치를 나타냅니다. 항상 s3://버킷명/키 형식으로 작성해야 합니다.
    • 예: s3://my-bucket/my-folder/my-file.txt

주요 S3 명령어

버킷 생성하기 (mb)

mb (make bucket) 명령어는 새로운 S3 버킷을 생성합니다:

Copyaws s3 mb s3://버킷명

버킷 이름은 전역적으로 고유해야 하며 DNS 규칙을 준수해야 합니다. 다음 규칙을 따릅니다:

  • 소문자, 숫자, 하이픈(-), 마침표(.)만 사용 가능
  • 문자나 숫자로 시작하고 끝나야 함
  • 하이픈 옆에 마침표가 올 수 없음

예:

Copyaws s3 mb s3://my-bucket-2025

버킷 및 객체 목록 보기 (ls)

ls 명령어로 버킷, 폴더 또는 객체 목록을 확인할 수 있습니다:

Copy# 모든 버킷 목록 조회
aws s3 ls

# 특정 버킷 내 객체 목록 조회
aws s3 ls s3://버킷명

# 특정 접두사(폴더)의 객체 목록 조회
aws s3 ls s3://버킷명/접두사/

예:

Copy# 모든 버킷 조회
aws s3 ls

# my-bucket 버킷의 모든 객체 조회
aws s3 ls s3://my-bucket

# my-bucket 버킷의 images 폴더 내 객체 조회
aws s3 ls s3://my-bucket/images/

특정 리전의 버킷만 조회하고 싶은 경우 --region 옵션을 사용할 수 있습니다:

Copyaws s3 ls --region ap-northeast-2

결과를 페이지 단위로 보려면 --max-items 또는 --page-size 옵션을 사용할 수 있습니다:

Copyaws s3 ls --max-items 100 --page-size 10

버킷 삭제하기 (rb)

rb (remove bucket) 명령어로 S3 버킷을 삭제할 수 있습니다:

Copyaws s3 rb s3://버킷명

기본적으로 이 명령어는 빈 버킷만 삭제할 수 있습니다. 내용이 있는 버킷을 강제로 삭제하려면 --force 옵션을 사용합니다:

Copyaws s3 rb s3://버킷명 --force

이 명령어는 버킷 내 모든 객체를 삭제한 후 버킷을 삭제합니다.

파일 복사하기 (cp)

cp 명령어는 로컬과 S3 간 또는 S3 버킷 간에 파일을 복사합니다:

Copy# 로컬 -> S3
aws s3 cp 로컬파일경로 s3://버킷명/키

# S3 -> 로컬
aws s3 cp s3://버킷명/키 로컬파일경로

# S3 -> S3
aws s3 cp s3://원본버킷/원본키 s3://대상버킷/대상키

예:

Copy# 로컬 파일을 S3에 업로드
aws s3 cp file.txt s3://my-bucket/

# S3 객체를 로컬에 다운로드
aws s3 cp s3://my-bucket/file.txt ./

# S3 버킷 간 복사
aws s3 cp s3://my-bucket/file.txt s3://other-bucket/backup/

디렉토리 전체를 복사하려면 --recursive 옵션을 사용합니다:

Copyaws s3 cp 로컬디렉토리 s3://버킷명/접두사/ --recursive

스트리밍 기능도 지원합니다:

Copy# 텍스트를 S3 파일로 저장
echo "hello world" | aws s3 cp - s3://my-bucket/hello.txt

# S3 파일 내용 출력
aws s3 cp s3://my-bucket/hello.txt -

파일 이동하기 (mv)

mv 명령어는 파일을 이동시키거나 이름을 변경합니다. 소스 파일/객체를 복사한 후 원본을 삭제합니다:

Copy# 로컬 -> S3
aws s3 mv 로컬파일경로 s3://버킷명/키

# S3 -> 로컬
aws s3 mv s3://버킷명/키 로컬파일경로

# S3 내에서 이동
aws s3 mv s3://버킷명/원본키 s3://버킷명/대상키

예:

Copy# 로컬 파일을 S3로 이동
aws s3 mv file.txt s3://my-bucket/

# S3 객체를 로컬로 이동
aws s3 mv s3://my-bucket/file.txt ./

# S3 내에서 객체 이동 또는 이름 변경
aws s3 mv s3://my-bucket/old-name.txt s3://my-bucket/new-name.txt

폴더 전체를 이동하려면 --recursive 옵션을 사용합니다:

Copyaws s3 mv s3://my-bucket/folder/ s3://my-bucket/new-folder/ --recursive

파일 삭제하기 (rm)

rm 명령어로 S3 객체를 삭제할 수 있습니다:

Copyaws s3 rm s3://버킷명/키

예:

Copy# 단일 객체 삭제
aws s3 rm s3://my-bucket/file.txt

# 특정 접두사의 모든 객체 삭제
aws s3 rm s3://my-bucket/folder/ --recursive

파일 동기화하기 (sync)

sync 명령어는 소스와 대상 간의 파일을 동기화합니다. 소스에 있는 파일 중 대상에 없거나 변경된 파일만 복사합니다:

Copy# 로컬 -> S3
aws s3 sync 로컬디렉토리 s3://버킷명/접두사/

# S3 -> 로컬
aws s3 sync s3://버킷명/접두사/ 로컬디렉토리

# S3 -> S3
aws s3 sync s3://원본버킷/접두사/ s3://대상버킷/접두사/

예:

Copy# 현재 디렉토리를 S3와 동기화
aws s3 sync . s3://my-bucket/backup/

# S3 버킷 내용을 로컬 디렉토리로 동기화
aws s3 sync s3://my-bucket/data/ ./data/
  • -delete 옵션을 사용하면 소스에 없는 파일은 대상에서도 삭제됩니다:
Copyaws s3 sync 로컬디렉토리 s3://버킷명/접두사/ --delete

유용한 옵션

-exclude와 --include 필터 사용하기

  • -exclude와 -include 옵션을 사용하여 특정 패턴의 파일을 포함하거나 제외할 수 있습니다:
Copy# .txt 파일만 복사
aws s3 cp 로컬디렉토리 s3://버킷명/ --recursive --exclude "*" --include "*.txt"

# .git 디렉토리 제외하고 동기화
aws s3 sync 로컬디렉토리 s3://버킷명/ --exclude ".git/*"

# .jpg와 .png 파일만 업로드
aws s3 cp 로컬디렉토리 s3://버킷명/ --recursive --exclude "*" --include "*.jpg" --include "*.png"

패턴에서 사용 가능한 특수 문자:

  • : 모든 문자 매칭
  • ?: 단일 문자 매칭
  • [시퀀스]: 시퀀스 내 문자 매칭
  • [!시퀀스]: 시퀀스에 없는 문자 매칭

필터가 여러 개인 경우, 나중에 나오는 필터가 우선합니다.

-acl로 권한 설정하기

  • -acl 옵션으로 S3 객체의 접근 권한을 설정할 수 있습니다:
Copy# 공개 읽기 권한으로 파일 업로드
aws s3 cp file.txt s3://my-bucket/ --acl public-read

# 공개 읽기/쓰기 권한으로 동기화
aws s3 sync 로컬디렉토리 s3://my-bucket/ --acl public-read-write

가능한 ACL 값:

  • private: 소유자만 모든 권한 가짐
  • public-read: 소유자는 모든 권한, 다른 사용자는 읽기만 가능
  • public-read-write: 모든 사용자가 읽기/쓰기 가능

-recursive 옵션 사용하기

  • -recursive 옵션은 디렉토리나 접두사 내 모든 파일에 명령을 적용합니다:
Copy# 디렉토리 전체 업로드
aws s3 cp 로컬디렉토리 s3://버킷명/접두사/ --recursive

# 버킷 내 모든 객체 삭제
aws s3 rm s3://버킷명/ --recursive

실전 예제

예제 1: 웹사이트 배포하기

정적 웹사이트를 S3에 배포하는 예:

Copy# 빌드된 웹사이트 파일을 S3에 업로드
aws s3 sync ./build/ s3://my-website-bucket/ --acl public-read

# 캐시 제어 헤더 설정
aws s3 cp ./build/index.html s3://my-website-bucket/ --cache-control "max-age=0" --acl public-read

예제 2: 대용량 파일 업로드

대용량 파일 업로드 시 AWS CLI는 자동으로 멀티파트 업로드를 수행합니다:

Copyaws s3 cp large-file.zip s3://my-bucket/

업로드가 실패한 경우 멀티파트 업로드를 중단하려면:

Copyaws s3api abort-multipart-upload --bucket my-bucket --key large-file.zip --upload-id 업로드ID

예제 3: 특정 스토리지 클래스로 객체 업로드

S3의 다양한 스토리지 클래스를 활용하여 비용을 최적화할 수 있습니다:

Copy# STANDARD_IA 스토리지 클래스로 업로드
aws s3 cp archive.zip s3://my-bucket/ --storage-class STANDARD_IA

# GLACIER 스토리지 클래스로 업로드
aws s3 cp old-logs.zip s3://my-bucket/ --storage-class GLACIER

마무리

AWS CLI를 사용한 S3 관리는 자동화 스크립트 작성이나 대량의 파일 처리 시 특히 유용합니다. 이 문서에서 다룬 명령어와 옵션을 통해 S3의 기본 기능을 활용할 수 있습니다.

더 자세한 정보는 다음 공식 문서를 참조하세요:

profile
AI를 꿈꾸는 BackEnd개발자

0개의 댓글