
PagerDutyでスケジュールを削除できない時の対処法を確認してみた
こんにちは。たかやまです。
PagerDutyのスケジュールに登録していたユーザーを削除した際に、以下のようなエラーが表示されるケースがあります。
This schedule contains inactive users. Please remove the inactive users to ensure that incidents will reach all responders.

このスケジュール自体を利用していなかったので削除しようとしたところ、以下のエラーが出て削除できませんでした。
Schedule can't be deleted if it's being used by an escalation policy snapshot with open incidents

エラー内容から直接的な対応方法まで辿り着くまで時間がかかったので、ハマりポイントとして記事にまとめておきます。
原因
エラーメッセージで検索してもすぐに対処方法が見つからなかったのですが、エスカレーションポリシーの公式ドキュメントに原因と対処方法がしっかり記載されていました。
Deleting Users and Schedules
When an incident triggers, PagerDuty records a snapshot of a service's escalation policy and uses this version throughout the entirety of the incident's lifecycle. This means you will not be able to delete any users or schedules that were on the escalation policy when the incident triggered. If you need to delete such a user or schedule, you have two options:
- Resolve any associated incidents.
- After making the desired changes to the escalation policy, reassign the incident to the same escalation policy. This records a new escalation policy snapshot and allows you to delete any users or schedules captured in the previous snapshot.
日本語訳 :
ユーザーとスケジュールの削除
インシデントがトリガーされると、PagerDutyはサービスのエスカレーションポリシーのスナップショットを記録し、そのバージョンをインシデントのライフサイクル全体で使用します。これは、インシデントがトリガーされた時点でエスカレーションポリシーに含まれていたユーザーやスケジュールを削除できないことを意味します。このようなユーザーやスケジュールを削除する必要がある場合は、2つのオプションがあります。
- 関連するオープンインシデントをResolveする
- エスカレーションポリシーからスケジュールを外した後、インシデントを同じエスカレーションポリシーに再アサインする(新しいスナップショットが記録され、旧スナップショットのスケジュールが削除可能になる)
https://support.pagerduty.com/main/docs/escalation-policies#escalation-policy-changes
対処法
ドキュメントの内容でほぼ解決していますが、こちらで実際に対処を試してみます。
上述の原因にも記載されているとおり、対処法は2つあります。
- 関連するオープンインシデントをResolveする
- エスカレーションポリシーからスケジュールを外した後、インシデントを同じエスカレーションポリシーに再アサインする(新しいスナップショットが記録され、旧スナップショットのスケジュールが削除可能になる)
一番楽な方法は1の方法ですが、インシデントを閉じれないケースもあるかと思います。
そこで今回は2の方法を試してみます。
エスカレーションポリシーの再アサイン
まず、エスカレーションポリシーを再アサインする前に、不要なユーザーやスケジュールを対象のエスカレーションポリシーから外しておきます。


削除対象のユーザーやスケジュールを外したら、インシデントを同じエスカレーションポリシーに再アサインします。
再アサインの方法はWeb App / Mobile App / API の3通り紹介されています。
ここではWeb App の方法を紹介します。
対象のインシデントを開いて Reassign ボタンをクリックします。

Reassigning incident to... と表示されたら、不要なユーザーやスケジュールを外したエスカレーションポリシーを選択して Reassign ボタンをクリックします。

不要ユーザーやスケジュールが関連付けらていたエスカレーションポリシーのインシデントに対して全て再アサインが完了したら、スケジュールを削除できるようになります。

最後に
PagerDutyでスケジュールを削除しようとした際に「Schedule can't be deleted if it's being used by an escalation policy snapshot with open incidents」というエラーが出た場合の対処法をまとめました。
エスカレーションポリシーからスケジュールを外していても、過去のスナップショットにオープンインシデントが紐づいていると削除できないという挙動はハマりポイントだと思います。
今回はエスカレーションポリシーの再アサインで対処しましたが、再アサインすると通知が再送されるデメリットがあります。
急ぎでなければ、該当のオープンインシデントが自然にクローズされるのを待ってからスケジュールを削除する方がスムーズな対応になりそうですね。
この記事がどなたかの参考になれば幸いです。
以上、たかやま(@nyan_kotaroo)でした。








