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と言う事だったので特殊な事をしない基本的な部分は大丈夫そうですね。

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

2021/02/09

Alibaba Cloud PolarDB のリソース自動運用機能(スケールアップ / スケールダウン)を実験してみたよ!

Alibaba Cloud PolarDB のオートスケール(スケールアップ / スケールダウン)を実験してみたよ!

クラウドでよく使うオートスケールはインスタンスの増減(スケールアウト / スケールイン)のイメージ月用ですよね

実は Alibaba Cloud PolarDB の Auto Scaling 機能はインスタンスの増減と拡大・縮小(スケールアップ / スケールダウン)にも対応していました。Database Autonomy Service(DAS)という、運用支援系のサービスと連動して設定されるので気付いてなかったのですが、今回ちょっとさわってみました。

結果としては以下の様な形でうまく動作していました、設定などを少し見ていきます。

image

Polarオートスケール

ちなみに Database Autonomy Service(DAS)は結構優秀なサービスなので是非さわって見て欲しいです
基本は無料ですし(オプション機能は有料です)

設定画面は以下の様なシンプルなものになっています。

「Automatic Scale-out」「Automatic Scale-In」という設定項目名になっていて分かりにくいのですが、 「Maximum Specifications」とある様にインスタンススペックの上限指定をすることでスケールアップ・スケールダウンも自動で行われる様になります。

Auto Scaling Config

DASのオートスケール設定画面

詳細に関してはこちらのドキュメントもご確認ください。

Database Autonomy Service (DAS) provides the auto scaling feature. During peak hours, DAS automatically scales up a database instance to handle traffic peaks and ensure business stability. DAS monitors the CPU utilization of the database instance in real time. If the CPU utilization per unit of time decreases, DAS automatically scales down the database instance. This topic describes how to enable the auto scaling feature.

Database Autonomy Service (DAS) > Autonomy Center > Auto scaling


さて、オートスケールの実験をするには、ある程度の負荷をDBに掛ける必要があるのでその準備もします。

MySQL公式のサンプルデータ「world_x」を Data Management Service (DMS)を使ってインポート

MySQL公式のサンプルデータ「world_x」を Data Management Service (DMS)を使ってインポート

さらに Data Management Service (DMS)の機能「Test Data Generate」を使って100万レコード増やしました。
この機能、テーブル構造に合わせてそれっぽいデータが作られるのでテスト用途には便利でよく使ってます。

Data Management Service (DMS)の機能「Test Data Generate」を使って100万レコード増やしました。

100万レコードに増えています

「Skip when encountering data conflicts」の設定があるせいか100万レコードに少し足りませんが、そこそこのデータ量が出来たのでちょっと無駄にDBに負荷をかけて見たいと思います。
※100万レコードくらいだと余裕なので実際はもっとデータを増やしました

Data Management Service (DMS)も個人的には地味に利用頻度が高いサービスです。
こいつも基本は無料ですし・・・(オプション機能は有料です)
コンソールからSQLファイルを読み込ませたりクエリを実行できるのは楽ですね、


冒頭にも出したオートスケールの結果を見ていきたいと思います。

image

17:00 ~ 19:00 の期間内でスケールアウト -> スケールアップ -> スケールダウン -> スケールインが順次自動で実行されています。
Quiescent Period がクールダウンタイムになるので30分間隔で次ステップの実行が行われていますね。

1個目のイベントは17:13で自動スケールアウトで読み取り専用ノードが追加されています。

PolarDB 自動スケールアウト

2個目のイベントは30分後の17:43で自動スケールアップで 2Core,8GiB から 4Core,16GiB にスペックアップされています。

PolarDB 自動スケールアップ

3個目のイベントは負荷が下がってから30分後の18:16で自動スケールダウンで 4Core,16GiB から 2Core,8GiB にスペックダウンされています。

PolarDB 自動スケールダウン

4個目のイベントは約30分後の18:50で自動スケールインで読み取り専用ノードが削除されています。

PolarDB 自動スケールイン


今回は簡単ですが Alibaba Cloud PolarDB と Database Autonomy Service(DAS)によるリソース自動運用の動作検証でした。
Data Management Service (DMS)を含め、それぞれのサービスは特徴的な部分もイロイロあるので新ためて紹介をしていきたいな。

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

Alibaba Cloud OSS(Object Storage Service) は部分的に S3 APIとの互換性がある としています。 基本的なバケットの一覧取得やオブジェクトのアップロード、ダウンロード、ACLの付与などを AWS SDK for Pyth...