前回の記事はこちら
前回、ローカル環境で LINE と Llama 2 を連携したチャットボットを開発した。今後の課題に挙げていた 3 つのうち、2 つが解決したため、今回はその内容を書く。結論を言うと、GCP を利用することで 2 つの課題を同時に解決した。
解決した課題
1. ローカル以外でも実行できるようにする
まだローカル環境で ngrok を起動した上で実行することしかできない。ざっと調べた感じ Heroku を使っている人が多そうなのでそうするか、他にどういう選択肢があるかはもう少し考えたい。2. トークンの実装方法を改良する
とりあえず動くものを作りたかった結果、ソースコード上に値をべた書きしてしまっている。こちらも改良の余地あり。
GCP の導入
Google Cloud Platform の App Engine を使った。理由は特にないが、以前ほんの少し GAS でアプリを作りかけたことがあったことと、なんとなく使いやすそうな見た目をしていたから。(ダッシュボードのデザインなど)
Google App Engine って何?という知識レベルだったが、2 時間程度でアプリが動作するところまで進められた。公式ガイドを読みながら進めた。
1. Google Cloud CLI のインストール
クイックスタート: Google Cloud CLI をインストールする | Google Cloud CLI のドキュメント
上記ガイドに従い、Google Cloud CLI インストーラをダウンロード。セットアップウィザードが起動し、Next をぽちぽち押した後、以下のプロンプトが起動した。y を押すと認証へ移る。Google アカウントでログインして、認証完了。
次に、使うプロジェクトを指定するよう促されるので、適当なものを 1 ~ 3 から選ぶ。自分は 1 にした。
これで、Google Cloud CLI を使う準備が整った。デプロイ時など、このコマンドプロンプト(Google Cloud SDK Shell)で gcloud コマンドを実行して操作することになる。
2. Google App Engine にデプロイする資材を準備する
App Engine の初期画面はこんな感じ。とりあえずデプロイコマンドを投げたらファイルがないと怒られたため、必要な資材を準備していく。
結論から言うと、必要だったのは以下の 3 ファイル。
- app.yaml
- main.py(前回の記事で作ったものがベース)
- requirements.txt
app.yaml
App Engine へのデプロイにおいて必須のファイル。何を書くかは個々人によるが、python3 の場合、runtime の記述は必須。
今回は以下のように作った。デフォルトインスタンスが F1 のため、おそらく instance_class の設定は不要だが、念のため記述した。
# 必須 runtime: python310 # 任意 instance_class: F1 # default instance env_variables: CHANNEL_ACCESS_TOKEN: "<LINEのチャネルアクセストークン>" CHANNEL_SECRET: "<LINEのチャネルシークレット>" REPLICATE_API_TOKEN: "<Replicate のAPIトークン>"
main.py
app.yaml で環境変数を設定したため、前回までべた書きしていた LINE のチャネルアクセストークン、チャネルシークレットを修正した。
修正後のコードは以下の通り。os.environ で yaml ファイルに記述した環境変数を利用できる。
# LINE のチャネルアクセストークン設定 configuration = Configuration(access_token=os.environ['CHANNEL_ACCESS_TOKEN']) # LINE の秘密鍵設定 handler = WebhookHandler(os.environ['CHANNEL_SECRET'])
requirements.txt
依存関係を定義するために必要なファイル。ローカルの開発環境下(自分の場合は Anaconda 仮想環境)で以下のコマンドを実行して作成した。
pip freeze > requirements.txt
ここで注意。pip でインストールしたものは問題ないが、conda でインストールしたものたちのバージョン値が正しく設定されない。
conda list で該当のパッケージのバージョンを確認し、手動で requirements.txt を修正した。
3. デプロイ
Google Cloud SDK Shell でデプロイする資材の配下まで cd して以下のコマンドを実行する。
gcloud app deploy
ビルド結果はブラウザ上で Cloud Build から確認できる。
4. LINE の Webhook URL を修正
Google Cloud SDK Shell で以下のコマンドを実行し、URL を確認する。
gcloud app browse
確認した URL をコピーし、LINE Developers 側に設定。検証して成功が出たら OK。
動作確認
無事に動作した。
補足: App Engine の料金について
完全無料とはいかず、無償枠を超えるとインスタンスの稼働時間によって加算される(いわゆる従量課金)。また、インスタンスは最後のリクエストを処理してから15分後に終了する仕様となっている。
自分は1円を超えたらメール通知するよう設定している(デフォルト設定でおそらくそうなっている)。
課金に関する詳細は以下を参照。
割り当てと上限 | Google App Engine スタンダード環境のドキュメント | Google Cloud
料金 | App Engine | Google Cloud
参考
- app.yaml の記述について
app.yaml 構成ファイル | Python 3 用 App Engine スタンダード環境 | Google Cloud - requirements.txt の作成について
User Guide - pip documentation v23.3.1