[PYTHON] Ein Skript, das Boto verwendet, um einen bestimmten Ordner in Amason S3 hochzuladen

* 07.01.2015 Nachtrag

Mir wurde gesagt, dass Sie, wenn Sie awscli anstelle von boto verwenden, kein s3-Bucket-Upload-Skript schreiben müssen, wie unten gezeigt. awscli Es scheint praktisch zu sein, also lasst uns das benutzen.

Installation $ pip install awscli

Registrieren Sie S3-Informationen (eine Einstellungsdatei wird in ~ / .aws / generiert.) $ aws configure

Laden Sie den angegebenen Ordner hoch $ aws s3 sync s3: // `

Upload bestätigen $ aws s3 ls `

Sie können auch herunterladen $ aws s3 sync s3: // `

Skript zum Hochladen des angegebenen Ordners auf Amazon S3

Ich habe in Qiita geschrieben, was ich auf [Gist] gepostet habe (https://gist.github.com/naoiwata/8111246).

Verwenden Sie boto, um den angegebenen Ordner (alle darin enthaltenen Dateien) in den Bucket von Amason S3 hochzuladen.

Lassen Sie uns boto mit pip install boto usw. installieren. Fügen Sie ACCESS_KEY_ID, SECRET_ACCESS_KEY, BUCKET_NAME hinzu. Im Beispiel wird der Header als "Cache-Control: max-age = 10" geschrieben. Sie können den Header aber auch hinzufügen, wenn Sie möchten.

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()

Wenn Sie dieses Skript wie folgt ausführen, werden alle außer den unsichtbaren Dateien (Dateien beginnend mit) im Hoge-Ordner hochgeladen und im Stammverzeichnis von S3 mit dem angegebenen Header veröffentlicht.

$ python deploys3.py hoge

Ich bin mir nicht sicher, wie ich Qiita-Posts verwenden soll ... Bitte lassen Sie mich wissen, ob es einen Edelstein oder npm mit einer Funktion wie boto m () m gibt

Recommended Posts

Ein Skript, das Boto verwendet, um einen bestimmten Ordner in Amason S3 hochzuladen
Skript, das die angegebene URL morphologisch analysiert
Verwenden Sie boto, um Dateien auf s3 hoch- / herunterzuladen.
Ich habe ein Skript geschrieben, um ein WordPress-Plug-In hochzuladen
So schreiben Sie einen Test für die Verarbeitung mit BigQuery
Ein Python-Skript, das Oracle-Datenbankdaten in CSV konvertiert
Laden Sie eine Datei in Dropbox hoch
So überprüfen Sie, ob sich der angegebene Schlüssel im angegebenen Bucket in Boto 3 befindet
Ein Skript, das 0, 1 an die erste Python-Primzahl zurückgibt
Verwenden Sie boto3, um zu S3 zu gelangen