この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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ポリシー・ロールの確認忘れずに!
以上、コンサル部の大村@網走でした