S3 sync
디렉터리와 S3 경로를 동기화한다. 원본 디렉터리에서 지정한 타깃 경로로 새 파일 및 업데이트된 파일을 재귀적으로 복사한다. 즉, 원본 디렉터리와 타깃 경로에 존재하는 파일의 차이(변경일, 해시값, 파일 크기) 등을 비교하여 차이가 있는 파일만을 업데이트한다. 리눅스의 rsync 명령어와 유사하다.
sync 명령은 S3 버킷에 푸시하는 데이터 양을 줄임으로써 비용을 절감할 수 있다.
사용법
aws s3 sync /<ORIGIN_PATH> /<TARGET_PATH>
/ORIGIN_PATH와 /TARGET_PATH 각각이 로컬 디렉터리인지 s3 경로인지에 따라 업로드, 다운로드, 버킷 간 동기화가 가능하다.
로컬 디렉터리에서 S3 버킷으로 동기화 (업로드)
aws s3 /PATH/LOCAL s3://TARGET/PREFIX
# 예시
aws s3 sync . s3://mybucket
로컬 디렉터리에서 S3 버킷을 sync 할 때는 아래의 경우에 파일 업로드가 이루어진다.
- 로컬 파일이 지정된 s3 버킷 경로에 없는 경우
- 로컬 파일의 크기가 s3 내 객체의 크기와 다른 경우
- 로컬 파일의 마지막 수정 시간이 s3 내 객체의 마지막 수정 시간보다 최신인 경우
S3 버킷에서 S3 버킷으로 동기화
aws s3 sync s3://mybucket s3://mybucket2
같은 버킷을 경로만 다르게 해서 동기화할 수도 있다. S3 버킷 간 sync 할 때는 아래의 경우에 파일 복사가 이루어진다.
- s3 객체가 지정된 버킷의 경로에 없는 경우
- 두 s3 객체의 크기가 다른 경우
- 원본 파일의 마지막 수정 시간이 복사 파일의 마지막 수정 시간보다 최신인 경우
S3 버킷에서 로컬 디렉터리로 동기화 (다운로드)
aws s3 s3://TARGET/PREFIX /PATH/LOCAL
# 예시
aws s3 sync s3://mybucket .
S3 버킷에서 로컬 디렉토리를 sync 할 때는 아래의 경우에 파일 다운로드가 이루어진다.
- s3 버킷 내 객체가 로컬 디렉터리에 없는 경우
- s3 내 객체의 크기가 로컬 파일의 크기와 다른 경우
- s3 내 객체의 마지막 수정 시간이 로컬 파일의 마지막 수정 시간보다 최신인 경우
aws s3 cp 명령어와의 차이
aws s3 cp는 모든 파일을 복사하기 때문에 타깃 경로에 파일이 이미 존재하는 경우에도 파일을 복사한다. 또한 원본에서 삭제된 파일은 타깃 경로에서 삭제되지 않는다.
aws s3 sync는 파일을 복사하기 전에 타깃 경로를 확인하고 새 파일과 업데이트된 파일만 복사한다. 또한 --delete 옵션을 사용하는 경우 원본에서 삭제된 파일을 타깃 경로에서도 삭제한다.
참고 문서
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3/sync.html
https://stackoverflow.com/questions/64728076/aws-s3-cp-vs-aws-s3-sync-behavior-and-cost