2021/02/22

Amazon S3 のSDKで書かれたコードで Alibaba Cloud OSS を操作できるか試してみたよ!

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 の追加で実現可能でした。

S3とOSSのBoto3コード差分

認証情報は .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

image

image


OSS

Alibaba Cloud OSS のバケットリスト

Alibaba Cloud OSS のバケット詳細画面

1.バケット一覧の取得

まず最初にバケット一覧の取得をしてみました。

for bucket_list in s3.buckets.all():
    print(bucket_list.name)

以下のような結果が返ってきました。

Boto3でOSSのバケットリストを出力

コンソールを見に行くと同様のバケットがあるのでバケット一覧の取得は問題ないようです。

Alibaba Cloud OSS のバケットリスト

2.オブジェクトアップロード

次にACLを設定してのオブジェクトアップロードをしてみました。

bucket.upload_file(KEY,UPLOAD_FILE,ExtraArgs={'ACL': 'public-read'})
obj = bucket.Object(UPLOAD_FILE)

ヘッダーが x-amz-XXXX としてリクエストが飛びますが、問題なくOSSへのアップロードは出来ました。

Boto3でOSSへオブジェクトアップロードのログ


アップロード確認

S3

Boto3でS3へオブジェクトアップロード

Boto3でS3へオブジェクトアップロード

OSS

Boto3でOSSへオブジェクトアップロード

3.オブジェクトダウンロード

アップロードしたファイルを名前をつけてダウンロードしてみました。

bucket.download_file(UPLOAD_FILE,DOWNLOAD_FILE)

問題なくリクエストは実行されファイルがダウンロードされました。

Boto3でOSSからオブジェクトダウンロード

Boto3でOSSからオブジェクトダウンロード


今回は簡単に AWS SDK for Python (Boto3) を使って Alibaba Cloud OSS の基本的な操作ができるか試してみました 。
互換APIと言う事だったので特殊な事をしない基本的な部分は大丈夫そうですね。

事例などがあまり無かったので試してみましたが参考になれば幸いです。

0 件のコメント:

コメントを投稿

Alibaba Cloud の Region 増えてた

  久々に Alibaba Cloud を覗いてみたら・・・ あ、なんかリージョン増えてるわ 昨年発表していたフィリピン(マニラ)リージョン、タイ(バンコク)リージョン、韓国(ソウル)リージョン が増えていたのでちょっと現状確認してみました。 フィリピン(マニラ)リージョンの場合...