
はじめに
この記事の結論: AWSなどの料金がかかるインフラ系のサービスを利用するときは、ChatGPTなどのLLMに聞くことも便利だが、自分の目で一時資料を確認することが大切
どういった機能が作りたかったのか
このセクションの概要: 私が開発しているAI投資ツールKabuScanで、LLMを使用した長時間の処理を実装したかった。通常Next.jsのサーバーでの処理では、実現できなく、AWS Batchを利用することを検討した
KabuScanについて
-
KabuScanって?: KabuScanは私が開発するAI投資分析サービスのことです。
-
どんな機能があるのか: KabuScanの主な機能は以下のとおりです。
- AIスクリーニング: AIが自動で日系企業の全銘柄の分析を行なってくれます
- AIファンダメンタルズ分析: AIが企業ごとに財務安定性や成長性を分析してくれます
- チャート分析: 基本的なチャートの分析手法がまるっと使えます
今回追加したかった機能について
- 決算短信から数値を抽出する処理: 決算短信から、売上高、営業利益、経常利益といった企業の経営成績に関連する数値を抽出する機能を実装したかった
- 課題となった点: pdfのような非構造データは、LLMを利用した実装が最適であると判断し、OpenAIのAPIを利用して実装を行なった。しかし、後述するNext.jsのセッションの問題で、そのままapiとしてサーバーを立ち上げるだけでは不十分であった。
簡単な初期実装の紹介
- コードのスケッチ
- 説明
上記コードのように、next.jsのfetchを利用して、apiを呼び出し、同一サーバー内で、route.ts以下でLLMを呼び出す処理を実装していました。
Next.jsでのセッションの問題
- 1.セッション切れ: Next.jsではブラウザとサーバー間のセッションが切れてしまうと、動いているプロセスも終了してしまうっぽいです。そのため、たとえばPCがスリープモードになるなどするだけで、長めの処理は中断してしまいます。今回のLLMを使った実装はまさに長めの処理時間を必要とするため、ナイーブな実装では上記の問題がクリティカルでした。
- 2.Amplifyのtimeout: また、Amplifyでデプロイをする場合、AWS Lambdaの最大timeoutが15分であることから、そもそも15分を超える処理もできない状況でした。
- 3.Load Balancer: さらにさらに、ALBなどを配置すると5分以上セッションを保てないなどもあるらしく、インフラ周りの制約も今回の実装とは不向きでした。
ChatGPTに聞いてみた
- ChatGPT: 今更解説は不要ですね!みんな大好きChatGPTです!今回は推論モデルの中でも最強格のChatGpt o3を使いました。
- o3の回答


- AWS Batch: とりあえずAWS Batchを使ったらバッチ処理ができそう。バッチ処理ならjobとしてサービスから切り離せるからセッション問題も確かに解決できそう!しかも安くできるらしい!と思っていました。。。
- o3にAWS Batchの安価な実行について聞いてみた:

- AWS BatchのFagateは実行時課金らしい: ChatGPT曰くBatch処理で使うだけのvcpuやメモリが課金対象とのこと。つまり月一回の実行程度なら大した額にはならないっぽい!!
- 表にするとこんな感じでしょうか
使用サービス | 長時間処理 | 料金 |
---|---|---|
Amplify | x[15分まで] | ⚪︎ |
EC2 | △[セッションが切れたら終了] | ⚪︎ |
Batch | ⚪︎ | ⚪︎[gpt曰く] |
早速実装してみた
- バッチ処理の実装はこんな感じ
- 実行もうまくいった!セッション問題も解決した!: 全てが完璧にうまくいっています。
- KabuScan上ではこんな感じになった

めちゃくちゃ良い感じ!!
1ヶ月後
- 何気なくAWSのコンソールを見ていると

- 請求料金: なんと170ドル!日本円にして24,504円!もちろん、route53などの料金もありますので、一時的な額も含まれていますが、Batch導入前後で毎日3〜6ドル課金が上乗せされていますので、結構な額だなという印象です。

- 全然スポット料金ではなかった: 普通にアイドル時間も課金されてますよねこれ
終わりに
今回は、実際に私がChatGPTに言われたままに何も考えずに、AWS Batchを導入したら、全然安くなかったという話。ただサーバー上で長時間処理をするわけにもいかないので、泣く泣く導入を続けています。今回こういった経験を通して、やはり1時情報に目を通すのは大切であると、ひしひしと感じました。
あと、何か良い他の方法とかございましたら、教えてください😵