Cet article est l'article du 10ème jour du Calendrier de l'Avent Pathee 2019.
Bonjour. Je suis Kunii, un ingénieur.
J'ai résumé comment charger / télécharger des fichiers sur ** AWS S3 ** / ** Azure BlobStorage ** / ** GCP Cloud Storage ** avec ** Python **.
J'avais l'habitude de charger / télécharger des fichiers sur Azure Blob Storage avec Python, et j'ai décidé d'essayer d'autres services de stockage ensemble.
D'une manière ou d'une autre, j'ai choisi AWS S3 / GCP Cloud Storage, Python est dû au fait que notre backend est implémenté en Python.
Pour chaque service de stockage, nous résumerons dans les éléments suivants.
· ** Préparation préalable ** ・ ** Paramètres des informations de connexion ** ・ ** Installation du module ** ・ ** Créer une boîte pour stocker des fichiers ** ・ ** Téléchargez le fichier dans la boîte créée ** ・ ** Téléchargez le fichier de la boîte créée ** ・ ** Supprimer la boîte créée **
Chaque service de stockage a un module, il est donc assez facile à utiliser.
Python 3.6.4 macOS 10.15.1
AWS S3
Vous aurez besoin du ** ID de la clé d'accès ** et de la ** clé d'accès secrète ** comme informations de connexion. Créez un ID de clé d'accès et une clé d'accès secrète en vous reportant à Créer une clé d'accès AWS.
Définissez l'ID de la clé d'accès et la clé d'accès secrète dans les variables d'environnement à l'aide de la commande suivante.
$ export AWS_ACCESS_KEY_ID="ID de la clé d'accès"
$ export AWS_SECRET_ACCESS_KEY="Clé d'accès secrète"
Installez ** boto3 **.
$ pip install boto3
Chaque opération ultérieure sur AWS S3 sera basée sur la ** s3_resource ** créée avec le code suivant.
import boto3
s3_resource = boto3.resource('s3', region_name='ap-northeast-1')
Dans AWS S3, la boîte qui stocke les fichiers est appelée un ** compartiment **. Vous pouvez créer un bucket avec le code suivant.
#Créer un bucket
s3_client = s3_resource.meta.client
s3_client.create_bucket(Bucket='Le nom du bucket à créer', CreateBucketConfiguration={'LocationConstraint': 'ap-northeast-1'})
Il semble qu'il existe différents éléments de paramétrage dans CreateBucketConfiguration, mais pour le moment, il ne peut être créé qu'avec LocationConstraint (contrainte de la région où le bucket est créé).
#Téléchargement de fichiers
s3_resource.Bucket('Le nom du bucket vers lequel importer').upload_file('Chemin du fichier à télécharger', 'Nom de fichier à la destination de téléchargement')
#Téléchargement de fichier
s3_resource.Bucket('Le nom du bucket à partir duquel il a été téléchargé').download_file('Nom du fichier à télécharger', 'Télécharger le chemin du fichier de destination')
#Supprimer le bucket
s3_client = s3_resource.meta.client
s3_client.delete_bucket(Bucket='Le nom du bucket à supprimer')
Pour supprimer un bucket, vous devez supprimer tous les fichiers téléchargés dans le bucket et les laisser vides. Si vous essayez de supprimer un bucket alors que le bucket n'est pas vide, une erreur se produira et vous ne pourrez pas le supprimer.
Vous pouvez supprimer le fichier téléchargé avec le code suivant, mais je ne sais comment le supprimer qu'en spécifiant le nom du fichier ... (Il existe également une méthode delete_objects, mais il semble que vous deviez spécifier le nom du fichier après tout)
#Supprimer le fichier
s3_client = s3_resource.meta.client
s3_client.delete_object(Bucket='Le nom du compartiment contenant le fichier à supprimer', Key='Nom de fichier à supprimer')
Azure BlobStorage
Le compte de stockage ** chaîne de connexion ** est requis comme informations de connexion.
Connectez-vous au portail Azure et sélectionnez Créer un compte de stockage (https://docs.microsoft.com/en-us/azure/storage/common/storage-quickstart-create-account?tabs=azure-portal) .. Reportez-vous à ici Obtient (copie) la chaîne de connexion pour le compte de stockage.
Définissez la chaîne de connexion dans la variable d'environnement avec la commande suivante.
$ export CONNECT_STR="Chaîne de connexion"
Installez ** azure-storage-blob **.
$ pip install azure-storage-blob
Chaque opération suivante sur Azure Blob Storage est basée sur ** blob_service_client ** créé avec le code suivant.
import os
from azure.storage.blob import BlobServiceClient
connect_str = os.getenv('CONNECT_STR')
blob_service_client = BlobServiceClient.from_connection_string(connect_str)
Dans Azure BlobStorage, la zone qui stocke les fichiers est appelée un ** conteneur **. Vous pouvez créer un conteneur avec le code suivant.
#Créer un conteneur
container_client = blob_service_client.create_container('Le nom du conteneur à créer')
#Téléchargement de fichiers
blob_client = blob_service_client.get_blob_client(container='Le nom du conteneur vers lequel télécharger', blob='Le nom du fichier à la destination de téléchargement')
with open('Chemin du fichier à télécharger', 'rb') as uploaded_file:
blob_client.upload_blob(uploaded_file)
#Téléchargement de fichier
blob_client = blob_service_client.get_blob_client(container='Le nom du conteneur à partir duquel il a été téléchargé', blob='Le nom du fichier à télécharger')
with open('Chemin du fichier à la destination du téléchargement', 'wb') as downloaded_file:
downloaded_file.write(blob_client.download_blob().readall())
Vous pouvez supprimer un conteneur sans supprimer tous les fichiers que vous avez téléchargés dans le conteneur (même si vous les avez peut-être supprimés dans la méthode).
#Supprimer le conteneur
container_client = blob_service_client.get_container_client('Le nom du conteneur à supprimer')
container_client.delete_container()
GCP CloudStorage
En tant qu'informations de connexion, vous aurez besoin d'une clé de compte (** clé de compte de service **) pour accéder au stockage cloud appelé compte de service.
[Ici](https://sleepless-se.net/2018/05/22/googlecloudstorage%E3%81%A7python%E3%81%8B%E3%82%89%E3%83%95%E3%82% A1% E3% 82% A4% E3% 83% AB% E3% 82% 92% E3% 82% 84% E3% 82% 8A% E3% 81% A8% E3% 82% 8A% E3% 81% 99% Créez une clé de compte de service en vous référant à E3% 82% 8B% E6% 96% B9% E6% B3% 95 / # API) et téléchargez le fichier JSON de la clé de compte de service.
Définissez la clé de compte de service dans la variable d'environnement avec la commande suivante.
$ export GOOGLE_APPLICATION_CREDENTIALS="Chemin du fichier JSON téléchargé"
Installez ** google-cloud **.
$ pip install --upgrade google-cloud
Le ** storage_client ** créé avec le code suivant sera la base de chaque opération ultérieure sur Google Cloud Storage.
from google.cloud import storage
storage_client = storage.Client()
Dans GCP Cloud Storage, la zone qui stocke les fichiers est appelée un ** bucket **. Vous pouvez créer un bucket avec le code suivant.
#Créer un bucket
bucket = storage_client.create_bucket('Le nom du bucket à créer')
#Téléchargement de fichiers
bucket = storage_client.get_bucket('Le nom du bucket vers lequel importer')
blob = bucket.blob('Le nom du fichier à la destination de téléchargement')
blob.upload_from_filename(filename='Chemin du fichier à télécharger')
#Téléchargement de fichier
bucket = storage_client.get_bucket('Le nom du bucket contenant les fichiers à télécharger')
blob = bucket.blob('Le nom du fichier à télécharger')
blob.download_to_filename('Télécharger le chemin du fichier de destination')
#Supprimer le bucket
bucket = storage_client.get_bucket('Le nom du bucket à supprimer')
bucket.delete(force=True)
Afin de supprimer un compartiment (similaire à AWS S3), tous les fichiers téléchargés dans le compartiment doivent être supprimés et vidés. Si vous essayez de supprimer un bucket alors que le bucket n'est pas vide, une erreur se produira et vous ne pourrez pas le supprimer.
En définissant ** force = True **, le compartiment sera vidé puis supprimé.
À propos, la suppression du fichier est la suivante.
#Supprimer le fichier
bucket = storage_client.get_bucket('Le nom du compartiment contenant les fichiers à supprimer')
blob = bucket.blob('Le nom du fichier à supprimer')
blob.delete()
Recommended Posts