0
Help us understand the problem. What are the problem?

posted at

updated at

Organization

[Cloudian #2] Python(boto3)で、オブジェクトストレージのバケットを表示してみる

はじめに

Cloudianは、AWSのS3完全互換のAPIを持ったオブジェクトストレージです。
前回は、AWS SDKのクレデンシャル設定をして、Python(boto3)で、とりあえずオブジェクトストレージにアクセスしてみました

今回は、Python(boto3)で、作成済みバケットをいろんなパターンで表示してみたいと思います。

作成済みバケットの表示 / list_buckets()

アクセスキーとシークレットキーで認証されたユーザーが所有する、全てのバケットの情報を返します。
戻り値は、Python の辞書(dict)型として返されます。

1. 加工せずに表示

以下の例では、list_buckets()を単純に呼び出して、全ての戻り値を表示しています。

test1.py
import boto3

client = boto3.client(
    's3',
    endpoint_url='https://xxx.yyy.com'
)

# バケット一覧を取得
response = client.list_buckets()
print(response)
{'ResponseMetadata': {'RequestId': '9dad38b7-0e30-1dbc-a754-06bdfcde1d5e',
  'HostId': '',
  'HTTPStatusCode': 200,
  'HTTPHeaders': {'date': 'Sun, 13 Dec 2020 21:58:07 GMT',
   'x-amz-request-id': '9dad38b7-0e30-1dbc-a754-06bdfcde1d5e',
   'content-type': 'application/xml;charset=UTF-8',
   'content-length': '519',
   'server': 'CloudianS3'},
  'RetryAttempts': 0},
 'Buckets': [{'Name': 'bucket1',
   'CreationDate': datetime.datetime(2020, 12, 1, 3, 2, 25, 876000, tzinfo=tzutc())},
  {'Name': 'pythonbucket2',
   'CreationDate': datetime.datetime(2020, 12, 13, 19, 51, 20, 267000, tzinfo=tzutc())},
  {'Name': 'pythonbucket3',
   'CreationDate': datetime.datetime(2020, 12, 13, 21, 41, 8, 495000, tzinfo=tzutc())}],
 'Owner': {'DisplayName': '', 'ID': '27b8e84694ca0b529d5379049564ebe1'}}

list_buckets()からは非常に多くの情報が返されるため、以降の例では出力を絞り込んで 表示させていきます。

2. バケットに関する情報を絞り込んで表示(各バケット名と作成日時)

list_buckets()で返された辞書型の戻り値から、辞書キー「Buckets」の値を抽出し、さらに「Name」(バケット名)と「CreationDate」(作成日付)に絞り込んで表示させています。

test2.py
import boto3

client = boto3.client(
    's3',
    endpoint_url='https://xxx.yyy.com'
)

# バケット一覧を取得
for bucket in client.list_buckets()['Buckets']:
    print(bucket['Name'], bucket['CreationDate'])
bucket1 2020-12-01 03:02:25.876000+00:00
pythonbucket2 2020-12-13 19:51:20.267000+00:00
pythonbucket3 2020-12-13 21:41:08.495000+00:00

list_buckets()は辞書(dict)型で作成済みバケット に関する情報を戻しますので、プログラムで必要となるデータのみを Python プログラムで抽出することができます。

string 型のバケット名と、datetime 型の作成日付のみを抽出してます

3. バケットに関する情報に絞り込んで表示し、作成日時を整形(各バケット名と作成日時)

バケット名とその作成日付に絞り込み、表示される作成日付を整形しています。

test3.py
import boto3

client = boto3.client(
    's3',
    endpoint_url='https://xxx.yyy.com'
)

# バケット一覧を取得
for bucket in client.list_buckets()['Buckets']:
    print(bucket['Name'],bucket['CreationDate'].strftime("%Y/%m/%d %H:%M:%S"))
bucket1 2020/12/01 03:02:25
pythonbucket2 2020/12/13 19:51:20
pythonbucket3 2020/12/13 21:41:08

datetime 型で戻される作成日付(CreationDate)を、Python 標準モジュールに含まれる strftime()を使って見やすいように整形して出力しています。

4. バケットに関する情報を見やすく表示(各バケット名と作成日時)

出力されるバケット作成日付に+9時間して、日本時間で表示しています。

test4.py
import boto3

# 追加モジュール
import datetime


client = boto3.client(
    's3',
    endpoint_url='https://xxx.yyy.com'
)


# バケット一覧を取得
for bucket in client.list_buckets()['Buckets']: 
    print('%s (%s)' % (bucket['Name'], (bucket['CreationDate'] + datetime.timedelta(hours=9)).strftime("%Y/%m/%d %H:%M:%S")))
bucket1 (2020/12/01 12:02:25)
pythonbucket2 (2020/12/14 04:51:20)
pythonbucket3 (2020/12/14 06:41:08)

5. まとめ

Python(boto3)で、作成済みバケットをいろんなパターンで表示してみました。

次回も、Pythonでオブジェクトストレージ/Cloudianをいろいろ操作していきたいと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?