Unselected Kid Blog

プログラミングを中心に好きなことを好きなように書くブログ

Google Cloud PlatformでElasticsearchを起動してHerokuから接続する方法

はじめに

今回は自分の運営するamazonの家具を寸法と価格から検索できる「家具サイズ検索」のコスト削減のためにElasticsearchに変更したので備忘録として記事にしておきます。 これまではアドオンのHeroku Bonsai Elasticsearchを利用しており、10万レコードまでで$10かかっておりGCPに移行することにしました。(GCPはf1-microなら月額$4.49以上)

起動方法

今回はGoogle Cloud Platformのこちらのテンプレートを利用します。

f:id:UnselectedKids:20161220195120p:plain

ここで好きなセッティングにしてください。 Herokuから接続するのであればサーバの位置をusに設定しておきます。はじめ設定されているasiaは高いのでレスポンス時間がシビアでないならusをオススメします。

自分は$1ほど高くなりますが、検索スピードを担保するために一応SSDに変更に変更しています。 計測した所一応0.3secあるかないかですが検索時間が早くなりました。 また10Gまでストレージ容量も増やすことができたので10万レコードのリミットもなくなりました。

デプロイが完了すると以下の画面でuser名、パスワード、IPを確認します。

f:id:UnselectedKids:20161220215552p:plain

あとはRailsでsearchkickを使っているのであれば以下のようにheroku configを設定する。

 heroku config:set ELASTICSEARCH_URL='http://[user]:[passwd]@[IP]/elasticsearch/' 

 heroku run rake searchkick:reindex

ちなみにrakeするときが最もCPUを食うみたいで200%つまり2つインスタンスが立ってしまう? なのでbachサイズを小さくするため、app/models/product.rbに以下の設定を足して2インスタンスが立ち上がるの防いでいます。(本当に2インスタンス立ち上がるのかは不明です...)

searchkick batch_size: 100

1ヶ月分(1月1日~1月31日まで)のコスト

参考になるかわかりませんが自分のサービスの1ヶ月運用したコストも公開しておきます。検索数が多くなるとネットワーク料金がかかるはずなので参考程度にしてください。

内容 金額(日本円)
Compute Engine Sustained Usage Discount [ Currency conversion: USD to JPY using rate 117.68 ] -210
Compute Engine Micro instance with burstable CPU running in Americas: 743.967 時間 700
Compute Engine Network Internet Egress from Americas to Americas 41
Compute Engine SSD backed PD Capacity: 10.333 Gibibyte-months 200
合計 731