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.
Python 3.6.1 pip 9.0.1
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
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. .. ..
# -*- 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>
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