PythonでConoHaのオブジェクトストレージ操作を行う方法をご紹介します。
目次
条件
- ConoHaオブジェクトストレージ
- Ubuntu 18.04 LTS
- Python 3.6.8
PythonによるConoHaのオブジェクトストレージの操作
ConoHaのオブジェクトストレージがcurlによって様々な処理を実行することが出来ます。
ここでは、Pythonのrequestsを使用することで、curlの場合と同等の処理を行う方法をご紹介します。
必要に応じて以下の記事もご参照ください。
サンプルソース
Pythonのサンプルソースを以下に示します。
次のような処理を行っています。
- tokenの取得。
- コンテナの取得。
- オブジェクト情報の取得。
- オブジェクトのWebへの公開設定。
# objectTest.py import requests import json from logging import getLogger, StreamHandler, Formatter, DEBUG, FileHandler ## ログ出力設定 logger = getLogger("オブジェクトストレージ操作") logger.setLevel(DEBUG) # コンソール出力設定 stream_handler = StreamHandler() formatter = Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') stream_handler.setFormatter(formatter) logger.addHandler(stream_handler) # 接続パラメータ USER_NAME = "gncu00000000" PASSWORD = "passpasspass" TENANT_ID = "9999999999999999999999999" URL = 'https://identity.tyo2.conoha.io/v2.0/tokens' OBJECT_STORAGE = 'https://object-storage.tyo2.conoha.io/v1/nc_9999999999999999999999999999' # オブジェクトストレージ情報 CONTAINER = 'sample1' OBJECT = '1.jpg' #OBJECT = 'test.txt' def getToken(): """ tokenの取得 """ headers = { 'Accept': 'application/json', } data = '{"auth":{"passwordCredentials":{"username":"%s","password":"%s"},"tenantId":"%s"}}' % (USER_NAME, PASSWORD, TENANT_ID) #logger.debug(data) response = requests.post(URL, headers=headers, data=data) data = response.json() return json.dumps(data["access"]["token"]["id"], indent=4) def getContainer(token): """ コンテナの作成 """ headers = { 'Accept': 'application/json', 'X-Auth-Token': token, } response = requests.get(OBJECT_STORAGE + '/' + CONTAINER, headers=headers) data = response.json() return json.dumps(data, indent=4) def getObjectInfo(token): """ オブジェクト情報の取得 """ headers = { 'X-Auth-Token': token, } params = { ('format','json'), } response = requests.get(OBJECT_STORAGE + '/' + CONTAINER + '/' + OBJECT, headers=headers, params=params) return response.headers def webPublishing(token): """ オブジェクトのWeb公開 """ headers = { 'Accept': 'application/json', 'X-Auth-Token': token, 'X-Container-Read': '.r:*', # 公開する場合 #'X-Remove-Container-Read': '.r:*', # 非公開にする場合 } response = requests.post(OBJECT_STORAGE + '/' + CONTAINER, headers=headers) return response def main(): """ 実処理(main) """ token = getToken().replace('\"', '') # tokenの取得 # logger.debug(token) container = getContainer(token) # コンテナの取得 logger.debug('コンテナ情報:' + container) objectInfo = getObjectInfo(token) # オブジェクト情報の取得 logger.debug('オブジェクト情報:' + str(objectInfo)) result = webPublishing(token) # Webに公開 logger.debug('Web公開処理:' + str(result)) if __name__ == '__main__': """ main関数を実行 """ main()
実行結果
コンテナおよび、指定したオブジェクト情報が取得できることが分かります。
$ python3 objectTest.py 2019-08-30 07:58:52,988 - オブジェクトストレージ操作 - DEBUG - コンテナ情報:[ { "hash": "b0fd9193c5ed60631f6c68d77b3d261a", "last_modified": "2019-08-29T04:40:46.634140", "bytes": 21596, "name": "1.jpg", "content_type": "image/jpeg" }, { "hash": "d41d8cd98f00b204e9800998ecf8427e", "last_modified": "2019-08-30T00:53:52.647930", "bytes": 0, "name": "test.txt", "content_type": "text/plain;charset=utf-8" } ] 2019-08-30 07:58:53,041 - オブジェクトストレージ操作 - DEBUG - オブジェクト情報:{'Content-Length': '21596', 'Accept-Ranges': 'bytes', 'Last-Modified': 'Thu, 29 Aug 2019 04:40:47 GMT', 'Etag': 'b0fd9193c5ed60631f6c68d77b3d261a', 'X-Timestamp': '1567053646.63414', 'Content-Type': 'image/jpeg', 'X-Trans-Id': 'tx4026a734daa1494db02f1-005d68d73d', 'Date': 'Fri, 30 Aug 2019 07:58:53 GMT'} 2019-08-30 07:58:53,126 - オブジェクトストレージ操作 - DEBUG - Web公開処理:<Response [204]> $
Web公開設定を行ったため、URL指定(オブジェクトストレージのURL/コンテナ名/オブジェクト名)でブラウザ上でオブジェクトを表示することが出来ます。
ちなみに、Web非公開の場合は以下のような表示となります。
その他処理
コンテナ作成/削除、オブジェクトアップロード/ダウンロードなども実行することが出来ます。
詳細は以下の記事をご参照ください。
PythonでConoHaのオブジェクトストレージ操作を行う方法2
参考
ConoHa:オブジェクトストレージを使う(RESTful API [curl] 編)
https://support.conoha.jp/v/objectstoragecurl/