PythonでConoHaのオブジェクトストレージ操作を行う方法
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/
ConoHa API Documantation
Requests: 人間のためのHTTP
https://requests-docs-ja.readthedocs.io/en/latest/





“PythonでConoHaのオブジェクトストレージ操作を行う方法” に対して2件のコメントがあります。