Ich habe versucht, Dateien mit Python in AWS S3 / Azure BlobStorage / GCP CloudStorage hochzuladen / herunterzuladen

Dieser Artikel ist der Artikel zum 10. Tag von Pathee Adventskalender 2019.

Einführung

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.

Umgebung

Python 3.6.4 macOS 10.15.1

AWS S3

Vorbereitungen

Einstellungen für Verbindungsinformationen

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"

Modulinstallation

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

Einen Eimer erstellen

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

#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

#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

#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

Vorbereitungen

Einstellungen für Verbindungsinformationen

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"

Modulinstallation

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)

Container erstellen

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

#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

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

Container löschen

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

Vorbereitungen

Einstellungen für Verbindungsinformationen

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"

Modulinstallation

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

Einen Eimer erstellen

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

#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

#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

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

Link zur Referenzseite

Recommended Posts

Ich habe versucht, Dateien mit Python in AWS S3 / Azure BlobStorage / GCP CloudStorage hochzuladen / herunterzuladen
Ich möchte mit Python in eine Datei schreiben
[AWS] [GCP] Ich habe versucht, die Verwendung von Cloud-Diensten mit Python zu vereinfachen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, eine Python-Datei in eine EXE-Datei zu verwandeln (Rekursionsfehler unterstützt)
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[3.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe versucht, mit Python eine 2-Kanal-Post-Benachrichtigungsanwendung zu erstellen
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
[4.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[1.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich möchte mit aws mit Python spielen
Ich habe eine funktionale Sprache mit Python ausprobiert
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
Ich habe mit Python eine Einstellungsdatei erstellt
Ich habe versucht, mit einem Remote-Server über Socket-Kommunikation mit Python zu kommunizieren.
Ich habe versucht, ein Programm zu erstellen, das Hexadezimalzahlen mit Python in Dezimalzahlen konvertiert
Ich habe versucht, mit Raspeye 4 (Python Edition) ein signalähnliches Signal zu erzeugen.
[Outlook] Ich habe versucht, mit Python automatisch eine tägliche Berichtsmail zu erstellen
Ich habe versucht, eine Mac Python-Entwicklungsumgebung mit pythonz + direnv zu erstellen
Ich habe versucht, einen URL-Verkürzungsdienst mit AWS CDK serverlos zu machen
[Python] Als ich versuchte, ein Dekomprimierungswerkzeug mit einer Zip-Datei zu erstellen, die ich gerade kannte, war ich süchtig nach sys.exit ()
Ich möchte ein Spiel mit Python machen
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Ich habe versucht, LLVM IR mit Python auszugeben
Ich habe versucht, eine CSV-Datei mit Python zu lesen
Ich habe versucht, die Herstellung von Sushi mit Python zu automatisieren
Ich habe versucht, einen periodischen Prozess mit CentOS7, Selenium, Python und Chrome durchzuführen
Ich habe eine einfache Mail-Sendeanwendung mit tkinter von Python erstellt
Als ich versuchte, eine VPC mit AWS CDK zu erstellen, konnte ich es aber nicht schaffen
[Patentanalyse] Ich habe versucht, mit Python eine Patentkarte zu erstellen, ohne Geld auszugeben
Als ich versuchte, mit Python eine virtuelle Umgebung zu erstellen, funktionierte dies nicht
Ich habe versucht, mit Selenium + Python einfach ein vollautomatisches Anwesenheitssystem zu erstellen
Ich habe versucht, Mine Sweeper auf dem Terminal mit Python zu implementieren
Ich habe versucht, Python aus einer Bat-Datei auszuführen
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Ich habe versucht, mit Blenders Python script_Part 02 zu beginnen
Ich möchte eine Datei mit Python zufällig testen
Ich habe versucht, künstliches Perzeptron mit Python zu implementieren
Ich möchte mit einem Roboter in Python arbeiten.
Ich möchte Lambda mit Python auf Mac AWS!
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich möchte einen Quantencomputer mit Python betreiben
[Einführung in AWS] Ich habe versucht, mit der Sprach-Text-Konvertierung zu spielen ♪
Ich habe versucht, AOJs Integer-Theorie mit Python zu lösen
Ich habe versucht, mit Python Machine Learning ein Echtzeit-Modell zur Trennung von Tonquellen zu erstellen
Ich habe versucht, automatisch die Zeichenfolge zu generieren, die mit Python in Mr. Adjustment eingegeben werden soll