AWS ParallelCluster Ubuntu 22.04 で Mountpoint for Amazon S3 を使って S3 バケットをマウントする方法
AWS ParallelCluster で OS は Ubuntu 22.04 を利用し、 Mountpoint for Amazon S3 を利用できるクラスター環境を構築手順を紹介します。
ヘッドノード、コンピュートノードから直接 S3 バケットのデータを取得できます。大容量のデータを読み取ることの多い機械学習、ゲノム解析(リファレンスゲノムなど)のワークロードで ParallelCluster を利用する場合は本構成もご検討ください。
Inventory icons created by Freepik - Flaticon
経緯
Mountpoint for Amazon S3 がリリース時点で最新だった ParallelCluster 3.6 + Ubuntu 20.04 でクラスターを構築手順は以前ご紹介しました。
その後に ParallelCluster 3.7 代がリリースされ、Ubuntu 22.04 を新たにサポートしました。
Ubuntu 22.04 を利用する場合、以前に紹介したクラスターの構築手順では失敗することがわかりました。原因切り分けについては以下のブログを参照ください。
運悪く ParallelCluster 3.7.0 以前のバージョンは脆弱性を抱えました。脆弱性対応済みのバージョンとして ParallelCluster 3.7.1 がリリースされています。
今後は ParallelCluster 3.7.1 以降のバージョンかつ、Ubuntu ユーザーは Ubuntu 22.04 への切り替えが進むことでしょう。そして Mountpoint for Amazon S3 の組み合わせの需要が見込まれます。
改めて構築手順を整理しました。
クラスター構築手順
全体の流れや、マウント用の S3 バケット、IAM ポリシーを事前に作成する Cloudformation テンプレートも以下のブログの通りで問題ありませんでした。比較的丁寧に設定方法を紹介していることもあり、必要な変更点のみをこちらの記事で紹介します。
AWS ParallelCluster に Mountpoint for Amazon S3 を使って S3 バケットをマウントする方法 | DevelopersIO
想定する要件
- ParallelCluster のバージョンは CVE-2023-41915 脆弱性対応済みの v3.7.1 または、それ以降
- 現時点で最新版は v3.7.1 です
- ※ 以降の動作保証はできないのですが問題を確認したらブログをアップすると思います
- OS は Ubuntu 22.04
- Ubuntu ユーザーは機をみて 20.04 からの移行をご検討されているのではないでしょうか
- Mountpoint for Amazon S3 をヘッドノード、コンピュートノードにマウントしたい
変更点: カスタムブートストラップアクションの準備
重要なポイントです。mount-s3
で必要なライブラリ(libfuse2
)を事前インストールする必要があります。
#! /bin/bash sudo apt update sudo apt install libfuse2 -y wget -P /tmp https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.deb sudo apt-get install /tmp/mount-s3.deb -y sudo mkdir /mnt/s3 sudo mount-s3 --allow-delete --allow-other [マウントする S3 バケット名] /mnt/s3/
ParallelCluster 3.7.1 + Ubuntu 22.04 対応で大きな変更点だったのは、カスタムブートストラップアクションのスクリプト修正でした。
変更点: クラスターコンフィグ作成
Ubuntu 22.04 からは SSH 接続に必要なキーペアは ED25519 タイプが必須です。RSA タイプのキーペアだと接続できません。セッションマネージャーで運用される場合は気になりませんが仕様変更が入ったことはご認識しておいてください。
Region: ap-northeast-1 Image: Os: ubuntu2204 Tags: - Key: Name Value: v371-cluster # ---------------------------------------------------------------- # Head Node Settings # ---------------------------------------------------------------- HeadNode: InstanceType: t3.micro Networking: ElasticIp: false SubnetId: subnet-0cc9326cae7a514a3 Ssh: KeyName: sandbox-keypair LocalStorage: RootVolume: Size: 40 Encrypted: true VolumeType: gp3 Iops: 3000 Throughput: 125 # CustomActions: # OnNodeConfigured: Iam: AdditionalIamPolicies: - Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore - Policy: arn:aws:iam::123456789012:policy/hpc-dev-AllowMountpointForS3 S3Access: - BucketName: hpc-dev-postinstall-files EnableWriteAccess: false # ---------------------------------------------------------------- # Compute Node Settings # ---------------------------------------------------------------- Scheduling: Scheduler: slurm SlurmSettings: ScaledownIdletime: 5 SlurmQueues: # ------ Compute 1 ------ - Name: queue1 ComputeResources: - Name: queue1 Instances: - InstanceType: c6i.large - InstanceType: m6i.large MinCount: 0 MaxCount: 10 DisableSimultaneousMultithreading: true ComputeSettings: LocalStorage: RootVolume: Size: 40 Encrypted: true VolumeType: gp3 Iops: 3000 Throughput: 125 CapacityType: SPOT AllocationStrategy: lowest-price Networking: SubnetIds: - subnet-0cc9326cae7a514a3 PlacementGroup: Enabled: false CustomActions: OnNodeConfigured: Script: s3://hpc-dev-postinstall-files/mount-moutpoint-for-s3/mount.sh Iam: AdditionalIamPolicies: - Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore - Policy: arn:aws:iam::123456789012:policy/hpc-dev-AllowMountpointForS3 S3Access: - BucketName: hpc-dev-postinstall-files EnableWriteAccess: false # ---------------------------------------------------------------- # Other Settings # ---------------------------------------------------------------- Monitoring: Logs: CloudWatch: Enabled: true RetentionInDays: 180 DeletionPolicy: "Delete" Dashboards: CloudWatch: Enabled: false
動作確認
クラスターをデプロイ後、ヘッドノードへログインしコンピュートノードに Mountpoint for Amazon S3 を通して S3 バケットをマウントできているのか確認します。
テストジョブの内容
カスタムブートストラップのスクリプトでコンピュートノードは/mnt/s3
ディレクトリに S3 バケットをマウントする設定にしています。/mnt/s3
のディレクトリのファイルを確認するテストジョブを投げます。
#! /bin/bash hostname ls -l /mnt/s3
マウントした S3 バケットにあるオブジェクトはこんな感じです。ベンチマークのテストで生成されたファイルが転がっています。
実行結果
ジョブの実行結果を確認します。コンピュートノードから S3 バケットのオブジェクトを参照できています。
queue1-dy-queue1-1 total 39014400 -rw-r--r-- 1 root root 1073741824 Aug 27 04:38 SEQ8M-Q128T1-1G-Read.0.0 -rw-r--r-- 1 root root 524288000 Aug 27 07:29 SEQ8M-Q128T1-500M-Read.0.0 -rw-r--r-- 1 root root 1073741824 Aug 27 04:39 SEQ8M-Q128T16-1G-Read.0.0 -rw-r--r-- 1 root root 1073741824 Aug 27 04:42 SEQ8M-Q128T16-1G-Read.1.0 -rw-r--r-- 1 root root 1073741824 Aug 27 04:40 SEQ8M-Q128T16-1G-Read.10.0 -rw-r--r-- 1 root root 1073741824 Aug 27 04:40 SEQ8M-Q128T16-1G-Read.11.0
これで Ubuntu 22.04 対応の Moutpoint for Amazon S3 の動作確認がとれました。
おわりに
ゲノム解析のワークロードで Mountpoint for Amazon S3 ご利用の方は意見交換したいので仕事関係なしにご連絡お待ちしております。