LoginSignup
77
80

More than 5 years have passed since last update.

Hubot を Amazon EC2 にセットアップし、Slack と連携する!

Last updated at Posted at 2014-08-16

スクリーンショット 2014-08-16 14.16.42.pngスクリーンショット 2014-08-16 14.22.19.pngスクリーン<br>
ショット 2014-08-16 14.17.01.png

はじめに

Hubot は Heroku に構築するのが主流らしいのですが、Heloku のアカウント持ってないし、このためにクレジットカードを新しく登録するのも嫌だったので、既にアカウントがある AWS の Amazon EC2(OS:Amazon Linux)上に構築し、更に Slack と連携する、ということをしてみました。

Amazon Linux のクリーンインストール状態から次の手順で上手くいったので(AWSのセキュリティグループとか Node.js の起動の方法とか、細かいところは気になりますが)、これから導入される方の参考になれば。

前提

  • 前述のとおり、サーバは Amazon EC2 (OS は Amazon Linux)を利用します。

    • ここでは EC2 のセットアップ手順については言及しません。
    • 今回、私が使った AMI は、Quick Launch の一番上にあるこれです。

      スクリーンショット 2014-08-15 20.09.32.png

    • セキュリティグループの設定で、HTTP の 80番ポートへのアクセスを許可してください。

      • 本当はポート番号を変えたかったのですが、ELB(Elastic Load Balancing)か何かを使わないと、EC2 単体では 80番から変更できないようです.. 追記: Type で TCP を選択すれば、任意のポート番号で HTTP通信できるようです。
      • 接続元の IP も、本当は絞りたいところですが、Slack 経由のアクセスになってしまうから絞るのは難しい?

        スクリーンショット 2014-08-16 0.17.33.png

手順

以降、Amazon Linux にログインしてからの手順です。

Node.js、npmコマンドツールをインストール

  • 下記コマンドを実行。

    $ sudo yum -y install nodejs npm --enablerepo=epel
    

    npm は、次節の Hubot、CooffeeScript をインストールするのに利用します。

  • 確認してみます。

    $ node -v
    v0.10.29
    
    $ npm -v
    1.3.6
    

Hubot、CoffeeScript をインストール

  • 下記コマンドを実行。

    $ sudo npm install -g hubot coffee-script
    
  • 確認してみます。

    $ hubot -v
    2.8.0
    
    $ coffee -v
    CoffeeScript version 1.7.1
    

Redis をインストール

  • 下記コマンドを実行。

    $ sudo yum -y install redis --enablerepo=epel
    
  • 起動します。

    $ sudo /etc/init.d/redis start
    redis-server を起動中:      [  OK  ]
    

    ※ ちゃんとやるなら、自動起動とかを設定した方がいいです。

Hubot を作成

以降、$ sudo -s で root ユーザになり作業します。
(理由:個人ユーザだと、Node.js が起動した際に、外部からの HTTPリクエストを listen できなかったため.. Node.js 詳しくないけど、やり方はあるのかな?)

  • 下記コマンドを実行。

    # hubot --create test_bot
    
  • 動かしてみます。

    # cd test_bot
    # bin/hubot
    

    上記の bin/hubot は中身をみるとスクリプトファイルで、中で npm install が走っている模様。
    いろいろインストールされましたが、終わると次のようにプロンプトが表示されます。

    Hubot> 
    

    Hubot の基本コマンドである ping をしてみます。

    Hubot> hubot ping
    Hubot> PONG
    

    上記のように PONG と返ってこればOKです^^ exit でいったん抜けます。

Slack用アダプタのインストール

  • 下記コマンドを実行。

    # cd test_bot
    # npm install hubot-slack --save
    

補足:
前回まで npm コマンドは、-g オプションをつけてグローバル領域にインストールしていました。今回は -g をつけず、このディレクトリ配下のプロジェクトだけに nodeモジュールをインストールしています。また --save オプションにより、ディレクトリ配下の package.json に hubot-slack が依存モジュールとして追記されます。

Slack 側の設定

  • Slack の Integrations ページの Add Service Integrations メニューで、Hubot を選択します。

    スクリーンショット 2014-08-15 21.09.02.png

  • 環境変数が 3つ、表示されます。上の 2つ は、後で Hubot を起動する際に利用することになります。

  • Hubot URL には、EC2 の Public DNS を入力します。

    • 例:http://ec2-111-222-333-444.us-west-2.compute.amazonaws.com/
    • 今回、使うポートは 80番 なので、特に指定は不要です。
  • Label は Slack の設定メニュー上の表示のみで利用するものなので、何でもいいです。

    スクリーンショット 2014-08-16 0.13.04.png

  • すべて入力したら、画面下の Save Integration ボタンで保存します。

Hubot の起動

  • EC2 に戻り、Slackの画面で表示された内容を元に、次のように環境変数を設定。

    # export HUBOT_SLACK_TOKEN=[Slackの画面に書いてあった値]
    # export HUBOT_SLACK_TEAM=[Slackの画面に書いてあった値]
    # export HUBOT_SLACK_BOTNAME=[任意のボット名(例:hogebot)]
    # export PORT=80
    

    ※ もしくは、/bin/hubot(スクリプトファイル)に上記を記載してもOKです。
    ※ ポートは何も指定していないとデフォルトの 8080番 ポートとなってしまうので、AWS のセキュリティグループの設定と合わせて、80番ポートを指定します。
    ※ 上記のボット名は、Slack 上で語りかけるボット名となります。

  • Hubot を起動。

    # bin/hubot -a slack
    Successfully 'connected' as hogebot
    

    ※ ちゃんとやるなら、バックグラウンドで起動したり、デーモン等にした方がいいです。

  • Node.js の HTTPのサービスが起動しているはずなので、ブラウザで EC2 の Public DNS にアクセスしてみます。

    • 例:http://ec2-111-222-333-444.us-west-2.compute.amazonaws.com
    • 次のように表示されれば、Node.js が HTTPリクエストをハンドリングできています。

      スクリーンショット 2014-08-15 23.11.54.png

動作確認

Slack のオープンな CHANNELS で、ping してみます。ボット名は、Hubot を起動した時に環境変数で指定したものです。@はつけなくても大丈夫です。

スクリーンショット 2014-08-16 0.09.37.png

応答が返ってきました^^

注意:
Slack は、オープンな CHANNELS でないと、Hubot が応答しないらしい。ずっと PRIVATE GROUPS で試してて、3時間ぐらい無駄にしました..。

おわりに

Hubot の挙動は CoffeeScript で拡張できるので、これから色々ためしてみようと思います。

77
80
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
77
80