AWS ParallelCluster pclusterコマンドv2.8からv2.9で必要になったIAMポリシー
AWS Parallelcluster v2.9以降のIAMポリシー
pcluster
コマンドを打つインスタンスのIAMポリシーの権限について
- Parallelcluster v2.9の
pcluster create
で必要な権限が以前より増えた - v2.8以前の
pcluster
コマンドを使っていた環境では権限不足になるかもしれない - v2.9利用時はIAMポリシー・ロールの見直した方がよい
結論
ドキュメントを参照してIAMポリシーを作成/更新すれば解決。
AWS Identity and Access Management roles in AWS ParallelCluster - AWS ParallelCluster
エラー内容と対応
ParallelCluster v2.8.1を管理していた環境にv2.9.1をインストールし、v2.9.1のクラスターを作成しようとしたら下記のエラーにより作成失敗。
> pcluster create v29-cluster -c v29-config Beginning cluster creation for cluster: v29-cluster Unable to create S3 bucket parallelcluster-5feqs80j6yrf04db. Access Denied
疑問:S3バケットを作成できないと言われましてもクラスター作成時にS3バケットなんて作成されてたっけ?
調査
S3バケットはv2.9のクラスター作成時から新規作成されるようなっていた。
Why S3 needed? · Issue #2077 · aws/aws-parallelcluster
現状のIAMロールはv2.8作成の要件を満たすIAMポリシーのためS3バケットを作成する権限がなさそう。 IAMポリシー足りないというIssueが上がっており、すでにドキュメントは更新されていました。
Problems with ParallelClusterUserPolicy in 2.9.1 · Issue #2060 · aws/aws-parallelcluster
S3部分の差分を確認したところv2.8時点でのIAMポリシーではこの部分はありませんでした。 それ以外にも変更があったので素直にIAMポリシー作り直したほうが早いことがわかりました。
{ "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::parallelcluster-*" ], "Effect": "Allow", "Sid": "S3ResourcesBucket" },
対応
最新のParallelClusterUserPolicy using SGE, Slurm, or Torqueを項を参考にIAMポリシーを作成。 IAMロールにポリシーをアタッチしてEC2のロールを更新
AWS Identity and Access Management roles in AWS ParallelCluster - AWS ParallelCluster
結果
IAMポリシー修正後、v2.9.1のクラスター作成に成功。
> pcluster create v29-cluster -c v29-config Beginning cluster creation for cluster: v29-cluster Creating stack named: parallelcluster-v29-cluster Status: parallelcluster-v29-cluster - CREATE_COMPLETE MasterPublicIP: 18.178.190.186 ClusterUser: ec2-user MasterPrivateIP: 10.1.10.21
番外編
v2.9からクラスター作成時にS3バケットを作成することはわかりましたが、なにが保存されているのでしょうか。
S3バケット確認
バケットに保存されているファイルをローカルにコピーして確認してみます。
> aws s3 ls |grep parallel 2020-10-30 13:20:14 parallelcluster-hp04923j8wna0kaq > aws s3 ls parallelcluster-hp04923j8wna0kaq PRE configs/ PRE custom_resources_code/ PRE templates/ > aws s3 cp s3://parallelcluster-hp04923j8wna0kaq ./ --recursive
configsディレクトリ
コンピューノードの設定値が保存されていました。
> cat cluster-config.json {"cluster": {"label": "default", "scaling": {"label": "default", "scaledown_idletime": 10}, "default_queue": "compute", "queue_settings": {"compute": {"compute_type": "spot", "enable_efa": false, "disable_hyperthreading": false, "placement_group": "DYNAMIC", "compute_resource_settings": {"default": {"instance_type": "c6g.xlarge", "min_count": 0, "max_count": 4, "initial_count": 0, "spot_price": 0, "vcpus": 4, "gpus": 0, "enable_efa": false, "disable_hyperthreading": false, "disable_hyperthreading_via_cpu_options": false}}}}, "disable_cluster_dns": false}}⏎
custom_resources_codeディレクトリ
artifacts.zip
が保存されていたので展開してみます。
> ll total 64 -rw-r--r-- 1 ohmura.yasutaka staff 31K 10 30 13:20 artifacts.zip
Python製のメンテツールっぽい名前のスクリプトがでてきました。
> unzip artifacts.zip -d tmp > ll tmp total 48 -rw-rw-r-- 1 ohmura.yasutaka staff 554B 9 15 13:55 __init__.py drwxr-xr-x 7 ohmura.yasutaka staff 224B 10 30 14:15 __pycache__/ -rw-rw-r-- 1 ohmura.yasutaka staff 6.8K 9 15 13:55 cleanup_resources.py drwxr-xr-x 9 ohmura.yasutaka staff 288B 10 30 14:15 crhelper/ -rw-rw-r-- 1 ohmura.yasutaka staff 3.3K 9 15 13:55 manage_docker_images.py -rw-rw-r-- 1 ohmura.yasutaka staff 2.3K 9 15 13:55 send_build_notification.py -rw-rw-r-- 1 ohmura.yasutaka staff 1.8K 9 15 13:55 wait_for_update.py
どこで使われているのか調べたところpcluster
コマンドをインストールしたクラスター管理のサーバ内に展開されたファイルがありました。
# ll /home/ec2-user/pcluster291/lib/python3.7/site-packages/pcluster/resources/custom_resources/custom_resources_code total 24 -rw-rw-r-- 1 ec2-user ec2-user 6983 Sep 15 13:55 cleanup_resources.py drwxrwxr-x 3 ec2-user ec2-user 136 Oct 10 10:19 crhelper -rw-rw-r-- 1 ec2-user ec2-user 554 Sep 15 13:55 __init__.py -rw-rw-r-- 1 ec2-user ec2-user 3368 Sep 15 13:55 manage_docker_images.py drwxrwxr-x 2 ec2-user ec2-user 204 Oct 10 10:19 __pycache__ -rw-rw-r-- 1 ec2-user ec2-user 2382 Sep 15 13:55 send_build_notification.py -rw-rw-r-- 1 ec2-user ec2-user 1893 Sep 15 13:55 wait_for_update.py
templatesディレクトリ
コンピュートノード作成用のCloudformationのファイルが保存されていました。
> cat compute-fleet-hit-substack.rendered.cfn.yaml AWSTemplateFormatVersion: '2010-09-09' Parameters: ComputeSubnetId: Type: String RootDevice: Type: String RootVolumeSize: Type: Number --- 省略 ---
おわりに
既存のParallelClusterを管理している環境でv2.9を新たに使う場合はIAMポリシー・ロールの確認忘れずに!
以上、コンサル部の大村@網走でした