[Python] Local → Procédure de téléchargement de fichiers vers S3 (boto3)

introduction

Je vois souvent des articles Qiita qui utilisent boto2 pour télécharger des fichiers dans le stockage local, Je n'ai pas pu en trouver un utilisant boto3, donc je posterai celui implémenté en référence au site officiel.

Environnement de développement

Python 3.6.1 pip 9.0.1

procédure

Installation du package

boto3(AWS SDK for python)

$ pip install boto3

Installez également le package pour faire fonctionner les services AWS à partir de la ligne de commande.

$ pip install awscli

Génération de fichiers de configuration

Écrivez la clé d'accès, la clé secrète, la région, etc. dans le fichier de configuration. Si vous exécutez la commande suivante puis entrez les données de manière interactive, un fichier sera créé sous votre répertoire personnel.

__ * Dans boto2, la clé d'accès AWS et la clé secrète ont été lues à partir de la source, Dans boto3, récupérez les deux clés ci-dessus dans le fichier de configuration. __ </ 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

Fichiers générés (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]
----------------------------------------------

Il est généré dans le répertoire personnel, et même lorsque boto3 est exécuté, le fichier ci-dessus dans le répertoire personnel est lu, donc Notez que le déplacement du répertoire .aws entraînera une erreur.

botocore.exceptions.NoCredentialsError: Unable to locate credentials

Si vous le déplacez, l'erreur ci-dessus se produira. Eh bien, les gens ordinaires ne le déplaceraient pas. .. ..

Implémentation (code source Python)


# -*- 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) __: Définissez la clé d'objet dans S3. </ font> __UPLOAD_FILE_PATH (lOCAL) __: Définissez le chemin du fichier local à télécharger. </ font>

À la fin

Si vous en avez envie, j'aimerais faire une comparaison avec la méthode upload dans boto2. Jusqu'à la fin Merci d'avoir lu.

Veuillez signaler toute erreur ou mise à jour.

Recommended Posts