Arukas でアプリ公開したら運用コスト 0円 でしかも快適だった話

さくらインターネットさんが提供する ”Arukas” という CaaS を利用し、0 円でWebアプリを公開した話です。

個人でちょっとしたWebアプリ作って公開したいけど、クラウドホスティングサービス費用が高いとか、なるべくお金かけたく無いとか・・そういう場合に参考になるかもしれません。

Arukas について

Arukas とは?

Arukas とは さくらインターネットさんが提供する Docker を活用したコンテナベースのホスティング環境です。しばらくベータ版で公開されていましたが、2018年3月26日に、正式サービスとして提供が開始されました。

arukas.io

公式サイトにあった利用料金表です。今回利用させていただくのは冒頭申し上げた通り 0円のコンテナとなります。

f:id:ngzm:20180519175155p:plain

Arukas の特徴

コンテナ関連
  • Docker Hub に PUSH したイメージを PULL + RUN するコンテナ実行環境である
  • Docker Hub のPublicイメージはもちろん、有料版だと Privateイメージも PULL 可能
  • Docker コンテナサービス用に任意のポートを20個まで指定可能
  • Docker Volume は未サポート、データを永続化するには外部の Storage サービス等を別途用意する必要あり
  • Docker Link も未サポート、コンテナ間の連携を行う場合はそれなり工夫が必要
  • 実行中コンテナにアタッチできない、つまり docker exec 相当の機能は未サポート
  • あくまで Docker コンテナ実行環境なので、イメージのビルドとか細かい管理はできない
ネットワーク関連
  • Docker コンテナサービス用ポート番号のうち最初に指定したポートは、エンドポイントとよばれるHTTPSサービスにマッピングされる
  • エンドポイントの実態は HAProxy によるリバースプロキシであり、実際にはロードバランサとして利用可能
  • エンドポイントにぶら下がるコンテナを、手動でスケールアップ、スケールインすることが可能(有料版のみ)
  • コンテナサービス公開用の独自ドメインを任意に設定可能、なおDNS登録は Arukas でないどこかの Name Server で設定する必要がある
コントロールパネルやインターフェース廻り
  • Web画面のコントロールパネルでコンテナ実行、停止、削除、スケーリングとかの操作が可能
  • 有料プランの場合、本画面から簡単にコンテナのスケーリングができる
  • リソースコントロールができる API も利用できるらしい(未検証)
  • 近い将来 CLI で操作できるツールも使えるようになるらしい

Arukas でアプリを公開するまでの道のり

今回公開したWebアプリについて

2018年3月に「アプリ開発で知っておきたい認証技術」というスライドを公開しましたが、この技術的なリファレンスとして作成したデモアプリの動作環境として Arukas を採用しました。ちなみに本アプリは Ruby on Rails で実装しています。

当初は "Scaleway" という格安クラウドサービスを使用していましたが、格安ながら簡単なデモ環境に個人的な費用を費やすのが辛かったのと、、Scaleway 上でも、もともと Docker 上で動かしていたこともあり、Arukas の正式サービス開始に伴い移行しました。

なお、デモサイトはこちらです

AuthsDemo

アプリケーションコンテナイメージを Docker Hub に登録する

Arukas で独自アプリケーションのコンテナを実行するためには、そのアプリケーションの Docker Image を Docker Hub に登録(PUSH)する必要があります。Docker Hub に PUSH するためには、やはりセキュリティ面に配慮する必要があり、最低でもコンテナイメージに秘密情報が混入しないように注意します。

今回は、GoogleFacebookTwitter の認証APIを使用するので、これらの Application ID や Application Secret といったシークレット情報をコンテナイメージに含めない、すなわち config ファイルではなくコンテナ起動時の環境変数で指定できるように改造しました。

Arukas コントロールパネルでアプリケーションコンテナを作成、起動

Docker Hub にアプリケーションイメージを PUSH したら、続いてそのアプリケーションイメージを Arukas に PULL して コンテナを作成し起動させます。

この作業は Arukas のコントロールパネルで行います・・実際のコントロールパネル画面は以下の通りです。特に難しいこともなく、比較的簡単に起動できると思います。

f:id:ngzm:20180524203335p:plain

使ってみてどうだったか?

Scaleway(移行前) と Arukas(移行後) の違い

Scaleway(移行前)

移行前つまり Scaleway の構成は次の通りです。実際よくある Webアプリの構成と思います。

f:id:ngzm:20180523205051p:plain

Scaleway 上に Ubuntu インスタンスを立ち上げ、そこに Docker をインストールし、Ruby on Rails の Docker image をベースとしたアプリケーションコンテナをビルドして起動しています。同時に、リバースプロキシとして nginx コンテナも起動しており、TLS 証明書もしっかり仕込んで HTTPS に対応するなど、アプリケーション以外に色々やることがあります。

Arukas(移行後)

移行後 Arukas における構成は以下のようになりました。

f:id:ngzm:20180523205048p:plain

図で分かりますが、nginxとかによる Reverse Proxy サーバの部分をまるごと Arukas にお任せできるようになった という所が大きな違いで、アプリケーションコンテナだけに自分のリソースを集中できるようになりました。

うれしポイント

1) 無料!

一番うれしいのは、やはりアプリを 無料 で公開できたことです!

2) Webサーバ廻りのケアが不要になる

無料と同じくらいありがたいと思ったのはこれです!!!
Webサーバの構築や管理、すなわちリバースプロキシの構築やTLS証明書の更新などの管理を まるっと Arukas に任せる ことができるようになりました。これは実際問題かなりありがたいポイントです。

3) 意外に快適

0円で利用させてもらっているにも関わらず、意外にも サクサクと動いてくれる のもポイント高いです。今回はデモ用の簡単アプリというのもあるかもしれませんが、それにしても殆どストレスを感じる事なく動作してくれます。

4) 簡単にスケールできる

有料プランであれば、任意にスケールアウト・スケールイン することができます。この機能は Arukas コントロールパネルで手動で操作できます。手動ですが スライダーのつまみを動かすだけですので操作は馬鹿みたいに簡単です。
ただし、例えばセッションの様にステートフルな仕組みを使用したアプリケーションにおいては、スケールアウト時に何らかの問題が発生するかもしれません。

残念ポイント

1) Volume がサポートされていない

個人的には Volume が使えないことが一番残念です。Arukas だけではデータの永続化ができないので、外部に Storage を用意するとかしなければなりません。

2) 実行中の Docker コンテナにアタッチできない

実行中のコンテナにアタッチすることはまだできません。
Volume も使えないため、例えば、走行ログをファイルに出力しても、そのログファイルにアクセスする手段がありません。今回は単なるデモサイトなのでアレですが、本来はきちんと運用方法を確立する必要があります。

3) コンテナリンクが未サポート

もう一つ、コンテナリンクがサポートされていないので、異なる役割を持つ複数のコンテナにより構成されるサービスは、構築しにくいかもしれません。

まとめ

今回のように、簡単なサンプルアプリやデモアプリをさくっと公開したい!という場合には、無料から利用できる とか Webサーバのケアがいらなくなる といったメリットを考えると、大変有難いサービスであると思います。

大きな開発プロジェクトであっても、一部の実験的な機能を試すとか、そういったユースケースで利用できるかもしれません。

個人的には、今回 Arukas を使ってみてかなり満足しています。皆さんも機会があればぜひ試してみてください。