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




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

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

rainfall-01

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

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

rainfall-02

Amazon Linuxを使います。

rainfall-03

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

rainfall-04

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

rainfall-05

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

[bash] #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
[/bash]

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

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

rainfall-06

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

rainfall-07

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

rainfall-08

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

rainfall-09

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

rainfall-10

SSHでログインする

[bash] 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.
[/bash]

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

[bash] 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
[/bash]

redisを起動

[bash] sudo /etc/init.d/redis start
sudo chkconfig redis on
[/bash]

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

[bash] mkdir slack
cd slack/
[/bash]

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

[bash] 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
[/bash]

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

スクリプトを編集する

[bash] vi external-scripts.json
[/bash]

元がこれ

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

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

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

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

[bash] npm install hubot-slack –save
npm install hubot-slack-rainfall-alert –save
[/bash]

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

[bash] vi external-scripts.json
[/bash]

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

[bash] [
 "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"
] [/bash]

詳細設定の前に、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

お天気情報を設定する

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

[bash] vi /home/ec2-user/.bash_profile
[/bash]

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

[bash] 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" ←画像の縦幅
[/bash]

Slackを設定する

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

rainfall-16

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

rainfall-17

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

rainfall-18

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

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

[bash] vi /home/ec2-user/.bash_profile
[/bash]

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

[bash] export HUBOT_SLACK_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
[/bash]

bashの内容を読み込む。

[bash] source ~/.bashrc
[/bash]

いよいよ起動!

[bash] nohup bin/hubot –adapter slack &
[/bash]

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

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

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

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

こんな感じで動けばOK

rainfall-19

完成

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