Blog

GASでドメイン有効期限を監視したい!GASならドメイン監視とドメイン更新の橋渡しが可能なのでは?

札幌オフィス清掃員 技術ブログ

こんにちわ。久々の札幌オフィス清掃員です。

みなさんはドメイン有効期限の監視はどのようにしていらっしゃるでしょうか。
レジストラからのメールで充分という方もいれば、それは見落とすので有償サービスで監視しているという方もいらっしゃるでしょう。
今回コルシスでは、ドメイン有効期限監視のやり方を変えてみたのでその辺りについて少し書いてみたいと思います。

これまで

今までコルシスでは、ドメイン有効期限とSSL証明書期限の監視のために、常時起動しているEC2インスタンス上にCron+Bash+Perl+whoisコマンド+certコマンド などで監視し、期限1ヶ月前になったらSlackの特定チャンネルに通知を送るという方法をとっていました。いやぁ複雑。

ドメイン有効期限もSSL証明書期限も同じように「ドメイン名」をキーとして外部に問い合わせを行うので、ドメイン名リストを使いまわしたほうが良いだろうという観点で1つのスクリプトで監視を行っていましたが、SSL証明書期限は監視したいがドメイン期限は監視したくないドメインがあったりと、いささか使いづらさを否めない感じになってきました。

また、監視対象ドメインリストもサーバ上に保管されているせいで、社内の誰でも簡単にドメインリストを更新できるという状態ではありませんでした。

そして、最重要課題とも言えるのが、ドメインを監視する役目の人とドメインを更新する役目の人が別である事が組織内ではよくある事であるところです。

ドメインの更新は支払いが発生するため、ドメインリストはエンジニアではなく、管理チームで管理したかったりします。
しかしながら、ドメイン有効期限監視の仕組みは意外と難しくなっていたりするものです。何故ならインフラエンジニア主導でこのシステムを作るから。
ITに詳しくない管理チームでも簡単に設定変更ができるドメイン有効期限監視の仕組みを提供したい。
そんな想いから着手してみました。

レジストラ側の設定を自動更新設定にしていても、有効期限日が到来するまでWhois情報が更新されなかったりもしますが、自動更新設定になっている事を確認済みであるのにも関わらず毎日アラートが通知されるのはうっとおしいですよね。要らぬ不安を社内に与えてしまいます。
この辺りのレジストラ側の設定値をチェックし、通知が不要である事を管理チーム側で設定する事ができる。そんな監視ツールを目指しています。

課題解決のための仕様

  • GoogleSpreadSheet + GAS にて構築することで、ドメインリストの更新を容易にする
  • 自動更新設定になっていることを確認したフラグもSpreadSheetに持たせる事で、以降の通知の対象外とする
  • SSL証明書期限の監視についてはちょっとあとまわし・・・。とりあえずドメインだけ。

このような方針で作っていくことにしました。

この仕様の問題点

検討する中で実装課題となったのは

  • GAS上でwhoisコマンドが使えるわけではないので、whoisコマンドを代行するHTTPインタフェースが必要になる

という点でした。これについてはこれらの解決候補がありました。

  1. AWS lambda や AWS ECS + API Gateway で解決
  2. 全レジストラがRDAPに対応するまで待つ
  3. 善意の有志が公開されている whoisproxy サービスを利用する

1 が有力候補でしたが、面倒くさいなというのもあって一旦保留しました。
2 は完全他力本願だしきっとあと2年くらいはかかるでしょう。
ということで今回は3を選択しました。

whoisproxy.info | chanshige's Domain Search

今回はこちらを使わせて頂きました。勝手に使って良いのかわかりませんが、本当に便利ですね。
こういったサービスを無償で提供頂いている方々には頭が上がりません。

成果物

ここまで長々と書きましたが、できあがったものはこちらになります。

colsis-sapporo-cleaner/gas_domainchecker

つかいかた

このような内容のGoogleSpreadsheetを作成します。
ドメイン列には監視したいドメイン名を列記します。

ドメイン監視リスト_-_Google_スプレッドシート.png

このSpreadSheetから、「ツール」→「スクリプト エディタ」を開き、開いた画面の左側の「プロジェクトの設定」から、スクリプトIDをコピーします。

gas_domainchecker_-_プロジェクトの設定_-_Apps_Script.png

ソースコードを clone し、プロジェクトルートの .clasp.json ファイルの scriptId 部分に、コピーしたIDを記述します。

.clasp.json

{
"scriptId":"ここにペースト",
"rootDir":"./dist"
}

また、スクリプトのプロパティにこれらの設定値を入れておきます。

gas_domainchecker_property.png

現状のGASでは「以前のエディタを使用」リンクから旧バージョンのエディタを開かなければスクリプトプロパティを入力できませんのでこの点ご注意ください。

npm install にて依存モジュールをインストールしたら、yarn deploy などで先程のGoogleAppsScriptプロジェクトにデプロイされます。

あとは実行ボタンを押すと、スプレッドシートにドメイン有効期限と状態が書き込まれます。

このスクリプトを時間主導のトリガーに登録することで、自動ドメイン期限チェックができるようになります。

下図のような通知が設定したSlackチャンネルに投稿されます。

Slack_alert.png

注意点

whois情報のparseについて

src/Whois.ts ファイルを見て頂くとおわかりいただけると思いますが、取り急ぎ弊社で必要なフォーマットにしか対応していませんので、もしうまくパースされない場合にはご自身でよきようにパーサーを書いて頂く必要があります。

whoisproxy について

whoisproxy.info 様に依存したコードとなっておりますので、こちらのサービスが停止されている場合や障害が発生している場合などは動作しないものとなっております。ご了承ください。

免責事項

ここで公開している内容について、一切の責任を負いませんのでご利用の際は自己責任にて、よくご確認の上でご利用ください。

まとめ

いかがだったでしょうか。

インフラの監視の中でもドメイン有効期限はつい忘れがちで、また、監視しようとすると意外とコストが高くなりがちなものだと思います。
今回はGASを利用する事でメンテナンスの煩雑さを軽減し、金銭的コストも抑えるという事にチャレンジしてみました。

すでに同じようなかたちで監視を行っている方も多いとは思いますし、AWS Lambda や ECS での実行など、クラウドサービス同士の連携で汎用性を高めたりといったことが考えられるのもクラウドサービスの恩恵ですね。良い時代になったと思います。

今後はこのスクリプトを更にアップデートして、SSL証明書期限も同時に監視したりといったことが行えるようにしていきたいと思っています。

さて、コルシスではこのような改善を自発的に行える方を随時募集中です。
下記記事なども参照頂き、我こそはという方は是非ご連絡を頂けますと幸いです。

わたしたちと一緒に、働きませんか?

一覧にもどる