Google Cloud RunでtDiaryを動かしてみた

$PORT の扱いにさえ気をつければ、あとは簡単!

Takashi Iwamoto
VELTRA Engineering
8 min readMay 27, 2019

--

Google CloudのCloud RuntDiaryを動かしてみました。あくまで学習目的で、データの永続化やコンテナインスタンス間のデータ共有は考慮していませんが、簡単に触ったかぎりではうまく動いたようです。この記事ではデプロイまでの手順をご紹介します。

ざっと、以下のような流れです。

  1. プロジェクトの設定
  2. Dockerイメージの保存
  3. コンテナのデプロイ
  4. 動作確認

その前に、Cloud RunとtDiaryの概要をご説明します。

Cloud Runの概要

Cloud Runは、先月(2019年4月)開催のGoogle Cloud Next ‘19で発表された新サービスです。HTTPリクエストに応答できるDockerコンテナをデプロイするだけでWebサービスが公開できます。インフラはすべてGoogleに任せられ、オートスケールまでしてくれます。

まだベータ版なので、この記事の情報が古くなる可能性がある点にご留意ください。

tDiaryの概要

tDiaryはRubyで書かれた日記システムです。作者であるただただしさんの日記や、セキュリティ研究者である高木浩光さんの日記などで使われています。

データベースに依存しておらず、HerokuというPaaSサービスへのデプロイをサポートしていることから、Cloud Runの学習に適していると判断しました。

プロジェクトの設定

概要についてはこのくらいとして、ここからは、デプロイまでの手順をご紹介します。

何はともあれ、まずはプロジェクトを作成します。既存のプロジェクトを使ってもよいのですが、学習が終わったらプロジェクトごと削除できるほうが安心です。

次に、プロジェクトに対して課金を有効にします。Cloud Runは従量課金制ですが、無料枠があるので、学習目的であればコストを気にする必要性は低いでしょう。

その後、作成したプロジェクトでCloud Shellを起動し、下記のコマンドを実行します。これでCloud Runが使えるようになります。

Dockerイメージの保存

次に、Container RegistryにDockerイメージを保存します。具体的には以下の手順で進めます。

Gitリポジトリのclone

tDiaryのGitリポジトリをcloneします。Cloud Shellで下記のコマンドを実行すればOKです。

Dockerfileの編集

Dockerfileを下記のように編集します。テキストエディタはEmacs、nano、Vimが使えます。

編集のポイントは以下の通りです。

  1. 設定画面のBasic認証用に apache2-utils を追加し、.htpasswd ファイルを作るようにした
  2. ディスクが揮発的なので VOLUME の指定をコメントアウトした
  3. ポート番号を $PORT で指定するようにした(Cloud Runから環境変数で渡されるため)
  4. CMD では変数が展開されないのでシェル経由で実行するようにした(気づくのにしばらくかかりました…)

本質的なのは $PORT に関わる3と4です。ここが理解できただけでも、学習した甲斐がありました。

Dockerイメージのビルドと保存

さて、Dockerfileが編集できたので、イメージのビルドと保存を進めましょう。下記のコマンドを実行すると、Cloud Buildによってイメージがビルドされ、Container Registryに保存されます。

ちなみに、$DEVSHELL_PROJECT_ID にはプロジェクトIDがあらかじめ設定されています。

コンテナのデプロイ

ここまでくれば、あとはコンテナをCloud Runにデプロイするだけです。下記のコマンドひとつで実現できます。

リージョンは、現時点では us-central1 のみ指定可能です。--allow-unauthenticated は、未認証の呼び出しを許可するためのフラグで、サービスを公開する場合に指定します。

デプロイが完了すると、サービスのURLが下記のように出力されます。

動作確認

サービスのURLにアクセスし、tDiaryの初期画面が表示されることを確認します。

「サイトの情報」のリンク先には admin / admpass でアクセスできます。Dockerfileで下記を指定しているためです。

アクセスすると、設定画面が表示されます。タイトルを編集して「OK」ボタンを押し、保存してみましょう。

日記の投稿は、右上の「追記」リンクからできます。

以上で、Cloud RunでのtDiaryの動作が確認できました。

まとめ

この記事では、Cloud Runの学習のため、tDiaryコンテナを動かしてみました。実運用するにはデータの外部保存が課題となりますが、ステートレスなサービスならすぐにでも始められそうです。

今後も同様のPaaSが出てきそうなので、DockerベースのWebサービスを開発する場合には、ポート番号は固定せずに $PORT で受けるとよいかもしれません。ただし CMD で変数が展開されない罠には注意が必要です。

--

--

Takashi Iwamoto
VELTRA Engineering

ENECHANGE株式会社VPoT兼CTO室マネージャー。AWS Community Builder (Cloud Operations)。前職はAWS Japan技術サポート。社内外を問わず開発者体験の向上に取り組んでいます。