AWS S3 `sync` 명령어 원리와 사용팁

Falcon·2024년 5월 26일
1

aws

목록 보기
34/35

개요

aws-cli v2.x 에서 aws s3 sync 명령어의 동작 원리와 주요 옵션에 대해 설명합니다.

언제 쓰나

  1. Local file → S3 일괄 업로드
  2. S3 → Local File 일괄 다운로드
  3. S3 → another S3 일괄 업로드

이름은 sync 지만 완전히 똑같은 상태를 만드는 것이 아니라 source 에서 target 으로 필요한 것만 PUT 하는 것이 원칙이다.

왜 쓰나

  1. aws s3 sync 는 변경이 발생한 파일만을 업로드하는 효율적인 명령어기 때문이다.
  2. local, S3 파일 경로를 일관되게 유지할 수 있다.

사용 예시

Local → S3 일괄 업로드

sync-test/
├── a.txt
└── b.txt
# first sync
$ aws s3 sync sync-test s3://milkcoke-logs/sync-test
upload: sync-test/b.txt to s3://milkcoke-logs/sync-test/b.txt

최초 파일 생성시 a.txt, b.txt 파일 모두 S3 Object key 경로에 디렉토리명을 포함하여 파일이 업로드 된다.

# second sync
$ aws s3 sync sync-test s3://milkcoke-logs/sync-test

2번째 명령어 입력에선 아무런 API 호출이 없었다.

# third sync
$ echo 'aaa' > sync-test/a.txt # a 파일 수정
$ aws s3 sync sync-test s3://milkcoke-logs/sync-test
upload: sync-test/a.txt to s3://milkcoke-logs/sync-test/a.txt

a.txt 파일 수정하고 sync 했더니 a.txt 파일만 업로드 한다.

aws s3 sync 는 자동으로 변경을 감지하여 변경한 파일만 동기한다.

동작 원리: 변경 감지 기준

‘변경 발생’ 여부를 어떻게 파악할까?

(1) File Size

파일 크기를 검사한다.
파일 크기가 다른 경우 sync 대상이 된다.

(2) Last Modified

파일이 마지막으로 변경된 timestamp 를 검사한다.
파일 크기가 같더라도 변경된 시각이 다르면 sync 대상이 된다.

💡 git 같은 시스템으로 파일 변경을 Rollback 했다 하더라도
로컬 파일의 마지막 수정 일자가 업데이트 되므로 이럴 땐 sync 대상이 된다.

사용 팁

실제 파일 변경이 없더라도 마지막 수정일자가 업데이트되면 sync 대상이기 때문에
파일 크기가 큰 경우 중복 업로드 API 호출이 발생할 수 있다.
완벽하진 않지만 --size-only 사용시 파일 크기만을 변경 감지 기준으로 설정할 수 있다.

profile
I'm still hungry

0개의 댓글