Alpine Linux上のRubyでGoogle Cloud Datastoreを使うとクラッシュする件

こんにちは、GMOアドマーケティングのmizkichです。
アドテクなマイクロサービスをGCPのKubernetesで運用しています。

Alpine Linux 上のRubyにはライブラリなどに欠けがあるらしく、Google Cloud Datastoreがまともに動作しません。
「require ‘google/cloud/datastore’」の行を書いただけでSegmentation Faultが発生し、コンパイルエラーになります。

この問題を解決したので、方法を共有します。

 

失敗例

GCP公式に書かれている書き方だと失敗します。

 

Alpine Linux環境だと、「require ‘google/cloud/datastore’」付近で以下のエラーが発生します。

 

Alpineで「ld-linux-x86-64.so(glibc)」が不足するのは割と情報があり、このDockerfileで解決できます。

すると、今度は以下のエラーが発生するようになりました。

 

成功例

結論から書くと、下記の設定で動きます。

 

Segmentation faultに対応するBug Reportが有り対処法も書かれていますが、それだけではDatastoreは動きませんでした。

google-gax , google-protobuf , google-cloud-datastore の三つについても、 BUNDLE_FORCE_RUBY_PLATFORM を用いてプラットフォームに依存しない強制的なインストールを行う必要がありました。

 

まとめ

Google製のライブラリが、Google製のOSで動かないってどうなってるんだと思うのですが、動くようになって良かったです。

同様の問題で困っている人の助けになれば幸いです。