ServiceNowのPDI寝かさないチャレンジ


## はじめに
この記事は、ServiceNowのPersonal Developer Instance（PDI）を効率的に活用するためのTipsです。ServiceNowの知識を駆使してシステムの制約に挑む実践記録でもあります。

要は「PDIずっと起動させたい」っていうだけです。

## Personal Developer Instance（PDI）とは？
PDIはServiceNowの開発者向け環境で、開発者がアプリケーションの開発やテストを行うためのお試し用のインスタンスです。ServiceNowの経験者にとっては日常的な仕組みですが、改めて考えてみると数分でほぼフル機能のServiceNowインスタンスを無償で利用できるのは驚くべきことです。太っ腹です。


https://developer.servicenow.com/dev.do#!/guides/utah/developer-program/pdi-guide/personal-developer-instance-guide-introduction
【Personal Developer Instance (PDI) Guide】

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240742/7ccaaa79-e83a-9ad0-4f26-093deea058a4.png)


## 悲しきPDIの制約
そんな太っ腹なServiceNowのPDIですが、残念なことにリソース節約のための制約があります。
よく考えてみればそりゃそうですよね。

　①10日間Update Setの更新がないとインスタンスが消去される
　②無操作状態が7～9時間（経験測）続くとスリープ状態になる

 
つまり、朝起動しても夕方には使用できなくなり使おうと思ったらスリープしているので、
常に毎回再起動をする感覚に陥ります。使いたいときに使えない。それがPDI。


さらに 今年あたりから「消去されたインスタンスは復元できない」というルールまで追加されたので、ますます起動し続ける対策が必要になったのも事実です。



この２つの制約に立ち向かうべく、私はServiceNowの知識を大いに活用したいと思います。
各制約に対してそれぞれの観点で対応方法を考えました。順番に見ていきましょう。



## チャレンジその１：常にUpdate Setを更新する
まずは、制約「①10日間Update Setの更新がないとインスタンスが消去される」の対策です。

このチャレンジは簡単です。フローデザイナーを使用して、1時間ごとに実行されるスケジュールを作成し、作成したUpdate Setのディスクリプションに「Test」と記述するだけです。



▼まず、Update Setを個別で作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240742/5624c642-f7db-c139-8ce1-35e2f4e438c1.png)


▼Flow Designerで1時間ごとに起動するジョブを作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240742/6fd0998a-9368-8a20-9f48-b2070991779a.png)

▼先ほど作成したUpdate Setを指定して、それに「Test」と書き残して終わるジョブにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240742/6ae426e8-eb71-d8db-e0d0-f3e271110b7b.png)


▼忘れずに「Active」ボタンを押して、有効（グレーアウトされている状態）にしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240742/21a5f339-abef-8091-5bae-94f29e733936.png)



▼実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240742/4050afd4-cba7-f72f-4ad9-831e87cccb64.png)

この操作により、PDIを起動さえしてしまえばUpdate Setが更新されるのでインスタンスが消去される確率が大幅に減ります。あと、1時間ごとに稼働したログを見られるので、いつスリープしたかを把握する指標にもなりました。


## チャレンジその２：インスタンスのスリープを回避する

次は「②無操作状態が7～9時間（経験測）続くとスリープ状態になる」の制約に対する対策を検討していきます。

このチャレンジは難しくまだ正確な方法を見つけられていません。現在は以下の方法を試していて、仮の状態で対応できている状態です。


### インスタンスのスリープを回避①「レコードや設定の更新を続ける」
Update Setの連続更新と同じ要領でインシデントを更新したり、使用していない設定の更新を連続で行いました。しかし、これは効果がありませんでした。インスタンスは時間が経過するとスリープ状態に入りました。

▼使わないカタログアイテムのDescriptionを更新し続けるジョブを作成（失敗）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240742/53e26760-eb91-84d7-0d90-28b1de522d84.png)


### インスタンスのスリープを回避②「ATFを連続実行する」
ATF（Automated Test Framework）はユーザーの操作を模倣します。この操作によりインスタンスが「ユーザーがログインしている」と勘違いしてくれると思い、1時間ごとに動くATFスケジュールを用意しました。しかし、結果は期待に反して、時間が経過したらインスタンスはスリープ状態に入ってしまいました。残念でしたがうまくできているなと感心しました。


▼1日1回起動するATFを24個作ったった（失敗）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240742/57e95cb1-27e6-b5dc-e47a-a3459b3c5dfe.png)



### インスタンスのスリープを回避③「動的ページをずっと表示する」
ServiceNowの画面には、動的な要素を持つページがいくつかあります。そのうちの１つ（実は他は知らん）である「Client Test Runner」は、ATFの進捗状況を確認するツールで、テストを実行していないときもアクティブな状態を保ちます。


通常の画面でログインしている場合、時間が経つとセッションが切れますが、
この画面を開いておくことで、セッションが切れないという特性を活用しました。


▼Client Test Runner（いちおう成功！）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240742/867f0d19-0a58-b4f4-57ba-1a48afca071b.png)


ただ残念なのは、この方法を維持するには「PCとブラウザをずっと起動しておく必要がある」ということです。うっかり忘れてしまうと、またスリープしてしまいます。




## 実績とまとめ

最初にお伝えした2つの制約を乗り越えるためには以下の方法が有効でした。
- 10日間Update Setを更新しないとインスタンスが消去される → フローデザイナーで定期更新
- 無操作で7～9時間後にスリープする → Client Test Runnerでセッション維持

これらの方法により、PDIを長期間起動し続けることが可能になりました。私の経験では、1か月以上スリープせずに維持できてます。

ただし、ServiceNowのリソース節約を阻害する目的での使用は避けてください。
またPDIを起動したまま放置するとセキュリティリスクがあるため、自己責任での利用をお願いします。

## 気づいたこと
この検証をする過程で、「Client Test Runnerでずっとセッションだけ維持して起動し続けたら、インスタンスも消去されないんじゃないか？」と思いました。なのでUpdate Setを更新しない時期がありましたが、その場合は結果的に「起動したままインスタンスが突然消去される」という事態に見舞われました。この経験は、チャレンジを通じて得られた貴重な知見です。こわい。


## 今後
Client Test Runnerを起動しておくためには、PCとブラウザも常に起動しておく必要があります。これは少々面倒なので、「PDIを単体で継続的に稼働させる方法」を模索し続けたいと考えています。

今後も「PDI寝かさないチャレンジ」を続けていきたいと思います。