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 がリリースされ、バグ修正だけだから良いかと思っていたのですが、キャパシティ予約を利用しているユーザーにとっては痛いバグでした。一応日本語でアナウンスしておこうかと思い書きました。