2015.09.13 17:23
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 버켓에 저장된 파일의 타임 스탬프를 확인하여 파일이 갱신되었는지
판정하고 다운로드 할 수 있음.
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
11 | AWS ELB Pre-warm 신청 양식 | 호스트웨이 | 2016.10.17 | 7960 |
10 | RI 신청 가이드 | 호스트웨이 | 2016.11.29 | 7686 |
9 | Goofys 설치 | 호스트웨이 | 2016.11.29 | 7643 |
8 | AWS 계정 만들기 | 호스트웨이 | 2016.12.09 | 17929 |
7 | AWS AMI 다른 계정으로 공유 | 호스트웨이 | 2016.12.29 | 7818 |
6 | VPC간 Peering 설정 | 호스트웨이 | 2017.01.17 | 7803 |
5 | AWS Flow 설정 | 호스트웨이 | 2017.01.17 | 8550 |
4 | AWS 마스터 계정 정보 변경 방법 안내 | 호스트웨이 | 2017.02.15 | 7392 |
3 | AWS 부하테스트 시행전 승인요청 | 호스트웨이 | 2017.02.27 | 7825 |
2 | AWS Volume Resize 안내 | 호스트웨이 | 2017.03.22 | 6803 |
1 | AWS EC2 Type 별 네트웍 성능 안내 | 호스트웨이 | 2017.03.22 | 9882 |