[PYTHON] Un script qui utilise boto pour télécharger un dossier spécifié sur Amason S3

* PostScript 07/01/2015

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>

Script pour télécharger le dossier spécifié sur Amazon S3

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

Un script qui utilise boto pour télécharger un dossier spécifié sur Amason S3
Script qui analyse morphologiquement l'URL spécifiée
Utilisez boto pour charger / télécharger des fichiers vers s3.
J'ai écrit un script pour télécharger un plug-in WordPress
Comment rédiger un test de traitement utilisant BigQuery
Un script python qui convertit les données Oracle Database en csv
Télécharger un fichier sur Dropbox
Pour vérifier si la clé spécifiée se trouve dans le compartiment spécifié dans Boto 3
Un script qui renvoie 0, 1 attaché au premier Python prime
Utilisez boto3 pour accéder à S3