AWS ParallelCluster OnNodeConfigured セクションの Args を変更してもクラスターの更新をかけられないときに検討したこと

2024.04.27

AWS ParallelCluster のクラスターを構築後、後からコンフィグの修正して更新をかけることがよくあります。OnNodeConfigured:セクションのArgs:の項目を変更するだけではクラスターに更新かけられないことを知ったので書き残しておきます。

やってみた

検証環境

項目
AWS ParallelCluster 3.9.1
OS Ubuntu 22.04 LTS
CPU Arch Intel(x86_64)
HeadNode m7i-flex.large
ComputeNode m7i-flex.xlarge

Args の引数を変更してみた

以前、カスタムブートストラップスクリプトで実行するスクリプトに対して、クラスターコンフィグから引数を渡す方法を紹介しました。

この方法で構築したクラスターに対して、引数を変更して更新をかける機会がありました。ここでは Mountpoint for Amazon S3 のマウントコマンドのオプションを変更したく、オプションを変更しました。

      CustomActions:
        OnNodeConfigured:
          Sequence:
            - Script: s3://hpc-custom-boostrap-files/mountpoint-for-ubuntu22/mount.sh
            Args:
                - hpc-dev-mountpoint-sample-1
                - /mnt/s3-readonly
                - “--allow-other” # オプションを変更した

実行されるスクリプトはOPTIONSでクラスターコンフィグのArgs:セクションで指定した引数を受け取るかたちになっています。

#! /bin/bash

BUCKET_NAME=$1
TARGET_DIRECTORY=$2
OPTIONS=$3

echo ${BUCKET_NAME}
echo ${TARGET_DIRECTORY}
echo ${OPTIONS}

sudo mkdir -p ${TARGET_DIRECTORY}
sudo mount-s3 ${OPTIONS} ${BUCKET_NAME} ${TARGET_DIRECTORY}

クラスターに更新をかける

update-clusterコマンドでドライランを実行しました。

$ pcluster update-cluster --cluster-name $CLUSTER_NAME \
                         --cluster-configuration $CONFIG_NAME \
                         --dryrun true

結果は以下の通りでArgs:セクション野変更は検知されませんでした。--dryrun trueオプションを外しても結果は同じでした。

{
  "message": "Bad Request: No changes found in your cluster configuration."
}

第三引数の行ごと削除しても結果に変わりありませんでした。

      CustomActions:
        OnNodeConfigured:
          Sequence:
            - Script: s3://hpc-custom-boostrap-files/mountpoint-for-ubuntu22/mount.sh
            Args:
                - hpc-dev-mountpoint-sample-1
                - /mnt/s3-readonly
               # 行ごとを消した

ドキュメント確認

コンピュートノードはコンピュートフリートを停止すれば変更可能で、ヘッドノードも変更可能のアップデートポリシーとはなっています。

ただ、Argsセクションを単体での変更は検知できずにサポートされていないようです。

おわりに

カスタムブートストラップスクリプトの設定項目を引数にしてクラスターコンフィグから渡すことで汎用的にスクリプトを使いわませるメリットがありました。ですが、引数を変更してクラスターに更新かけようするとできないことがわかりました。この場合はカスタムブートストラップスクリプトにベタ書きで変更を加えると、クラスターに更新かけなくても設定を変更は可能です。従来どおりの方法なのですが、引数にパラメーターを切り出しても万能ではないということが判明したので良い勉強になりました。