[PYTHON] Bearbeiten Sie S3-Objekte mit Boto3 (High-Level-API und Low-Level-API)

Ich habe versucht, unter Verwendung von Documentation erneut herauszufinden, wie Boto3, das AWS SDK für Python, verwendet wird.

Betriebsumgebung

Laut PyPI-Seite funktioniert es mit 2.6 oder höher für 2 Serien und 3.3 oder höher für 3 Serien.

Das Folgende ist

Wir haben den Betrieb in der Umgebung von bestätigt.

Boto3-Konfiguration

Im Abschnitt "Hauptfunktionen" der Seite Neuigkeiten werden die folgenden fünf Funktionen beschrieben: ..

Ich habe diese Konfiguration nicht verstanden und bis jetzt habe ich ** Ressourcen ** mit ** Clients ** verwechselt.

Beachten Sie, dass die High-Level-API nicht für alle AWS-Services verfügbar ist und bisher nur von einigen Services wie EC2 und S3 unterstützt wird.

Installation und Vorbereitung

Einfach mit pip zu installieren.

$ pip install boto3

Da für AWS-Vorgänge IAM-Zugriffsschlüssel erforderlich sind, erstellen Sie diese vorab über die Verwaltungskonsole und legen Sie die entsprechenden Berechtigungen für Benutzer fest.

Setzen Sie auf der Terminalseite die Zugriffsschlüsselinformationen auf "~ / .aws / credentials". Wenn Sie awscli verwenden, wird diese Datei bereits generiert, wenn Sie "aws configure" ausführen. Wenn nicht, richten Sie awscli ein oder legen Sie den Zugriffsschlüssel direkt in der Anmeldeinformationsdatei fest.

~/.aws/credentials


[default]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY

Zugriff auf S3-Bucket mit High-Level-API

Sie können über das Objekt S3.Bucket auf den Bucket zugreifen.

import boto3

#Eimername
AWS_S3_BUCKET_NAME = 'hogehoge'

s3 = boto3.resource('s3')
bucket = s3.Bucket(AWS_S3_BUCKET_NAME)

print(bucket.name)
# => hogehoge

Über das Attribut "Objekte" können Sie auf Informationen zu im Bucket gespeicherten S3-Objekten zugreifen.

Dieses Attribut ist eine Instanz der Klasse "Bucket.objectsCollectionManager", und die Methoden "all ()", "delete ()", "filter ()", "limit ()" und "page_size ()" können verwendet werden. Diese Methoden geben eine Instanz der Klasse "s3.Bucket.objectsCollection" zurück, und Sie können dieses Objekt durchlaufen, um eine Instanz der Klasse "ObjectSummary" abzurufen.

print(bucket.objects.all())
# => s3.Bucket.objectsCollection(s3.Bucket(name='hogehoge'), s3.ObjectSummary)

print([obj_summary.key for obj_summary in bucket.objects.all()])
# => ['hayabusa.txt']

Die Operation mit "Objekten" ist wirksam, wenn das Zielobjekt nicht angegeben ist, z. B. wenn nach einem in einem Bucket gespeicherten Objekt gesucht wird.

Holen Sie sich Objekte aus S3-Buckets mit High-Level-API

Wenn Sie ein S3-Objekt erhalten möchten, dessen Schlüssel bekannt ist, verwenden Sie die Klasse S3.Object.

GET_OBJECT_KEY_NAME = 'hayabusa.txt'

obj = bucket.Object(GET_OBJECT_KEY_NAME)

print(obj.key)
# => hayabusa.txt

Das Objekt "Objekt" kann auch durch Angabe des Bucket-Namens und des Schlüsselnamens erstellt werden, ohne das Bucket-Objekt zu durchlaufen.

obj = s3.Object(AWS_S3_BUCKET_NAME, GET_OBJECT_KEY_NAME)

print(obj.key)
# => hayabusa.txt

Verwenden Sie die Methode get () des Objekts, um den Inhalt eines S3-Objekts abzurufen.

Der Rückgabewert der Methode "get ()" ist ein Wörterbuch, und Sie können über "Body" in diesem Wörterbuch auf den Inhalt des Objekts verweisen.

Dieser Body ist eine Instanz der botocore.response.StreamingBody -Klasse und ein Stream, der Daten vom Bytetyp verarbeitet. Um es als Zeichenfolge zu behandeln, muss es daher aus dem Stream gelesen und in einen Zeichenfolgentyp konvertiert werden.

response = obj.get()
body = response['Body'].read()

print(type(body))
# => <class 'bytes'>

print(body.decode('utf-8'))
# =>10 Hin- und Rückflüge von Tokio nach Shin Hakodate Hokuto
#Sendai-Shin Hakodate Hokuto 1 Hin- und Rückfahrt

Beachten Sie, dass der Stream, sobald er "read ()" ist, am Ende des Streams gesucht wird, sodass die Ergebnisse nicht mit dem zweiten und den folgenden Aufrufen erhalten werden können.

Hinzufügen von Objekten zu S3-Buckets mit High-Level-API

Wie beim Abrufen können Sie das Objekt "Objekt" verwenden, um dem Bucket neue S3-Objekte hinzuzufügen und den Inhalt zu aktualisieren.

Um den Inhalt des S3-Objekts festzulegen, übergeben Sie den Inhalt, den Sie speichern möchten, als Byte-Zeichenfolge im Argument Body der put () -Methode. Sie können auch detaillierte Optionen wie "ACL" und "ContentType" mit Argumenten angeben.

PUT_OBJECT_KEY_NAME = 'hayate.txt'

obj = bucket.Object(PUT_OBJECT_KEY_NAME)

body = """Morioka-Shin Hakodate Hokuto 1 Hin- und Rückfahrt
Shin Aomori-Shin Hakodate Hokuto 1 Hin- und Rückfahrt
"""

response = obj.put(
    Body=body.encode('utf-8'),
    ContentEncoding='utf-8',
    ContentType='text/plane'
)

Betrieb mit Low-Level-API

Mit dem Objekt S3.Client kann eine Low-Level-API verwendet werden.

Das Abrufen eines S3-Objekts kann beispielsweise auch mithilfe einer Low-Level-API wie folgt geschrieben werden:

s3 = boto3.resource('s3')
client = s3.meta.client

response = client.get_object(Bucket=AWS_S3_BUCKET_NAME, Key=GET_OBJECT_KEY_NAME)
body = response['Body'].read()

print(body.decode('utf-8'))
# =>10 Hin- und Rückflüge von Tokio nach Shin Hakodate Hokuto
#Sendai-Shin Hakodate Hokuto 1 Hin- und Rückfahrt

Zusammenfassung

Bisher waren Low-Level-APIs (Clients) und High-Level-APIs (Ressourcen) verwirrt.

Es gibt einige Funktionen, die nur von der Low-Level-API bereitgestellt werden. Sie können jedoch objektorientierte Programme schreiben. Wenn Sie also über eine High-Level-API verfügen, sollten Sie diese verwenden.

Recommended Posts

Bearbeiten Sie S3-Objekte mit Boto3 (High-Level-API und Low-Level-API)
Bearbeiten Sie Objekte mit der einfachen Python-API von Blender 2.8
[AWS] Verknüpfen Sie Lambda und S3 mit boto3
S3 Uploader mit Boto
S3-Betrieb mit Python Boto3
Ich wollte mit boto3 mehrere objekte in s3 löschen
Erkennen Sie Videoobjekte mit der Video Intelligence-API
Verwenden Sie boto3, um zu S3 zu gelangen
Generieren Sie eine mit S3 signierte URL mit boto
[Automatisierung] Bearbeiten Sie Maus und Tastatur mit Python
Jupyter mit PYNQ und Synthese auf hohem Niveau mit Polyphonie
Versuchen Sie die serverseitige Verschlüsselung von S3 mit boto3
S3 serverseitige Verschlüsselung SSE mit Python boto3
Boto3-API (AWS-Ressourcen mit Python-Bibliothek bearbeiten), die häufig privat verwendet wird
Zeigen Sie Bilder in S3 mit API Gateway + Lambda an
Zeigen Sie die Google Maps-API mit Rails und Pin-Anzeige an
[Python] Zusammenfassung der S3-Dateivorgänge mit boto3
Beschreibe ec2 mit boto3 und rufe den Wert ab
Holen Sie sich den Betreff und den Text von Google Mail mit der Python- und Google Mail-API