LoginSignup
4
7

More than 5 years have passed since last update.

バックグラウンドジョブをIron.ioとHerokuで10分かからず実装!

Last updated at Posted at 2018-07-17

Herokuはコンテナを使用したデプロイを認めています。そして、Iron's Workerは、
バックグラウンドジョブの運用とスケーリングを楽にします。
HerokuとIronは相互運用抜群です。Herokuはアプリケーションを構築運用を楽にできます。そして、Ironはワークロードをスケーリングすることが上手です。

シンプルなPythonアプリをHerokuにデプロイして、Iron Workerにバックグラウンドジョブを書いて見ます。

ステップ

  • ドッカー化されたwebアプリをHerokuにアップ
  • 新しいプロジェクトをIron上に作成
  • Iron Workerを使用してバックグラウンドワーカー作成
  • Herokuのアプリからワーカーを実行

下記のコマンドを実行して、
簡単な「Hello World」プロジェクトをgitクローンして、Herokuへデプロイします。

> git clone https://github.com/heroku/alpinehelloworld.git
> cd alpinehelloworld
> heroku create
> heroku plugins:install heroku-container-registry
> heroku container:login
> heroku container:push web
> heroku open

ブラウザー上に「Hello World」と表示されれば、Heroku上にちゃんとデプロイされました。

 Iron workerを作成しましょう。

「worker.py」(実際はemailworker.py、imageprocessor.pyなど実際にバックグラウンドワーカーが実行する名前をつけます。)ファイルを作成します。
ここでは「Hello from IronWorker」を出力するようにします。

> cd webapp
> echo "print 'Hello from IronWorker'" > worker.py

Ironのクレデンシャルjsonを手に入れます。

Iron.ioへログインして、プロジェクトを作成しjsonファイルをコピーして、あなたのアプリのrootディレクトリーにおいて下さい。

> cp iron.json webapp/

ローカルでIronワーカーを起動しテストして下さい。

> cd ..
> docker run --rm -v "$PWD":/worker -w /worker iron/python:2 python worker.py

ワーカーとコンフィグjsonファイルを圧縮して、Iron.ioへアップロードします。

> cd webapp
> zip -r worker.zip worker.py iron.json
> iron worker upload --zip worker.zip --name worker iron/python:2 python worker.py

アップロードが完了したら、コマンドラインからワーカーを起動します。

> iron worker queue --wait worker

クライアントライブラリーを使用して、あなたのサイトに誰かが訪れた時に自動的にワーカーを起動しバックグラウンドジョブを実行するようにしましょう。
まず、「requirements.txt」ファイルに「iron-worker python client library 」を追加します(これはpipに必須の依存関係と認識させるためです。)。

> cd webapp
> echo "iron-worker" >> requirements.txt

「app.py」ファイルを下記のコードに変更します。

import os

from flask import Flask
from iron_worker import *

app = Flask(__name__)

@app.route('/')
def hello():
    task = IronWorker()
    task.queue(code_name="worker")
    return 'Hello world!'

if __name__ == '__main__':
    app.run(host='0.0.0.0')

Herokuにコードをデプロイして見ましょう。

> heroku container:push web
> heroku open

ブラウザーに「Hello World」が表示されましたでしょうか?
Iron.ioのダッシュボードに行き、
該当のプロジェクトを開くと、下記の画像のように、既にバックグラウンドジョブが実行され「Hello from IronWorker!」と表示されます。
hello_world_heroku.png

まとめ

Iron.ioは、ほぼ全ての言語のライブラリーとREST APIを提供しています。
Iron.ioは独自のオートスケーリングアルゴリズムを使用していますので、1プロセスが次の1分で1,000プロセスに増えたとしても対応出来ます。
そして、異なるクラウドベンダー、オンプレミス導入に対応していますので、あなたのデータ、ビジネスを簡単に移動出来ます。

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7