S3互換オブジェクトストレージからさくらのクラウド オブジェクトストレージへ移行する方法

## はじめに
この記事は[さくらインターネット Advent Calendar 2024](https://qiita.com/advent-calendar/2024/sakura "") 8日目の記事です。

さくらインターネットでセールスエンジニア(プリセールス)をやっている鶴田です。

さくらインターネットでビジネスサイドから技術記事を書くことはあまり多くないのですが、技術的にとてもdeepな方々に敬意を払いつつ僭越ながら寄稿してみます。

>本記事中に記載される各サービス仕様は執筆時点の内容となりますのでご注意ください。

## セールスエンジニアの仕事と本記事の内容について
セールスエンジニアの仕事では、営業同行でさくらインターネットの利用を検討している見込みユーザの方々からさまざまな技術要件をお伺いする機会が多くあります。

今回は実際に商談でお伺いした移行に関するお問い合わせの中からピックアップして、他社のオブジェクトストレージから[さくらのクラウド オブジェクトストレージ]("https://cloud.sakura.ad.jp/products/object-storage/")へ移行する方法についてご紹介したいと思います。

> ※基本的に移行に関する内容はお客様自身で確認頂く範囲となり、通常サポートの範囲外となります。
本記事の内容はあくまで[やってみた]レベルのため、実際に移行計画される際はご利用のシステム環境に応じた構成で十分に事前検証することをオススメします。 

## さくらのクラウド オブジェクトストレージとは
もはやデファクトスタンダードとなっているS3互換APIが利用可能な、さくらのクラウド上のオブジェクトストレージサービスです。
https://cloud.sakura.ad.jp/products/object-storage/
>オブジェクトストレージは、大容量のデータや大量のデータをスケーラブルに保存できるAmazon S3互換APIを備えたストレージサービスです。月額495円（ストレージ容量100GiB）から使える定額従量制です。さくらインターネットの各サービス間はデータ転送量が無料でご利用いただけます。

本家S3と比較すると課金体系に特徴があり、**基本料金**が設定されています。
基本料金の範囲で利用する場合は追加費用は発生しないため、小規模なアプリの内部バックエンドとして使用する場合は従量課金を意識せずに利用することができ気軽に使用できます。

**主な基本料金範囲の上限値**
|ストレージ容量|転送量|リクエスト数|オブジェクト数|
|---|---|---|---|
|100GiB|10GiB|100,000リクエスト|100,000オブジェクト|

基本料金を超える範囲は従量課金となりますが、特に転送料については**さくらインターネットが提供するグローバルIPアドレスからのデータ取得(=GETリクエスト)には無料になっています。**　
※さくらインターネット外からのデータ取得(GETリクエスト)のみ転送料がかかります。
※データアップロード(PUTリクエスト)については送信元問わず転送料は発生しません。

また、さくらのクラウドサービス間は自社で運用している[大容量バックボーンNW](https://www.sakura.ad.jp/services/datacenter/networkfacility/backbone_map.html)内で通信が完結するため、グローバルIP環境での通信ではありますが**さくらインターネットのサービスとの間ではNW的に近い環境で利用する**ことができます。
※とはいえ、WEBベースで通信するオブジェクトストレージのためIO性能はそれなりと思ってください:innocent:

以上の特徴から、さくらのクラウドを利用頂く場合のバックエンドとして適したサービスになっており、他社クラウドから移行する際にオブジェクトストレージ層の移行先としてご検討頂くことも多いです。

なお、本家S3と比べると細かい仕様に差分が多くありますので、[マニュアル](https://manual.sakura.ad.jp/cloud/objectstorage/about.html#id3)でサービス仕様などを十分にご確認ください。

## 異なるクラウド事業者間のオブジェクトストレージ移行について
クラウド事業者間の移行を考えた際、オブジェクトストレージ層のデータ移行は悩みどころかと思います。
選択肢としては各クラウド事業者が用意するデータ移行ツールを利用する(AWS DataSyncなど)、S3互換APIに対応したオープンソースソフトウェア(OSS)やサードパーティのSaaSベンダの移行ツールを利用する、などが挙げられます。

さくらインターネットとしては特にオブジェクトストレージのデータ移行ツールを提供していないので、何等かデータ移行ツールを利用頂く必要があります。

今回はOSSを利用した選択肢のうち**MinIOに付属するmcクライアントを使用する例**を紹介します。

## MinIO/mcクライアントについて
MinIOはS3互換APIに対応したオープンソースのオブジェクトストレージ製品です。
MinIO自体はオブジェクトストレージを任意サーバで構築できるミドルウェアなのですが、クライアントとして付属する[mcクライアント](https://min.io/docs/minio/linux/reference/minio-mc.html)が様々な機能をもっており、その中でも移行に役立つ[ailias](https://min.io/docs/minio/linux/reference/minio-mc/mc-alias-set.html#command-mc.alias.set), [mirror](https://min.io/docs/minio/linux/reference/minio-mc/mc-mirror.html)オプションがあります。

ailiasオプションではs3互換オブジェクトストレージの接続先と認証を一つの宛先(ailias)として定義することができ、またmirrorオプションではailiasで定義したオブジェクトストレージ間の同期を取ることができます。
これらを組み合わせることで、**異なるサービスのオブジェクトストレージ間でも同期できるように**なります。

## 実際にやってみる

今回はさくらのクラウド上に任意のLinuxサーバ(AlmaLinux9.4)を構築して、mcクライアントのインストールと動作確認をやってみます。
また、移行元/先は事前に作成を済ませておき必要な権限が付与されたAPIキーも発行しておきます。

|移行元|移行先|
|---|---|
|AWS S3|さくらのクラウド オブジェクトストレージ

### mcクライアントインストール
公式ドキュメントの[quickstart手順](https://min.io/docs/minio/linux/reference/minio-mc.html#quickstart)通りに作業します。
```
# curl https://dl.min.io/client/mc/release/linux-amd64/mc \
  --create-dirs \
  -o $HOME/minio-binaries/mc

# chmod +x $HOME/minio-binaries/mc
# export PATH=$PATH:$HOME/minio-binaries/
```

### ailias設定
各サービスのailias設定を作成します。
今回はAWS S3側を **"s3"**、さくらのクラウド側を **"sakura"** と定義します・

**AWS S3**
```
# mc alias set s3 https://s3.amazonaws.com [アクセスキー] [シークレット] --api S3v4
```

**さくらのクラウド オブジェクトストレージ**
```
# mc alias set sakura https://s3.isk01.sakurastorage.jp [アクセスキー] [シークレット] --api S3v4
```

### mirrorの実行
作成したailias設定を使用して同期するコマンドは以下になります。
```
# mc mirror --skip-errors s3/[s3側バケット] sakura/[さくら側バケット]
```

### 実際に同期を試した結果

以下内容のS3バケットをさくらのクラウド オブジェクトストレージへmirror同期してみました。
|合計サイズ|100GB|
|---|---|
|オブジェクト|32,191|
|音声|9.5GB/2,648ファイル|
|ドキュメント|1.1GB/24,200ファイル|
|画像|9GB/4,501ファイル|
|動画|80.4GB /842ファイル|

timeコマンドを組み合わせて移行の所要時間を計測した結果は以下の通りです。バケットの内容により異なりますのであくまで参考程度とお考えください。

```
## mc mirrorコマンドをtimeコマンドで所要時間計測 (ログ出力指定を含む)
# ( time -p mc mirror --skip-errors s3/[s3側バケット] sakura/[さくら側バケット]) > mirror_s3.log 2>&1

Total: 99.95 GiB, Transferred: 99.95 GiB, Speed: 11.39 MiB/s
real 8987.40 -> ★約2.5h
user 164.68
sys 114.30
```

## 最後に
今回はAWS S3を対象にしましたが、S3互換APIでアクセス可能なオブジェクトストレージであれば同様の手順でailias設定,mirror同期できます。
既存のオブジェクトストレージからさくらのクラウド オブジェクトストレージへ移行される際はぜひお試しください！
また、今後も商談でお伺いした事例を元にさくらのクラウドの便利な活用方法や移行に役立つ情報を発信できればと思います。