share facebook facebook2 twitter menu hatena pocket slack

2016.02.15 MON

雨が降る・やむ、30分前にSlackへ自動で通知する

WRITTEN BY齊藤 愼仁

シンジです。Slackの醍醐味、hubotを使って、雨が降る・やむ、30分前にSlackへ画像付きで通知する方法です。

うまくいくとこんな感じで通知してくれます

rainfall-01

今回はAmazon AWS EC2にhubotを起動させます

AWSマネジメントコンソールからEC2を選択します。

rainfall-02

Amazon Linuxを使います。

rainfall-03

一番やっすいやつで十分すぎです。詳細設定をしましょう。

rainfall-04

詳細設定は、一番下の部分だけいじります。

rainfall-05

高度な設定に、以下のテキストを入れてやります。

#cloud-config
write_files:
 - content: |
     repo_update: true
     repo_upgrade: true
     locale: ja_JP.UTF-8
     timezone: Asia/Tokyo
   owner: root:root
   path: /etc/cloud/cloud.cfg.d/99_mysettings.cfg
   permissions: '0644'
runcmd:
 - yum update -y

入力出来たら、ストレージの追加へ行きましょう。

ストレージをちょっぴり増やしておきます。

rainfall-06

タグは適当に付けておきましょう。

rainfall-07

セキュリティグループは重要です。80番は空けますが、22番は自分のIPアドレスのみからアクセスできるようにしておくのが吉です。

rainfall-08

これでOK。作成しちゃいましょう。キーペアどうするか聞いてくるので、新規で作る場合はダウンロードが始まるので、後でchmod 400 hoge.pemして権限を変えましょう。

rainfall-09

晴れてEC2が起動すればこんなかんじ。パブリックDNSの部分に記載されているアドレスでEC2にSSHで接続します。

rainfall-10

SSHでログインする

ssh -i ~/Downloads/hogehogehoge.pem ec2-user@ec2-xx-xxx-xx-xxx.ap-northeast-1.compute.amazonaws.com

The authenticity of host 'ec2-xx-xxx-xx-xxx.ap-northeast-1.compute.amazonaws.com (xx.xxx.xx.xxx)' can't be established.
ECDSA key fingerprint is SHA256:MFAKMFLMASFMLKASFMKLAMSFMLAMSFMKLMASFMLMAAF.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ec2-52-193-22-125.ap-northeast-1.compute.amazonaws.com,xx.xxx.xxx.xxx' (ECDSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|___|___|

https://aws.amazon.com/amazon-linux-ami/2015.09-release-notes/
11 package(s) needed for security, out of 27 available
Run "sudo yum update" to apply all updates.

node.js、npm、もろもろをインストールする

sudo yum -y install nodejs npm redis --enablerepo=epel
sudo npm install -g yo generator-hubot
sudo npm install -g npm
sudo npm install -g n
sudo n stable

redisを起動

sudo /etc/init.d/redis start
sudo chkconfig redis on

hubotのプロジェクトのディレクトリを作成する

mkdir slack
cd slack/

hubotのプロジェクトを作成する(sudoすると失敗する)

yo hubot

? ==========================================================================
We're constantly looking for ways to make yo better!
May we anonymously report usage statistics to improve the tool over time?
More info: https://github.com/yeoman/insight & http://yeoman.io
========================================================================== (Y/n)
                      _____________________________
                    /                             
   //              |      Extracting input for    |
  ////    _____    |   self-replication process   |
 //////  /_____                                /
 ======= |[^_/_]|   /----------------------------
  |   | _|___@@__|__
  +===+/  ///     _
   | |_ /// HUBOT/\
   |___///      /  \
               /   +---+
          ____/    |   |
           | //|    +===+
            //      |xx|

? Owner メールアドレス
? Bot name ボットの名前
? Description 何か適当に
? Bot adapter (campfire) slackgot back false
? Bot adapter slack

入力項目は適当に入れましょう、最後のアダプターのところだけ重要。

スクリプトを編集する

vi external-scripts.json

元がこれ

[
  "hubot-diagnostics",
  "hubot-help",
  "hubot-heroku-keepalive",
  "hubot-google-images",
  "hubot-google-translate",
  "hubot-pugme",
  "hubot-maps",
  "hubot-redis-brain",
  "hubot-rules",
  "hubot-shipit"
 ]

herokuの部分を削除して保存する。こんなかんじ。

[
  "hubot-diagnostics",
  "hubot-help",
  "hubot-google-images",
  "hubot-google-translate",
  "hubot-pugme",
  "hubot-maps",
  "hubot-redis-brain",
  "hubot-rules",
  "hubot-shipit"
]

slackアダプター、お天気botをインストールする

npm install hubot-slack --save
npm install hubot-slack-rainfall-alert --save

またスクリプトを編集する

vi external-scripts.json

“hubot-slack-rainfall-alert”,を追加する。こんなかんじ。


[
 "hubot-slack-rainfall-alert",
  "hubot-diagnostics",
  "hubot-help",
  "hubot-google-images",
  "hubot-google-translate",
  "hubot-pugme",
  "hubot-maps",
  "hubot-redis-brain",
  "hubot-rules",
  "hubot-shipit"
]

詳細設定の前に、yahooのAPIキーと、GoogleのAPIキーを取得する

まずはyahooから
https://e.developer.yahoo.co.jp/dashboard/

yahooのIDが無い場合は作成します。それから、新しいアプリケーションを開発、をクリック。

rainfall-11

サーバーサイドで選択して、必要事項を入力。「アプリケーションID」が取得出来るので、これを使います。

そしてGoogle
https://console.developers.google.com/

APIを利用するをクリックして有効にします。

rainfall-12

URL Shortenerを有効にします。検索窓に入力すると出てきます。

rainfall-13

APIキーを取得します。APIを有効にしましょう。

rainfall-14

サーバーキーを選択して下さい。「APIキー」が取得出来るので、これを使います。

rainfall-15

お天気情報を設定する

サーバー側の環境変数に設定します。

vi /home/ec2-user/.bash_profile

以下の項目を設定します。内容は適切に利用者の環境に合わせてください。
緯度と経度はこのサイトで調べると便利です。(下記の設定では虎ノ門ヒルズが拠点になっています)
http://www.geocoding.jp/

export HUBOT_RAINFALL_ALERT_YAHOO_APP_ID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx ← YahooのAPIキー
export HUBOT_RAINFALL_ALERT_GOOGLE_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx ← GoogleのAPIキー
export HUBOT_RAINFALL_ALERT_CHANNEL="general" ←チャンネル名
export HUBOT_RAINFALL_ALERT_THRESH="0.5" ←雨量のしきい値(mm/h)
export HUBOT_RAINFALL_ALERT_CRONTIME="0 */10 0,9-23 * * *" ←チェックするインターバル
export HUBOT_RAINFALL_ALERT_LAT="35.666828" ←雨量をチェックする場所の緯度
export HUBOT_RAINFALL_ALERT_LON="139.74963" ←雨量をチェックする場所の経度
export HUBOT_RAINFALL_ALERT_LAT_FOR_MAP="35.666828" ←雨雲マップに表示する中心の緯度
export HUBOT_RAINFALL_ALERT_LON_FOR_MAP="139.74963" ←雨雲マップに表示する中心の経度
export HUBOT_RAINFALL_ALERT_IMAGE_WIDTH="500" ←画像の横幅
export HUBOT_RAINFALL_ALERT_IMAGE_HEIGHT="500" ←画像の縦幅

Slackを設定する

Slackのインテグレーションから、hubotを検索して、追加します。

rainfall-16

またAPIキーが出てくるので、キー手前の文字列丸ごとコピーします。

rainfall-17

ついでにアイコンとか変えると、それっぽくなります。

rainfall-18

最後にSaveするのを忘れずに!!!一番下にありますよ!!!

SlackのAPIキーをサーバー側に登録する

vi /home/ec2-user/.bash_profile

さっきのキーにexportを追加して記述。

export HUBOT_SLACK_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

bashの内容を読み込む。

source ~/.bashrc

いよいよ起動!

nohup bin/hubot --adapter slack &

んではテストしてみましょうー

対象のチャンネルのbotを呼ぶ

先程設定したチャンネルに、Slack側で作成したbotを招待します。他のユーザーをチャンネルに招待するときと同じです。そのbotが参加さえしていれば、後は勝手にやってくれます。

rainfall 適当な地名、を打ってみる

こんな感じで動けばOK

rainfall-19

完成

hubot + Slackで自動化ライフを嗜みましょうw(業務に直結しないあたりがアレなかんじで最高

元記事はこちら

雨が降る・やむ、30分前にSlackへ自動で通知する

齊藤 愼仁

cloudpack 社内インフラ担当、情報セキュリティ責任者。HPCを経て現職に至る。無類の猫好きで、すだち君という名の猫を飼っている。