変更時に Handler を通知する
タスクから Handler を実行できるように接続します。
「変更時に Handler を通知する」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
必要なときだけ再起動する
毎回の実行でサービスを再起動するのは、無駄であり危険でもあります。handlerを使えば、実際に何かが変更されたときだけ再起動できます。
Handlerとは
handlerは、通常のタスクから実行を指示されるまで待機するタスクです。シグナルを待つアクションと考えるとよいでしょう。
notifyキーワード
notifyキーワードを使って、タスクとhandlerを接続します。値には、起動するhandlerの正確な名前を指定します。
- name: Copy nginx config
ansible.builtin.copy:
src: nginx.conf
dest: /etc/nginx/nginx.conf
notify: Restart nginx名前は一致させる
notify内の文字列は、handlerの名前と一字一句一致しなければなりません。タイプミスがあると、handlerは何も通知されず実行されません。
changedのときにnotifyされる
handlerが通知されるのは、そのタスクがchangedを返したときだけです。タスクがすでに望ましい状態であれば、何もトリガーされません。
okならnotifyされない
タスクがokを返すと、Ansibleはnotifyを完全にスキップします。そのため、2回目の実行では通常何も再起動されません。✅
1つのタスクから複数にnotifyできる
notifyにリストを指定すると、1つのタスクから複数のhandlerに通知できます。タスクに変更があったとき、指定した各handlerがキューに入ります。
notify:
- Restart nginx
- Reload firewall通知はキューに入る
通知してもhandlerがすぐに実行されるわけではありません。Ansibleはhandlerをキューに入れ、playのタスクが完了した後で実行します。
各handlerは1回だけ実行される
5つのタスクが同じhandlerにnotifyしても、そのhandlerは1回しか実行されません。Ansibleがキューに入った通知を自動的に重複排除するためです。
これでダウンタイムを減らせる理由
再起動が実際の変更時にだけ行われるため、変更のないサーバーはサービスを提供し続けられます。これが安全で冪等性のある自動化の核心です。
全体像
タスクがファイルを変更すると、notifyによって再起動がキューに入ります。タスクが完了した後、handlerがサービスを再起動します。無駄がなく、最小限の仕組みです。
クイックチェック
notifyされたhandlerが実際にトリガーされるのはいつでしょうか。
まとめ
notifyによってタスクとhandlerが接続され、変更があったときだけhandlerが実行されることを学びました。名前は一致させる必要があり、Ansibleは各handlerを1回だけ実行するようキューに入れます。🚀
よくある質問
「変更時に Handler を通知する」レッスンは無料ですか?
はい。「変更時に Handler を通知する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「変更時に Handler を通知する」で何を学びますか?
タスクから Handler を実行できるように接続します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「変更時に Handler を通知する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。