ローカル環境でGCSをエミュレートしよう

はじめに

はじめまして。sueken5です。

この記事ではGCPサービスの一つであるGCSをローカルでエミュレートしgolangからそれを利用する方法を紹介します。

fake-gcs-server

fake-gcs-server

gcsのエミュレーターはgcp公式が提供しているものがないのでfake-gcs-serverを利用します。

dockerイメージが提供されているので次のコマンドで実際に動かすことができます。

docker run -d --name fake-gcs-server -p 4443:4443 fsouza/fake-gcs-server

ローカルで利用するにあたり重要なフラグを紹介します。

--schemeはhttpsかhttpかを決めることできるフラグです。ローカルで使う分にはhttpでいいので--schema httpと指定します。

次に--public-hostです。このフラグはGCSのオブジェクトのPublicURLの働きをするものになっています。今回はlocalhostで参照したいので--public-host localhostと指定します。

次にバケットの設定です。

/dataにオブジェクトが保存されるようになっており、バケット名をディレクトリ名にし/data/bucket-nameとなるようにボリュームをマウントします。これをしないと保存はできるのですが、参照処理ができません。注意してください。

実際に動かす

実際に動かしてみます。今回はgolangを利用します。実際のコードはこちらを参考にしてください。

実際に動かす前にSTORAGE_EMULATOR_HOSTという環境変数を設定します。 storage.NewClientは初期化時にSTORAGE_EMULATOR_HOSTという環境変数が存在していたらその値をホストに使うようにします。

golang gcs storage 初期化処理

実際に動かして見ると http://localhost:4443/bucket-name/onjname でアクセスできることが確認できます。

まとめ

gcsのローカルエミュレートを紹介しました。簡単に利用できるのでテストやローカル環境の構築に使っていきたいです。