Dieser Artikel ist der Artikel zum 10. Tag von Pathee Adventskalender 2019.
Hallo. Ich bin Kunii, ein Ingenieur.
Ich habe zusammengefasst, wie Dateien mit ** Python ** in ** AWS S3 ** / ** Azure BlobStorage ** / ** GCP Cloud Storage ** hochgeladen / heruntergeladen werden.
Ich habe früher Dateien mit Python in Azure Blob Storage hochgeladen / heruntergeladen und mich dazu entschlossen, andere Speicherdienste gemeinsam auszuprobieren.
Irgendwie habe ich mich für AWS S3 / GCP Cloud Storage entschieden. Python ist, weil unser Backend in Python implementiert ist.
Für jeden Speicherdienst werden wir in den folgenden Punkten zusammenfassen.
· ** Vorbereitungen ** ・ ** Einstellungen für Verbindungsinformationen ** ・ ** Modulinstallation ** ・ ** Erstellen Sie eine Box zum Speichern von Dateien ** ・ ** Laden Sie die Datei in die erstellte Box hoch ** ・ ** Laden Sie die Datei aus der erstellten Box herunter ** ・ ** Löschen Sie das erstellte Feld **
Jeder Speicherdienst verfügt über ein Modul, sodass die Verwendung recht einfach ist.
Python 3.6.4 macOS 10.15.1
AWS S3
Sie benötigen die ** Zugangsschlüssel-ID ** und den ** geheimen Zugangsschlüssel ** als Verbindungsinformationen. Erstellen Sie eine Zugriffsschlüssel-ID und einen geheimen Zugriffsschlüssel unter AWS-Zugriffsschlüssel erstellen.
Legen Sie die Zugriffsschlüssel-ID und den geheimen Zugriffsschlüssel in den Umgebungsvariablen mit dem folgenden Befehl fest.
$ export AWS_ACCESS_KEY_ID="Zugriffsschlüssel-ID"
$ export AWS_SECRET_ACCESS_KEY="Geheimer Zugangsschlüssel"
Installieren Sie ** boto3 **.
$ pip install boto3
Jede nachfolgende Operation in AWS S3 basiert auf der ** s3_resource **, die mit dem folgenden Code erstellt wurde.
import boto3
s3_resource = boto3.resource('s3', region_name='ap-northeast-1')
In AWS S3 wird die Box, in der die Dateien gespeichert sind, als ** Bucket ** bezeichnet. Sie können einen Bucket mit dem folgenden Code erstellen.
#Einen Eimer erstellen
s3_client = s3_resource.meta.client
s3_client.create_bucket(Bucket='Der Name des zu erstellenden Buckets', CreateBucketConfiguration={'LocationConstraint': 'ap-northeast-1'})
Es scheint, dass es in CreateBucketConfiguration verschiedene Einstellungselemente gibt, aber vorerst kann es nur mit LocationConstraint (Einschränkung der Region, in der der Bucket erstellt wird) erstellt werden.
#Datei-Upload
s3_resource.Bucket('Der Name des Buckets, in den hochgeladen werden soll').upload_file('Pfad der hochzuladenden Datei', 'Dateiname am Upload-Ziel')
#Datei download
s3_resource.Bucket('Der Name des Buckets, aus dem er heruntergeladen wurde').download_file('Dateiname zum Herunterladen', 'Pfad der Zieldatei herunterladen')
#Eimer löschen
s3_client = s3_resource.meta.client
s3_client.delete_bucket(Bucket='Der Name des zu löschenden Buckets')
Um einen Bucket zu löschen, müssen Sie alle in den Bucket hochgeladenen Dateien löschen und leer lassen. Wenn Sie versuchen, einen Bucket zu löschen, wenn der Bucket nicht leer ist, tritt ein Fehler auf und Sie können ihn nicht löschen.
Sie können die hochgeladene Datei mit dem folgenden Code löschen, aber ich kann sie nur durch Angabe des Dateinamens löschen ... (Es gibt auch eine delete_objects-Methode, aber anscheinend müssen Sie den Dateinamen doch angeben.)
#Datei löschen
s3_client = s3_resource.meta.client
s3_client.delete_object(Bucket='Der Name des Buckets, der die zu löschende Datei enthält', Key='Dateiname zum Löschen')
Azure BlobStorage
Das Speicherkonto ** Verbindungszeichenfolge ** wird als Verbindungsinformation benötigt.
Melden Sie sich beim Azure-Portal an und wählen Sie Speicherkonto erstellen (https://docs.microsoft.com/en-us/azure/storage/common/storage-quickstart-create-account?tabs=azure-portal). .. Siehe hier Ruft die Verbindungszeichenfolge für das Speicherkonto ab (kopiert sie).
Legen Sie die Verbindungszeichenfolge in der Umgebungsvariablen mit dem folgenden Befehl fest.
$ export CONNECT_STR="Verbindungszeichenfolge"
Installieren Sie ** azure-storage-blob **.
$ pip install azure-storage-blob
Jeder nachfolgende Vorgang im Azure Blob-Speicher basiert auf ** blob_service_client **, der mit dem folgenden Code erstellt wurde.
import os
from azure.storage.blob import BlobServiceClient
connect_str = os.getenv('CONNECT_STR')
blob_service_client = BlobServiceClient.from_connection_string(connect_str)
In Azure BlobStorage heißt das Feld, in dem Dateien gespeichert werden, ** Container **. Sie können einen Container mit dem folgenden Code erstellen.
#Container erstellen
container_client = blob_service_client.create_container('Der Name des zu erstellenden Containers')
#Datei-Upload
blob_client = blob_service_client.get_blob_client(container='Der Name des Containers, in den hochgeladen werden soll', blob='Der Name der Datei am Upload-Ziel')
with open('Pfad der hochzuladenden Datei', 'rb') as uploaded_file:
blob_client.upload_blob(uploaded_file)
#Datei download
blob_client = blob_service_client.get_blob_client(container='Der Name des Containers, von dem er heruntergeladen wurde', blob='Der Name der herunterzuladenden Datei')
with open('Dateipfad am Download-Ziel', 'wb') as downloaded_file:
downloaded_file.write(blob_client.download_blob().readall())
Sie können einen Container löschen, ohne alle Dateien zu löschen, die Sie in den Container hochgeladen haben (obwohl Sie sie möglicherweise in der Methode gelöscht haben).
#Container löschen
container_client = blob_service_client.get_container_client('Der Name des zu löschenden Containers')
container_client.delete_container()
GCP CloudStorage
Als Verbindungsinformationen benötigen Sie einen Kontoschlüssel (** Dienstkontoschlüssel **), um auf den Cloud-Speicher zugreifen zu können, der als Dienstkonto bezeichnet wird.
[Hier](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% Erstellen Sie einen Dienstkontoschlüssel unter Bezugnahme auf E3% 82% 8B% E6% 96% B9% E6% B3% 95 / # API) und laden Sie die JSON-Datei des Dienstkontoschlüssels herunter.
Legen Sie den Dienstkontoschlüssel in der Umgebungsvariablen mit dem folgenden Befehl fest.
$ export GOOGLE_APPLICATION_CREDENTIALS="Pfad der heruntergeladenen JSON-Datei"
Installiere ** google-cloud **.
$ pip install --upgrade google-cloud
Der mit dem folgenden Code erstellte ** storage_client ** ist die Basis für jeden nachfolgenden Vorgang in Google Cloud Storage.
from google.cloud import storage
storage_client = storage.Client()
In GCP Cloud Storage wird die Box, in der Dateien gespeichert werden, als ** Bucket ** bezeichnet. Sie können einen Bucket mit dem folgenden Code erstellen.
#Einen Eimer erstellen
bucket = storage_client.create_bucket('Der Name des zu erstellenden Buckets')
#Datei-Upload
bucket = storage_client.get_bucket('Der Name des Buckets, in den hochgeladen werden soll')
blob = bucket.blob('Der Name der Datei am Upload-Ziel')
blob.upload_from_filename(filename='Pfad der hochzuladenden Datei')
#Datei download
bucket = storage_client.get_bucket('Der Name des Buckets, der die herunterzuladenden Dateien enthält')
blob = bucket.blob('Der Name der herunterzuladenden Datei')
blob.download_to_filename('Pfad der Zieldatei herunterladen')
#Eimer löschen
bucket = storage_client.get_bucket('Der Name des zu löschenden Buckets')
bucket.delete(force=True)
Um einen Bucket zu löschen (ähnlich wie in AWS S3), müssen alle in den Bucket hochgeladenen Dateien gelöscht und geleert werden. Wenn Sie versuchen, einen Bucket zu löschen, wenn der Bucket nicht leer ist, tritt ein Fehler auf und Sie können ihn nicht löschen.
Durch Setzen von ** force = True ** wird der Bucket geleert und dann gelöscht.
Das Löschen der Datei ist übrigens wie folgt.
#Datei löschen
bucket = storage_client.get_bucket('Der Name des Buckets, der die zu löschenden Dateien enthält')
blob = bucket.blob('Der Name der zu löschenden Datei')
blob.delete()