Amazon FSx for LustreでS3エクスポート/インポートしてみた #reinvent

こんにちは、坂巻です。

re:Invent 2018にて発表された「Amazon FSx for Lustre」はS3と統合されており、S3データにシームレスなアクセスが可能です。今回はS3へのエクスポート/インポートを実施してみたいと思います。

Amazon FSx for Lustreのサービス仕様、構築手順については割愛していますので、以下をご確認ください。

やってみた

エクスポート

オプションのデータリポジトリを指定し、ファイルシステムを作成しました。

01

データリポジトリは、以下のような定義です。

02

ファイルシステムが作成された後に、EC2よりマウントしてみました。

$ df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/xvda2            10G  1.7G  8.4G  17% /
devtmpfs             472M     0  472M   0% /dev
tmpfs                496M     0  496M   0% /dev/shm
tmpfs                496M   13M  483M   3% /run
tmpfs                496M     0  496M   0% /sys/fs/cgroup
tmpfs                100M     0  100M   0% /run/user/1000
10.0.10.83@tcp:/fsx  3.4T   14M  3.4T   1% /fsx

マウントポイント配下にファイルを作成します。

$ sudo echo 'Hello' >/fsx/export.txt
$ ls -l /fsx
total 1
-rw-r--r--. 1 root root 6 Dec  2 01:32 export.txt

S3へファイルをエクスポートする前に、エクスポート対象のバケットを確認しました。

03

バケットが空であることが確認できましたので、S3へエクポートします。

$ sudo lfs hsm_archive /fsx/export.txt
$ sudo lfs hsm_action /fsx/export.txt
/fsx/export.txt: NOOP

sudo lfs hsm_archiveでS3へ出力しています。sudo lfs hsm_actionでファイルがデータリポジトリに正常にエクスポートされたことを確認しています。戻り値「NOOP」は正常にエクスポートされたことを示します。エクスポート対象バケットの「FSxLustre20181202T010836Z」を確認してみます。

04

エクスポートできた事が確認できました。次はディレクトリのエクスポートを行ってみたいと思います。エクスポートするディレクトリ等を作成します。

$ sudo mkdir /fsx/exportdir
$ cp -p /fsx/export.txt /fsx/exportdir/export_1.txt
$ cp -p /fsx/export.txt /fsx/exportdir/export_2.txt
$ ls -l /fsx/exportdir
total 1
-rw-r--r--. 1 root root 6 Dec  2 01:32 export_1.txt
-rw-r--r--. 1 root root 6 Dec  2 01:32 export_2.txt

ディレクトリをS3へエクポートします。

$ find /fsx/exportdir/ -type f -print0 | xargs -0 -n 50 -P 8 sudo lfs hsm_archive
$ find /fsx/exportdir/ -type f -print0 | xargs -0 -n 50 -P 8 sudo lfs hsm_action | grep "ARCHIVE" | wc -l
0

ハイライト部のコマンドで正常にエクスポートされたことを確認しています。戻り値「0」は正常にエクスポートされたことを示します。エクスポート対象バケットの「FSxLustre20181202T010836Z」配下の「exportdir」を確認してみます。

05

エクスポートできた事が確認できました。なお、/fsx配下に存在しないファイルについてはエクスポートすることはできません。

$ ls -l /home/ec2-user/kmod-lustre-client-2.10.5-1.el7.x86_64.rpm
-rw-rw-r--. 1 ec2-user ec2-user 2291884 Aug 27 17:47 /home/ec2-user/kmod-lustre-client-2.10.5-1.el7.x86_64.rpm
$ sudo lfs hsm_archive /home/ec2-user/kmod-lustre-client-2.10.5-1.el7.x86_64.rpm
Cannot read FID of /home/ec2-user/kmod-lustre-client-2.10.5-1.el7.x86_64.rpm: No data available

また、ファイルを削除してもS3側のファイルが削除されることはありません。

$ sudo rm -rfd /fsx/exportdir
$ sudo rm -rf export.txt
$ ls -l /fsx
total 0

以下は、ローカルにてファイルを削除した後のS3バケットです。

06

インポート

インポートはファイルシステム作成中に行われますので、インポートするためのS3バケットを作成しました。

Importing data from your Amazon S3 data repository happens during file system creation. If you have a large number of files to import, this affects how long it takes for your file system to be created.

作成したファイルは以下2ファイルです。

  • s3://fsx-lustre-test2/import_1.txt
  • s3://fsx-lustre-test2/dir/import_2.txt

07

08

作成したバケットとリンクするようにファイルシステムを作成しました。

09

ファイルシステムマウント前の状態です。

$ ls -l /fsx
total 0
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda2       10G  1.7G  8.4G  17% /
devtmpfs        472M     0  472M   0% /dev
tmpfs           496M     0  496M   0% /dev/shm
tmpfs           496M   13M  483M   3% /run
tmpfs           496M     0  496M   0% /sys/fs/cgroup
tmpfs           100M     0  100M   0% /run/user/1000
tmpfs           100M     0  100M   0% /run/user/0

ファイルシステムをマウントします。

$ sudo mount -t lustre fs-0fb85428e4b38c6c1.fsx.us-east-1.amazonaws.com@tcp:/fsx /fsx
$ ls -lR /fsx
/fsx:
total 33
drwxr-xr-x. 2 root root 33280 Dec  2 02:58 dir
-rwxr-xr-x. 1 root root     6 Dec  2 02:49 import_1.txt

/fsx/dir:
total 1
-rwxr-xr-x. 1 root root 6 Dec  2 02:50 import_2.txt

インポートの確認ができました。

さいごに

Amazon FSx for LustreでS3へシームレスにアクセスすることができました。データ処理はAmazon FSx for Lustreにて実施して、結果についてはより安価なS3に格納しておく等、用途にあわせた利用ができそうですね!

参考