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