zaki work log

作業ログやら生活ログやらなんやら

[Ansible / AAP / AWX] 通知機能を使ってジョブの実行状態をSlackへ通知する

AAP(Controller)とAWXには「通知」の機能の一つ(連携先の一つ)としてSlackにジョブの起動・終了(成功・失敗)等を通知することができる。
大まかな流れは以下の通り。

  1. Slackに投稿用botを用意しトークンを作成
  2. 作成したトークンを使ってAWX/AAPに通知リソース作成
  3. ジョブテンプレートに作成した通知リソースを設定

ここでは手動での各設定・リソース作成について紹介。

ちなみにAAPもAWXも同等。今回は以下の環境で確認。

  • AWX 24.4.0
  • AAP Controller 4.5.0

Slackに投稿用botを作成

api.slack.com

Slack Appsのページにアクセスし、[Create New App]押下

アプリの作成を手動かマニフェストファイル使用かを選択するので、ここは[From scratch]を選択。

「New app & choose workspace」画面で「App Name」にbot名(通知が行われる際にここで入力した名前でSlack投稿が行われる)と、対象ネームスペースを入力して[Create App]押下

権限設定

「Basic Information」画面に遷移するので、左側メニューの「OAuth & Permissions」を開いて画面中部の「Scopes -> Bot Token Scopes」にある[Add an OAuth Scope]ボタン押下し、選択肢から chat:write を選択。(calls:writeと間違えないこと)

ワークスペースbot追加

セットできたら同じ画面の最上部にスクロールして[Install to Workspace]押下し、ワークスペースへの権限リクエストを許可する。

これでSlackのワークスペースにアプリ(bot)が追加される。

Slack Appsのページには、設定用のトークンが表示されているのでコピーしておく。

チャンネルへbot追加

Slackアプリで作成したbotのユーザー詳細を開いてユーザー名押下し、「チャンネルにこのアプリを追加する」から通知を投稿するチャンネルを設定する。

AAPの通知設定

通知の作成

メニューの「管理 -> 通知」から。 [追加]を押下しタイプにSlackを選択し、追加の設定項目に以下を入力し保存。

  • チャネル名: 対象ワークスペース内の通知先チャンネル名 (文言は「チャネル」になってる?)
  • トークン: Slack Appsページで生成したトークン文字列
  • 通知の色: Slack投稿時のカラー設定。ライトピンクであれば#f0a6b8のように入力🎀

通知リソース作成後は[テスト]押下で投稿のテストができる。

Slackへ飛んだ通知テストはこの通り。

テンプレートへの通知設定

例としてデフォルトの「Demo Job Template」の場合、テンプレートの設定で「通知」タブを開き、通知を行いたいタイミングのチェックを有効にする。

この設定が入ってる状態でジョブを実行すると、Slackへジョブの開始と終了(成功or失敗)が通知されるようになる。

ワークフローテンプレートの場合はジョブテンプレートと同様のオプションに加えて、承認のタイミングでも通知を設定できる。

ポイントとしては「通知設定を行ったテンプレートのみで通知が行われる」ということ。
運用上、手動で実行するジョブは通知不要だけど、スケジュールで自動実行してる特定のジョブのみで通知を行いたい、みたいなことが可能。
(ジョブ単位の設定なので、1つのジョブに対して手動でも自動でも実行するけど、自動実行の時だけ通知、は無理…のはず)

URL設定

デフォルトだと通知されたときのURLがhttps://towerhostとなっており、Slackのリンクからwebページへ遷移することができない。
これを正しく設定するには「設定 -> その他のシステム設定」から、「サービスのベースURL」を編集する。

これで設定したURLベースで表示されるようになる。


今回は手動のリソース作成について手順をまとめたが、プレイブックとモジュールを使ったリソース作成も可能。ただし「通知のテスト」に限っては(APIはあるけど)プレイブック用のモジュールは現状無い(uriモジュールでRESTを直接叩けばテスト可能)
そのあたりの構築自動化はまた別途…

また、通知のタイプはいろいろ用意されており例としてSlackを取り上げたが、例えばオンプレなどでSlack(というかインターネット)への接続に制限があるような環境であれば、他にはSMTPや、Webhookで作りこむこともできる。


ジョブの実行ログをリモート転送するなら以下

zaki-hmkc.hatenablog.com