Heroku を利用したアプリケーションのデプロイ
Heroku を利用すれば Web アプリケーションを簡単にデプロイすることが出来ます.本ドキュメントでは,Bamboo を用いて作成した Web アプリケーションを Heroku を利用してデプロイする方法について説明します.本ドキュメントでは以下のような流れで順に説明します:
- Heroku へのユーザー登録,Heroku CLI のインストール
- Bamboo による Web アプリケーションの作成
- Heroku を利用したデプロイ
まず最初に
初めに Heroku にユーザー登録をし,Heroku CLI をインストールする必要があります.具体的な方法についてはこちらを参照してください.
これと同時に必要になる Python ライブラリをインストールしておきましょう.ここでは Python は 3.8 系を仮定します (3.8 以上なら動作します) .
$ pip install bamboo-core requests gunicorn
Bamboo による Web アプリケーションの作成
Bamboo を用いた Web アプリケーションの具体的な実装方法はチュートリアルを参照してください.今回は簡易的な Web アプリケーションを製作することにしましょう.
今回は例として,ただ Hello, World!
をレスポンスとして送信する Web アプリケーションを作ります.以下にその実装を示します (ここでは hello.py として保存します):
from bamboo import (
JsonApiData,
WSGIApp,
WSGIEndpoint,
)
from bamboo.sticky.http import data_format
app = WSGIApp()
class HelloData(JsonApiData):
text: str
@app.route("hello")
class HelloEndpoint(WSGIEndpoint):
@data_format(input=None, output=HelloData)
def do_GET(self) -> None:
body = {"text": "Hello, World!"}
self.send_json(body)
Heroku を利用したデプロイ
Heroku でデプロイするには下記のファイル名と中身を持つファイルが必要です.ここまでで作成したファイルはこちらから参照できます.
- requirements.txt
-i https://pypi.org/simple bamboo-core gunicorn==20.0.4
- Procfile
web: gunicorn hello:app --log-file=-
- runtime.txt
python-3.8.7
上記のファイルを作成したら,新たに Git リポジトリを作成しましょう:
$ git init
$ git add *
$ git commit -m "First commit."
次に Heroku にログインし,リモートリポジトリを作成します:
$ heroku login
$ heroku create
$ git remote
heroku
最後に作成したリモートリポジトリにコミット内容をプッシュすることでデプロイを行います (デフォルトのブランチが main の場合は master ではなく main をプッシュしてください):
$ git push heroku master [or main]
上記コマンドを実行するとデプロイが開始し,正常に完了すると
remote: https://XXXXXXXXXXXXXXXXXXX.herokuapp.com/ deployed to Heroku
のようなメッセージが出力されるはずです.特に https://XXXXXXXXXXXXXXXXXXX.herokuapp.com/
の部分はデプロイされたアプリケーションのホスト名なので控えておきましょう.
通信テスト
デプロイが無事完了したらリクエストを送ってみましょう.
from bamboo.request import https
def main(root: str):
uri = f"{root}/hello"
with https.get(uri) as res:
if res.ok:
body = json.loads(res.content)
print(f"Response: {body['text']}")
else:
print(f"Error occured. Status code: {res.status_code}")
if __name__ == "__main__":
# TODO EDIT host name
# 控えておいたホスト名に編集する
root = "https://XXXXXXXXXXXXXXXXXXXX.herokuapp.com"
main(root)