Ruby on Rails 版 Worker

デプロイ

Worker を MAGELLAN で利用するためには、デプロイと呼ばれる作業が必要となります。

デプロイとは

Worker とデプロイ

Worker は、Docker コンテナ(以降、単にコンテナと略す)として動きます。

MAGELLAN は、Docker Hub に登録された Docker イメージ(以降、単にイメージと略す)化された Worker をダウンロードします。Worker は、そのダウンロードされたイメージからコンテナとして生成されて動きます。

コンテナは、1 つのイメージからいくつも生成できます。

Worker の動作原理

MAGELLAN を利用すると次のことが簡単に実現できます。

  • 無停止で Worker をバージョンアップ
  • 複数バージョン・複数種類の Worker の運用と管理
  • 本番運用 Worker、開発中 Worker、審査用 Worker など、様々なタイプの Worker の運用と管理
  • Worker 数の増減
  • 大規模トランザクションへの対応

これを実現する仕組みとして、組織(Organization) - プロジェクト(Project) - ステージ(Stage)などの階層構造化された概念を導入しています。

デプロイ環境全体図

このような Worker を動かすための環境を構成することをデプロイといいます。また、この環境をデプロイ環境と呼びます。

デプロイの一般的な手順は、次のようになります。

  1. MAGELLAN へのログイン
  2. 組織の登録
  3. チームの登録
  4. プロジェクトの登録
  5. ステージの登録
  6. クライアントバージョンの登録
  7. Cloud SQL の準備
  8. Worker の登録
  9. コンテナの起動

デフォルトデプロイ環境

MAGELLAN アカウントを取得すると、下図のようなデプロイ環境が用意されます。ここでは、これをデフォルトデプロイ環境と呼ぶこととします。

デフォルトのデプロイ構造

デプロイ環境を構成する組織、チーム、プロジェクトなどを総称してリソースと呼びます。

デフォルトデプロイ環境で用意されるリソースと値は、次表のとおりです。

リソース
組織(Organization) アカウント名
チーム(Team) Owners
プロジェクト(Project) DefaultProject1
ステージ(Stage) DefaultStage1
クライアントバージョン(Client Version) DefaultStage1

今回のデプロイ手順

今回は、このデフォルトデプロイ環境に、Worker(コンテナ)を 2 台動かしてみます。

Worker のデプロイ

今回のデプロイは、デフォルトデプロイ環境を利用するため、次のとおり簡略化された手順(「組織の登録」〜「クライアントバージョンの登録」の手順が省略)となります。

  1. MAGELLAN へのログイン
  2. Cloud SQL の準備
  3. Worker の登録
  4. コンテナの起動

デプロイ作業

MAGELLAN へのログイン

まず、ログイン画面 から MAGELLAN にログインします。

ログインに成功すると、Dashboard 画面が表示されます。

Dashboard 画面

画面左側(サイドメニュー)には、選択している組織と、その組織下のプロジェクト、チームへのリンクが表示されます。

画面右側には、選択された組織に関する情報が集約されます。

  • 画面上部のボタン:左から順にプロジェクト数、ステージ数、チーム数
  • Stages 表:ステージの一覧
  • Activities 表:操作履歴

ここで、デフォルトデプロイ環境を確認しておきます。

最初に組織を確認します。サイドメニュー上部の組織名がアカウント名と同じかどうかを確認してください。

サイドメニューの組織名

異なる場合は、画面上部の「Switch Organization」をクリックしてください。表示されるメニューにアカウント名と同じ組織があれば、それをクリックしてください。

Organization 切り替え画面

続いて、プロジェクト、ステージ及びクライアントバージョンが、初期状態であることを確認します。

プロジェクト、ステージ及びクライアントバージョンに対して、一度も更新操作をしていない場合は、このまま次へ(「ステージの選択」)と読み進めてください。

何らかの更新操作を行った場合や、初期状態かどうかに確証が持てない場合は、「デフォルトデプロイ環境の準備」を参照して、前提とするデフォルトデプロイ環境を準備してから、次へ(「ステージの選択」)と読み進めてください。

ステージの選択

このあとは、「Cloud SQL の準備」、「Worker の登録」と進みます。すべてステージ上での作業となるため、ここで操作対象となるステージを選択しておきます。

対象となるステージは、Stages の表から選択します。Stages 表から、Project が DefaultProject1DefaultStage1 をクリックします。

Stages 表(DefaultStage1 のみ強調)

画面がステージ詳細画面に切り替わります。

ステージ詳細画面

Cloud SQL の準備

MAGELLAN では、Google Cloud SQL (Cloud SQL)が利用できます。Cloud SQL は、MySQL をサービスとして簡単に利用できるようにしたものです。

Getting Started の Rails アプリケーションは、MySQL の利用を前提としているため、この Cloud SQL を利用します。

DB タブをクリックします。DB タブでは、Cloud SQL の登録と削除ができます。

ステージ詳細 DB 画面

「Create Cloud SQL」ボタンをクリックします。

ステージ詳細 DB 画面

Name 入力フィールドに、MyDB と入力し、「Create」ボタンをクリックします。

ステージ詳細 DB 画面

これで、Cloud SQL の準備が整いました。

Worker の登録

Worker の登録は、ステージ詳細画面の Planning タブで行います。Planning タブをクリックして、Worker を登録する画面に切り替えます。

ステージ詳細画面

設定項目と意味は次のとおりです。

設定項目 説明
Name Worker 名を設定します。
Image Name Worker に使用するイメージ名を設定します。
Container Num Worker を何台動かすかを設定します。この数値を変えることで、簡単に Worker のスケールアップ・スケールダウンができます。
Migration Command 1 Worker の初回リリース時にのみ実行するコマンドを設定します。今回は、Worker が起動する前にデータベースのマイグレーションが実行されている必要があるため、データベースのマイグレーションコマンドを設定します。
Migration Command 2 Worker の初回リリース以降のリリース毎に実行するコマンドを設定します。今回は、Migration Command 1 と同様に、データベースのマイグレーションコマンドを設定します。
Environment Variables Worker に渡す環境変数を設定します。「環境変数名: 環境変数値」の形式で設定します。

ここでは、次表の内容(値)で、情報を設定します。

設定項目
Name Worker1
Image name yourname/rails-worker-example:1.0.0
Container Num 2
Migration Command 1 bundle exec rake db:migrate:reset db:seed
Migration Command 2 bundle exec rake db:migrate
Environment Variables SECRET_KEY_BASE: ***
RAILS_ENV: production

tips用アイコン

SECRET_KEY_BASE*** の部分は、ターミナルで rake secret を実行して表示される文字列に置き換えてください。

$ rake secret
(ここに文字列が表示されます)

MAGELLAN が提供する Docker イメージをお使いの場合は、rake secret が実行できません。その場合は、ruby -r securerandom -e 'puts SecureRandom.hex(64)' を実行して表示される文字列に置き換えてください。

yourname の部分は、Docker Hub のユーザ名や Organization 名により変わるため、適宜変更してください。

公開している Docker イメージを利用する場合は、yourname の部分を magellan に読み替えてください。

ステージ詳細画面(Worker 登録情報入力直後)

入力内容に間違いがないことを確認し、「Save」ボタンをクリックして、設定内容を保存します。

保存にはしばらく時間がかかります。保存が完了すると、設定を保存した旨のメッセージが表示されます。

ステージ詳細画面(保存終了)

「Close」ボタンをクリックします。

コンテナの起動

いよいよ、先ほど登録した Worker 情報に基づきコンテナを起動します。「コンテナの起動」ボタンをクリックします。

ステージ詳細画面(コンテナ起動中)

確認画面で、「起動」ボタンをクリックします。

コンテナの起動には、しばらく時間がかかります。コンテナの起動に成功すると、Current タブが表示されます。

ステージ詳細画面(コンテナ起動中)

ステージ詳細の Current タブには、起動した Worker に関する情報が集約されています。

これで、次のように Worker が 2 台デプロイできたことになります。

Worker のデプロイ

補足:デフォルトデプロイ環境の準備

以降は、補足資料です。「コンテナの起動」を終えられた方は、読み進める必要はありません。

ここでは、デフォルトデプロイ環境の再登録手順を紹介しています。

この手順では、デフォルトのプロジェクトを削除して再登録します。プロジェクトを削除すると、それに属するステージや Worker などのリソースも削除されます。既に、Worker をリリースしている場合は、注意願います。

プロジェクトの削除

まず、デフォルトのプロジェクト(DefaultProject1)を削除します。

  1. 左サイドメニューの Projects リンク画像 をクリックして、プロジェクト一覧画面を表示します。

  2. 「DefaultProject1」があれば、ゴミ箱アイコン画像 をクリックして、プロジェクトを削除します。

  3. 画面右上に Create Project ボタン画像 が表示されていることを確認します。

    もし、Create Project ボタン画像 が表示されていなければ、これ以上プロジェクトを登録することはできません。既にあるいずれかのプロジェクトを削除します。プロジェクトの削除は、各プロジェクトの ゴミ箱アイコン画像 をクリックします。

プロジェクトの登録

続いて、デフォルトのプロジェクト(DefaultProject1)を登録します。

  1. 画面右上の Create Project ボタン画像 をクリックします。
  2. Project Name フィールドに、DefaultProject1 と入力し、「Create」ボタンをクリックします。

    プジェクト登録画面

これで、プロジェクト DefaultProject1 が登録されました。プロジェクトを登録すると、デフォルトのステージ(DefaultStage1)とクライアントバージョン(DefaultStage1)が自動登録されます。

以上で、デフォルトデプロイ環境が準備できました。最後に、画面左上の MAGELLAN アイコンをクリックして、Dashboard の表示に切り替えます。

MAGELLAN へのログイン」からの誘導で進めている場合は、「ステージの選択」へ進んでください。