※ 2015-01-07 追記
boto
でなく awscli
を使えば下記のように、s3 bucket アップロードスクリプトを書かずに済むことを教えてもらいました。awscli
便利そうなのでこちらを是非使いましょう。
インストール
$ pip install awscli
S3 情報を登録 (~/.aws/
に設定ファイルが生成される。)
$ aws configure
指定フォルダをアップロード
$ aws s3 sync <フォルダのパス> s3://<bucket 名>
アップロードを確認
$ aws s3 ls <bucket 名>
ダウンロードもできる
$ aws s3 sync s3://<bucket 名> <ダウンロード先のパス>
Amason S3 に指定のフォルダをアップロードするスクリプト
Gist に貼っていたのを Qiita に書いてみました.
boto を使って Amason S3 の bucket に指定のフォルダ(中のファイル全て)をアップロードします.
pip install boto
などで boto
をインストールしておきましょう.
ACCESS_KEY_ID, SECRET_ACCESS_KEY, BUCKET_NAME を追記しておきます. 例では 'Cache-Control: max-age=10' とヘッダを書いていますがお好みでヘッダも追記します.
# -*- coding: utf-8 -*-
"""deploy script to upload the files to AWS S3 bucket
Usage:
$ python deploy_s3.py <folder name for deploy>
"""
import os
import sys
from boto.s3.connection import S3Connection
from boto.s3.key import Key
ACCESS_KEY_ID = 'xxx'
SECRET_ACCESS_KEY = 'xxx'
BUCKET_NAME = 'xxx'
def main():
# check arguments
if len(sys.argv) is not 2:
print '[ERROR] wrong number of arguments. (required 1, got %s)' % len(sys.argv)
sys.exit(1)
_file_name = str(sys.argv[1])
# upload to S3
try:
upload_to_s3(_file_name)
except Exception, e:
raise e
print '[ERROR] upload to S3 has been failed.'
print '[OK] upload to S3 bucket has successfully completed. :)'
def upload_to_s3(file_name):
# connect to S3
s3 = S3Connection(ACCESS_KEY_ID, SECRET_ACCESS_KEY)
bucket = s3.get_bucket(BUCKET_NAME)
# upload with metadata and publish
fc = 0
for abspath, relpath in upload_files(file_name):
k = Key(bucket)
k.key = relpath
k.set_metadata('Cache-Control', 'max-age=10')
k.set_contents_from_filename(abspath)
k.make_public()
fc += 1
print '[OK] %s files are uploaded.' % fc
def upload_files(basedir):
parent_dir = os.path.dirname(os.path.realpath(basedir))
for (path, dirs, files) in os.walk(basedir):
for fn in files:
if fn.startswith('.'):
continue
abspath = os.path.join(path, fn)
yield (
abspath,
os.path.relpath(abspath, parent_dir).split(''.join([basedir, '/']))[1]
)
if __name__ == '__main__':
main()
このスクリプトを以下のように実行すると hoge フォルダ内の不可視ファイル(. から始まるファイル)以外がすべて S3 のルートディレクトリに指定のヘッダを付けてアップロードし publish されます.
$ python deploys3.py hoge
Qiita の投稿の使い方よくわからない...
boto
のような機能の gem や npm がもしあったら誰か教えてくださいm()m