J'ai essayé de savoir comment utiliser Boto3, qui est le SDK AWS pour Python, en consultant à nouveau la Documentation.
Selon la page PyPI, il fonctionne avec 2.6 ou supérieur pour 2 séries et 3.3 ou supérieur pour 3 séries.
Ce qui suit est
Nous avons confirmé l'opération dans l'environnement de.
La section "Principales fonctionnalités" de la page Quoi de neuf présente les cinq fonctionnalités suivantes: ..
Je n'ai pas compris cette configuration et jusqu'à présent, j'ai confondu ** Resources ** avec ** Clients **.
Notez que l'API de haut niveau n'est pas disponible pour tous les services AWS, et jusqu'à présent, il semble que seuls certains services tels que EC2 et S3 la prennent en charge.
Facile à installer avec pip.
$ pip install boto3
Étant donné que les clés d'accès IAM sont requises pour les opérations AWS, créez-les à l'avance à partir de la console de gestion et définissez les autorisations appropriées pour les utilisateurs.
Du côté du terminal, définissez les informations de clé d'accès sur ~ / .aws / credentials
.
Si vous utilisez awscli, ce fichier a déjà été généré lorsque vous avez fait ʻaws configure`, mais sinon, configurez awscli ou définissez la clé d'accès directement dans le fichier des informations d'identification.
~/.aws/credentials
[default]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY
Vous pouvez accéder au bucket via l'objet S3.Bucket.
import boto3
#Nom du godet
AWS_S3_BUCKET_NAME = 'hogehoge'
s3 = boto3.resource('s3')
bucket = s3.Bucket(AWS_S3_BUCKET_NAME)
print(bucket.name)
# => hogehoge
Vous pouvez accéder aux informations sur les objets S3 stockés dans le compartiment via l'attribut ʻobjects`.
Cet attribut est une instance de la classe Bucket.objectsCollectionManager
, et les méthodes de ʻall (),
delete (),
filter (),
limit ()et
page_size ()sont disponibles. Ces méthodes retournent une instance de la classe
s3.Bucket.objectsCollection, et vous pouvez parcourir cet objet pour obtenir une instance de la classe ʻObjectSummary
.
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']
L'opération utilisant «objets» est efficace lorsque l'objet cible n'est pas spécifié, par exemple lors de la recherche d'un objet stocké dans un compartiment.
Si vous souhaitez obtenir un objet S3 dont la clé est connue, utilisez la classe S3.Object.
GET_OBJECT_KEY_NAME = 'hayabusa.txt'
obj = bucket.Object(GET_OBJECT_KEY_NAME)
print(obj.key)
# => hayabusa.txt
Les objets ʻObject` peuvent également être créés en spécifiant le nom du bucket et le nom de la clé sans passer par l'objet Bucket.
obj = s3.Object(AWS_S3_BUCKET_NAME, GET_OBJECT_KEY_NAME)
print(obj.key)
# => hayabusa.txt
Pour obtenir le contenu d'un objet S3, utilisez la méthode get ()
de l'objet.
La valeur de retour de la méthode get ()
est un dictionnaire, et vous pouvez faire référence au contenu de l'objet via Body
dans ce dictionnaire.
Ce Body
est une instance de la classe botocore.response.StreamingBody
et est un flux qui gère les données de type octet. Par conséquent, pour le traiter comme une chaîne de caractères, il est nécessaire de le lire à partir du flux et de le convertir en un type de chaîne de caractères.
response = obj.get()
body = response['Body'].read()
print(type(body))
# => <class 'bytes'>
print(body.decode('utf-8'))
# =>10 allers-retours de Tokyo à Shin Hakodate Hokuto
#Sendai-Shin Hakodate Hokuto 1 aller-retour
Notez qu'une fois que le flux est read ()
, il sera recherché à la fin du flux, donc les résultats ne peuvent pas être obtenus avec le deuxième appel et les suivants.
Comme pour la récupération, vous pouvez utiliser l'objet ʻObject` pour ajouter de nouveaux objets S3 à votre compartiment et mettre à jour leur contenu.
Pour définir le contenu de l'objet S3, transmettez le contenu que vous souhaitez enregistrer sous forme de chaîne d'octets dans l'argument Body
de la méthode put ()
. Vous pouvez également spécifier des options détaillées telles que ʻACLet
ContentType` avec des arguments.
PUT_OBJECT_KEY_NAME = 'hayate.txt'
obj = bucket.Object(PUT_OBJECT_KEY_NAME)
body = """Morioka-Shin Hakodate Hokuto 1 aller-retour
Shin Aomori-Shin Hakodate Hokuto 1 aller-retour
"""
response = obj.put(
Body=body.encode('utf-8'),
ContentEncoding='utf-8',
ContentType='text/plane'
)
En utilisant l'objet S3.Client, il est possible d'opérer en utilisant une API de bas niveau.
Par exemple, l'obtention d'un objet S3 peut également être écrite à l'aide d'une API de bas niveau comme suit:
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 allers-retours de Tokyo à Shin Hakodate Hokuto
#Sendai-Shin Hakodate Hokuto 1 aller-retour
Jusqu'à présent, les API de bas niveau (clients) et les API de haut niveau (ressources) étaient confondues.
Certaines fonctionnalités ne sont fournies que par l'API de bas niveau, mais vous pouvez écrire des programmes orientés objet, donc si vous avez une API de haut niveau, vous devriez l'utiliser.
Recommended Posts