はじめに
初めまして。 ニフティ株式会社 会員システムグループの川上拓哉です。 今回は、私の所属しているチームでの運用業務を、Webサービス「Zapier」とSlackを用いてChatOps化をしてみた、という記事です。Zapierとは
Zapierとは様々なクラウドサービス、アプリ間をノーコードで連携することができるSaaS です。 クラウドサービスのイベントやスケジュール(Trigger)をもとに、特定の操作(Action)を実行させることができ、煩雑な操作の自動化に一役買うようなサービスとなっています。 設定、編集もGUIで直感的に操作できるため、導入と実装がとても簡単です。Slackから実行したい操作
今回ChatOps化したい操作・作業は、毎朝実施している作業です。 クラウド上の自社サーバーにあるバッチを、サーバーに入って手動で実行しています。 毎回毎回サーバーに直接入らなければならず、サクッとSlackから実行できると便利そうですね。 Slackから直接サーバーの操作はできませんが、Zapier経由でSlackをトリガーにしたさまざまな操作が可能なので、いくつか組み合わせることで今回のChatOpsの一部を実装できそうです。構成図
ChatOpsのシステム全体では以下のような構成にしていきます。
- 運用者がSlackワークフローを実行しSlackに特定のメッセージを投稿すると、Zapier が起動して AWS S3 のバケットにリクエストファイルが置かれます。(今回はこちらの処理について説明します。)
- サーバー側で定期実行されるシェルスクリプトが、リクエストファイルを検知し、バッチを自動実行してくれます。
今回使う機能
今回は、「指定のSlackチャンネルにメッセージが投稿」されたら「AWS S3の特定バケットにテキストファイル(リクエストファイル)を作成」する機能(Zap)を活用していきます。 ZapはTriggerとActionという要素でで構成されており、今回活用していくZapだと以下のようになります。- Trigger:指定のSlackチャンネルにメッセージが投稿される。

- Action:AWS S3の特定バケットにリクエストファイルを作成する。

Zapier Tips
実際に編集していきましょう。 最終的には、実行結果をSlackに通知もしたいので、以下のような構成のZapにしました。- Trigger:Slackにメッセージが投稿される。
- Action:Slackメッセージに特定のキーワードがあった場合に続行する。
- Action:Slackメッセージの投稿時間をフォーマットして抽出する。
- Action:AWS S3バケットに、名前に投稿日付を含めたリクエストファイルを作成する。
- Action:実行結果をSlackに通知する。

チャンネル一覧に出てこないSlackチャンネルを指定したい
Slackのチャンネルをチャンネル名で検索してもでてこないことがあります。そんなときは「SlackチャンネルをIDで指定」しましょう。 SlackチャンネルID の確認方法は割愛いたしますが、ZapierのSlackチャンネル選択画面にて「Custom」を選択しIDを入力することで指定することが可能です。
特定のメッセージが投稿された時のみ処理をしたい
チャンネルに投稿されたメッセージ全てで発火してほしくない。そんなときは「キーワードを指定して続行」させましょう。 Zapierの「Filter」の中の「Only continue if…」を使います。
日時のフォーマットやタイムゾーンを変更したい
今回、ChatOps実行時の日時を取得してリクエストファイルの名前に含めることにしました。 Slackに投稿されたメッセージから時間が取得したいときは、「Format」の「Date / Time」を活用しましょう





無事ChatOps化できました!
今回作成したZapを使い、SlackからリクエストファイルをS3に作成することができました。加えてサーバーからシェルスクリプトでリクエストファイルを検知することでChatOpsを実装することができました。 ZapierにはSlack、S3の他にも連携サービスがたくさんあるので、みなさんもZapierを活用してみてください。We are hiring!
ニフティでは、さまざまなプロダクトへ挑戦するエンジニアを絶賛募集中です!ご興味のある方は以下の採用サイトよりお気軽にご連絡ください! Tech TalkやMeetUpも開催しております!
こちらもお気軽にご応募ください!