rcloneを利用してS3からLinode Object Storageにコンテンツをコピーする

# Linode Object Storage とは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/cd7e77ba-cc88-036a-0a94-96f5cc55dff2.png)

Linode Object Storageは様々なリージョンで利用可能なS3互換の低価格なAkamai Cloud Computing Serviceのストレージソリューションです。
ストレージはNVMe SSDにて動作しており、HDDに比べて高いパフォーマンスと低レイテンシーなアクセスを実現することができます。
データ量は250GBから100TB(※1)まで拡張することができ、オブジェクトはリージョン内でレプリケートされており冗長性が担保されています。
インバウンド転送無料、アウトバウンド1TBまでの転送が標準の価格に含まれており、追加の転送料金は1GBあたり0.005ドルとかなり低コストなのが特徴です(※1)。
今後のアップデートではデータ量が最大1PB、オブジェクト数は最大10億に対応する予定があります。

- [Linode Object Storage](https://www.linode.com/ja/products/object-storage/)
- [Enhancing Object Storage Performance](https://www.linode.com/blog/cloud-storage/nvme-object-storage-enhanced-performance/)
- [Akamai Cloud Computing Services(Linode)とは何かをわかりやすく解説](https://qiita.com/isss802/items/5313c7a6da1d9ed50a38)

※1 リージョンによって制限や価格が異なります、詳しくは[こちら](https://www.linode.com/docs/products/storage/object-storage/#specifications)を参照ください。


# Rclone とは

Rcloneは、オープンソースのコマンドラインベースのツールで、多様なクラウドストレージサービスの管理と操作を行うことができます。GitHubでコードが公開されており、コミュニティによる改善とRclone Services Ltdによるサポートも行われています。このツールは、Google Drive、Amazon S3、Dropboxなど、幅広いクラウドサービスとの互換性を持ち、ファイルの同期、アップロード、ダウンロードなどがコマンドラインを通じて簡単に行えるのが特徴です。

- [Rclone](https://rclone.org/)
- [Rclone for Business](https://rclone.com/)

本記事ではRcloneを利用してS3からLinode Object Storageへコンテンツをコピーする方法を紹介します。

## 検証インスタンス

今回の検証ではインスタンスのネットワーク帯域がファイル転送の際の制限にならないよう、一番大きくネットワーク帯域を確保できるLinode 192 GBのインスタンスを利用しています。
ネットワークとしてはin:40Gbps/out:12Gbpsの性能を出すことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/53c5e366-f0e0-3697-9d7a-13c0380a0b8f.png)

## クラウド事業者間のプライベートピアリング(PNI)

Akamaiと大手クラウド事業者間のネットワークはプライベートピアリング(PNI)で接続されていることがtracerouteなどの結果から把握することができます。

確実にPNIを通ることはあくまでもインターネットの経路なので保証はしておりませんが、最適な経路でアクセスできることがわかります。

Linode 大阪のインスタンスから東京のAWS S3 エンドポイントへのTracerouteを実施してみます。

```
root@localhost:~# traceroute -A 52.219.199.36
traceroute to 52.219.199.36 (52.219.199.36), 30 hops max, 60 byte packets
 1  a23-49-50-139.deploy.static.akamaitechnologies.com (23.49.50.139) [AS18101/AS20940]  0.209 ms  0.177 ms  0.165 ms
 2  192.168.217.153 (192.168.217.153) [*]  0.515 ms 192.168.218.27 (192.168.218.27) [*]  0.331 ms 192.168.217.153 (192.168.217.153) [*]  0.489 ms
 3  192.168.205.39 (192.168.205.39) [*]  0.262 ms 192.168.203.35 (192.168.203.35) [*]  0.410 ms  0.393 ms
 4  192.168.195.12 (192.168.195.12) [*]  0.211 ms 192.168.202.10 (192.168.202.10) [*]  0.161 ms 192.168.200.14 (192.168.200.14) [*]  0.363 ms
 5  * * *
 6  ae18.r02.osa03.ien.netarch.akamai.com (104.70.112.24) [AS20940]  0.417 ms  0.482 ms ae20.r02.osa01.ien.netarch.akamai.com (23.56.130.18) [AS20940]  33.437 ms
 7  * ae5.r01.osa01.icn.netarch.akamai.com (23.56.130.36) [AS20940]  0.838 ms *
 8  * ae3.r02.osa03.icn.netarch.akamai.com (23.215.54.185) [AS20940]  13.277 ms  13.254 ms
 9  * ae1.r02.osa03.ien.netarch.akamai.com (104.70.112.41) [AS20940]  5.353 ms *
10  * * *
11  s3-ap-northeast-1.amazonaws.com (52.219.199.36) [AS16509]  7.486 ms  7.465 ms *
```

公開されているピアリング情報は[PeeringDB](https://www.peeringdb.com/net/8182)から確認することができます。

こちらの情報からLinode AS 63949はAkamai AS 20940に接続されており、Tracerouteの結果からAWS AS 16509 に PNIにて接続していることがわかります。

この接続経路によりクラウド事業者間でも安定した通信品質でアクセスすることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/c256282f-081b-9c56-5a21-72c6881106a1.png)

:::note warn
執筆時点でLinode大阪リージョンから以下の各エンドポイントの名前解決結果のIPへのTracerouteした結果のAS経路情報となります。
確実にPNIを経由するものではありません。あくまでもインターネットの経路になります。
- s3-ap-northeast-1.amazonaws.com 
- storage.googleapis.com
- dbartifactsprodjapaneast.blob.core.windows.net
:::

## Linode Object Storage の Access Key を発行

Linode Object StorageにRcloneが接続するためにはアクセスキーを発行する必要があります。

[Akamai Cloud Manager](https://cloud.linode.com/)からObject Storageを選択、Access Keyの発行が行えます。
このAccess KeyはS3互換のものとなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/895ff741-b83e-55bd-be8f-b85d25ee0b1f.png)


## Rcloneのインストール

サーバーにRcloneのインストールを行います。
コマンドが動作することをVersionの表示で確認をします。

```
curl https://rclone.org/install.sh | sudo bash
rclone version
```

## Rclone config のセットアップ

LinodeとAWSにRcloneでアクセスするための設定を行います。
今回の構成では、LinodeのObject Storageは大阪、AWS S3は東京リージョンで構成しています。

```conf:~/.config/rclone/rclone.conf
[linode]
type = s3
provider = Linode
access_key_id = [発行したAccess Key ID]
secret_access_key = [発行したAccess Key]
endpoint = [Cluster ID].linodeobjects.com
acl = private

[aws]
type = s3
provider = AWS
access_key_id = XXXXXXXXXXXXXXXXXXXXX
secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx
region = ap-northeast-1
```

各リージョンのCluster IDは[**こちら**](https://www.linode.com/docs/products/storage/object-storage/#availability)から確認できます。

## 接続確認

Rcloneはファイルの同期だけに利用するのではなく、ファイル操作も行えます。
いくつかのコマンドを利用して接続を確認します。
その他のコマンドも用意されています。

- [rclone commands](https://rclone.org/commands/)

いくつかのコマンドをテストで実行し、接続できていることを確認します。

```bash
# ディレクトリ一覧
rclone lsd linode:<bucket_name>

# ファイル一覧
rclone ls linode:<bucket_name>

# ディレクトリ削除
rclone delete linode:<bucket_name>/test

# ファイル削除
rclone deletefile linode:<bucket_name>/test/test.file

# ディレクトリ/ファイルのコピー
rclone copy <file_path> linode:<bucket_name>/

# ディレクトリの同期
rclone sync <directory_path> linode:<bucket_name>/<directory_path>
```

## ファイル転送試験

Akamai Cloud Computing Serviceの大阪リージョンにLinodeインスタンスを構築し、Linode Object StorageとS3間のファイル転送を試験しました。

**試験結果**

|送信元 | 送信先|ファイル|速度|転送時間|
|---|---|---|---|---|
|S3 | Linode|1File(10GB)|65.290 MiB/s (547.69Mbps)|2m43.2s|
|Linode | S3|1File(10GB)|103.263 MiB/s (866.23Mbps)|1m41.4s|
|S3 | Linode|1000File(1MB)|38.896 MiB/s (326.28Mbps)|25.6s|
|Linode | S3|1000File(1MB)|29.897 MiB/s (250.79Mbps)|33.5s|

どちらからの通信も安定した速度で転送できることができ、ファイル転送も問題なく行えることが確認できました。

:::note warn 
執筆時点の測定結果であり、通信速度を保証するものではありません。
:::

**試験コマンドと詳細結果**

```
rclone copy aws:[BuketName]/10GB.dummy linode:[BuketName]/ -v

2024/03/14 03:10:04 INFO  : 10GB.dummy: Multi-thread Copied (new)
2024/03/14 03:10:04 INFO  :
Transferred:   	       10 GiB / 10 GiB, 100%, 65.290 MiB/s, ETA 0s
Transferred:            1 / 1, 100%
Elapsed time:      2m43.2s
```

```
rclone copy linode:[BuketName]/10GB.dummy aws:[BuketName]/ -v

2024/03/14 03:13:37 INFO  : 10GB.dummy: Multi-thread Copied (new)
2024/03/14 03:13:37 INFO  :
Transferred:   	       10 GiB / 10 GiB, 100%, 103.263 MiB/s, ETA 0s
Transferred:            1 / 1, 100%
Elapsed time:      1m41.4s
```

```
rclone sync aws:[BuketName]/files_1m_1000 linode:[BuketName]/files_1m_1000 -v

Transferred:   	     1000 MiB / 1000 MiB, 100%, 38.896 MiB/s, ETA 0s
Transferred:         1000 / 1000, 100%
Elapsed time:        25.6s
```

```
rclone sync linode:[BuketName]/files_1m_1000 aws:[BuketName]/files_1m_1000 -v

Transferred:   	     1000 MiB / 1000 MiB, 100%, 29.897 MiB/s, ETA 0s
Transferred:         1000 / 1000, 100%
Elapsed time:        33.5s
```


# まとめ

Rcloneを利用することで、異なるプラットフォームのバケット間のファイルのコピーを安定しておこなることが確認できました。
例えば、定期的にバケット間でファイルをコピーしておくことによって、バックアップとしてLinode Object Storageを利用することもできます。

Akamai はCDN、セキュリティ、クラウドサービスを通じ、オンラインライフの力となり守っています。本稿でご紹介したような課題やご相談があれば、お気軽にお問い合わせください
- [Akamai 営業担当者へのお問い合わせ](https://www.akamai.com/ja/why-akamai/contact-us/contact-sales)

# 関連記事

アカマイ・テクノロジーズ合同会社はQiitaでAkamai Cloud Computing Services関連など開発者向けの記事を掲載しております。

https://qiita.com/xenbase/items/52e2956a64cedc772bd9