AWS ParallelCluster プライベートサブネット内にマスターノードを構築する

AWS ParallelClusterをプライベートサブネット内に構築する設定例を紹介します。
2020.08.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

プライベートサブネット内にマスターノードを構築する

こんにちは、網走の大村です。

AWS ParallelClusterはAWSがサポートする、HPCクラスターの管理ツールです。
推奨構成ですとマスターノード(ジョブスケジューラ)をインターネットから直接アクセスして利用します。
閉じた環境内にマスターノード、コンピュートノードを構築するParallelClusterの設定を紹介します。

推奨構成

作りたい構成

オンプレのHPC環境というとデータセンターに構築されている企業様が多いかと思います。インターネットから直接のアクセスはちょっと...となるかと思いますので、各種VPN経由でAWS ParallelClusterをインターネットから直接アクセスできないプライベートサブネットに構築するにはどうしたらよいのかを見ていきましょう。

結論

プライベートサブネット内に構築するには[vpc]セクションの変更、追加設定を入れます。
use_public_ips = falseを追加するのがポイントです。これがマスターノードにパブリックIP付与しない設定です。

[vpc default]
vpc_id = vpc-xxxxxxx # 任意のVPC ID
master_subnet_id = subnet-xxxxxxx # 任意のプライベートサブネットのID
use_public_ips = false # パブリックIPは不要設定

構築手順

pclusterコマンドのインストールと、デフォルトコンフィグの作成。コンフィグを修正し、プライベートサブネット内でParallelClusterを構築するまでを追って見ます。VPNの構築については触れません。

先にVPCを作成

ParallelCluster環境を作成する最低限のVPCとサブネットを準備します。 プライベートサブネットは演算時に大量のインスタンスを起動する可能性があります。 必要となるインスタンス数を見込んで十分な大きさを確保して設計しましょう。

ネットワークだけ用意

pclusterコマンドのインストール

公式ドキュメント通りです。推奨している通りvenvで環境を分けてインストールした方が無難です。pclusterコマンドのバージョン = 作成されるParallelCluster環境のバージョンになります。venvでpclusterコマンドのバージョンを管理しておきましょう。古いParallelCluster環境を作成したい場合は、pclusterコマンドのバージョンを下げることになります。
AWS ParallelCluster のインストール - AWS ParallelCluster

ParallelClusterのコンフィグ作成

pclusterコマンドのバージョンを確認します。コマンドのバージョンと同じバージョンのParallelClusterの環境が作成されます。

> pcluster version
2.8.1

pcluster configureで初期設定のコンフィグを生成します。 基本デフォルトのまま進めていきます。

リージョンを選択。

Allowed values for AWS Region ID:
1. ap-northeast-1
2. ap-northeast-2
3. ap-south-1
4. ap-southeast-1
5. ap-southeast-2
6. ca-central-1
7. eu-central-1
8. eu-north-1
9. eu-west-1
10. eu-west-2
11. eu-west-3
12. sa-east-1
13. us-east-1
14. us-east-2
15. us-west-1
16. us-west-2
AWS Region ID [ap-northeast-1]:

キーペアを選択。ご自身の環境で作成済みのキーペアが表示されます。

Allowed values for EC2 Key Pair Name:
1. sandbox-key
EC2 Key Pair Name [sandbox-key]:

ジョブスケジューラを選択。

Allowed values for Scheduler:
1. sge
2. torque
3. slurm
4. awsbatch
Scheduler [slurm]:

OSを選択。

Allowed values for Operating System:
1. alinux
2. alinux2
3. centos6
4. centos7
5. ubuntu1604
6. ubuntu1804
Operating System [alinux2]:

最小・最大起動台数を選択。

Minimum cluster size (instances) [0]:
Maximum cluster size (instances) [10]:

Master Nodeのインスタンスタイプを選択。

Master instance type [t2.micro]:

Comute Nodeのインスタンスタイプを選択。

Compute instance type [t2.micro]:

VPCを自動的に作るかはnを選択。

Automate VPC creation? (y/n) [n]:

既存のParallelCluster起動用のVPCの番号選択。

Allowed values for VPC ID:
1. vpc-20e7ed47 | 3 subnets inside
2. vpc-01eba5335575574a6 | dev-hpc-vpc | 4 subnets inside

サブネットを自動的に作るかはnでキャンセル。

Automate Subnet creation? (y/n) [y]:

どこのサブネットにMaster Nodeを作成するのか。配置したいプライベートサブネットを選択。

Allowed values for Master Subnet ID:
1. subnet-0d50466e104acf805 | dev-hpc-public-1a | Subnet size: 256
2. subnet-07499e6a63e573764 | dev-hpc-public-1c | Subnet size: 256
3. subnet-05735ae0c5b2bfaab | dev-hpc-private-1a | Subnet size: 256
4. subnet-0d884379bbbabc1ef | dev-hpc-private-1c | Subnet size: 256

お次はCompute Nodeを作成するのか。配置したいプライベートサブネットを選択。2層構造のネットワーク構成のため、Master Nodeと同じサブネットに配置します。

Allowed values for Compute Subnet ID:
1. subnet-0d50466e104acf805 | dev-hpc-public-1a | Subnet size: 256
2. subnet-07499e6a63e573764 | dev-hpc-public-1c | Subnet size: 256
3. subnet-05735ae0c5b2bfaab | dev-hpc-private-1a | Subnet size: 256
4. subnet-0d884379bbbabc1ef | dev-hpc-private-1c | Subnet size: 256

コンフィグ完成です。コンフィグがホームディレクトリ直下の./parallelcluster配下に保存されます。管理しやすいディレクトリに移動しましょう。

Configuration file written to /Users/ohmura.yasutaka/.parallelcluster/config
You can edit your configuration file or simply run 'pcluster create -c /Users/ohmura.yasutaka/.parallelcluster/config cluster-name' to create your cluster

デフォルトコンフィグの確認

コンフィグの名前を変更し移動しました。

> mv ~/.parallelcluster/config ./private-config

デフォルトのコンフィグを確認します。これをベースに設定変更していくと楽です。

[aws]
aws_region_name = ap-northeast-1

[global]
cluster_template = default
update_check = true
sanity_check = true

[aliases]
ssh = ssh {CFN_USER}@{MASTER_IP} {ARGS}

[cluster default]
key_name = sandbox-key
base_os = alinux2
scheduler = slurm
vpc_settings = default

[vpc default]
vpc_id = vpc-01eba5335575574a6
master_subnet_id = subnet-05735ae0c5b2bfaab

必要な設定(今回のポイント)

VPCセクションにuse_public_ips = falseを追記します。これを追加しないとプライベートサブネットで起動するMaster NodeにパブリックIPをが付与されてしまいます。

[vpc default]
vpc_id = vpc-01eba5335575574a6
master_subnet_id = subnet-05735ae0c5b2bfaab
use_public_ips = false

プライベートサブネットの指定

既存のコンフィグに既存のVPC ID、サブネットIDを確認しコンフィグに記入するだけでOKです。

VPC IDの確認例

サブネットIDの確認例

ParallelClusterの作成

前提としてAWSへの認証情報は別途あるものとします。下記コマンドを投入し10分ほど構築待ちです。 pcluster create private-cluster -c private-config

コマンドの說明

pcluster create [クラスターの管理名称(任意)] -c [コンフィグを指定]

createコマンドの裏側ではCloudFormationによる構築が走っています。

構築が終わると次のメッセージが返ってきます。

Status: parallelcluster-private-cluster - CREATE_COMPLETE
ClusterUser: ec2-user
MasterPrivateIP: 10.1.21.69

NameタグがMasterのインスタンスが作成されています。 Master Nodeにログインして確認したいところですが、プライベートサブネット内に作成したため別途アクセス手段を用意しないといけないです。コンフィグの設定例の紹介にとどめ検証は終了とします。

せっかくなので

試しに先ほど追加した設定をコメントアウトしVPC指定以外はデフォルトコンフィグに戻してみます。そして設定ファイルの更新をかけてみます。

[vpc default]
vpc_id = vpc-01eba5335575574a6
master_subnet_id = subnet-05735ae0c5b2bfaab
# use_public_ips = false

pcluster updateコマンドで、先ほど作成した任意のクラスター名とコンフィグを指定します。コンフィグの変更箇所の確認が入ります。yでOKします。

> pcluster update private-cluster -c private-config

Validating configuration file private-config...
Retrieving configuration from CloudFormation for cluster private-cluster...
Found Configuration Changes:

#    parameter       old value    new value
---  --------------  -----------  -----------
     [vpc default]
01   use_public_ips  -            True

Validating configuration update...
Congratulations! The new configuration can be safely applied to your cluster.
Do you want to proceed with the update? - Y/N:

更新後

プライベートサブネットのサーバなのにパブリックIP(EIP)をつけてくれます。私のようにドキュメントをななめ読みではじめると「どうしてこうなった...」となったので皆様もお気をつけください。

お片付け

pcluster deleteコマンドでParallelCluster環境は削除できます。 pcluster delete private-cluster -c private-config

おわりに

ドキュメントを読むといろいろとオプションが用意されています。コンフィグをいろいろいじって検証したいところです。

参考

[vpc] セクション - AWS ParallelCluster