SPARKCREATIVE Tech Blog

https://www.spark-creative.jp/

Heroku + Python + githubで簡単デプロイ

こんにちは!!!クライアントエンジニアの小林です。

今回はHerokuにPythonアプリをデプロイする方法をご紹介します。

公式のチュートリアル(Heroku スターターガイド (Python) | Heroku Dev Center)もあるのですが、使用しているツールがHerokuCLIというHeroku独自+コマンド操作のもので地味に面倒です。

なので!!! もっと簡単にできるgithub環境を使っていきます。

デプロイすることまでが目的ですので、最小構成で作っていきます。

Herokuとは?

Heroku はコンテナベースのクラウド型 PaaS(サービスとしてのプラットフォーム)です。
jp.heroku.com

PaaS(Platform as a Service)とはクラウドにあるプラットフォームが利用できるサービスです。
www.itmanage.co.jp

AWS(Amazon Web Services)の機能を絞って扱いやすくした感じだと思っています。
AWS使ったことないんですが。

私の作業環境

githubリポジトリさえ使っていただければ、他は好みの環境でいいと思います。
macは分からない。。。

環境構築に必要なファイル

一覧

これから作成する4つのファイル


これらはリソース直下に配置してください。
別階層に配置するとHerokuが読み取ってくれずに起動できなくなります。

vscode
github
f:id:spark-kobayashi-arata:20211201104758p:plain f:id:spark-kobayashi-arata:20211201101010p:plain

main.py

import datetime as dt
import pandas as pd

def test():
    print('hello world!!')
    print(dt.datetime.utcnow().strftime('%Y/%m/%d %H:%M'))
    print(pd.DataFrame(columns=['A', 'B', 'C'], index=[i for i in range(2)]))

test()
hello world!!
2021/11/22 08:53
     A    B    C
0  NaN  NaN  NaN
1  NaN  NaN  NaN

動作確認用のコードです。

Procfile

bot: python main.py

拡張子が無い不思議なファイルで、環境構築で一番重要でそして面倒なところです。

これはアプリの実行方法を指定しており、bot(アプリ名)はmain.pyをpythonで実行させるよ!!!と書いています。

requirements.txt

pandas==1.2.4

使用ライブラリとバージョンをセットで指定します。
sysdatetimeなどの標準ライブラリは指定する必要がありません。

runtime.txt

python-3.9.5

Pythonのバージョンを指定しています。

デプロイ準備

Herokuにアプリを作成

f:id:spark-kobayashi-arata:20211201095757p:plain
  1. Herokuにログイン
  2. 右上のnewボタンを選択
  3. Create new appを選択
f:id:spark-kobayashi-arata:20211201095804p:plain
  1. App nameにアプリ名を入力
  2. リージョンはアメリカのまま
  3. Create appを選択、Herokuにアプリが作成されます

Herokuとgithubの連携

f:id:spark-kobayashi-arata:20211201095828p:plain
  1. Create appを選択後、自動的にデプロイ画面に飛びます
  2. GitHubを選択、Connect to GitHubを選択
  3. Authorize herokuを選択、連携させます

デプロイ対象のリポジトリを選択

f:id:spark-kobayashi-arata:20211201100705p:plain
  1. repo-nameにリポジトリ名を入力
  2. 該当リポジトリ一覧が表示されるのでConnectを選択
  3. デプロイ準備!!!

リポジトリを変更したい場合

デプロイ対象のリポジトリを変えたい場合や、デプロイ対象のリポジトリを選択での手順を間違えた方向け。

f:id:spark-kobayashi-arata:20211201121920p:plain
  1. Disconnectを選択
  2. 再度、デプロイ対象のリポジトリを選択の手順を行う
  3. 以上!!!

デプロイ

手動/自動デプロイの違い

自動 リポジトリに変更があった場合(主にプッシュ)に自動的にデプロイを実行してくれる
手動 デプロイボタンを押さない限りは何も起きない

手動デプロイ手順

f:id:spark-kobayashi-arata:20211201100717p:plain
  1. Deploy Branchを選択
  2. ビルドログを眺めて待つ!!!
  3. 完了!!!
ビルドログ
f:id:spark-kobayashi-arata:20211201101132g:plain

自動デプロイ手順

自動デプロイを設定後、リポジトリに変更が発生するとデプロイが実行されます。

f:id:spark-kobayashi-arata:20211201100900p:plain
  1. Enable Automatic Deploysを選択
  2. 完了!!!

動作確認

アプリ起動

f:id:spark-kobayashi-arata:20211201101002p:plain
  1. 鉛筆アイコンを選択
  2. トグルボタンを選択
  3. Confirmを選択
  4. 起動完了!!!
起動手順
f:id:spark-kobayashi-arata:20211201101021g:plain

ログ確認

f:id:spark-kobayashi-arata:20211201101005p:plain
  1. 右上のMoreを選択し、View logsを選択
  2. ログ見れた!!!

アプリ終了

終了手順
f:id:spark-kobayashi-arata:20211201124304g:plain

おわり!!!

そんなこんなで最小構成の構築と動作確認までが終わりました。
お疲れさまでした!!!

元々は環境構築+アドオン紹介の予定でしたが、思いのほか長くなってしまったので、アドオン紹介等はまた次回に書きたいと思います。

以下次回の紹介予定(未定)です。

  • 環境変数の扱い
  • CSV入出力を可能にするアドオン
  • IPアドレスを固定するアドオン
  • プログラムの定期実行のやり方
  • 終了や再起動シグナルを受け取る方法