AWS ParallelCluster v3.8.0-v3.13.1でキャパシティ予約期限切れ時のクラスター更新失敗問題と対処方法
はじめに
本題の前にキャパシティ予約とは
キャパシティ予約とは、特定の AZ 内で指定した数の EC2 インスタンスを予約し、必要な時に確実に起動できるようにするサービスです。CPU インスタンスと、GPU インスタンスではキャパシティ予約の名称が異なります。
- EC2 オンデマンドキャパシティ予約
- EC2 Capacity Blocks for ML
今回のバグの概要
AWS ParallelCluster v3.8.0 から v3.13.1 において、期限切れのキャパシティ予約を参照しているクラスターで更新系コマンドが失敗する問題が確認されています。
pclsuter update-clusterと、pcluster update-compute-fleetが使えないのは運用上つらく、なにも変更できないクラスターになってしまいます。
バグは修正済み
現時点で最新の v3.13.2 でこの問題は修正されています。
Release AWS ParallelCluster v3.13.2 · aws/aws-parallelcluster
対処方法
pclsuterコマンドの実行環境にパッチを充てるか、ParallelCluster v3.13.2 移行のクラスターへ移行です。
発生条件
今回の問題は以下の条件が揃った場合に発生します。
- ParallelCluster v3.8.0 ~ v3.13.1 を使用
- Slurm スケジューラーでクラスター Config 内の ComputeResources エントリーで CapacityReservationId を指定
- 参照しているキャパシティ予約が期限切れた
- 同じ ComputeResources エントリー内で InstanceType が未指定
Scheduling:
Scheduler: slurm
SlurmQueues:
- Name: queue1
# InstanceType が未指定
ComputeResources:
- Name: compute-resource-1
CapacityReservationId: cr-1234567890abcdef0 # キャパシティ予約の指定してかつ、期限が切れていると問題になる
期限切れのキャパシティ予約の ID を参照できないため、pclusterコマンドで更新時に設定を解析する際にエラーが発生するようです。
エラーメッセージの例
影響を受けるクラスターで更新コマンドを実行すると、以下のようなエラーが発生します。
Unable to parse configuration file. An error occurred when calling the DescribeCapacityReservations operation
対処方法
バグ修正済みの v3.13.2 へのアップデート
推奨される方法はpclusterコマンドを v3.13.2 以降にアップデートし、新規のクラスターに切り替えることです。
sudo pip install --upgrade aws-parallelcluster
クラスター自体のアップデートはできないため、新規のクラスターへの乗り換えが必要です。クラスターの移行が困難な環境もあることでしょう。次の回避策を利用できます。
v3.13.1 以前の既存クラスターの運用を続ける場合
- 過去バージョンにパッチが適用されているソースコードをダウンロード
- ソースコードからインストール
アップデートを試してみた
現在のバージョンは v3.13.0 です。
$ pcluster version
{
"version": "3.13.0"
}
integ-tests-[VERSION]のブランチが用意されているため、ここからソースコードを取得してきます。

v3.13.0 のソースコードを取得してインストールまでやってみました。
$ wget https://github.com/aws/aws-parallelcluster/archive/integ-tests-3.13.0.zip
$ unzip integ-tests-3.13.0.zip
$ cd aws-parallelcluster-integ-tests-3.13.0/
$ pip install ./cli
Processing ./cli
--- 省略 ---
Successfully installed aws-parallelcluster-3.13.0
パッチが適用されたバージョンが正常にインストールされました。バージョン番号は同じですが、内部的にバグ修正が適用されているようです。
$ pcluster version
{
"version": "3.13.0"
}
キャパシティ予約が切れている環境は用意できなかったため、検証はここで終わりです。
まとめ
AWS ParallelCluster v3.8.0 ~ v3.13.1 でキャパシティ予約を使用している場合、期限切れの予約が原因でクラスター更新が失敗します。今回のバグは v3.13.2 で修正されているため、最新バージョンへのアップデートか、過去バージョンであれば修正済みコマンドをインストールし直しが必要です。キャパシティ予約を使用していない方は、このバグの影響は受けませんのでご心配なく。
おわりに
v3.13.2 がリリースされ、バグ修正だけだから良いかと思っていたのですが、キャパシティ予約を利用しているユーザーにとっては痛いバグでした。一応日本語でアナウンスしておこうかと思い書きました。







