見出し画像

[Python] AWS S3を操作する

はじめに

Pythonで、AWS S3を操作する処理で、
・認証情報の設定
・ファイルアップロード
・ファイル=オブジェクトの一覧取得
・ファイル=オブジェクトの削除
について、ご紹介します。

AWSとは?

「Amazon Web Services」の略。
Amazonが提供しているクラウドコンピューティングサービス。

こちらのサイトの説明、わかりやすいです。

S3とは?

「Amazon Simple Storage Service」の略。AWSのサービスに含まれる機能の1つ。オブジェクトストレージサービス。
メリットは、容量無制限、低価格、高い耐久性です。

使用するライブラリ

・Boto3

AWSを操作するためのライブラリ。使用するには、インストールが必要です。

pip install boto3

動作環境

・Windows10
・Python 3.7.6

手順

1.認証情報の設定

コマンドラインから、AWS S3の操作を行うことができるインターフェイスをインストールします。

pip install awscli

認証を設定するコマンドは下記です。

aws configure

このあと、

AWS Access Key ID: 
AWS Secret Access Key:
Default region name: 
Default output format:

の順で入力していきます。

認証が通って、S3のバケットの内容が確認できるか、下記のコマンドで確認してみます。

aws s3 ls

バケット内容が表示されるのが確認できれば、認証が通っています。

なお、コード内でも、認証設定を行うことができます。

2.実装

・認証情報の設定

import boto3

s3_client = boto3.client('s3',
   aws_access_key_id='XXXXXXXXXXXXXX',
   aws_secret_access_key='YYYYYYYYYYYYYY',
   region_name='ap-northeast-1')

Client APIを使用して、ACCESS_KEY と SECRET_ACCESS_KEYを指定して、認証情報を設定することも可能です。手順1で設定完了している場合、このコードは不要です。

・ファイルアップロード

bucket_name = 'XXXX'
s3_client.upload_file(input_file, bucket_name,s3_key) 

Client APIを使用して、ローカルのinput_fileで指定したファイルを、S3のbucket_nameで指定したバケットに、s3_keyの名前でアップロードします。

・ファイル=オブジェクトの一覧取得

s3 = boto3.resource('s3')

bucket_name = 'XXXX'
my_bucket = s3.Bucket(bucket_name)

object_lists = []

for object in my_bucket.objects.all():
    object_lists.append([object.key,object.last_modified,object.size])

Resource APIを使用して、バケットを取得し、指定したバケット内にあるファイル=オブジェクトをすべて取得し、object_listsに設定しています。

この処理を実行することで、前途でアップロードしたファイルがアップロードされているか?も確認できます。

・ファイル=オブジェクトの削除

s3_client = boto3.client('s3')

files = [
'image/a.jpg',
'image/b.jpg'
];
for file in files:
   s3_client.delete_object(Bucket=bucket_name, Key=file)

Client APIを使用して、S3のbucket_nameで指定したバケット内の、オブジェクト名を指定し削除します。

まとめ

今回は、Pythonで、AWS S3を操作する処理について、ご紹介しました。

実装しているときには気づかなかったのですが、こちらに処理をまとめている時に、自分が使用していたAPIが混在していることがわかりました。

・Resource API
・Client API

Resource APIを使用すると、バケットを指定してバケットオブジェクトを取得して操作する。オブジェクト指向を意識したAPIとなっている。

また、Client APIを使用すると、最初に取得したクライアントオブジェクトに対して、操作する際にバケットを指定しながら操作する。すべてのAPIに対応している。

それぞれのAPIの特徴を意識して、使用するAPIを選択する必要があります。

参考サイト





この記事が気に入ったらサポートをしてみませんか?