J'ai essayé de charger / télécharger des fichiers sur AWS S3 / Azure BlobStorage / GCP CloudStorage avec Python

Cet article est l'article du 10ème jour du Calendrier de l'Avent Pathee 2019.

introduction

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.

environnement

Python 3.6.4 macOS 10.15.1

AWS S3

Préparation préalable

Paramètres des informations de connexion

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"

Installation du module

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

Créer un bucket

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

#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

#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

#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

Préparation préalable

Paramètres des informations de connexion

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"

Installation du module

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)

Créer un conteneur

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

#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

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

Supprimer le conteneur

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

Préparation préalable

Paramètres des informations de connexion

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é"

Installation du module

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

Créer un bucket

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

#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

#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

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

Lien vers la page de référence

Recommended Posts

J'ai essayé de charger / télécharger des fichiers sur AWS S3 / Azure BlobStorage / GCP CloudStorage avec Python
Je veux écrire dans un fichier avec Python
[AWS] [GCP] J'ai essayé de rendre les services cloud faciles à utiliser avec Python
J'ai essayé de toucher un fichier CSV avec Python
[5e] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de transformer un fichier Python en un EXE (erreur de récursivité prise en charge)
[2nd] J'ai essayé de créer un certain outil de type Authenticator avec python
[3ème] J'ai essayé de créer un certain outil de type Authenticator avec python
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
J'ai essayé de créer une liste de nombres premiers avec python
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai essayé de créer une application de notification de publication à 2 canaux avec Python
J'ai essayé de créer une application todo en utilisant une bouteille avec python
[4th] J'ai essayé de créer un certain outil de type Authenticator avec python
[1er] J'ai essayé de créer un certain outil de type Authenticator avec python
Je veux jouer avec aws avec python
J'ai essayé un langage fonctionnel avec Python
Connectez-vous à s3 avec AWS Lambda Python
J'ai créé un fichier de configuration avec Python
J'ai essayé de communiquer avec un serveur distant par communication Socket avec Python.
J'ai essayé de créer un programme qui convertit les nombres hexadécimaux en nombres décimaux avec python
J'ai essayé de faire un signal avec Raspeye 4 (édition Python)
[Outlook] J'ai essayé de créer automatiquement un e-mail de rapport quotidien avec Python
J'ai essayé de créer un environnement de développement Mac Python avec pythonz + direnv
J'ai essayé de créer un service de raccourcissement d'url sans serveur avec AWS CDK
[Python] Quand j'ai essayé de créer un outil de décompression avec un fichier zip que je connaissais juste, j'étais accro à sys.exit ()
Je veux faire un jeu avec Python
J'ai essayé d'obtenir des données CloudWatch avec Python
J'ai essayé de sortir LLVM IR avec Python
J'ai essayé de lire un fichier CSV en utilisant Python
J'ai essayé d'automatiser la fabrication des sushis avec python
J'ai essayé de faire un processus périodique avec CentOS7, Selenium, Python et Chrome
J'ai fait une application d'envoi de courrier simple avec tkinter de Python
Quand j'ai essayé de créer un VPC avec AWS CDK mais que je n'ai pas pu le faire
[Analyse des brevets] J'ai essayé de créer une carte des brevets avec Python sans dépenser d'argent
Quand j'ai essayé de créer un environnement virtuel avec Python, cela n'a pas fonctionné
J'ai essayé de créer facilement un système de présence entièrement automatique avec Selenium + Python
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
J'ai essayé d'exécuter python à partir d'un fichier chauve-souris
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé d'implémenter un pseudo pachislot en Python
J'ai essayé de démarrer avec le script python de blender_Partie 02
Je veux échantillonner au hasard un fichier avec Python
J'ai essayé d'implémenter le perceptron artificiel avec python
Je veux travailler avec un robot en python.
Je veux AWS Lambda avec Python sur Mac!
J'ai essayé de résoudre le problème avec Python Vol.1
Je veux faire fonctionner un ordinateur quantique avec Python
[Introduction à AWS] J'ai essayé de jouer avec la conversion voix-texte ♪
J'ai essayé de résoudre la théorie des nombres entiers d'AOJ avec Python
J'ai essayé de faire une simulation de séparation de source sonore en temps réel avec l'apprentissage automatique Python
J'ai essayé de générer automatiquement la chaîne de caractères à entrer dans M. Adjustment avec Python