AWS_FAQ

AWS S3 파일 타임스템프 확인

2015.09.13 17:23

호스트웨이 조회 수:421

S3에 있는 파일의 타임 스템프를 확인하고 파일이 업데이트 된 경우에만 다운로드 하고 싶을 때


awscli의 aws s3 sync 명령을 실행하는 것으로,
rsync처럼 S3 버킷의 업데이트 파일을 EC2 인스턴스에 다운로드하는 것이 가능하므로
aws s3 sync 명령을 crontab에서 정기적으로 실행하는 방법을 이용


$ aws s3 sync s3://test-web-data-store / test / / home / ec2-user /
download : s3://test-web-data-store/test/test2.txt to ./test2.txt
download : s3://test-web-data-store/test/test.txt to ./test.txt
$

시나리오
S3 다음과 같은 테스트 파일 생성
$ date
Sun March 13 10:13:13 UTC 2015
$ aws s3 ls s3://test-web-data-store/test /
2014-12-21 16:53:39 0
$

$ date> /tmp/test.txt
$

$ aws s3 cp /tmp/test.txt s3://test-web-data-store/test/
upload : ../../tmp/test.txt to s3://test-web-data-store/test/test.txt
$

$ aws s3 ls s3://test-web-data-store/test /
2015-09-13 16:53:39 0
2015-09-13 17:14:05 29 test.txt


$ rm -f /tmp/test.txt
$ ll /tmp/test.txt
ls : can not access /tmp/test.txt : No such file or directory
$

S3 버킷에 파일의 타임 스템프 확인
$ aws s3 ls s3://test-web-data-store/test/ | grep 'test.txt'| awk '{print $ 1, $ 2}' 2015-09-13 17:14:05 $

다음과 같은 쉘을 만들고 crontab에서 10 분 간격으로 정기적 실행하도록하면
s3://test-web-data-store/test/test.txt의 타임 스탬프가 업데이트되면
EC2 인스턴스에 /tmp/test.txt로 다운받는 것이 가능합니다.
s3://test-web-data-store/test/test.txt의 타임 스탬프가 업데이트되어 있으면,
 /tmp/test.txt로 다운로드 테스트 쉘입니다

vi s3_download_tsst.sh


#!/bin/sh

S3_BUCKET = "s3 : // test-web-data-store / test"
S3_CHECK_FILE = "test.txt"

OLD_TIMESTAMP_FILE = "/ tmp / old_file_timestamp.txt"
NEW_TIMESTAMP_FILE = "/ tmp / new_file_timestamp.txt"

DOWNLOAD_DIR = "/ tmp"

if [-f $ {NEW_TIMESTAMP_FILE}]; then
        MV $ {NEW_TIMESTAMP_FILE} $ {OLD_TIMESTAMP_FILE}
fi

# S3 버킷에있는 파일의 타임 스탬프를 취득
aws s3 ls $ {S3_BUCKET} / | grep "$ {S3_CHECK_FILE}"| awk '{print $ 1, $ 2}'> $ {NEW_TIMESTAMP_FILE}

if [-f $ {OLD_TIMESTAMP_FILE}]; then

        DIFF_COUNT =`diff $ {NEW_TIMESTAMP_FILE} $ {OLD_TIMESTAMP_FILE} | wc -l`

        if [$ {DIFF_COUNT} -ge 1]; then

                echo "diff [$ {S3_BUCKET} / $ {S3_CHECK_FILE}"
                echo "aws s3 cp $ {S3_BUCKET} / $ {S3_CHECK_FILE} $ {DOWNLOAD_DIR} /"
                aws s3 cp $ {S3_BUCKET} / $ {S3_CHECK_FILE} $ {DOWNLOAD_DIR } /

        else

                echo "not diff [$ {S3_BUCKET} / $ {S3_CHECK_FILE}"

        Fi
Fi

$ chmod 754 s3_download_test.sh


s3 : //test-web-data-store/test/test.txt의 타임 스탬프가 업데이트되지 않은 상태에서 s3_download_test.sh을 실행하면 / tmp / test.txt는 다운로드되지 않습니다

$ aws s3 ls s3 : //test-web-data-store/test/test.txt
2015-09-13 17:14:05 29 test.txt
$

$ ./s3_download_test.sh
not diff [s3 : //test-web-data-store/test//test.txt]
$

$ aws s3 ls s3 : //test-web-data-store/test/test.txt
2015-09-13 17:14:05 29 test.txt
$
$ ll /tmp/test.txt
ls : can not access /tmp/test.txt : No such file or directory
$

s3 : //test-web-data-store/test/test.txt의 타임 스탬프가 업데이트 된 상태에서 s3_download_test.sh을 실행하면 / tmp / test.txt를 다운로드 할 수 있습니다.

$ date >> test.txt
$ date >> test.txt
$

$ aws s3 cp test.txt s3 : // test-web-data-store / test /
upload : ./test.txt to s3 : //test-web-data-store/test/test.txt
$
$ rm test.txt
$ ll test.txt
ls : can not access test.txt : No such file or directory
$ ll /tmp/test.txt
ls : can not access /tmp/test.txt : No such file or directory
$

$ aws s3 ls s3 : //test-web-data-store/test/test.txt
2015-09-13 17:37:49 58 test.txt
$

$ ./s3_download_test.sh
diff [s3 : //test-web-data-store/test/test.txt]
aws s3 cp s3 : //test-web-data-store/test/test.txt / tmp /
download : s3 : //test-web-data-store/test/test.txt to ../../tmp/test.txt
$

$ ll /tmp/test.txt
-rw-rw-r-- 1 ec2-user ec2-user 58 March 09 17:45 /tmp/test.txt
$

S3 버켓에 저장된 파일의 타임 스탬프를 확인하여 파일이 갱신되었는지
판정하고 다운로드 할 수 있음.