.env.example をコピーして .env を作成する。
cp .env.example .env必要に応じて .env を編集する(バケット名など)。
S3_BUCKET_NAME=auto-trade-repo-123456789012-ap-northeast-1-anコンテナを起動する。
docker compose up -dすでにコンテナを起動済みの場合(依存パッケージの変更後など)はイメージを再ビルドする。
docker compose up -d --buildlocalhostでアクセスできる。
- http://localhost/api/* → Python (FastAPI)
- 上記以外 → HTMLファイルを返却
ローカル開発では本番のS3の代わりにMinIOコンテナを使用する。
| 用途 | URL |
|---|---|
| S3互換APIエンドポイント | http://localhost:9000 |
| Webコンソール | http://localhost:9001 |
Webコンソールへのログイン
| 項目 | 値 |
|---|---|
| ユーザー名 | minioadmin |
| パスワード | minioadmin |
バケットの作成
- Webコンソール(http://localhost:9001)にログイン
- 左メニューの「Buckets」→「Create Bucket」をクリック
- Bucket Name に
.envのS3_BUCKET_NAMEと同じ値を入力して「Create Bucket」をクリック
バケット・フォルダ構成
S3_BUCKET_NAME で指定したバケットに以下の構成でファイルを配置する。
{バケット名}/
├── predictions/
│ └── n225.jsonl
└── models/
└── {ticker}.{version}.onnx
サンプルの n225.jsonl は samples/predictions/n225.jsonl にある。Webコンソールの predictions/ フォルダにアップロードして使用する。
- Terraform >= 1.10
- AWS CLI(
aws configureで認証済み) - tfstate 用 S3 バケットが作成済み(
tfstate-{ACCOUNT_ID}-ap-northeast-1-an)
cd infra/terraform/envs/prod
# terraform.tfvars を作成
cp terraform.tfvars.example terraform.tfvars
# terraform.tfvars を編集して github_org などを設定# 初期化(バケット名は実際のアカウントIDに置き換える)
terraform init -backend-config="bucket=tfstate-{ACCOUNT_ID}-ap-northeast-1-an"ECR が存在しないと GitHub Actions がイメージを push できないため、最初に ECR と OIDC だけを先に apply する。
Step 1: ECR・OIDC を先に apply
terraform apply -target=module.ecr -target=module.oidcStep 2: GitHub Repository Variables を設定
GitHub リポジトリの Settings → Secrets and variables → Actions → Variables タブ → Repository variables に追加する。
| Variable 名 | 設定する値 |
|---|---|
AWS_OIDC_ROLE_ARN |
terraform output github_actions_role_arn の出力値 |
AWS_REGION |
ap-northeast-1 |
ECS_CLUSTER_NAME |
auto-trade-repo-cluster |
ECS_SERVICE_NAME |
auto-trade-repo-service |
Step 3: main ブランチに push → GitHub Actions が ECR にイメージを自動登録
Step 4: terraform.tfvars のイメージ URI を ECR の実際の URL に更新
nginx_image_uri = "{ACCOUNT_ID}.dkr.ecr.ap-northeast-1.amazonaws.com/auto-trade-repo/nginx:latest"
api_image_uri = "{ACCOUNT_ID}.dkr.ecr.ap-northeast-1.amazonaws.com/auto-trade-repo/api:latest"
inference_image_uri = "{ACCOUNT_ID}.dkr.ecr.ap-northeast-1.amazonaws.com/auto-trade-repo/inference:latest"
Step 5: 全体 apply
terraform applydevelop → main の PR をマージすると GitHub Actions が自動で以下を実行する。
- nginx・api・inference イメージをビルドして ECR に push
- ECS サービスを
--force-new-deploymentで更新し、新タスクが安定するまで待機
インフラ構成(Terraform)を変更した場合は別途 terraform apply が必要。
推論コンテナはS3からモデルを取得して推論を実行し、結果を predictions/{ticker}.jsonl に追記して終了する。バッチ動作のため docker run で単発実行する。
実行スクリプトについて
| ファイル | 用途 |
|---|---|
run.py |
本番用。推論ロジックはここに実装する。 |
run.sample.py |
動作確認用のサンプル実装。 |
どちらを entry.py(コンテナ内で実行されるスクリプト)として使用するかは、ビルド時の USE_REAL_INFERENCE フラグで切り替える。
USE_REAL_INFERENCE |
使用されるスクリプト |
|---|---|
false(デフォルト) |
run.sample.py |
true |
run.py |
イメージのビルド(ローカル)
# run.sample.py を使う(デフォルト、--build-arg 不要)
docker build -f infra/docker/inference/Dockerfile -t inference .
# run.py を使う
docker build --build-arg USE_REAL_INFERENCE=true -f infra/docker/inference/Dockerfile -t inference .GitHub Actions での切り替え
GitHub リポジトリの Settings → Secrets and variables → Actions → Variables に以下を追加する。
| Variable 名 | 値 |
|---|---|
USE_REAL_INFERENCE |
false(サンプル)/ true(本番) |
実行コマンド(1日分)
環境変数 TARGET_DATE で推論対象日付を指定する。省略すると今日(JST)が使われる。
docker run --rm --network auto-trade-repo_default \
-e S3_BUCKET_NAME=auto-trade-repo-123456789012-ap-northeast-1-an \
-e ENDPOINT_URL=http://minio:9000 \
-e ACCESS_KEY=minioadmin \
-e SECRET_KEY=minioadmin \
-e TARGET_DATE=2026-04-27 \
inference実行コマンド(日付範囲のループ)
以下は4月1日〜5月31日の全日付分を連続実行する例。
python3 -c "from datetime import date,timedelta; d,e=date(2026,4,1),date(2026,5,31); [print(d+timedelta(i)) for i in range((e-d).days+1)]" | \
while read d; do
docker run --rm --network auto-trade-repo_default \
-e S3_BUCKET_NAME=auto-trade-repo-123456789012-ap-northeast-1-an \
-e ENDPOINT_URL=http://minio:9000 \
-e ACCESS_KEY=minioadmin \
-e SECRET_KEY=minioadmin \
-e TARGET_DATE="$d" \
inference
done上記の docker run を簡単に実行できるラッパースクリプト。イメージのビルドや Compose ネットワークの取得を自動で行う。事前に docker compose up で MinIO が起動している必要がある。
# 1日指定(mmdd形式)
./test-inference.sh 0501
# 1日指定(yyyymmdd形式)
./test-inference.sh 20260501
# 複数日指定
./test-inference.sh 0501 0503 0507
# 日付範囲指定(mmdd-mmdd形式)
./test-inference.sh 0501-0510
# 日付範囲と個別日付の組み合わせ
./test-inference.sh 0501-0510 0515 0520-0525オプション
| オプション | 説明 |
|---|---|
--build |
イメージを強制再ビルドする |
--real |
USE_REAL_INFERENCE=true でビルドする(デフォルトは false) |
# イメージを再ビルドしてから実行
./test-inference.sh --build 0501
# run.py を使って実行
./test-inference.sh --real 0501注意: スクリプト実行中は MinIO WebUI からのファイルダウンロードが失敗することがある。これは書き込み処理中に発生する MinIO Console 固有の現象で、スクリプト完了後にダウンロードすれば問題ない。