Blog

AWSとSlackを活用して運用作業を楽にした話

はじめに

はじめまして。 中廣と申します。
ニフティ株式会社に中途入社して4年目になります。
私が所属しているチームでは、日々の運用作業をこなしつつ、並行して開発作業も行っていますが、開発作業に時間を取りたいので、運用作業はなるべく自動化若しくは簡易化を進めています。今回は、AWS Chatbot + AWS Lambda + Slackを利用して運用作業を簡易化した話を書きたいと思います。

とある運用作業の手順(簡易化前)

これまで手運用で実施していた運用作業の手順を以下に記します。
※ 実際の手順より簡略化しています。また、テーブル名・項目名は適当な値にしています。

依頼元より作業依頼を受ける

他部署より作業依頼をメールで受けます。
依頼内容と、対象データのキー(受付番号:HOGE_NO)が連携されます。

SQLを順番に実行する

作業用サーバからSQL実行環境へログインし、以下SQLを実行します。

APIを実行し、外部システムへ連携する

SQL更新後、APIを実行して外部システムへの連携を行います。
…いかがでしょうか。
手順が決まっているとはいえ、なかなか面倒です。
また、すべて手作業なので作業漏れ・ミスにもつながります。

運用作業手順をもっと簡単にする

上記の手順を見ると、以下のことが分かります。
  • 受付番号があればテーブルAのデータを特定できる
  • 更新時に設定する値は、テーブルAを見ればわかる
  • API連携する値はテーブルAを見ればわかる
…ということは、受付番号さえわかれば自動化できちゃいそうですね。

① 一連の作業を Lambda関数化する

ということで、上記の作業手順をLambda関数(hogehoge_operation)にまとめました。
(以下はサンプルなのでデータチェック・エラーハンドリングなどは一切考慮していません!!)
この関数に引数 hoge_no を設定し実行することで、上述の運用作業を自動でやってくれるようになりました。これだけでだいぶ楽になりましたね。早速実行してみます。
応答結果がresponse.json に出力されています。問題なさそうですね。 …ただし、aws-cliがインストールされていない環境では実行できません。
さらに手軽に実行できるように、Lambda関数をSlack経由で呼び出せるようにしたいと思います。

② AWS Chatbot を利用してLambda関数をSlack経由で呼び出す

WebコンソールからAWS Chatbotを開き、Slack ワークスペースを追加します
チャットクライアントで「Slack」を選択し、「クライアントを設定」を押下すると、
認証画面へ遷移しますので、そのまま進めてください。
Slackワークスペースが作成されますので、「新しいチャネルを設定」ボタンを押下します。
設定画面から各種設定を行います。
チャネルID には、利用するSlackチャンネルのIDを入力します。
SlackのリンクURLを入力すると、チャネルID部分だけ切り取ってくれます。(便利)
アクセス許可には、適切なロールを設定しましょう。
チャネルロールは「テンプレートを使用してIAMロールを作成する」を選択し、
ポリシーテンプレートは「通常のアクセス許可」「Lambda呼び出しコマンドのアクセス許可」を選択します。
ここまで設定したら、利用するSlackチャンネルで以下を入力します。

/invite @aws

入力後、以下が表示されればOKです!
続けて、以下のコマンドを入力します。

@aws lambda invoke –payload {“hoge_no” : “xxxxx”} –function-name hogehoge_operation –region ap-northeast-1

実行確認のメッセージが通知されますので、「[Run] command」 を押下します。
押下すると、コマンドを実行した旨の通知と実行結果が返ってきました!
aws-cli を使わずに、SlackからLambda関数を呼び出すことができるようになりました!!
…が、毎回コマンドを入力するのも正直面倒ですよね。
更に運用を楽にするため、Slackワークフローを利用してみましょう!

③ Slackワークフローを利用してコマンドを実行する

Slackワークフロービルダーにて、以下のようなフローを作成します。
  • チャンネルのショートカットから起動する
  • フォームを作成し、受付番号(hoge_no)を入力できるようにする
  • チャンネルにコマンドを送信する hoge_no は引数に指定する
送信するメッセージはこんな感じです。ほぼ入力していたコマンドそのままですが、
hoge_no は「変数を挿入する」からフォームの入力値を設定します。
公開をしたら早速ワークフローを実行してみます。
チャンネルから「てすと」ショートカットを選択します。
フォームが表示されますので、受付番号を入力し、「Submit」ボタンを押下します。
ワークフローからコマンドが送信され、引数付きでLambdaを実行することができました!

とある運用作業の手順(簡易化後)

上記①~③の対応を行ったことで、運用作業手順は以下になりました。
  • 依頼元から作業依頼を受ける
  • Slackのショートカットからワークフローを起動し、受付番号を入力して送信
  • 結果を確認して終わり
簡易化前・後を比較するとだいぶやることが減りましたね♪

おわりに

いかがでしたか?
面倒な運用作業もAWS・Slackを利用することによって簡易化することができました。
是非参考になればと思います。

We are hiring!

ニフティでは、さまざまなプロダクトへ挑戦するエンジニアを絶賛募集中です!
ご興味のある方は以下の採用サイトよりお気軽にご連絡ください! Tech TalkやMeetUpも開催しております!
こちらもお気軽にご応募ください!