このトピックでは、ApsaraDB RDSをObject Storage Service (OSS) とともに使用して、さまざまな構造にデータを格納する方法について説明します。
OSSは、大量のデータを保存するためにAlibaba cloudが提供する、安全で費用対効果の高い信頼性の高いクラウドストレージサービスです。 たとえば、アプリケーションがフォーラムソフトウェアの場合、ユーザープロフィール写真やフォーラム投稿などのリソースをOSSバケットに保存できます。 これにより、RDSインスタンスに保存する必要があるデータの量を減らすことができます。
サンプルコード
サンプルコードはPython 3.6に基づいて記述されています。
OSS SDK For Pythonのインストール方法の詳細については、「インストール」をご参照ください。
- oss2.Bucketを初期化します。
# ! /usr/bin/env python oss2のインポート # Alibaba Cloudアカウントには、すべてのAPI操作を呼び出す権限があります。 Alibaba CloudアカウントのAccessKeyペアが漏洩した場合、データは高いセキュリティリスクにさらされる可能性があります。 API操作の呼び出しやルーチンのO&Mの実行には、Resource Access Management (RAM) ユーザーを使用することを推奨します。RAMユーザーを作成するには、RAMコンソールにログインします。 auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret') # バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、yourEndpointパラメーターをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 endpoint = 'yourEndpoint' # バケットの名前を指定します。 bucket = oss2.Bucket(auth, endpoint, 'examplebucket')
- オブジェクトのアップロード
# ローカルファイルとオブジェクトのフルパスを指定します。 オブジェクトのフルパスにバケット名を含めることはできません。 # デフォルトでは、ローカルファイルのフルパスを指定しない場合、サンプルプログラムが属するプロジェクトのパスからローカルファイルがアップロードされます。 # info_old.txtオブジェクトをアップロードします。 res1 = bucket.put_object_from_file("info_key.txt", "info_old.txt") プリント ("res1-{0}".format(res1.status)) # picture_old.pngオブジェクトをアップロードします。 res2 = bucket.put_object_from_file("picture_key.png", "picture_old.png") プリント ("res3-{0}".format(res2.status))
- オブジェクトを取得します。
# オブジェクトのフルパスを指定します。 info_key.txtなどのバケット名をフルパスに含めることはできません。 # オブジェクトをダウンロードし、指定したパス (D :\\ info_new.txtなど) のファイルとして保存します。 同じ名前のファイルが既に存在する場合、ダウンロードされたオブジェクトはファイルを上書きします。 同じ名前のファイルが存在しない場合は, ファイルが作成されます。 res3 = bucket.get_object_to_file("info_key.txt", "D :\\ info_new.txt") プリント ("res2-{0}".format(res3.status)) res4 = bucket.get_object_to_file("picture_key.png", "D :\\ picture_new.png") プリント ("res4-{0}".format(res4.status))
Elastic Compute Service (ECS) アプリケーションコードは、ユーザーIDがRDSインスタンスに保存され、ユーザープロファイル写真がOSSバケットに保存されることを指定します。 次の例は、Pythonコードスニペットを示しています。
# ! /usr/bin/env python
oss2のインポート
mysql_clientのインポート
def conn_client():
auth = oss2.Auth('LTAI5tLNak1sYu8g9UT ***** ', 'Lyn9YLbmfQYQBgdNJAupawSHT *****')
endpoint = "oss-cn-hangzhou.aliyuncs.com"
bucket = oss2.Bucket(auth、endpoint、'oss-wwjtest')
user_id = mysql_client.fetch_one(sql)# RDSインスタンス内のユーザーのIDを検索します。
# 指定されたパスにユーザーのプロフィール写真を取得してダウンロードします。
bucket.get_object_to_file (オブジェクト、your_path/user_id + '.png ')
# アップロードされたユーザーのプロフィール写真を処理します。
bucket.put_object_from_file (オブジェクト、your_path/user_id + '.png ')
if __name__ ='__main__':
conn_client()