経緯
GAE アプリケーション上で Memcache を使いたかった
↓
「たしか内包サービスみたいな感じで GAE メニューにあったなぁ」 と思い、早速ドキュメント を読みに行ってみると...
The Memcache service is currently not available for the App Engine flexible environment. An alpha version of the memcache service will be available shortly. If you would like to be notified when the service is available, fill out this early access form.
どうやら 2018/03/01 時点では GAE flexible 環境で利用できないみたい
(Node を使う場合は自動的に flexible 環境となる
もうすぐ使えるようになるとのことですが、いつになるかわからないため正式に実装されるまでは自前の Memcache 鯖を立てることにしました
さてどうやって立てようか…
様々なケースを調べる中、あるコミュニティで回答者がお勧めしていたのが bitnami というサービスでした
bitnami とは
bitnami は様々なアプリケーションのイメージ集 + 各種クラウドサービスへの構築をアシストしてくれるサービスです
本来であれば、自分で使用したいサービスのコンテナ化やスケーリング、ネットワーク設定等を行うところですが、これらをボタン 1 つで代行してくれます
パッケージの中には 今回使用する Memcache をはじめ、wiki、Word Press など 数多くのソリューションが用意されています
bitnami の使い方
本当に簡単でした
使いたいサービスのページ へアクセスし、LAUNCH IN THE CLOUD
を押す
そしてこの簡潔でわかりやすい設定項目を選択し、CREATE
するだけ…っ!!
GCP に戻ってみると…
ちゃんとできてる!すごい!
ご丁寧に各種タグ付けやカスタムメタデータも設定されており、後から見直した際にそのインスタンスがどのような状態なのかひと目で分かるようになっていました
なお、クラスタ版を立てたい場合は こちら から行います
使ってみる
memcached-cli から
まずはアプリケーションからではなく、 memcached-cli を使って検証...
memcached-cli userName:pass@host:port
**.***.***.***:*****>set test hoge
MemJS SET: using deprecated call - arguments have changed
true
**.***.***.***:*****>get test
hoge
できてそう
Node から
bitnami: memcache イメージの設定的に SASL 認証に対応したクライアントでないと動かないようです
調べた限りでは memcached-cli にも使われている MemJS というモジュールが対応していました
memcached-cli userName:pass@host:port
**.***.***.***:*****>set test huga
MemJS SET: using deprecated call - arguments have changed
true
**.***.***.***:*****>get test
huga
import * as Memjs from 'memjs';
// memcache 部分抜粋
const client = Memjs.Client.create();
client.get('test', (err: any, val: Buffer) => {
console.log(err, val.toString());
});
null 'huga'
無事 CLI でセットした値がアプリケーション側から取得できました!
おわり
bitnami...