AWS Snowball Edge の高速化されたNFSサービスを試す

概要
======
AWS Snowball Edge は、S3インターエイスだと高速だけどNFS（ファイルインターフェイス）だと遅いのが問題でした。
これが高速化されたと聞いて、再び借りてみた話。
![s0.jpg](https://qiita-image-store.s3.amazonaws.com/0/96018/30bfa45d-1c79-9b5a-dbc5-f9223435b8b8.jpeg)

これまでの経緯
======
最初に借りたのは2017年10月。
NFSサービスで日本語等のマルチバイト文字を含むファイル名のファイルを書き込むとフリーズするバグに遭遇しこれをフィードバック。返金となりました。
当時の記事はこちら。 https://qiita.com/zakky/items/9486147d4c7f85415f50

２回目は2018年11月。
前回のフィードバックが反映されNFSサービスのバグが修正されていました。
問題無く動作はするものの、転送速度が遅く結局S3インターフェイスで苦労しました。

そして今回。
NFSサービスが高速になったと聞いて借りてみました。


進化した筐体
======
QSFPとSFP+は変わりませんが、RJ45が２個に増加、USB3.1(USB-C)が２個。
これはEC2インスタンスを起動した時のVNIを利用可能にする為なのでしょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96018/e100be86-88cd-e77e-032b-7a3677c044d5.png)

参考までに初期型筐体はこんな感じ。全く別物ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96018/e622f50f-6163-1350-a8a0-4ebb1665870b.png)


GUIツール AWS OpsHub登場
======
Snowball Edgeは電源を入れたら都度ロック解除が必要ですが、従来これにはLinux端末等でCLIツールを実行する必要がありました。
```bash:コマンド:
./snowballEdge unlock -i 10.0.0.1 \
  -m ./JID20000000-7777-4444-aaaa-099999999999_manifest.bin \
  -u aaaaa-bbbbb-ccccc-ddddd-eeeee

      The Snowball Edge unlock status is: UnlockSnowballResult(status=UNLOCKING)
```
のような。
もちろんこれも使えますが、GUIツール AWS OpsHub登場。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96018/d57b490b-fb19-7d7a-ea61-5302ef9185f2.png)
このようにウィンドウズ端末上から簡単にロック解除が出来ます。


新しいNFSサービス
======
以前から提供されていたNFSサービスはファイルインターフェイスという呼び名で、Snowball Edge筐体の画面を操作して有効化して使いました。
このNFSサービスは頑張っても40MB/秒(300Mbps程度)しか出ず、80TB書き込むのに24日かかるという非現実的な性能でした。
このファイルインターフェイスが高速化されたのではなく、全く別の実装になっていました。
Snowball Edgeは筐体内でEC2インスタンスを起動できますが。NFSサービスのAMIをこれにロードするという従来とは全く異なる実装です。
そして250~400MB/秒と、S3インターフェイス同等の性能になったとのこと。
早速試しましょう。

速度を試す
=======
まずはファイルコピーで単一セッションのNFS転送速度を試します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96018/583bbb4c-3cd7-8364-70e7-0529b457d3fa.png)
約170MB/秒(1.35Gbps)程度出ているようです。
おそらく複数セッションでないと最大性能を発揮できないのでしょう。

続いて２ファイルを同時にコピーして複数セッションのNFS転送速度を試します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96018/ea00bb7d-e79a-0c9b-da0a-357d112c8a99.png)
約290MB/秒(2.33Gbps)程度出ているようです。
倍速にはなりませんでした。
Snowball Edgeはまだまだ性能が出そうですが、拙宅のPCではこれが限界のようです。

試しに３ファイルを同時にコピーしてみると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96018/7a8d2458-72ea-8026-fb5d-7fcc05369eba.png)
上りトラヒック（赤色）が頭打ちになっていることからもこれがわかります。

これぐらいの速度であれば十分でしょう。
290MB/秒で転送すると、80TB転送するのに約77時間、3日少々で完了しますから。
従来の40MB/秒では24日かかり非現実的でしたが、実用になる速度に改善されたことがわかりました。


利用料金
======
NFSサービスは追加料金がかかりません。
最初の10日間は300ドルです。これを超えると1日あたり30ドルかかります。
東京都内へ発送してもらいましたが、往復送料として120ドル請求されました。
このあたりは以前と変わらないようです。


何故NFSなのか
======
これにはいくつか理由があります。
最初に試したのはS3バケットとローカルファイルシステム同期機能である s3 sync です。
```
aws s3 sync /nas/ s3://mybucket
```

このコマンドは一見正しく動作します。
ところが、Snowball Edgeの場合はオブジェクトが大量にあると正しく機能しません。（後に調べたらどこかに注意事項として書かれていた気がします）
ファイルサーバの内容は日々更新されますから s3 sync が使えないと困るのです。

そして、S3インターフェイスでファイルを読み書きするとタイムスタンプが全て現在時刻になってしまう問題があります。
これを戻すには元のファイル情報を取得しておきその情報を元にタイムスタンプを復元作業が必要です。

```
touch --date "2020-12-31 20:57" "./エヴァ/ヱヴァンゲリヲン新劇場版：序.mxf"
touch --date "2020-12-31 22:50" "./エヴァ/ヱヴァンゲリヲン新劇場版：破.mxf"
...
```
のような作業をファイルの数だけ実行する必要があります。
これは非常に手間がかかりますから、NFSによる高速なファイル入出力を待っていたのです。


まとめ
======

十分高速になった AWS Snowball Edge Storage Optimized デバイスのNFSサービス。
少なくとも290MB/秒まではNFS転送速度が得られる事を確認できました。
十分実用的になったのではないでしょうか。