Hubot with AWS and Slack
Hubot を使って、Slack に発言したり S3 にファイルをアップロードしたりするのを EC2 上で動かしてみた。
EC2 インスタンスの準備
t2.small で動かしてみる。OS は Ubuntu。
SecurityGroup は取り敢えず ssh さえ通せれば良いので、その設定だけしておく。踏み台サーバがあるならば、そこからの ssh アクセスに限定しておく。
できたら ssh で入って、環境構築。
apt-get でいろいろ入れる
nodejs が無いと困るのと、hubot の brain は redis を使うのがデフォなので redis-server を入れる。github に hubot のコードを置くので git も入れる。
$ sudo apt-get update
$ sudo apt-get upgrade -y
$ sudo apt-get install build-essential curl git nodejs npm redis-server -y
$ sudo apt-get install libssl-dev libexpat1-dev libreadline-dev libyaml-dev libxml2-dev libxslt-dev -y
$ sudo apt-get clean
npm でいろいろ入れる
CoffeeScript を動かす、forever でデーモン化する、Slack に連携するためのものを入れる。
$ sudo npm install -g coffee-script
$ sudo npm install -g forever
$ sudo npm install -g hubot
$ sudo npm install --save hubot-slack
node コマンド
nodejs コマンドとしてインストールされるので、node コマンドにする。そうしないと hubot が動かない。
$ sudo update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10
Hubot を動かす
Slack の設定
トークンがないと喋れないので、環境変数にしておく。
$ export HUBOT_SLACK_TOKEN=xoxb-3849651025-QYo2sT3JQ3XJ2wVs5rMDXlYN
GitHub からコードを取ってくる
Username と Password を聞かれる。二段階認証の場合は、通常の Password ではなく、アカウントの設定画面で生成したトークンを Password に入れておく。
$ git clone https://github.com/hogehoge/fugafuga.git
npm でライブラリを入れる
$ npm install
動かす
デーモン化するなら forever コマンドを使う。あるいは、nohup でも。
$ ./bin/hubot -a slack
スクリプトを書く
Ruby で S3 にファイルをアップロードするスクリプトを書いたので、それを hubot が叩けるようにする。
Ruby の準備
dev パッケージの ruby を入れないと使えないものがあるので、それを入れる。
$ sudo apt-get install ruby1.9.1-dev -y
$ sudo gem install bundler
Gemfile
AWS-SDK for Ruby の V2 が gem install aws-sdk
で入るが、まだガンガン開発中で使い勝手は V1 が良さそうなので V1 を入れる。
source "https://rubygems.org"
gem "aws-sdk-v1"
Ruby のスクリプト
S3 にアップロードするよ。
予めバケットを作っておくのと、access_key_id
とsecret_access_key
を用意しておく。
require 'rubygems'
require 'aws-sdk-v1'
puts "Uploading to S3 bucket..."
AWS.config(
:access_key_id => '',
:secret_access_key => ''
)
s3 = AWS::S3.new
bucket = s3.buckets['s3_bucket_name']
target = bucket.objects[filename]
target.write(file: filename)
puts "Successfully uploaded: #{target.public_url()}"
File.delete(filename)
Ruby のスクリプトを実行するスクリプト
$ ruby hogehoge.rb aaa bbb
みたいなことが出来るようにする。
module.exports = (robot) ->
robot.respond /upload/i, (msg) ->
msg.send "Executing..."
cp = require "child_process"
cp.exec "ruby ./scripts/upload.rb", (error, stdout, stderr) ->
if error
msg.send "something went wrong \n" + stderr
else
msg.send "done. \n" + stdout
コマンドライン引数を渡したければ、コマンドの文字列でイイカンジに。
標準出力をそのまま Slack に渡しているので、アップロードしたファイルの URL も Slack に流れる。
まとめ
環境構築は作って壊してをしまくって疲弊したのでそのうち Docker にしたい。
Author And Source
この問題について(Hubot with AWS and Slack), 我々は、より多くの情報をここで見つけました https://qiita.com/KeithYokoma/items/5803c0b1559095ec9efa著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .