CloudFormationを使用してFSx for Lustre入門

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

構築する環境

Diagram of introduction to FSx for Lustre using CloudFormation.

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スタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。

あわせて読みたい
CloudFormationのネストされたスタックで環境を構築する 【CloudFormationのネストされたスタックで環境を構築する方法】 CloudFormationにおけるネストされたスタックを検証します。 CloudFormationでは、スタックをネストす...

各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。

  • EC2インスタンス:i-0a1691dc22020c4d0
  • FSx for Lustre:fs-004328e6b35652be4
  • S3バケット:saa-02-010

AWSマネージメントコンソールからFSx for Lustreを確認します。

Detail of FSx for Lustre 1.
Detail of FSx for Lustre 2.

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に関する詳細は、以下のページをご確認ください。

あわせて読みたい
LinuxインスタンスにSSM Session Manager経由でアクセスする 【LinuxインスタンスにSSM Session Manager経由でアクセスする】 EC2インスタンスにSSM Session Manager経由でアクセスする構成を確認します。 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)

エクスポート結果を確認します。

Detail of FSx for Lustre 3.

確かにファイルがS3バケットにエクスポートできました。

このようにFSx for Lustreでは、S3バケットを永続的なデータリポジトリとして使用することができます。

まとめ

FSx for Lustre入門ということで、Lustre環境をCloudFormationを使って構築し、動作を確認しました。