運用しているElasticsearchをAmazon Elasticsearch Serviceに移した
AWSの勉強ついでに、conohaで管理していたelasticsearchをAmazon Elasticsearch Serviceに移行してみました。かかる金額自体はAmazon Elasticsearch Serviceのほうが断然高いですが、まぁ勉強ついでということで。
やったことは以下 - Amazon Elasticsearch Serviceに接続できるようにする - logstashの設定ファイルを作る - logstashでデータを転送する
Amazon Elasticsearch Serviceに接続できるようにする
普通はIAM roleとかでアクセス制限かけたほうがいいと思うんですが、それやるとamazon_es pluginとか使わないといけなくなってしまうので、楽するために一旦IPでアクセスできるようにします。
きちんとやるならIPでやるのではなく、普通にawsの認証を通してから接続できるようにしたほうがいいと思います。
クラスメソッドさんのブログに色々書いてあるのでその辺見るといいんですかね。
logstashの設定ファイルを作る
今回はelasticsearchからelasticsearchへのデータ転送なので改めてpluginをインストールする必要はありません。
ちなみに以下のような感じ。ちょっとデータを変換したいみたいなことを考えているのであれば、filterでいじるといいと思います。elasticsearchの5系以上であれば、似たようなことがelasticsearch標準でできるみたいなので、そっちでもいいかもしれません。
注意点ですが、もしkuromojiのようなanalyzerを指定しているのであれば、予めmappingを適用してください。
input { elasticsearch { hosts => "localhost:9200" index => "indexの名前" query => "{}" } } output { elasticsearch { hosts => "elasticsearch serviceのhost" index => "indexの名前" } }
logstashでデータを転送する
別段継続的に動かすものでもないので、コマンド一発で終わらせます。
コマンドは以下
sudo /usr/share/logstash/bin/logstash -f logstash.conf --path.settings /etc/logstash
あとは、awsの方のelasticsearchを叩いてきちんとデータが挿入されているかを確認すれば終了です。 ちゃんと動いてるか確認したいなら、logstashとelasticsearchのログを見たり、一旦outputをstdoutにしてrubydebugとかで吐き出させてみるといいと思います。
まとめ
今回は、logstashを使って、既に運用しているelasticsearchからamazon elasticsearch serviceへlogstashを使用して、データ転送を行いました。今回はlogstashを使いましたが、データ転送の手段としては、embulkなどもあるので、使いやすいものを使うといいと思います。
「Amazon Web Services ではじめる新米プログラマのためのクラウド超入門」を読んだ
周囲で聞こえてくる「AMI」・「IAM」みたいな単語があまりにも分からず、MTGでも何を言っているのか分からないという状況で非常に申し訳ない気持ちになったのでAWSの勉強をすることに。 amazonで色々本を探していた中で、簡単そうで評価が高かった「Amazon Web Services ではじめる新米プログラマのためのクラウド超入門」を読むことにしました。
Amazon Web Servicesではじめる新米プログラマのためのクラウド超入門 (CodeZine BOOKS)
- 作者: WINGSプロジェクト阿佐志保,山田祥寛
- 出版社/メーカー: 翔泳社
- 発売日: 2016/06/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
感想
ざっくりとした感想としては、AWSを知らない人向けに中核になっているサービスを使ってみて慣れてみようという感じ。個人的にEC2は立てて遊んだりしたことがあったのですが、ELB・S3・CloudWatchだったりは名前だけ知っているような状態だったので、どういうサービスなのかだったり、実際使ってみたりで色々勉強になりました。あと前職でOpenStackを使っていたこともあって、「何がどれに対応する」みたいなことを考えながら読めたので楽しかったです。
今回はDocker周りは必要なかったので読んでいませんが、何かしら必要になったら読み返そうかと思います。とりあえずは今回この本を読んでえた知識で何かしらやってみようかと思います。
cerebroを使ってみる
elasticsearchでSolrのような管理系UIが欲しかったのですが、5系以降ではsite pluginが廃止になった影響で今まで使われていたelasticsearch-headやelasticsearch-kopfが使えなくなってました。kopfはスタンドアロンのアプリケーションになってるみたいですが、同じ作者さんがcerebroというものを作っていたので作っていたので試してみました。
インストール
基本的にはgithubのREADMEに書かれてることをやればいいです。
wget https://github.com/lmenezes/cerebro/releases/download/v0.6.6/cerebro-0.6.6.tgz tar xvf cerebro-0.6.6.tgz cd cerebro-0.6.6 # 起動 bin/cerebro
簡単でいいですね。 起動画面は以下です。
あとはhostsの部分にelasticsearchのhostのurlを書けば、indexの情報などが見れます。 kibanaのdev toolsと同じようにクエリもかけて、発行したクエリの履歴なども見れて大変便利でした。
機会があれば使ってみるといいかもしれません。
ubuntu16.04にelasticsearch + kibanaを導入する
前の記事でkibanaの前にnginxをおいて認証をかけるみたいな記事を書きましたが、elasticsearch + kibana自体のインストールも少し手こずったのでメモ書き程度にまとめます。
やること
javaのインストール
elasticsearchはjavaで書かれたソフトウェアなので実行環境としてjavaを入れる必要があります。
sudo apt-get update
sudo apt-get install openjdk-8-jdk-headless
elasticsearch
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - sudo apt-get install apt-transport-https echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list sudo apt-get update sudo apt-get install elasticsearch
起動は以下
sudo service elasticsearch start
細かい設定ファイルは/etc/elasticsearch以下にあるので、メモリを調整したかったりするときは、この辺のファイルをいじるといいと思います。
elasticsearchはリクエストを受け付けるように9200ポート、他ノードとの連携用に9300ポートを利用しているみたいです。その辺のポートが開いていなければ順次ポートをずらしていくみたいです。
kibana
elasticsearchが導入できていたらそのままapt-getで入れられます。
sudo apt-get update sudo apt-get install kibana
kibanaの起動は以下
sudo service kibana start
kibanaって前まで静的コンテツをelasticsearch配下に置くイメージだったんですが、いつの間にかnodejsのアプリケーションになってたんですね。調べて見る限りでは、elasticsearch 5系からsite pluginが廃止になった影響で使えなくなったのが理由みたいです。 elasticsearch-headとかも使えないっぽいので注意が必要そうです。
まとめ
今回はubuntuにelasticsearchとkibanaを導入しました。kibanaがnodejsのアプリケーションになってるのは衝撃でしたが、問題なくインストールできました。今度は管理系UIを調べて導入してみようかと思います。
nginxでbasic認証をかける
localで運用しているelasticsearch + kibanaをクラウドに移行しようと考えていたのですが、 awsのelasticsearchは予想外に金額が高かったのでconohaのVPSで運用することにしました。 X-Packを使えばkibana自体に認証をかけられますが、それも有料なのでどうしたもんかと考えた結果、 kibanaの前にnginxをおいて、そこに認証をかけてしまうことにしました。
ちらっと聞いた話でnginxでbasic認証をかけるのは簡単という話を聞いたので試してみました。
やることは以下
- htpasswdでアカウントとパスワードを設定する
- nginx側で認証をかける
htpasswdでアカウントとパスワードを設定する
htpasswdはbasic認証で利用できるファイルを生成してくれるコマンドです。便利ですね。インストールは以下のコマンドでできます。
sudo apt-get install apache2-utils
ファイル生成は以下
sudo htpasswd -c /etc/nginx/.htpasswd account_name
nginx側で認証をかける
htpasswdで生成したファイルをnginx.confで指定してあげます。全体に認証をかけることもできますし、任意の部分にかけることもできます。 今回はkibanaへのアクセス部分にかけるのでlocationにかきます。
upstream elasticsearch { server localhost:9200; } upstream kibana { server localhost:5601; } http { server { listen 80; server_name localhost; location / { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd; proxy_pass http://kibana; } } }
設定したあと、nginxをrestartすればできます。大変楽でいいですね。
まとめ
今回はnginxでさくっとbasic認証をかけてみました。今までは割とクライアント周りばかりを触っていたのでweb serverなどをほとんど触っていなかったのですが、大雑把な部分は簡単にできるようでよかったです。細かい部分についてはまたおいおいやっていければと思います。
vimでRustを書く(環境構築)
周囲の人たちから「Rustいいよ」、「Rust書こうよ」とポツポツ言われるので流れにのって入門してみることにしました。
といっても今回やるのは環境構築のみ。Rustさっぱりなので、慣れてきたら適当にメモを書いていきます。
私が普段vimでコードを書いているのでvimで書くまでを目標にします。
やること
Rustのインストール
macでhomebrewを使うと以下でできるみたいですが、私はmac使いじゃないので公式ページに書かれてる方法を使います
brew install rust
公式ページは以下
インストール方法は以下
curl https://sh.rustup.rs -sSf | sh
上記のコマンドで、rustrcとcargoが入ります。
rustfmtとracerのインストール
rustfmtとracerについて簡単に説明すると、rustfmtはRustのガイドラインにしたがって、Rustで書かれたソースをフォーマットしてくれるツールです。racerはRustのコード補完ツールみたいです(詳しいことは知らない)
これらはそれぞれcargoで入れられます。cargoはRustのパッケージ管理ツールです。 rustfmtとracerのインストールは以下
cargo install rustfmt cargo install racer
難しいこと考えなくていいのでいいんですね。こういうの好きです。
rust.vimとvim-racerのインストール
私がdein.vimを使ってるのでそれに準ずる方法でインストールします。toml使ってplugin管理してる人が多いと思いますが、めんどくさかったのでvimrcに直書きしてます。すいません。
vimrcに追記したのは以下
call dein#add('rust-lang/rust.vim') call dein#add('racer-rust/vim-racer')
自動でフォーマットするようにする
rustfmtを入れたのでどうせなら保存したら自動でフォーマットしてくれると助かります。
追記したのは以下
let g:rustfmt_autosave = 1
まとめ
今回は自動フォーマットまでをまとめました。結局のところ、まだRust書いてないので、ぼちぼち書いていこうと思います。
追記
衝撃の事実。homebrewでインストールしたrustのcargoを使って、rustfmtをインストールしようとするとエラーで落ちるっぽいです。
goでconnpassのイベントを検索するslackbotを作ってみた
つい最近のGoogle I/Oでkotlinがandroidアプリ開発の公式言語に追加された影響か、大したこと書いてないですが意外にアクセスが来ていて嬉しい限りです。 とりあえず間違った情報は流さないようにしたいと思います。
今回は今までのandroid + kotlin押しとは打って変わって、golangでslackbotを作ってみたというお話です。
最近仕事でslackを使い始めたので、slackに慣れるついでにslackbotを作ってみましたというのがモチベーションです。 connpassを選んだ理由はAPIで提供している機能が検索しかないので、とりあえずで実装してみる分にはそこまで難しくなさそうというだけです。
書いたコードは以下
実装内容
使用したライブラリ
goからslackのapiを扱うためにslackを使用 github.com
APIリクエストを投げるためにgoreqを使用 github.com
詰まったところ
今回botを作る上で実装したいと考えていたのは以下の二点です。 - botを呼び出した人にmentionを飛ばすようにする - コマンドを幾つか用意する
この中で「botを呼び出した人にmentionを飛ばすようにする」で若干つまりました。
やってみると意外に簡単で飛ばすメッセージに"<@飛ばす先のアカウントID>“を付加するだけで大丈夫でした。
まとめ
だいぶざっくりした感じになってしましましたが、やってみると意外に簡単にできるので試しに作ってみてもいいかもしれません。