Amazon FSx for Lustreのデータリポジトリタスクを使ってエクスポートとリリースをしてみた

Amazon FSx for Lustreのデータリポジトリタスクを使ってエクスポートとリリースをしてみた

未エクスポートのファイルのリリースはAWS APIで簡単に実行できる
2025.09.22

AWS側からエクスポートやリリースをしたい

こんにちは、のんピ(@non____97)です。

皆さんはAmazon FSx for Lustre(FSxL)を使用していて、AWS側からエクスポートやリリースをしたいなと思ったことはありますか? 私はあります。

FSxLファイルシステムをマウントしているクライアント側で都度lfs hsm_releaseを叩くのも面倒です。AWS側からリリースをしたいところです。

そんな時に使用できるのがデータリポジトリタスクです。これを用いることでAWS側でFSxLとS3間でファイルの転送の制御が可能です。

https://docs.aws.amazon.com/ja_jp/fsx/latest/LustreGuide/data-repository-tasks.html

データリポジトリタスクの種類は以下API Referenceにあるとおり、インポート/エクスポート/リリースの3種類です。

Type

Specifies the type of data repository task to create.

  • EXPORT_TO_REPOSITORY tasks export from your Amazon FSx for Lustre file system to a linked data repository.
  • IMPORT_METADATA_FROM_REPOSITORY tasks import metadata changes from a linked S3 bucket to your Amazon FSx for Lustre file system.
  • RELEASE_DATA_FROM_FILESYSTEM tasks release files in your Amazon FSx for Lustre file system that have been exported to a linked S3 bucket and that meet your specified release criteria.
  • AUTO_RELEASE_DATA tasks automatically release files from an Amazon File Cache resource.

CreateDataRepositoryTask - Amazon FSx

実際に試してみました。

いきなりまとめ

  • 未エクスポートのファイルはリリースできない
  • データリポジトリタスクを作成することで、AWS APIでインポート/エクスポート/リリースを制御することが可能
  • EventBridge SchedulerとStep Functionsを組み合わせることで、定期的にエクスポート済みのファイルをリリースすることも可能

やってみた

検証環境

検証環境は以下のとおりです。

Amazon FSx for Lustreの自動エクスポート後のファイルは自動でリリースまでされるのか確認してみた検証環境構成図.png

以下記事の環境を再利用しています。

なお、検証の都合上自動エクスポートは無効にしています。

検証用ファイルの作成

検証用のファイルを作成します。

			
			$ sudo dd if=/dev/urandom of=/mnt/fsxl/s3/random_pattern_binary_block_128MiB bs=1M count=128
128+0 records in
128+0 records out
134217728 bytes (134 MB, 128 MiB) copied, 0.504705 s, 266 MB/s

$ sudo dd if=/dev/urandom of=/mnt/fsxl/s3/random_pattern_binary_block_128MiB_2 bs=1M count=128
128+0 records in
128+0 records out
134217728 bytes (134 MB, 128 MiB) copied, 0.487987 s, 275 MB/s

$ sudo dd if=/dev/urandom of=/mnt/fsxl/s3/random_pattern_binary_block_128MiB_3 bs=1M count=128
128+0 records in
128+0 records out
134217728 bytes (134 MB, 128 MiB) copied, 0.50822 s, 264 MB/s

$ sudo dd if=/dev/urandom of=/mnt/fsxl/s3/random_pattern_binary_block_128MiB_4 bs=1M count=128
128+0 records in
128+0 records out
134217728 bytes (134 MB, 128 MiB) copied, 0.504604 s, 266 MB/s

		

ファイル作成後にlfs hsm_statelfs df -hを叩いて、エクスポート状況とOSTの使用量を確認します。

			
			$ lfs hsm_state /mnt/fsxl/s3/
can't get hsm state for /mnt/fsxl/s3/: Inappropriate ioctl for device

$ lfs hsm_state /mnt/fsxl/s3/*
/mnt/fsxl/s3/random_pattern_binary_block_128MiB: (0x00000000)
/mnt/fsxl/s3/random_pattern_binary_block_128MiB_2: (0x00000000)
/mnt/fsxl/s3/random_pattern_binary_block_128MiB_3: (0x00000000)
/mnt/fsxl/s3/random_pattern_binary_block_128MiB_4: (0x00000000)
/mnt/fsxl/s3/random_pattern_binary_block_4GiB: (0x00000009) exists archived, archive_id:1

$ lfs df -h
UUID                       bytes        Used   Available Use% Mounted on
hcrabbuv-MDT0000_UUID       32.7G        9.0M       32.7G   1% /mnt/fsxl[MDT:0]
hcrabbuv-OST0000_UUID        1.1T        4.5G        1.1T   1% /mnt/fsxl[OST:0]

filesystem_summary:         1.1T        4.5G        1.1T   1% /mnt/fsxl

		

エクスポートはされておらず、OSTは4.5GBであることが分かります。

AWS CLIからでもS3バケット上にファイルがエクスポートされていないことを確認しました。

			
			$ aws s3 ls s3://non-97-fsxl-s3
2025-09-17 09:02:45 4294967296 random_pattern_binary_block_4GiB

		

エクスポート前にリリース

本来であればエクスポートするところなのでしょうが、エクスポート前にリリースできるかどうか確認をします。

			
			$ sudo lfs hsm_release /mnt/fsxl/s3/*
Cannot send HSM request (use of /mnt/fsxl/s3/random_pattern_binary_block_128MiB): Operation not permitted

$ sudo lfs hsm_release /mnt/fsxl/s3/random_pattern_binary_block_128MiB
Cannot send HSM request (use of /mnt/fsxl/s3/random_pattern_binary_block_128MiB): Operation not permitted

$ sudo lfs hsm_release /mnt/fsxl/s3/random_pattern_binary_block_128MiB_2
Cannot send HSM request (use of /mnt/fsxl/s3/random_pattern_binary_block_128MiB_2): Operation not permitted

$ lfs hsm_state /mnt/fsxl/s3/*
/mnt/fsxl/s3/random_pattern_binary_block_128MiB: (0x00000000)
/mnt/fsxl/s3/random_pattern_binary_block_128MiB_2: (0x00000000)
/mnt/fsxl/s3/random_pattern_binary_block_128MiB_3: (0x00000000)
/mnt/fsxl/s3/random_pattern_binary_block_128MiB_4: (0x00000000)
/mnt/fsxl/s3/random_pattern_binary_block_4GiB: (0x00000009) exists archived, archive_id:1

$ ls -l /mnt/fsxl/s3
total 4380469
-rw-r--r--. 1 root root  134217728 Sep 22 10:04 random_pattern_binary_block_128MiB
-rw-r--r--. 1 root root  134217728 Sep 22 10:04 random_pattern_binary_block_128MiB_2
-rw-r--r--. 1 root root  134217728 Sep 22 10:04 random_pattern_binary_block_128MiB_3
-rw-r--r--. 1 root root  134217728 Sep 22 10:07 random_pattern_binary_block_128MiB_4
-rw-r--r--. 1 root root 4294967296 Sep 17 09:02 random_pattern_binary_block_4GiB

		

はい、Operation not permittedと拒否されてました。

ということで、エクスポート前にリリースはできないようです。

逆にいうとリリースするためにはエクスポートが完了しる必要があることが分かります。

最終的な生成物をS3にエクスポートするパスなのであれば、自動エクスポートを有効化した上でデータリポジトリタスクで定期的にリリースをすれば良さそうですね。

リリースするデータリポジトリタスクの作成

それでは、リリースするデータリポジトリタスクの作成をします。

以下AWS公式ドキュメントを参考にデータリポジトリを選択して、アクション-リリースタスクの作成をクリックします。

https://docs.aws.amazon.com/ja_jp/fsx/latest/LustreGuide/release-files-task.html

SCR-20250922-qzsu.png

リリースするファイルシステムパスや前回アクセスからの最小期間(atime/ctime/mtimeの最大値)からの経過時間などを指定してデータリポジトリタスクを作成します。

SCR-20250922-rahk.png

作成してしばらくすると、データリポジトリタスクのステータスが成功となりました。タイプはRelease data from filesystemなので分かりやすいですね。

SCR-20250922-rare.png

タスクの詳細は以下のとおりです。1件エクスポートしていることが分かります。

SCR-20250922-ratx.png

lfs hsm_stateを叩くと、確かにエクスポート済みだった1件だけreleased exists archivedとなっていました。

			
			$ lfs hsm_state /mnt/fsxl/s3/*
/mnt/fsxl/s3/random_pattern_binary_block_128MiB: (0x00000000)
/mnt/fsxl/s3/random_pattern_binary_block_128MiB_2: (0x00000000)
/mnt/fsxl/s3/random_pattern_binary_block_128MiB_3: (0x00000000)
/mnt/fsxl/s3/random_pattern_binary_block_128MiB_4: (0x00000000)
/mnt/fsxl/s3/random_pattern_binary_block_4GiB: (0x0000000d) released exists archived, archive_id:1

		

エクスポートするデータリポジトリタスクの作成

続いて、エクスポートするデータリポジトリタスクの作成をします。

SCR-20250922-rbtf.png

エクスポートするファイルシステムのパスやレポートパス等を指定してタスクを作成します。

SCR-20250922-rbxt.png

作成したタスクのステータスが成功になりました。タイプはExport to repositoryです。

SCR-20250922-rchf.png

タスクの詳細は以下のとおりです。4件エクスポートされたようです。

SCR-20250922-rciz.png

lfs hsm_stateを叩くと、確かに先ほどエクスポートされていなかったファイルがexists archivedとなっていました。

			
			$ lfs hsm_state /mnt/fsxl/s3/*
/mnt/fsxl/s3/random_pattern_binary_block_128MiB: (0x00000009) exists archived, archive_id:1
/mnt/fsxl/s3/random_pattern_binary_block_128MiB_2: (0x00000009) exists archived, archive_id:1
/mnt/fsxl/s3/random_pattern_binary_block_128MiB_3: (0x00000009) exists archived, archive_id:1
/mnt/fsxl/s3/random_pattern_binary_block_128MiB_4: (0x00000009) exists archived, archive_id:1
/mnt/fsxl/s3/random_pattern_binary_block_4GiB: (0x0000000d) released exists archived, archive_id:1


		

リリースするデータリポジトリタスクをStep Functionsで作成

せっかくなので、リリースするデータリポジトリタスクをStep Functionsで作成します。

といっても、CreateDataRepositoryTaskAPIを叩くだけのシンプルなステートマシンです。ステートマシンのASLは以下のとおりです。

			
			{
  "Comment": "A description of my state machine",
  "StartAt": "CreateDataRepositoryTask",
  "States": {
    "CreateDataRepositoryTask": {
      "Type": "Task",
      "Arguments": {
        "FileSystemId": "fs-0a68e6aed0680b2a2",
        "Paths": [
          "s3"
        ],
        "Report": {
          "Enabled": "true",
          "Format": "REPORT_CSV_20191124",
          "Scope": "FAILED_FILES_ONLY",
          "Path": "s3://non-97-fsxl-s3/report"
        },
        "Type": "AUTO_RELEASE_DATA",
        "ReleaseConfiguration": {
          "DurationSinceLastAccess": {
            "Unit": "DAYS",
            "Value": 0
          }
        }
      },
      "Resource": "arn:aws:states:::aws-sdk:fsx:createDataRepositoryTask",
      "End": true
    }
  },
  "QueryLanguage": "JSONata"
}

		

random_pattern_binary_block_4GiB以外の読み込みを行い、FSxLにインポートしておきます。

			
			$ lfs hsm_state /mnt/fsxl/s3/*
/mnt/fsxl/s3/random_pattern_binary_block_128MiB: (0x00000009) exists archived, archive_id:1
/mnt/fsxl/s3/random_pattern_binary_block_128MiB_2: (0x00000009) exists archived, archive_id:1
/mnt/fsxl/s3/random_pattern_binary_block_128MiB_3: (0x00000009) exists archived, archive_id:1
/mnt/fsxl/s3/random_pattern_binary_block_128MiB_4: (0x00000009) exists archived, archive_id:1
/mnt/fsxl/s3/random_pattern_binary_block_4GiB: (0x0000000d) released exists archived, archive_id:1

$ lfs df -h
UUID                       bytes        Used   Available Use% Mounted on
hcrabbuv-MDT0000_UUID       32.7G        9.0M       32.7G   1% /mnt/fsxl[MDT:0]
hcrabbuv-OST0000_UUID        1.1T      520.5M        1.1T   1% /mnt/fsxl[OST:0]

filesystem_summary:         1.1T      520.5M        1.1T   1% /mnt/fsxl

		

この状態でステートマシンを実行します。

すると、以下のように正常にデータリポジトリタスクが作成されていました。

SCR-20250922-rfze.png

詳細を確認するとリリースされたのは4件となっていますね。

SCR-20250922-rgbh.png

FSxLから確認すると、確かに未リリースだったファイルがリリースされたことを確認できました。

			
			$ lfs hsm_state /mnt/fsxl/s3/*
/mnt/fsxl/s3/random_pattern_binary_block_128MiB: (0x0000000d) released exists archived, archive_id:1
/mnt/fsxl/s3/random_pattern_binary_block_128MiB_2: (0x0000000d) released exists archived, archive_id:1
/mnt/fsxl/s3/random_pattern_binary_block_128MiB_3: (0x0000000d) released exists archived, archive_id:1
/mnt/fsxl/s3/random_pattern_binary_block_128MiB_4: (0x0000000d) released exists archived, archive_id:1
/mnt/fsxl/s3/random_pattern_binary_block_4GiB: (0x0000000d) released exists archived, archive_id:1

$ lfs df -h
UUID                       bytes        Used   Available Use% Mounted on
hcrabbuv-MDT0000_UUID       32.7G        9.1M       32.7G   1% /mnt/fsxl[MDT:0]
hcrabbuv-OST0000_UUID        1.1T        7.5M        1.1T   1% /mnt/fsxl[OST:0]

filesystem_summary:         1.1T        7.5M        1.1T   1% /mnt/fsxl

		

あとはEventBridge Schedulerで定期実行すれば定期的に未エクスポートのファイルをリリースする処理を組めそうですね。

未エクスポートのファイルのリリースはAWS APIで簡単に実行できる

Amazon FSx for Lustreのデータリポジトリタスクを使ってエクスポートとリリースをしてみました。

未エクスポートのファイルのリリースはAWS APIで簡単に実行できます。FSxLファイルシステムのSSDが逼迫している場合は、定期的なエクスポートを実装してみてはいかがでしょうか。最終アクセスからの経過日数以上でリリース対象の絞り込みもできるため、自動エクスポートしている領域に対して実行したとしても即座にリリースということを回避することが可能です。

この記事が誰かの助けになれば幸いです。

以上、クラウド事業本部 コンサルティング部の のんピ(@non____97)でした!

この記事をシェアする

FacebookHatena blogX

関連記事