On m'a dit que si vous utilisez [ʻawscli](https://pypi.python.org/pypi/awscli) au lieu de
boto, vous n'avez pas besoin d'écrire un script de téléchargement de bucket s3 comme indiqué ci-dessous. ʻAwscli
Cela semble pratique, alors veuillez utiliser ceci.
Installation
$ pip install awscli
Enregistrer les informations S3 (un fichier de configuration est généré dans ~ / .aws /
.)
$ aws configure
Télécharger le dossier spécifié
$ aws s3 sync <chemin du dossier> s3: // <nom du compartiment>
Confirmer le téléchargement
$ aws s3 ls <nom du compartiment>
Vous pouvez également télécharger
$ aws s3 sync s3: // <nom du compartiment> <chemin de destination du téléchargement>
J'ai écrit dans Qiita ce que j'ai publié sur Gist.
Utilisez boto pour télécharger le dossier spécifié (tous les fichiers qu'il contient) dans le compartiment d'Amason S3.
Installons boto
avec pip install boto
etc.
Ajoutez ACCESS_KEY_ID, SECRET_ACCESS_KEY, BUCKET_NAME. Dans l'exemple, l'en-tête s'écrit "Cache-Control: max-age = 10", mais vous pouvez également ajouter l'en-tête si vous le souhaitez.
deploys3.py
# -*- 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()
Si vous exécutez ce script comme suit, tous les fichiers sauf les fichiers invisibles (fichiers commençant par.) Dans le dossier hoge seront téléchargés et publiés dans le répertoire racine de S3 avec l'en-tête spécifié.
$ python deploys3.py hoge
Je ne sais pas comment utiliser les messages Qiita ...
Si vous avez un bijou ou un npm avec des fonctionnalités telles que boto
, merci de me le faire savoir m () m
Recommended Posts