Worker

Worker は、MAGELLAN 上で動作するアプリケーションのことです。 Worker は、Docker の仮想化技術で仮想化(Docker イメージと Docker コンテナ)することを前提としています。

Worker は、Docker Hub に登録されたイメージを MAGELLAN 上にダウンロードし、そのイメージからコンテナを生成して起動します。 1 つのイメージから、いくつものコンテナを起動できます。

Worker の動作原理

Worker と(MAGELLAN を介しての)クライアントアプリケーションとの通信プロトコルは独自仕様となっています。MAGELLAN が提供するライブラリを使用することで、この独自仕様を意識することなく、使い慣れたプログラミング言語やフレームワークを使って、Worker 及びクライアントアプリケーションの開発ができます。

Worker とクライアントアプリケーションの通信

tips用アイコン

現段階では、Ruby on Rails(Rails)での Worker 開発をサポートしています。

Worker 規則

  • Worker は、複数のイメージを保有できます。
    • 起動するコンテナ用に割り当てができるイメージは 1 つのみです。
  • Worker は、複数のコンテナを起動できます。
  • Worker には、環境変数を渡すことができます。
  • Worker には、Worker 起動時に実行させたい任意のコマンドを 2 種類登録することができます。
  • イメージ名は、バージョン毎に異なる名称でなければなりません。

tips用アイコン

Trial プラン制限事項

制限事項 制限内容
起動できるコンテナ数 5

Worker 名規則

  • 大文字小文字の区別はありません。
  • 使用可能な文字は、英数字(a-z, A-Z, 0-9)、アンダースコア(_)、ハイフン(-)、ピリオド(.)です。
    • ただし、先頭に使用できる文字は、英字(a-z, A-Z)のみです。
  • 文字数は、63 文字以内です。

Worker 登録情報

Worker 規則」で述べたとおり、Worker に環境変数や Worker 起動時に実行させたい任意のコマンドを登録することができます。これを Worker 登録情報と呼びます。

Worker 登録情報は、「キー: 値」の形式で表現します。

キー
migration_command_1 Worker の初回リリース時にのみ実行させたいコマンドを指定します。
migration_command_2 Worker の初回リリース以降のリリース毎に実行させたいコマンドを指定します。
environment_vars_yaml Worker に渡す環境変数を指定します。環境変数も「キー: 値」の形式で表現し、キーに環境変数名、値に環境変数値を指定します。

Worker 登録情報は、YAML 形式のファイルにまとめて、一括登録します。

# Worker リリース時に実行するコマンド
#   migration_command_1: Worker 初回リリース時にのみ実行させたいコマンド
#   migration_command_2: Worker 初回リリース以降のリリース毎に実行させたいコマンド
migration_command_1: "bundle exec rake db:migrate:reset db:seed"
migration_command_2: "bundle exec rake db:migrate"

# Worker に渡す環境変数
environment_vars_yaml: |
  # Rails 関連
  SECRET_KEY_BASE: 6339918d5dc3caf0a28af1958b8c2d655a9876a80792259238e163fccd544d114800c593a962de7ab715c53d80f7fba26b45953ca93580ed963f7b79c34edd61
  RAILS_ENV: production
  RAILS_SERVE_STATIC_FILES: public

# で始まる行はコメントです。

  • migration_command_1migration_command_2
    データベースのためのマイグレーションコマンドを指定しています。データベースを利用する Rails アプリケーションのもっとも一般的な例です。データベースのマイグレーションの必要がなく、Worker 起動時にコマンドを実行する必要がなければ、この環境変数を指定する必要はありません。
  • SECRET_KEY_BASERAILS_ で始まる 2 つの環境変数
    Rails 関連の環境変数の例です。
    • SECRET_KEY_BASE
      rake secret の実行結果で置き換えてください。
    • RAILS_ で始まる環境変数
      適宜状況に応じて変更してください。

tips用アイコン

rake secret が実行できない場合は、ruby -r securerandom -e 'puts SecureRandom.hex(64)' の実行結果で置き換えてください。

イメージの作成

Worker 用 Docker イメージは、若干の MAGELLAN 作法を守るだけで簡単に作成できます。詳しくは、「MAGELLAN 用ウェブアプリケーションの作り方 」を参照してください。

magellan-cli を使った Worker の操作

magellan-cli コマンドラインツールを使ってできる Worker の操作は、magellan-cli worker に集約されています。

どのような操作ができるかは、magellan-cli worker help とすることで確認することができます。

$ magellan-cli worker help
Commands:
  magellan-cli worker list               # workers の一覧を表示します
  magellan-cli worker show [ID]          # IDで指定されたworkerの詳細を表示します
  magellan-cli worker select NAME        # NAMEを指定してworkerを選択します
  magellan-cli worker deselect           # workerの選択を解除します
  magellan-cli worker delete NAME        # NAMEを指定してworkerを削除します
  magellan-cli worker create NAME IMAGE  # NAMEとIMAGEを指定してworkerを登録します
  magellan-cli worker update ATTRIBUTES  # 選択したworkerの属性を指定したATTRIBUTESで更新します。ATTRIBUTESにはYAMLのファイル名かJSON文字列を指定可能です
  magellan-cli worker prepare_images     # 選択されたworkerのimagesを準備します
  magellan-cli worker help [COMMAND]     # 利用可能なコマンドの一覧か特定のコマンドの説明を表示します

Options:
  -v, [--version], [--no-version]  # バージョンを表示します
  -V, [--verbose], [--no-verbose]  # 追加のログ情報を表示します
  -D, [--dryrun], [--no-dryrun]    # 登録や削除などのシステムには反映させずにアクションを実行します

以下では、Worker の登録Worker の一覧Worker の詳細Worker の選択Worker の削除Worker 情報の更新イメージの準備およびイメージの更新について、使い方を簡単に紹介します。詳しくは、Reference を参照してください。

Worker の登録

Worker を登録したいときは、magellan-cli worker create コマンドを使います。Worker を登録する場合は、事前に「イメージの作成」と「Worker 登録情報」の準備が必要です。

Worker 名を WorkerV10、使用するイメージ名を youraccount/yourimage:1.0.0、Worker 登録情報をまとめたファイル名を worker.yml とした場合、次のように使います。

$ magellan-cli worker create WorkerV10 youraccount/yourimage:1.0.0 -A worker.yml
$

実行後、何もメッセージが表示されなければ、Worker の登録に成功しています。

tips用アイコン

Worker を登録しただけでは、コンテナの起動はできません。コンテナの起動前に、イメージの準備を完了させてください。

Worker の一覧

Worker の一覧を確認したいときは、magellan-cli worker list コマンドを使います。

$ magellan-cli worker list
+---+----+------------------+-----------+--------+-----------------------------+---------+---------+------------------+------------------+
|   | id |      stage       |   name    | status |         image_name          | log_dir | version | root_url_mapping | migration_status |
+---+----+------------------+-----------+--------+-----------------------------+---------+---------+------------------+------------------+
| * | 68 | [ProductA]V10#18 | WorkerV10 | 1      | youraccount/yourimage:1.0.0 |         | 1       | true             | not_yet          |
+---+----+------------------+-----------+--------+-----------------------------+---------+---------+------------------+------------------+

Total: 1

行頭についている * は、その行が示す Worker が選択状態であることを表します。この例では、WorkerV10 という Worker が選択されていることを表します。

Worker の詳細

Worker の詳細を確認したいときは、magellan-cli worker show コマンドを使います。

このコマンドでは、Worker の id が必要となるため、magellan-cli worker list コマンドで調べておきます。

$ magellan-cli worker list
+---+----+------------------+-----------+--------+-----------------------------+---------+---------+------------------+------------------+
|   | id |      stage       |   name    | status |         image_name          | log_dir | version | root_url_mapping | migration_status |
+---+----+------------------+-----------+--------+-----------------------------+---------+---------+------------------+------------------+
| * | 68 | [ProductA]V10#18 | WorkerV10 | 1      | youraccount/yourimage:1.0.0 |         | 1       | true             | not_yet          |
+---+----+------------------+-----------+--------+-----------------------------+---------+---------+------------------+------------------+

Total: 1

id68 の Worker の詳細を確認したい場合は、次のようになります。

$ magellan-cli worker show 68
+------------------+-----------------------------+
|      field       |            value            |
+------------------+-----------------------------+
| id               | 68                          |
| stage_version_id | [ProductA]V10#18            |
| name             | WorkerV10                   |
| status           | 1                           |
| image_name       | youraccount/yourimage:1.0.0 |
| log_dir          |                             |
| version          | 1                           |
| root_url_mapping | true                        |
| created_at       | 2015-04-09T03:26:47.000Z    |
| updated_at       | 2015-04-09T03:26:47.000Z    |
| migration_status | not_yet                     |
+------------------+-----------------------------+

============== migration_command_1 ===============

============== migration_command_2 ===============

================== run_command ===================

============= environment_vars_yaml ==============
SECRET_KEY_BASE: 98e20be47a375c58e808e1fccb8e84cfbea804992129fb148f7aad28dee67aee23335b0e029a446d5afa77fc72ddc655055f42905121f425f3e940a4e0357191
RAILS_ENV: production

Worker の選択

Worker を選択したいときは、magellan-cli worker select コマンドを使います。

WorkerV10 の Worker を選択したいときは、次のように使います。

$ magellan-cli worker select WorkerV10

Worker の削除

Worker を削除したいときは、magellan-cli worker delete コマンドを使います。

WorkerV10 の Worker を削除したいときは、次のように使います。

$ magellan-cli worker delete WorkerV10
OK

Worker の削除に成功した場合は、OK のメッセージが表示されます。

Worker 情報の更新

登録した Worker の情報を更新したいときは、magellan-cli worker update コマンドを使います。

更新できる情報は、次の 4 種類です。

  • イメージ名(image_name)
  • migration_command_1
  • migration_command_2
  • environment_vars_yaml

更新情報は、YAML 形式のファイルか JSON 形式の文字列で指定します。

tips用アイコン

Worker の情報は、Worker 登録情報で述べたとおり「キー: 値」の形式で表現します。更新する際もこの形式で表現します。イメージ名のキーは、image_name です。

複数の情報を更新したい場合は、YAML 形式のファイルを使うと便利です。例えば、イメージ名(image_name)、migration_command_1 および migration_command_2 の 3 種類の情報を更新したいといった場合は、次のような YAML 形式のファイルを準備します。

image_name: 'youraccount/yourimage:1.0.1'
migration_command_1: 'bundle exec rake db:migrate:reset db:seed'
migration_command_2: 'bundle exec rake db:migrate'

ファイルを update.yml という名称で準備したとすると、magellan-cli worker update コマンドを次のように使います。

$ magellan-cli worker update update.yml

単一の情報を更新する場合は、JSON 形式の文字列を使うと便利です。例えば、イメージ名(image_name)だけを更新する場合は、magellan-cli worker update コマンドを次のように使います。

$ magellan-cli worker update '{"image_name": "youraccount/yourimage:1.0.1"}'

イメージの準備

コンテナの起動には、イメージの準備が完了している必要があります。イメージの準備は、magellan-cli worker prepare_images コマンドを使います。

$ magellan-cli worker prepare_images
+---+----+------------------+----------------+--------------------+------------+-----------------------------+------------+-----------------+
|   | id |      stage       | container_type | instance_base_name | visibility |            name             | docker_iid | instance_amount |
+---+----+------------------+----------------+--------------------+------------+-----------------------------+------------+-----------------+
| * | 71 | [ProductA]V10#18 | worker         | WorkerV10          | 20         | youraccount/yourimage:1.0.0 |            | 1               |
+---+----+------------------+----------------+--------------------+------------+-----------------------------+------------+-----------------+

Total: 1

イメージの準備は、Worker の登録後か イメージの更新後で、コンテナの起動前に行ってください。

イメージの更新

イメージを更新したいときは、2 つのステップを踏みます。

  1. 更新したい Worker に割り当てたイメージ名を変更します。
  2. 更新したい Worker のイメージを準備をします。

具体的な手順は、次のようになります。

まず、Worker の情報を確認します。

$ magellan-cli worker list
+---+----+------------------+-----------+--------+-----------------------------+---------+---------+------------------+------------------+
|   | id |      stage       |   name    | status |         image_name          | log_dir | version | root_url_mapping | migration_status |
+---+----+------------------+-----------+--------+-----------------------------+---------+---------+------------------+------------------+
|   | 68 | [ProductA]V10#18 | WorkerV10 | 1      | youraccount/yourimage:1.0.0 |         | 1       | true             | not_yet          |
+---+----+------------------+-----------+--------+-----------------------------+---------+---------+------------------+------------------+

Total: 1

もし、イメージを更新したい Worker が選択されていなければ、その Worker を選択します。

$ magellan-cli worker select WorkerV10

image_name の列が Worker に登録したイメージ名です。例えば、このイメージを新しい youraccount/yourimage:1.0.1 に更新したいときは、magellan-cli worker update コマンドを使います。

$ magellan-cli worker update '{"image_name": "youraccount/yourimage:1.0.1"}'

続いて、この更新された情報をもとに新しいイメージを準備をします。

$ magellan-cli worker prepare_images