AWS アーキテクチャ
STARK Ballot Simulator の AWS インフラストラクチャ設計を解説します。
本システムは Amplify Gen 2(Web ホスティング + AppSync + DynamoDB + Lambda)と Terraform 管理のプローバーインフラ(SQS + Step Functions + ECS Fargate + S3)を組み合わせたハイブリッド構成を採用しています。Amplify がアプリケーション層を、Terraform が計算集約的な証明生成パイプラインをそれぞれ管理します。
設計思想
なぜハイブリッド構成か
STARK 証明の生成には 16 vCPU / 32 GB メモリで約 6 分を要します。この特性は、API Gateway + Lambda の 15 分タイムアウト制約と相性が悪く、また通常の Web リクエストの処理パターンとも大きく異なります。
そこで本システムでは、責務に応じてインフラ管理を分離しています。
| 管理ツール | 責務 | 理由 |
|---|---|---|
| Amplify Gen 2 | Web ホスティング、API(Lambda)、データ(AppSync + DynamoDB)、認証(Cognito) | フロントエンド + API のデプロイサイクルが速い |
| Terraform | ECS Fargate、Step Functions、SQS、S3、ECR、CodeBuild、VPC | 計算リソースの精密な制御と、イメージ署名のようなセキュリティゲートの定義が必要 |
環境分離
develop と main の 2 環境を運用し、Terraform ワークスペースと Amplify ブランチデプロイによって完全に分離しています。
| 項目 | develop | main |
|---|---|---|
| 証明モード | 実 STARK 証明(64 票で約 370 秒) | 実 STARK 証明(64 票で約 370 秒) |
| S3 ライフサイクル | 7 日 | 30 日 |
| ログ保持期間 | 7 日 | 14 日 |
| CloudTrail | 無効 | 有効(90 日保持) |
注: RISC0_DEV_MODE=1 / USE_MOCK_ZKVM=true は主にローカル同期実行向けの設定です。Terraform 管理の非同期プローバーパス(SQS → Step Functions → ECS)では、実 STARK 証明を前提にしています。
全体構成図
図: STARK Ballot Simulator の AWS 全体構成。Amplify 管理領域(上)と Terraform 管理領域(下)のハイブリッド構成。
サービス一覧
本システムで使用する主要な AWS サービスと、その役割の概要です。
Amplify 管理
| サービス | リソース | 役割 |
|---|---|---|
| Amplify Hosting | Web アプリ | Next.js のビルド・ホスティング |
| API Gateway (HTTP API) | stark-ballot-simulator-hono-api | /api/* ルートのプロキシ |
| Lambda | hono-api | Hono フレームワークによる API 処理 |
| Lambda | prover-dispatch-proxy | SQS 受信 → Step Functions 起動 |
| Lambda | finalize-callback-runner | Step Functions コールバック → セッション更新 |
| Lambda | verifier-service-runner | STARK レシート検証の実行 |
| AppSync + DynamoDB | データモデル | セッション・投票・集計結果の永続化 |
| Cognito | Identity Pool | ゲスト認証(IAM 一時クレデンシャル) |
Terraform 管理
| サービス | リソース | 役割 |
|---|---|---|
| ECS Fargate | プローバータスク | zkVM ホストバイナリによる STARK 証明生成 |
| Step Functions | プローバーディスパッチャー | イメージ署名検証 → ECS 実行 → コールバック |
| SQS | ワークキュー + DLQ | 非同期証明リクエストのバッファリング |
| S3 | 証明バンドルバケット | 入力・実行成果物・公開バンドル(bundle.zip)の保存 |
| ECR | イメージリポジトリ | プローバーコンテナイメージの管理 |
| CodeBuild | ビルドプロジェクト | Docker イメージのビルド(署名は ECR 設定に依存) |
| Lambda | check-image-signature | ECR イメージ署名の実行前検証 |
| VPC | パブリックサブネット | ECS タスクのネットワーク |
| CloudWatch | ログ群 | ECS / Step Functions / CodeBuild のログ |
| CloudTrail | 監査証跡(main のみ) | API 呼び出しの監査ログ |
Amplify と Terraform の境界
2 つのインフラ管理ツール間の連携は、ARN と環境変数によって行われます。
flowchart TB
subgraph TF["Terraform 管理"]
OUT["出力値<br/>SFN ARN / SQS URL / S3 バケット名"]
IN["入力変数<br/>finalize_callback_lambda_arn"]
end
subgraph AMP["Amplify Gen 2 管理"]
ENV["環境変数"]
CB["finalize-callback-runner<br/>Lambda ARN"]
end
OUT --> ENV
CB --> IN
Terraform の出力値(Step Functions ARN、SQS URL、S3 バケット名など)は、Amplify の環境変数として設定され、Lambda 関数から参照されます。 実行時フロー(SQS → Step Functions → ECS など)の詳細は トポロジー と 非同期プローバー を参照してください。