自動売買

【完全記録】ChatGPTで仮想通貨自動売買ボットを作る|環境構築編その2【EC2×PostgreSQL×Python連携】

【完全記録】ChatGPTで仮想通貨自動売買ボットを作る|環境構築編その2【EC2×PostgreSQL×Python連携】

はじめに

当記事は「ChatGPTにお任せで自動売買Botを作成してみよう」というチャレンジの記録です。
ChatGPTに主に全体計画を立ててもらっています。

今回は、その全体計画のうち、以下のフェーズ1に該当する内容の続きです。

今回はこの中でも 「取引所APIの学習 & 接続(Bybit & Bitget)」 にあたる部分にフォーカスしています。

なお、前回記事でもこの内容を取り扱っていましたが、今回改めて記事として取り上げた理由は以下の通りです。

  • データ収集は常に稼働している必要がある
    • この大前提をChatGPTに明確に伝えていなかった
    • そのため、ChatGPTがクラウド前提ではなく、自分のPCでの環境構築を提案してしまった

という訳で、前回の記事は自分のPCでの環境構築で、今回の記事はクラウドでの環境構築記事になります。

ちなみに補足ですが、ChatGPTは 「記憶の保存」が苦手 な様子で、その都度提案される 全体計画が微妙に変わる傾向があります。

そのため、当ブログ記事の内容も「おおよその流れ」は沿っていますが、必ずしも全体計画に正確に対応しているわけではありません。

AWS×EC2の選択理由と現状

なぜクラウドは「AWS」を選んだのか?

クラウドサービスの中でも、AWS(Amazon Web Services)を選んだ理由はシンプル。

「AWSが一番クラウドサービスの中で知識があるから」

他のクラウド(GCPやAzureなど)も存在しますが、AWS以外は触れた経験がなく、過去に資格取得の勉強をしたこともあり、唯一知っているクラウドとして採用しました。

なぜ仮想サーバーに「EC2」を選んだのか?

数あるAWSのサービスの中で、EC2を選んだのは「唯一使ったことがあったから」というのが最大の理由です。

本来であれば、以下のような選択肢も検討すべきではあります:

  • Lambda(サーバーレス実行)
  • CloudFormation(インフラ構成管理)
  • RDSやRedshift(マネージドDB)

…ですが、最終的には

「ちょっとだけ知ってるから」

という理由で AWS × EC2の構成 に決定しました。

今後の展望について

EC2の構成に関しては、今後の開発の進行や自動化の必要性によって変更の可能性もあります。

とはいえ、「一旦構築してしまったから、しばらくはこの構成で継続する」という感じです。

EC2のセットアップ

AWS上に**EC2(仮想マシン)**をセットアップしました。

EC2の基本構成

EC2は仮想マシンだけが提供され、OS以上の層はユーザーが構築・運用する必要がありますが、**AMI(Amazon Machine Image)**というテンプレートを活用すれば、ある程度パッケージ化されているため、それほど大変ではありません。

  • OS:Linux(Ubuntu)
  • インスタンスタイプ:t2.micro(無料利用枠あり)

この構成でまずはスタート。必要に応じてスケールアップ可能なので、最初はシンプルな構成で問題なしです。

リモート接続のための設定(PowerShell接続)

構築したEC2に関しては、毎回AWSにログインして操作するのは面倒なので、PowerShellからSSHでリモート接続できるように設定を行いました。

  • **セキュリティグループ(インバウンドルール)**で、自分のPCから接続するIPアドレスを許可
  • 公開鍵認証を用いたSSH接続設定を実施

PowerShellからSSHで接続する手順

以下のコマンドをPowerShellで実行することで、リモート接続できることを確認済みです。

ssh -i "キーペア名.pem" ubuntu@インスタンスのIPv4アドレス

これで、ローカル環境からサーバー側に安全にアクセス可能になりました。

EC2の整備:PostgreSQLのインストール

次に、データベースとしてPostgreSQLをEC2にインストールします。

目先の目標は「データ収集」であり、まずはその格納先としてEC2上のPostgreSQLを利用します。
※将来的にはAWSのDBサービス(RDSなど)に置き換える可能性もあります。

PostgreSQLのインストール

以下のコマンドでPostgreSQLをインストールします。

sudo apt install postgresql postgresql-contrib -y

※細かい手順は以降省略しますが、 全てChatGPTの指示で進めています。

エラーで躓いたポイントの整理

インストール後の流れとして、以下の作業を実施しました。

  1. PostgreSQLの自動起動を設定
     👉 EC2が再起動した場合でも、自動でPostgreSQLが起動するように設定します。
  2. PostgreSQLにログインしてデータベースを作成
     👉 データ収集用のDBを作って準備します。
  3. Pythonからの接続を試す
     👉 Anaconda Promptでスクリプトを実行し、EC2上のPostgreSQLと接続できるか検証します。

イメージで理解する:EC2・PowerShell・Anaconda Promptの関係性

色々な環境名が登場してごちゃついてきたので、ここらで整理します。

以下の図は、これまでの作業におけるPowerShell・Anaconda Prompt・EC2の役割と関係性を表したものです。

  • PowerShell:EC2へのSSH接続・初期設定、環境整備などに使用
  • Anaconda Prompt:ローカルでPythonを実行し、EC2のDBと通信
  • EC2:PostgreSQLをホスティングし、最終的にはBotの処理も稼働予定

こんな感じの役割分担で作業をしており、現在はEC2にPostgreSQLをインストールするところまで完了しています。
次のステップでは、Python(Anaconda Prompt)からPostgreSQLへの接続テストへ進みます。

Pythonからの接続エラー①

という訳で、早速 Anaconda Prompt から PostgreSQL に接続を試みたところ次のエラーが出ました。

(venv) (base) C:\パス 20250211_test_postgresql.py
❌ 接続エラー: connection to server at "XX.XXX.XXX.XXX", port 5432 failed: Connection refused (0x0000274D/10061)
Is the server running on that host and accepting TCP/IP connections?

エラーの原因と対応

結論から言うと、エラーの原因は PostgreSQL の設定ファイル「postgresql.conf」 の以下項目:

listen_addresses = 'localhost'

この設定のままだと、EC2 内部でしか PostgreSQL にアクセスできないため、外部(自分のPC)から接続できません

対応方法

外部からの接続を許可するには、listen_addresses の値を次のように修正します:

listen_addresses = '*'

この * は「すべてのIPアドレスからの接続を受け付ける」ことを意味します。

設定ファイルのパスを調べるには、以下のコマンドを使用しました。

psql -U postgres -c "SHOW config_file;"

このコマンドで postgresql.conf の正確なパスが表示されるので、そのファイルを編集して保存します。

ちなみに、最終的には Python スクリプトも EC2上で稼働させる予定です。

ではなぜ自分のPC(Anaconda Prompt)からPostgreSQLに接続を試しているのかというと、まずはローカルPCから色々とテストが出来ると便利なので、接続を試しています。

Pythonからの接続エラー②

先ほどのエラー(postgresql.conf)を修正後、再度接続を試みたところ、別のエラーが表示されました。

(venv) (base) C:パス>python 20250211_test_postgresql.py
❌ 接続エラー: connection to server at "XX.XXX.XXX.XXX", port 5432 failed: FATAL: no pg_hba.conf entry for host "XX.XXX.XXX.XXX", user "USER", database "user_db", SSL encryption connection to server at "XX.XXX.XXX.XXX", port 5432 failed: FATAL: no pg_hba.conf entry for host "XX.XXX.XXX.XXX", user "USER", database "user_db", no encryption

この原因は、設定ファイル「pg_hba.conf」の内容にありました。こちらも、前回と同様にファイルの所在を検索・修正することで対応しました。末尾に接続元のIPアドレスを許可する一行を追記しています。

PostgreSQLリモート接続に必要な2つの設定ファイル

以上2つのエラーを整理すると、PostgreSQLに外部から接続するためには以下2つの設定ファイルの修正が必須です。

ファイル名内容注意点
postgresql.confどのIPアドレスからの接続を受け入れるかlisten_addresses を変更しないと外部接続を受け付けない
pg_hba.confどのユーザーが、どのIPから、どのDBにアクセス可能か設定がないと接続は通っても認証エラーになる

📝 要するに:

  • postgresql.conf接続許可の設定
  • pg_hba.conf認証許可の設定

この2つをセットで修正する必要があります。

無事に接続成功!

以上の修正により、Anaconda PromptからPostgreSQLへの接続が正常に完了しました!

(venv) (base) C:\パス>python 20250211_test_postgresql.py
✅ 接続成功!データベース一覧:
('postgres',)
('template1',)
('template0',)
('user_db',)

本記事のまとめ|環境構築編:Python & API接続(AWS活用)

本記事では、以下の内容について実践・記録しました。

実施したこと(今回の進捗)

  • AWS EC2 のセットアップ
  • EC2 に PostgreSQL(DB)をインストール
  • ローカルPCから Python 経由で PostgreSQL に接続

やたらとエラーが出て、進みが遅い状況ですが、これがリアルな自動売買Bot開発の状況です。

ChatGPTの指示を受けつつも、会話の前後がつながらない場面があり、毎回トライ&エラーを繰り返しています。

リアル記録なので、とりあえず覚えている限りは状況を記載しています。

現状のフェーズ整理(振り返り)

本記事は、**自動売買Bot開発の「フェーズ1:基礎学習 & 環境構築(1〜3ヶ月)」**の途中経過です。

フェーズステータス
Python & Git の基礎学習✅ 完了
取引所APIの学習 & 接続(Bybit & Bitget)✅ 完了
データ収集 & 前処理(PostgreSQL + AWS S3)未対応

📍 本記事でようやく「PostgreSQLへの接続」まで完了しましたが、肝心のデータ収集&前処理にはまだ到達していません。

▶ 次回予告

次回はいよいよ、データ収集に取りかかる予定です。

  • ccxt を使ったAPI接続
  • PostgreSQLへのデータ保存
  • テーブル設計に基づくスキーマ連携

など、色々話はありますが、回を費やして記事に出来ればと思います!

-自動売買
-, , , , , , , ,