부록

이재홍 http://www.pyrasis.com 2014.03.24 ~ 2014.06.30

S3을 s3cmd로 관리하기

AWS CLI로 S3를 사용할 수 있지만 이것보다 좀더 편리한 s3cmd라는 툴이 있습니다. s3fs는 파일시스템처럼 사용할 수 있어서 편리하지만 속도가 느린 것이 단점입니다. s3cmd는 속도도 느리지 않고 다양한 옵션을 제공합니다. 특히 로컬에 있는 많은 파일을 S3 버킷과 동기화하고 바뀐 파일은 CloudFront에 갱신할 때 유용합니다. 그리고 s3cmd는 Linux, Windows, Mac OS X에서 모두 사용할 수 있습니다.
http://s3tools.org/s3cmd

먼저 python-dateutil 패키지를 설치합니다.

Amazon Linux, CentOS

[ec2-user@ip-172-31-31-217 ~]$ sudo yum install -y python-dateutil

Ubuntu Linux

ubuntu@ip-172-31-21-103:~$ sudo apt-get install -y python-dateutil

Windows에서는 아래 링크에서 pip-Win을 받습니다. 그리고 Command에 pip install python-dateutil을 입력하고 Run 버튼을 클릭하면 python-dateutil 패키지를 설치할 수 있습니다.
https://sites.google.com/site/pydatalog/python/pip-for-windows


그림 34-12 pip-Win으로 python-dateutil 설치

GitHub에서 소스 파일을 받은 뒤 압축을 해제하고 Python으로 설치합니다.

  • Windows: 탐색기에서 압축을 해제합니다. 명령 프롬프트나 PowerShell를 실행하고, s3cmd-master 디렉터리에서 python setup.py install 명령을 실행합니다.
  • Mac OS X: Finder에서 압축을 해제합니다. 터미널을 실행하고 s3cmd-master 디렉터리에서 sudo python setup.py install 명령을 실행합니다.
$ wget https://github.com/s3tools/s3cmd/archive/master.zip
$ unzip master.zip
$ cd s3cmd-master
$ sudo python setup.py install

s3cmd –configure 명령으로 액세스 키와 시크릿 키를 설정합니다.

  • Access Key: 액세스 키를 입력합니다.
  • Secret Key: 시크릿 키를 입력합니다. 액세스 키와 시크릿 키를 생성하는 방법은 ‘9장 API와 툴 사용을 위한 액세스 키 생성하기’를 참조하기 바랍니다.
  • 나머지 옵션은 그냥 엔터를 입력합니다.
  • Test access with supplied credentials? [Y/n]: y를 입력합니다.
  • Save settings? [y/N]: y를 입력합니다.
$ s3cmd --configure

Enter new values or accept defaults in brackets with Enter.
Refer to user manual for detailed description of all options.

Access key and Secret key are your identifiers for Amazon S3. Leave them empty f                                               or using the env variables.
Access Key: AKIAJMVSZ7VUHUCJJFNA
Secret Key: Sg1k7MeAZKKJbrtMKEdmF6wfoROqUA4kT+Im9OED

Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password:
Path to GPG program [/usr/bin/gpg]:

When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP and can't be used if you're behind a proxy
Use HTTPS protocol [No]:

On some networks all internet access must go through a HTTP proxy.
Try setting it here if you can't connect to S3 directly
HTTP Proxy server name:

New settings:
  Access Key: AKIAJMVSZ7VUHUCJJFNA
  Secret Key: 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
  Encryption password:
  Path to GPG program: /usr/bin/gpg
  Use HTTPS protocol: False
  HTTP Proxy server name:
  HTTP Proxy server port: 0

Test access with supplied credentials? [Y/n] y
Please wait, attempting to list all buckets...
Success. Your access key and secret key worked fine :-)

Now verifying that encryption works...
Not configured. Never mind.

Save settings? [y/N] y
Configuration saved to '/home/ec2-user/.s3cfg'

s3cmd로 파일을 받는 방법은 다음과 같습니다.

  • --recursive: 하위 디렉터리까지 받습니다.
$ cd exampledir
$ s3cmd get --recursive s3://examplebucket10
$ s3cmd get s3://examplebucket10/hello.txt

s3cmd로 파일을 올리는 방법은 다음과 같습니다.

  • --recursive: 하위 디렉터리까지 올립니다.
$ cd exampledir
$ s3cmd put --recursive ./exampledir s3://examplebucket10
$ s3cmd put ./exampledir/hello.txt s3://examplebucket10

s3cmd로 파일 동기화하는 방법은 다음과 같습니다. 로컬의 파일들과 S3 버킷을 비교하여 바뀐 파일만 업데이트합니다.

  • --recursive: 하위 디렉터리까지 동기화합니다.
$ s3cmd sync --recursive ./exampledir/ s3://examplebucket10
$ s3cmd sync --recursive ./hello/ s3://examplebucket10/hello

s3cmd로 파일을 동기화 한 뒤 CloudFront 갱신하기하는 방법은 다음과 같습니다.

  • --recursive: 하위 디렉터리까지 동기화합니다.
  • --cf-invalidate: 바뀐 파일만 S3 버킷에 연결된 CloudFront에 갱신합니다.
  • --cf-invalidate-default-index: S3 정적 웹사이트 호스팅에서 설정한 Index Document 파일을 갱신합니다.
  • --default-mime-type=”text/html”: 확장자가 없는 파일은 MIME 타입을 HTML로 설정합니다.
  • --guess-mime-type: 확장자에 따라서 MIME 타입을 자동으로 설정합니다.
$ s3cmd sync --recursive --cf-invalidate --cf-invalidate-default-index --default-mime-type="text/html" --guess-mime-type ./exampledir/ s3://examplebucket10

다음은 기타 옵션입니다.

  • --dry-run: 테스트 실행 옵션입니다.
  • --acl-public: 파일을 공개 상태로 설정합니다.
  • --delete-removed: sync 명령으로 동기화할 때 로컬에서 삭제된 파일은 S3 버킷에서도 삭제합니다.

자세한 사용 방법은 링크를 참조하기 바랍니다.
http://s3tools.org/usage


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.