Alibaba Cloud OSS(Object Storage Service) は部分的に S3 APIとの互換性があるとしています。
基本的なバケットの一覧取得やオブジェクトのアップロード、ダウンロード、ACLの付与などをAWS SDK for Python (Boto3) を使って同じコードで動作するか簡単に実験してみました。
詳細な対応に関しては Seamlessly migrate data from Amazon S3 to Alibaba Cloud OSS をご覧ください。
Compatible S3 operations
バケット操作:
- Delete Bucket
- Get Bucket (list objects)
- Get Bucket ACL
- Get Bucket lifecycle
- Get Bucket location
- Get Bucket logging
- Head Bucket
- Put Bucket
- Put Bucket ACL
- Put Bucket lifecycle
- Put Bucket logging
オブジェクト操作:
- Delete Object
- Delete Objects
- Get Object
- Get Object ACL
- Head Object
- Post Object
- Put Object
- Put Object Copy
- Put Object ACL
マルチパート操作:
- Abort Multipart Upload
- Complete Multipart Upload
- Initiate Multipart Upload
- List Parts
- Upload Part
- Upload Part Copy
今回書いたコードは簡単ですがこちらにあります。
S3用とOSS用で少しだけ変えないといけない部分があるので、それぞれ用にコードを分けています。
差分はこんな感じです。今回のポイントはこの差分の部分ですね。endpoint_url
の追加と profile
の追加で実現可能でした。
認証情報は .aws/credentials
.aws/config
を使います。
.aws/credentials
[default]
aws_access_key_id = AWSのアクセスキー
aws_secret_access_key = AWSのシークレット
[alibaba]
aws_access_key_id = Alibaba Cloudのアクセスキー
aws_secret_access_key = Alibaba Cloudのシークレット
.aws/config
[default]
region = ap-northeast-1
[alibaba]
region = ap-northeast-1
ちなみに S3 と OSS はほ同じ様な機能がありますが、管理コンソールの雰囲気の違いはこんな感じです
S3
OSS
1.バケット一覧の取得
まず最初にバケット一覧の取得をしてみました。
for bucket_list in s3.buckets.all():
print(bucket_list.name)
以下のような結果が返ってきました。
コンソールを見に行くと同様のバケットがあるのでバケット一覧の取得は問題ないようです。
2.オブジェクトアップロード
次にACLを設定してのオブジェクトアップロードをしてみました。
bucket.upload_file(KEY,UPLOAD_FILE,ExtraArgs={'ACL': 'public-read'})
obj = bucket.Object(UPLOAD_FILE)
ヘッダーが x-amz-XXXX
としてリクエストが飛びますが、問題なくOSSへのアップロードは出来ました。
アップロード確認
S3
OSS
3.オブジェクトダウンロード
アップロードしたファイルを名前をつけてダウンロードしてみました。
bucket.download_file(UPLOAD_FILE,DOWNLOAD_FILE)
問題なくリクエストは実行されファイルがダウンロードされました。
今回は簡単に AWS SDK for Python (Boto3) を使って Alibaba Cloud OSS
の基本的な操作ができるか試してみました 。
互換APIと言う事だったので特殊な事をしない基本的な部分は大丈夫そうですね。
事例などがあまり無かったので試してみましたが参考になれば幸いです。