Google Cloud Platform

プライベートな Ruby gem サーバーを GCP にデプロイする

Ruby ユーザーに朗報です! 私たち Google は先ごろ、google-cloud-gemserver gem をリリースしました。これにより、お客様はプライベートな gem サーバーを Google Cloud Platform(GCP)に 1 つのコマンドでデプロイできます。

  $ google-cloud-gemserver create --use-proj [MY_PROJECT_ID]

これは、プロプライエタリなビジネス ロジックを含むライブラリを作成している企業や、パブリック ライブラリを社内で使用するためにミラーリングしている企業にとって大きなメリットです。

こうしたライブラリは、Ruby では gem と呼ばれます。最近まで、gem の優れたホステッド ソリューションは存在しませんでした。そのため、特に Ruby では、多くの開発者が独自のカスタム ソリューションを構築したり、Gemfury のようなサードパーティに頼ったりしていました。

GCP で gem サーバーを運用することには多くの利点があります。上述のコマンドは gem サーバーを Google App Engine フレキシブル インスタンスにデプロイしますが、App Engine のアップタイムは 99.95 % です(Google Container Engine も間もなくサポートされます)。App Engine は CPU 使用率に基づいてインスタンス数を自動スケーリングすることもできるので、gem サーバーのメンテナンスが最小限で済みます。

また、gem サーバーを GCP で運用することで、Stackdriver LoggingGoogle Cloud Storage といった既存のクラウド インフラストラクチャを利用したり、gem サーバーが動作する VM に直接アクセスしてきめ細かくコントロールしたりできます。

gem サーバーに保存できるパブリック gem とプライベート gem の数や、適切なパーミッションを持つユーザーが gem サーバーにアクセスできる人数に制限はありません。こうした柔軟性やカスタマイズのレベルにより、GCP はアプリケーションの非常に生産的なデプロイ環境となっています。gem サーバーに関しても例外ではありません。

gem サーバーの使用

プライベート gem サーバーのインストールと構成の方法を見ていきましょう。

プライベート gem サーバーを GCP にデプロイする手順は次のとおりです。

  1. まず、gem をインストールします。
  2. Cloud SDK がインストールされ、GCP プロジェクトが作成済みで課金も有効になっていることを確認してください。自分が認証されていることも確認します。前提項目の一覧についてはこちらをご覧ください。
  3. ターミナルで次のコマンドを実行します。

これで、gem サーバーへのアクセスが http://[MY_PROJECT_ID].appspot.com で可能になります。gem サーバーへの書き込みアクセス権を持つキーにより、gem を gem サーバーに簡単にプッシュできます。上述のコマンドで作成したデフォルト キー(my-key)を使用します。gem をプッシュするには次のコマンドを実行します。

  $ gem push --key my-key-name [PATH_TO_MY_GEM] --host \         
> http://[MY_PROJECT_ID].appspot.com/private/

gem サーバーから gem をダウンロードできるようにするには、gem サーバーへの読み取りアクセス権を持つキーを作成する必要があります。都合よく、上の “create” コマンドで生成されたデフォルト キーは、このキーとしても使えます。

gem のインストールには bundler を使います。bundler は、gem のダウンロード時に gem サーバーと my-key を関連づけるように構成する必要があります。さもないと、ダウンロードが 401 Unauthorized Error で失敗してしまいます。この構成も、“create” コマンドを使用する際に、my-key 用に自動的に行われます。ここで Gemfile に小さな変更を加えます。

  source “[GEMSERVER_URL]”
source “[GEMSERVER_URL]/private” do
  gem “MY_GEM”
end

続いて “bundle install” を実行すると、gem である “MY_GEM” が gem サーバーからフェッチされ、インストールされます。

まとめ

以上で、パーソナルなプライベート gem サーバーを GCP で立ち上げ、gem にアクセスできるようになります。gem サーバーは、 Google Cloud SQL を使って gem のメタデータやキャッシュされた gem、認証キーなどを管理します。また、Cloud Storage を使用して gem のバックアップをメンテナンスします。

google-cloud-gemserver gem は、プライベート gem サーバーをローカルに実行する既存の gem 上に構築されています。お客様の gem サーバーの基盤として機能し、GCP インフラストラクチャと連携するように拡張されています。

google-cloud-gemserver gem はオープンソースであり、活発にメンテナンスされていることは注目に値します。この gem の改良を続けるべく、私たちはコミュニティを後押ししています。

* この投稿は米国時間 8 月 21 日、Software Engineering Intern である Arham Ahmed によって投稿されたもの(投稿はこちら)の抄訳です。

- By Arham Ahmed, Software Engineering Intern