【入門編】Ansible Callback Pluginの活用術!実行ログをSlackやTeamsにリアルタイム通知させる設定方法 – インフラ構成管理(IaC)活用バイブル

こんにちは。現場の最前線でインフラを「コード」として飼い慣らしているエンジニアです。

Ansibleを使い始めると、誰もが一度はこう思うはずです。「Playbookを実行するたびに、わざわざターミナルに張り付いて結果を監視するの、時間の無駄じゃないか?」と。

大規模なデプロイになればなるほど、実行時間は数十分、時には数時間かかることもあります。その間、SlackやTeamsに「今どうなったか」が自動で流れてきたら、どれほど心強いか。

今日は、Ansibleの「Callback Plugin」という深淵に触れ、あなたのインフラ運用を「監視される側」から「自律的に報告する側」へ進化させる技術を伝授します。

—

1. Ansible Callback Pluginとは何か?

一言で言えば、「Ansibleのイベントをフックして、任意の処理を差し込むプラグイン」です。

AnsibleはPlaybookを実行中、タスクの開始、失敗、成功といった無数の「イベント」を発生させています。Callback Pluginは、これらのイベントを検知し、外部APIを叩いたり、ログを整形したりする機能を持ちます。

これを使えば、`ansible-playbook` コマンドを打った瞬間から、裏側でチームのSlackチャンネルにリアルタイムで進捗が通知される仕組みが作れます。

—

2. 最短で実装する:Slack通知プラグインのセットアップ

まずは、最も利用頻度が高い「Slackへの通知」を例に解説します。

手順①:ディレクトリ構成を整える

Ansibleは、プロジェクトディレクトリ内の `callback_plugins` フォルダを自動的に認識します。

.
├── ansible.cfg # 設定ファイル
├── site.yml # 実行するPlaybook
└── callback_plugins/ # ここにプラグインを置く
└── slack_notifier.py # 自作プラグイン

手順②:プラグインコードを書く

以下のコードを `callback_plugins/slack_notifier.py` として保存してください。これは、タスクが失敗したときだけSlackに通知を送るシンプルなスクリプトです。

import json
import requests
from ansible.plugins.callback import CallbackBase

class CallbackModule(CallbackBase):
CALLBACK_VERSION = 2.0
CALLBACK_TYPE = ‘notification’
CALLBACK_NAME = ‘slack_notifier’

def __init__(self):
super(CallbackModule, self).__init__()
# SlackのWebhook URLをここに記述(環境変数から読み込むのがベスト)
self.webhook_url = “https://hooks.slack.com/services/YOUR/WEBHOOK/URL”

def v2_runner_on_failed(self, result, ignore_errors=False):
“””タスクが失敗したときに発火するメソッド”””
task_name = result._task.get_name()
host = result._host.get_name()
msg = f”❌ Error on {host}: {task_name}”

# Slackへ通知
requests.post(self.webhook_url, json={“text”: msg})

def v2_playbook_on_stats(self, stats):
“””Playbook終了時にサマリーを報告”””
# ここに成功/失敗の集計処理を書くとさらに便利になります
pass

—

3. 設定ファイルの有効化(ここが重要!)

プラグインを置いただけでは動きません。`ansible.cfg` に以下の記述を追記し、Ansibleに「このプラグインを使っていいよ」と教える必要があります。

[defaults]
プラグインのパスを指定
callback_plugins = ./callback_plugins
読み込むプラグインを有効化
stdout_callback = default
callback_enabled = slack_notifier

—

4. 動作確認:HelloWorldを飛ばす

わざと失敗するPlaybookを作って、Slackに通知が飛ぶか確認しましょう。

test.yml:

  • hosts: localhost

tasks:

  • name: 失敗するタスクのテスト

command: /bin/false # わざと失敗させる

実行してみます:

ansible-playbook test.yml

ターミナルでエラーが出ると同時に、Slackに「❌ Error on localhost: 失敗するタスクのテスト」という通知が届いたはずです。これが確認できれば、あなたはもうAnsibleの自動化の第一歩をクリアしました。

—

5. 先輩からのアドバイス:運用を楽にするための極意

この技術をマスターすると、さらに次のステップが見えてきます。

1. 環境変数の活用: Webhook URLをコードに直書きするのは絶対にNGです。`export SLACK_WEBHOOK_URL=…` のように環境変数から読み込むように設計してください。
2. 成功時は通知しない: 成功通知を全てSlackに流すと「通知疲れ」を起こして、本当に重要な失敗を見落とします。「失敗した時だけ」に絞るのが、運用のプロの流儀です。
3. チームの文化を作る: この仕組みを入れると、チームメンバーが「あ、あのデプロイ今コケたんだな」と瞬時に察知できるようになります。障害対応の初動速度が劇的に上がりますよ。

インフラは「自動化して終わり」ではありません。「いかに人間が楽をし、いかに見落としを防ぐか」という設計思想こそが、SREの本質です。

まずはこのCallback Pluginで、あなたのインフラを「おしゃべりなインフラ」に変えてみてください。日々の作業が驚くほど快適になることをお約束します。

何か詰まったら、いつでも聞いてくださいね。応援しています。

タイトルとURLをコピーしました