Ich habe versucht, unter Verwendung von Documentation erneut herauszufinden, wie Boto3, das AWS SDK für Python, verwendet wird.
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.
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.
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
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.
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.
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'
)
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
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