Worker 開発の留意事項

Worker の開発は、MAGELLAN 固有の特別なやり方を、極力覚えなくても良いように設計されています。

それでもいくつかの気をつけなければいけないことがあります。 ここでは、Worker 開発イメージ作成デプロイの各ステップでの留意事項をまとめています。

Worker 開発

Worker の開発では、HTTP(S) 型通信、Publish/Subscribe 型通信それぞれにおいて、簡単な留意事項があります。

Worker へのパス

次に挙げる Worker へのパス(URL のパス部分)は、使用できません。

パス 内容
/ping MAGELLAN で予約。MAGELLAN のシステム内の疎通確認のために使用。

パスとして使用できる例と使用できない例を具体的に示します。

URL OK/NG
http://nebula-001a-web.magellanic-clouds.net/ping NG
https://nebula-001a-web.magellanic-clouds.net:443/ping NG
http://foobar.magellanic-clouds.net/ping NG
http://nebula-001a-web.magellanic-clouds.net/foo/ping OK
https://nebula-001a-web.magellanic-clouds.net:443/foo/bar/ping OK
http://foobar.magellanic-clouds.net/baz/ping OK

Worker へのトピック

Publish/Subscribe 型通信で、Worker にメッセージを送信(Publish)する場合は、トピックを worker/ から始める必要があります。

Worker へのトピック OK/NG
worker/foo OK
worker/foo/bar OK
/worker/foo NG
/foo NG
foo/worker NG

tips用アイコン

これは、現時点での制限事項です。

イメージ作成

Worker 用のイメージ作成では、バージョン管理のために、イメージ名を適切に設定しましょう。ここでは、バージョン管理のためのイメージ名のつけ方について紹介します。

また、Rails 版 Worker の場合は、GemfileDockerfile の設定に関して、いくつかの留意事項があります。これについても紹介します。

タグを使ったバージョン管理

イメージのバージョンを管理したい場合は、イメージのタグを使用する方法があります。

イメージ名は、リポジトリ名:タグ の形式となりますが、このタグの部分でバージョンを表現します。例えば、

  • magellan/example:1.0, magellan/example:1.1, magellan/example:2.0, …
  • magellan/sample:v1, magellan/sample:v1.1, magellan/sample:v2, …

などのようにします。

tips用アイコン

ここで、ひとつ注意して欲しいことがあります。

タグは、自由に設定できるため、同じタグを異なる(バージョンの)イメージに、付与できてしまいます

例えば、次のように、一度 magellan/example:1.1 というイメージ名(タグ 1.1)でイメージを作成します。

$ docker build -t magellan/example:1.1 .

その後、イメージ作成に影響のある修正を行い、イメージを再作成します。その際、先ほどと同じ magellan/example:1.1 というイメージ名を指定します。

$ docker build -t magellan/example:1.1 .

このようにして、同じタグ(1.1)を異なるバージョンのイメージに、付与できます。タグを付与するときは、重複したタグとならないよう、十分に気をつけてください

なお、Docker Hub で公開されている一般のイメージでは、タグを変更しないケースもあります(例えば、脆弱性対策で更新したイメージ)。

このように、タグを使用したイメージ名は、同一イメージ名が複数のイメージに紐づけられる可能性があり、特定のイメージを参照する保証がありません

ダイジェストを使ったバージョン管理

厳密にイメージのバージョンを管理したい場合は、イメージのダイジェストを使用しましょう。ダイジェストは、イメージごとに付与されるユニークな ID です。このダイジェストを使えば、特定イメージの参照が保証されます

イメージのダイジェストは、Docker レジストリ(例えば、Docker Hub)に送信(docker push コマンド)した際に割り当てられます。ダイジェスト値は、送信(docker push コマンド)完了後に、表示されます1

$ docker push magellan/example:2.0
...
2.0: digest: sha256:2846fd66f82783dfbbd51fe10f81e301d71a4e2901212f55d7abbee1a4151fd9 size: 6719

上記例の sha256:2846fd66f82783dfbbd51fe10f81e301d71a4e2901212f55d7abbee1a4151fd9 がダイジェスト値になります。

このダイジェストを使用したイメージ名は、リポジトリ名@ダイジェスト値 の形式となります。

magellan/example@sha256:2846fd66f82783dfbbd51fe10f81e301d71a4e2901212f55d7abbee1a4151fd9

この形式のイメージ名は、MAGELLAN コンソールの Worker 情報を設定する画面の「Image Name」、magellan-cli worker create コマンドのイメージ名指定箇所、Dockerfile の FROM 命令などで指定できます。

Rails 版 Worker 固有の留意点

Rails 版の Worker では、さらに次の点に留意してください。

Gemfile

Gemfile に、次の gem パッケージがインストールされるように指定します。

gem 内容
therubyracer Google が開発しているオープンソース JavaScript エンジン V8 を Ruby から使えるようにします。
magellan-rails Rails を MAGELLAN 用に機能拡張します。

tips用アイコン

therubyracer は、rails new で生成された Gemfile では、コメントアウトされています。このコメントアウトを外してください。

source 'https://rubygems.org'


# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.1'

...(中略)...

# See https://github.com/rails/execjs#readme for more supported runtimes
gem 'therubyracer', platforms: :ruby

...(中略)...

gem 'magellan-rails', '~> 0.2.4'

Dockerfile

基本は、Rails アプリケーションが動くイメージを作ることです。Worker 用イメージの作成ポイントは、CMD の指定と環境変数 RAILS_ENV の指定です。

CMD の指定は、次のように必ず magellan-rails を指定してください。

CMD ["bundle", "exec", "magellan-rails"]

環境変数 RAILS_ENV は、ENV で次のように production を指定してください。Rails アプリケーションの実行モード(RAILS_ENV)が本番環境(production)のときのみ magellan-cli stage logs コマンドでログの参照ができます。

ENV RAILS_ENV production

Dockerfile サンプル:

FROM ruby:2.2

CMD ["bundle", "exec", "magellan-rails"]

ENV RAILS_ENV production

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY Gemfile /usr/src/app/
COPY Gemfile.lock /usr/src/app/
RUN bundle install --system --without development test && rm /usr/local/lib/ruby/gems/2.2.0/cache/*.gem && rm /usr/local/bundle/cache/*.gem

COPY . /usr/src/app
RUN ./bin/rake assets:precompile

デプロイ

デプロイでは、環境変数を適切に設定する必要があります。環境変数の設定は、「Worker 登録情報」で行います。詳しくは、「Worker 登録情報」と「Worker の登録」を参照してください。

Ruby on Rails 固有の環境変数

Dockerfile で述べたとおり、Rails アプリケーションの実行モードは、本番環境としてください。実行モードが本番環境のときのみ magellan-cli stage logs コマンドによるログの参照ができます。

Rails アプリケーションの実行モードは、RAILS_ENV 環境変数で設定します。

環境変数 意味
RAILS_ENV Rails アプリケーションの実行モード production

tips用アイコン

RAILS_ENV 環境変数の設定は、「Worker 登録情報」と「Dockerfile」の 2 箇所で行う必要があります。

また、実行モードを本番環境にすることで、SECRET_KEY_BASERAILS_SERVE_STATIC_FILES などの環境変数もご利用の状況に応じて適切に設定してください。

実行モードが本番環境以外でも Worker として動作しますが、magellan-cli stage logs コマンドによるログの参照ができませんのでご注意願います。


  1. ダイジェスト値は、イメージの取得(docker pull コマンド)時にも表示されます。 [return]