CloudFormationを使用してFSx for Lustre入門
FSx for LustreはAWSが提供するマネージドストレージサービスの1つです。
FSx for Lustre を使用すると、人気のあるハイパフォーマンス Lustre ファイルシステムを簡単かつ費用効果の高い方法で起動して実行できます。機械学習、ハイパフォーマンスコンピューティング (HPC)、ビデオ処理、財務モデリングなど、速度が重要なワークロードには Lustre を使用します。
Amazon FSx for Lustre とは何ですか?
本ページでは、FSx for Lustre入門ということで、以下のページで紹介されている構成をCloudFormationを使って構築し、動作を確認します。
https://docs.aws.amazon.com/ja_jp/fsx/latest/LustreGuide/getting-started.html
構築する環境
VPC内に2つのプライベートサブネットを作成します。
1つ目のサブネットには、FSx for Lustreを作成します。
2つ目のサブネットには、EC2インスタンスを作成します。
このインスタンスはFSx for Lustreに接続するクライアントとして使用します。
S3バケットを作成します。
このバケットはFSx for Lustreのデータリポジトリとして使用します。
FSx for Lustreはプライベートサブネットに配置されていますので、VPCエンドポイント経由でS3バケットにアクセスします。
またAmazon Linux Extrasを使用して、EC2インスタンスにFSx for Lustre用のクライアントパッケージをインストールしますが、その際もこのVPCエンドポイントを経由します。
CloudFormationテンプレートファイル
上記の構成をCloudFormationで構築します。
以下のURLにCloudFormationテンプレートを配置しています。
https://github.com/awstut-an-r/awstut-saa/tree/main/02/010
テンプレートファイルのポイント解説
S3バケット
Resources:
Bucket:
Type: AWS::S3::Bucket
Properties:
AccessControl: Private
BucketName: !Ref Prefix
Code language: YAML (yaml)
データリポジトリ用のS3バケットを作成します。
特別な設定は不要です。
FSx for Lustre
Resources:
FSxLustre:
Type: AWS::FSx::FileSystem
Properties:
FileSystemType: LUSTRE
FileSystemTypeVersion: 2.12
LustreConfiguration:
DeploymentType: SCRATCH_1
ImportPath: !Sub "s3://${Bucket}/"
SecurityGroupIds:
- !Ref FSxSecurityGroup
StorageCapacity: !Ref FSxStorageCapacity
StorageType: SSD
SubnetIds:
- !Ref FSxSubnet
Code language: YAML (yaml)
LustreタイプのFSxを作成する場合は、FileSystemTypeプロパティに「LUSTRE」を指定します。
またファイルシステムのバージョンは、2つ(2.10と2.12)が選択可能です。
今回は後者を選択し、FileSystemTypeVersionプロパティに設定します。
LustreConfigurationプロパティでLustreに関する設定を行います。
DeploymentTypeプロパティで、Lustreのデプロイオプションを設定します。
詳細は以下のページをご確認ください。
https://docs.aws.amazon.com/ja_jp/fsx/latest/LustreGuide/using-fsx-lustre.html
今回はデフォルトの「SCRATCH_1」を指定して、スクラッチタイプを選択します。
スクラッチファイルシステム は、データのテンポラリストレージと短期間の処理のために設計されています。データはレプリケーションされず、ファイルサーバーに障害が発生しても永続しません。
スクラッチファイルシステム
データリポジトリとして使用するS3バケットを、ImportPathプロパティで設定します。
バケットをS3 URI形式で指定します。
デプロイオプションでSCRATCH_1を選択した場合、確保する容量とストレージタイプが限定されます。
以下に引用した通り、容量の最小値は1200GiBです。
For SCRATCH_1 deployment type, valid values are 1200 GiB, 2400 GiB, and increments of 3600 GiB.
AWS::FSx::FileSystem
StorageCapacityプロパティに「1200」を指定します。
そしてストレージタイプはSSDのみとなります。
ハードディスクドライブ (HDD) ストレージは、永続的デプロイタイプの 1 つでのみサポートされます。
FSx for Lustre のファイルシステムデプロイオプション
StorageTypeプロパティに「SSD」を指定します。
Lustreに適用するセキュリティグループをSecurityGroupIdsプロパティで指定します。
今回は以下のセキュリティグループを作成し、これを本プロパティに指定します。
Resources:
FSxSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: !Sub "${Prefix}-FSxSecurityGroup"
GroupDescription: FSx for Lustre SecurityGroup.
VpcId: !Ref VPC
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 988
ToPort: 988
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 1021
ToPort: 1023
CidrIp: 0.0.0.0/0
Code language: YAML (yaml)
FSx for Lustreに適用するセキュリティグループについては、以下の通り定められています。
セキュリティグループを設定して、ポート 988 および 1021~1023 で、セキュリティグループ自体またはフルサブネット CIDR からのインバウンドトラフィックを許可する必要があります。これは、ファイルシステムホストが相互に通信できるようにするために必要です。
ステップ 1: Amazon FSx for Lustre ファイルシステムの作成
環境構築
CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。
CloudFormationスタックを作成し、スタック内のリソースを確認する
CloudFormationスタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。
各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。
- EC2インスタンス:i-0a1691dc22020c4d0
- FSx for Lustre:fs-004328e6b35652be4
- S3バケット:saa-02-010
AWSマネージメントコンソールからFSx for Lustreを確認します。
FSx for Lustreが正常に作成されていることがわかります。
CloudFormationテンプレートで指定した通りにパラメータが設定されていることがわかります。
データリポジトリとしてS3バケット(saa-02-010)が設定されていることもわかります。
特に注目の値を2つ取り上げます。
- DNS mame:fs-004328e6b35652be4.fsx.ap-northeast-1.amazonaws.com
- Mount name:fsx
これらのパラメータは、EC2インスタンスがFSx for Lustreをマウントする際に必要となります。
動作確認
EC2インスタンスに接続
SSM Session Managerを使用して、EC2インスタンスに接続します。
% aws ssm start-session --target i-0a1691dc22020c4d0
...
sh-4.2$
Code language: Bash (bash)
SSM Session Managerに関する詳細は、以下のページをご確認ください。
Lustreクライアントインストール
以下のページに従ってクライアントインストールを進めます。
https://docs.aws.amazon.com/ja_jp/fsx/latest/LustreGuide/getting-started-step2.html
カーネルを特定します。
sh-4.2$ uname -r
4.14.305-227.531.amzn2.aarch64
Code language: Bash (bash)
Graviton2ベースのインスタンスですので、Amazon Linux Extrasを使用して、Lustreクライアントをインストールします。
sh-4.2$ sudo amazon-linux-extras install -y lustre
Installing lustre-client
...
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core | 3.7 kB 00:00:00
amzn2extra-docker | 3.0 kB 00:00:00
amzn2extra-lustre | 3.0 kB 00:00:00
...
Installed:
lustre-client.aarch64 0:2.12.8-2.amzn2
Complete!
Code language: Bash (bash)
クライアントのインストールが完了しました。
Lustreをマウントするポイントを作成します。
sh-4.2$ sudo mkdir -p /mnt/fsx
Code language: Bash (bash)
Lustreをマウントします。
マウント用コマンドは、先述のDNS nameとMount nameを使用します。
sh-4.2$ sudo mount -t lustre -o noatime,flock fs-004328e6b35652be4.fsx.ap-northeast-1.amazonaws.com@tcp:/fsx /mnt/fsx
Code language: Bash (bash)
dfコマンドでマウント状況を確認します。
sh-4.2$ df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 181468 0 181468 0% /dev
tmpfs 219540 0 219540 0% /dev/shm
tmpfs 219540 408 219132 1% /run
tmpfs 219540 0 219540 0% /sys/fs/cgroup
/dev/nvme0n1p1 8367084 1583628 6783456 19% /
/dev/nvme0n1p128 10202 3820 6382 38% /boot/efi
tmpfs 43908 0 43908 0% /run/user/0
10.0.2.38@tcp:/fsx 1169131264 7936 1169121280 1% /mnt/fsx
Code language: Bash (bash)
確かにLustreがマウントされています。
ファイルの書き込みとデータリポジトリへのエクスポート
以下のページに従ってファイルの書き込みとデータリポジトリへのエクスポートを進めます。
https://docs.aws.amazon.com/ja_jp/fsx/latest/LustreGuide/getting-started-step3.html
マウントされたLustreにファイルを書き込みます。
sh-4.2$ sudo touch /mnt/fsx/test.txt
sh-4.2$ ls /mnt/fsx
test.txt
Code language: Bash (bash)
確かにファイルが書き込めました。
以下のコマンドで、Lustre内のファイルをS3バケットにエスクポートします。
sh-4.2$ sudo lfs hsm_archive /mnt/fsx/test.txt
Code language: Bash (bash)
エクスポート結果を確認します。
確かにファイルがS3バケットにエクスポートできました。
このようにFSx for Lustreでは、S3バケットを永続的なデータリポジトリとして使用することができます。
まとめ
FSx for Lustre入門ということで、Lustre環境をCloudFormationを使って構築し、動作を確認しました。