• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to footer

株式会社ハイファイブクリエイト

東京都を拠点にWebサイト制作やシステム構築、WordPress保守管理やウェブコンサルティングを提供。

  • SERVICE
  • ABOUT
  • WORKS
  • BLOG
  • NEWS
  • CONTACT
ホーム / ブログ / TIPS / Aレコードに変更があるかどうかを自動チェックし変更があればSlackに通知するプログラム

Aレコードに変更があるかどうかを自動チェックし変更があればSlackに通知するプログラム

池田祐太郎 | 2023年10月13日 公開 コメントを書く

契約先のホスティングで利用しているサーバーを利用し続けることが困難になってしまったため、新仕様のサーバーへ移行しますという連絡がありました。

ネームサーバーをレンタルサーバーに設定しており、DNSレコードの設定を行っていないような通常のウェブサイトであれば問題はありませんが、CDNを設定しているような場合はDNSレコード設定の変更が必要です。

今回はホスティング先で新サーバーに移行後にできるだけダウンタイムを避けるため、DNSのAレコードが設定変更されたか自動でチェックし、変更された場合にSlackのWebhookを利用して特定のチャンネルに通知するプログラムをご紹介します。

目次

  • 1 CDNを利用している場合、新サーバーへの移行後にCDN側の設定変更をしないといけない
  • 2 IPアドレスが変更されているかを自動でチェックする
    • 2.1 Pythonで名前解決するにはdnspythonモジュールをインストール
    • 2.2 自動で実行されるようにcronジョブに登録する
    • 2.3 cronが動かない場合
  • 3 IPアドレスが変更されていた場合Slackに通知するように設定
    • 3.1 Slack からアプリ作成しWebhook URLを取得
    • 3.2 Slack に通知を行うコード
    • 3.3 Aレコードの変更があったらSlackに通知する
  • 4 サーバー変更の度にIPアドレスを変更しなくていいようにCNAMEの運用が望ましい
  • 5 追記: サーバー移行時、IPアドレスが変わったタイミングで正しく通知に成功

CDNを利用している場合、新サーバーへの移行後にCDN側の設定変更をしないといけない

新サーバーへの移行はホスティング側で実施されるため、こちらでは特にウェブサイトの移行作業(マイグレーション)等は必要ありません。新サーバーに移行後、SSHやFTP等接続方法は変更の必要があります。

CDNを利用してAレコードを設定している場合、新サーバーへ移行後はIPアドレスが変わるため、変更後のタイミングで新しいサーバーのIPアドレスに変更する必要があります。結構手間なんですよね……。

IPアドレスが変更されているかを自動でチェックする

ホスティング側でおおよその移行スケジュールが発表されていたとしても、正式に切り替わるタイミングはわかりません。

そこで、DNSのAレコードに設定されているIPアドレスが変わったかどうかを定期的に自動でチェックして、もし変更されていたら通知されたら便利だなと思い、そのコードをご紹介します。今回はローカルマシン(mac)で実行します。プログラム言語はPythonを利用しました。

import dns.resolver

previous_value = "既存のIPアドレス"

def check_dns_change():
    domain = "example.com"
    record_type = "A"
    
    result = dns.resolver.resolve(domain, record_type)
    for val in result:
        if val.to_text() != previous_value:
            return False
    return True

Pythonで名前解決するにはdnspythonモジュールをインストール

上記を実行する前に、Pythonのdnspythonモジュールをインストールしておきましょう。

pip install dnspython

インストール後、上記コード内の「既存のIPアドレス」に現在設定されているIPアドレスを設定し、”domain”箇所に参照したいドメインを設定します。

自動で実行されるようにcronジョブに登録する

cronに登録することで、自動でDNSの変更がされているかの監視ができます。今回はローカルのマシン(mac)上で実行するためcronを利用しましたが、Windowsの場合はタスクスケジューラを利用すれば同じことが実現できます。

Macでcronジョブを設定するには、ターミナルを開いて以下の手順に行います。

  1. crontab -e コマンドを実行してcronジョブを編集する。
  2. ターミナル上でエディタが開いたら、iを押して編集モードに変更し以下を入力
    • * * * * /usr/bin/python3 /path_to_your_script/your_script.py
    • “/usr/bin/python3″はPythonの実行環境を設定します。この場合はシステムのPythonを利用します。
    • “/path_to_your_script/your_script.py”は実行したいPythonファイルのフルパスを設定します。

これにより、cronが1分ごとに実行されます。もし5分ごとに実行したい場合は以下のように設定すればOKです。

*/5 * * * * /usr/bin/python3 /path_to_your_script/your_script.py

cronが動かない場合

cronを設定したにも関わらず動かない場合、ログをチェックします。macの場合、/var/log/system.logにcronジョブのログが記録されます。ターミナルから grep cron /var/log/system.log とコマンドを叩くと、cronジョブのログを検索できます。

今回は You have new mail in /var/mail/ユーザー名 と表示されました。よって、catコマンドで表示させてみます。ログファイルには該当のpythonファイルに対して、[Errno 1] Operation not permitted とありました。これはcronに権限がないためエラーとなっています。macの場合、フルディスクアクセスをcronに対して設定することで解消できます。

  • システム環境設定→プライバシーとセキュリティ→フルディスクアクセス
  • 「+」より追加し、/usr/sbin/cron を設定する。
cronにフルディスクアクセスを付与した。

これでcronから1分ごとに自動実行できるようになりました。

IPアドレスが変更されていた場合Slackに通知するように設定

IPアドレスが変更されていた場合、通知してもらうようにしたいです。すぐに知れないと意味ないですからね。今回はSlackを設定します。Slackには便利なWebhook URLが用意されており、これを利用してSlackへ通知します。

Slack からアプリ作成しWebhook URLを取得

Slackの公式ページから、Webhook URLを取得します。アプリがまだ未作成の場合は「Create your Slack app」からアプリを作成します。アプリ作成時にはアプリ名とアプリを連携するワークスペースを選択します。

アプリ名とワークスペースを設定し、アプリを作成する。

アプリ作成後、Webhook URLが自動的に作られました。めっちゃ簡単。

簡単にWebhook URLが作られた。

このURLをコピーしておきましょう。

Slack に通知を行うコード

PythonでSlackに通知を行うコードは以下です。

import requests
import json

def send_slack_message(webhook_url, message):
    payload = {"text": message}
    requests.post(webhook_url, json.dumps(payload), headers={'Content-Type': 'application/json'})

if not check_dns_change():
    send_slack_message("YOUR_SLACK_WEBHOOK_URL", "DNS has changed!")

「YOUR_SLACK_WEBHOOK_URL」に先程コピーしたWebhook URLを入れます。早速実行してみると、Slackに正しく通知されました!

Aレコードの変更があったらSlackに通知する

先程コードと組み合わせてみます。さらに、変更したIPアドレスも表示するようにしました。

import dns.resolver
import requests
import json

previous_value = "既存のIPアドレス"

def check_dns_change():
    domain = "example.com"
    record_type = "A"
    result = dns.resolver.resolve(domain, record_type)
    for val in result:
        current_ip = val.to_text()
        if current_ip != previous_value:
            return current_ip
    return None

def send_slack_message(webhook_url, message):
    payload = {"text": message}
    requests.post(webhook_url, json.dumps(payload), headers={'Content-Type': 'application/json'})

new_ip = check_dns_change()
if new_ip:
    send_slack_message("YOUR_SLACK_WEBHOOK_URL", f"DNS has changed! New IP: {new_ip}")

cronジョブで自動実行され、画像のようにIPアドレスも一緒に変更してくれるようになりました。

サーバー変更の度にIPアドレスを変更しなくていいようにCNAMEの運用が望ましい

ここまでして準備していたのですが、CDNにCloudflareを利用している場合はCNAME Flattening機能が利用できるため、そもそもAレコードを利用せずにCNAMEを利用しておくことで、IPアドレスが変わっても自動的にサーバーが参照され手間がないということがわかりました。早く知りたかった……笑

参照: CNAME flattening · Cloudflare DNS docs

ということで、Cloudflareを利用している場合はAレコードを削除してCNAMEレコードを利用するようにしましょう。

それ以外のCDNで直接Aレコードを設定しないといけない場合は今回のように自動チェックシステムを構築し、変更があったら即手動で新規IPアドレスに変更するという方法が無難です。

ちなみに、今回作成したコードはすべてChatGTPに作成してもらいました。ChatGPT凄すぎる……。

追記: サーバー移行時、IPアドレスが変わったタイミングで正しく通知に成功

サーバー移行の当日、予定時間の数分前にcronが動くようにこのプログラムを起動させました。作業開始時刻から約3時間程度経過し、無事通知が届きました。書いたプログラムは正しく動作したこととなります。

10時の移行開始前にテストを実施。その後12:55にIPが変更された通知を受信した。

ただ、そのタイミングではまだ完全にサーバー移行は完了しておらず、ウェブサイト上のJSが正しく参照できていない状況。各ページへのリンクも機能しておらず404でした。

その後夕方頃にホスティング会社からメールがあり、無事移行完了したとのこと。動作確認を行い問題有りませんでした。その後FTPやSSHの設定とアクセス確認を行い、移行完了。お疲れ様でした。

メールコンサルティング
WordPress保守管理サービス

カテゴリTIPS 関連タグ:ChatGPT, Python

池田祐太郎

WordPress の構築・保守を10年以上にわたって手掛けており、主に小〜中規模のコーポレートサイト・ECサイト・ブランドサイト等の企画・開発・保守・コンサルティングなどを行ってきました。2012年にハイファイブクリエイトを創業し、現在は WordPress の保守やコンサルティング、ディレクションや開発業務などを担当しています。 プロフィール詳細

Reader Interactions

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

For security, use of Google's reCAPTCHA service is required which is subject to the Google Privacy Policy and Terms of Use.

この記事と関連する記事

画像生成AIのFireflyがバージョン2にアップグレードされたのでDALL-E 3と比較する
2023年11月2日
タグ: ChatGPT, DALL-E, firefly
カテゴリー: 仕事のこと
DALL-E 3 で WordPress の公式ロゴを入れた画像を大量に生成してみた
2023年10月19日
タグ: ChatGPT, DALL-E
カテゴリー: 仕事のこと
DALL-E 2を超える画像生成力を持つDALL-E 3を試してみた
2023年10月6日
タグ: ChatGPT, DALL-E
カテゴリー: 仕事のこと

最初のサイドバー

WordPress保守管理サポート

Search

最近の投稿

  • 2024-2025年末年始の営業のご案内
  • WordPressのプラグイン自動更新のロールバック機能が正しく動くのか確認してみた
  • 遅延読み込み開始させる画像を変更させるWordPressカスタマイズ
  • WordPressで特定の画像やアイキャッチ画像をlink rel=”preload”に設定する
  • WordPressのプラグインがどのくらい表示速度を重くさせるのか22個のプラグインで検証

カテゴリー

  • CSS初心者
  • HTML初心者
  • TIPS
  • WooCommerce
  • WordPress
  • エステサロン
  • お知らせ
  • キュレーション
  • サイトマップ
  • システム会社
  • デベロッパーツール入門
  • ブログ
  • ホームページ制作
  • ホームページ制作無料講座
  • メール
  • モバイル
  • 仕事のこと
  • 制作実績
  • 整体院
  • 美容院
  • 雑感

タグ

ai Android ChatGPT CMS css DALL-E elementor gmail google workspace Gutenberg HTML iPhone jQuery Mac Photoshop php SEO SNS ssh SSL Webサイト高速化 Windows WordPress WordPressカスタマイズ WordPressテーマ WordPress構築調査 WPRocket アクセス解析 クラウドソーシング サイト引っ越し サブスクリプション サーバー ショートカットキー スマホサイト スマートフォン セキュリティ ツール ブログ プラグイン マーケティング リニューアル レスポンシブWebデザイン 保守管理 最適化 集客するサイト構築

アーカイブ

CONTACT

お問い合わせはこちら

Footer

  • PRIVACY POLICY
  • 情報セキュリティ基本方針
  • 特定商取引法に基づく表示
  • 転載/引用

© 2025 high five create All rights reserved.