Worker 開発の留意事項
Worker の開発は、MAGELLAN 固有の特別なやり方を、極力覚えなくても良いように設計されています。
それでもいくつかの気をつけなければいけないことがあります。 ここでは、Worker 開発、イメージ作成、デプロイの各ステップでの留意事項をまとめています。
Worker 開発
Worker の開発では、HTTP(S) 型通信、Publish/Subscribe 型通信それぞれにおいて、簡単な留意事項があります。
Worker へのパス
次に挙げる Worker へのパス(URL のパス部分)は、使用できません。
パス | 内容 |
---|---|
/ping | MAGELLAN で予約。MAGELLAN のシステム内の疎通確認のために使用。 |
パスとして使用できる例と使用できない例を具体的に示します。
Worker へのトピック
Publish/Subscribe 型通信で、Worker にメッセージを送信(Publish)する場合は、トピックを worker/
から始める必要があります。
Worker へのトピック | OK/NG |
---|---|
worker/foo | OK |
worker/foo/bar | OK |
/worker/foo | NG |
/foo | NG |
foo/worker | NG |
これは、現時点での制限事項です。
イメージ作成
Worker 用のイメージ作成では、バージョン管理のために、イメージ名を適切に設定しましょう。ここでは、バージョン管理のためのイメージ名のつけ方について紹介します。
また、Rails 版 Worker の場合は、Gemfile
や Dockerfile
の設定に関して、いくつかの留意事項があります。これについても紹介します。
タグを使ったバージョン管理
イメージのバージョンを管理したい場合は、イメージのタグを使用する方法があります。
イメージ名は、リポジトリ名:タグ
の形式となりますが、このタグの部分でバージョンを表現します。例えば、
magellan/example:1.0
,magellan/example:1.1
,magellan/example:2.0
, …magellan/sample:v1
,magellan/sample:v1.1
,magellan/sample:v2
, …
などのようにします。
ここで、ひとつ注意して欲しいことがあります。
タグは、自由に設定できるため、同じタグを異なる(バージョンの)イメージに、付与できてしまいます 。
例えば、次のように、一度 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 用に機能拡張します。 |
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 |
また、実行モードを本番環境にすることで、 実行モードが本番環境以外でも Worker として動作しますが、RAILS_ENV
環境変数の設定は、「Worker 登録情報」と「Dockerfile」の 2 箇所で行う必要があります。SECRET_KEY_BASE
や RAILS_SERVE_STATIC_FILES
などの環境変数もご利用の状況に応じて適切に設定してください。magellan-cli stage logs
コマンドによるログの参照ができませんのでご注意願います。
- ダイジェスト値は、イメージの取得(
docker pull
コマンド)時にも表示されます。 [return]