[Python] Lokal → Verfahren zum Hochladen von Dateien in S3 (boto3)

Einführung

Ich sehe oft Qiita-Artikel, die boto2 verwenden, um Dateien in den lokalen Speicher hochzuladen. Ich konnte mit boto3 keine finden, daher werde ich die implementierte mit Bezug auf die offizielle Website veröffentlichen.

Entwicklungsumgebung

Python 3.6.1 pip 9.0.1

Verfahren

Paketinstallation

boto3(AWS SDK for python)

$ pip install boto3

Installieren Sie das Paket auch für den Betrieb von AWS-Diensten über die Befehlszeile.

$ pip install awscli

Generierung von Konfigurationsdateien

Schreiben Sie den Zugriffsschlüssel, den geheimen Schlüssel, die Region usw. in die Konfigurationsdatei. Wenn Sie den folgenden Befehl ausführen und die Daten dann interaktiv eingeben, wird eine Datei in Ihrem Home-Verzeichnis erstellt.

__ * In boto2 wurden der AWS-Zugriffsschlüssel und der geheime Schlüssel aus der Quelle gelesen, aber Holen Sie sich in boto3 die beiden oben genannten Schlüssel aus der Konfigurationsdatei. __ </ font>

$ aws configure
AWS Access Key ID [None]: xxxxxxxxxxxxxxxxxxxxxxx
AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxxx
Default region name [None]: xxxxxxxxxxxxxxxxxxxxx
Default output format [None]: xxxxxxxxxxxxxxxxxxx

Generierte Dateien (2)

~/.aws/credentials


----------------------------------------------
[default]
aws_access_key_id = ACCESS_KEY_ID
aws_secret_access_key = SECRET_ACCESS_KEY
----------------------------------------------

~/.aws/config


----------------------------------------------
[default]
region = [xxxxxxxxxxxxxxxxx]
output = [xxxxxxxxxxxxxxxxx]
----------------------------------------------

Da es im Home-Verzeichnis generiert wird und die obige Datei im Home-Verzeichnis auch dann gelesen wird, wenn boto3 ausgeführt wird, Beachten Sie, dass das Verschieben des .aws-Verzeichnisses zu einem Fehler führt.

botocore.exceptions.NoCredentialsError: Unable to locate credentials

Wenn Sie es verschieben, tritt der obige Fehler auf. Nun, gewöhnliche Leute würden es nicht bewegen. .. ..

Implementierung (Python-Quellcode)


# -*- coding: utf-8 -*-

import sys
import threading

import boto3

# boto3 (.aws/config)
BUCKET_NAME = 'YOUR_BUCKET_NAME'

class ProgressCheck(object):
    def __init__(self, filename):
        self._filename = filename
        self._size = int(os.path.getsize(filename))
        self._seen_so_far = 0
        self._lock = threading.Lock()
    def __call__(self, bytes_amount):
        with self._lock:
            self._seen_so_far += bytes_amount
            percentage = (self._seen_so_far / self._size) * 100
            sys.stdout.write(
                    "\r%s / %s (%.2f%%)" % (
                        self._seen_so_far, self._size,
                        percentage))
            sys.stdout.flush()


def UploadToS3():
    # S3Connection
    s3 = boto3.resource('s3')
    s3.Object(BUCKET_NAME, 'OBJECT_KEY (S3)').upload_file('UPLOAD_FILE_PATH (lOCAL)')

UploadToS3()  
  

__OBJECT_KEY (S3) __: Legen Sie den Objektschlüssel in S3 fest. </ font> __UPLOAD_FILE_PATH (lOCAL) __: Legen Sie den Pfad der hochzuladenden lokalen Datei fest. </ font>

Am Ende

Wenn Sie Lust dazu haben, möchte ich einen Vergleich mit der Upload-Methode in boto2 schreiben. Bis zum Ende Danke fürs Lesen.

Bitte weisen Sie auf Fehler oder Aktualisierungen hin.

Recommended Posts