Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 2Web ホスティング、API(Lambda)、データ(AppSync + DynamoDB)、認証(Cognito)フロントエンド + API のデプロイサイクルが速い
TerraformECS Fargate、Step Functions、SQS、S3、ECR、CodeBuild、VPC計算リソースの精密な制御と、イメージ署名のようなセキュリティゲートの定義が必要

環境分離

developmain の 2 環境を運用し、Terraform ワークスペースと Amplify ブランチデプロイによって完全に分離しています。

項目developmain
証明モード実 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 証明を前提にしています。

全体構成図

AWS 全体構成図 図: STARK Ballot Simulator の AWS 全体構成。Amplify 管理領域(上)と Terraform 管理領域(下)のハイブリッド構成。

サービス一覧

本システムで使用する主要な AWS サービスと、その役割の概要です。

Amplify 管理

サービスリソース役割
Amplify HostingWeb アプリNext.js のビルド・ホスティング
API Gateway (HTTP API)stark-ballot-simulator-hono-api/api/* ルートのプロキシ
Lambdahono-apiHono フレームワークによる API 処理
Lambdaprover-dispatch-proxySQS 受信 → Step Functions 起動
Lambdafinalize-callback-runnerStep Functions コールバック → セッション更新
Lambdaverifier-service-runnerSTARK レシート検証の実行
AppSync + DynamoDBデータモデルセッション・投票・集計結果の永続化
CognitoIdentity Poolゲスト認証(IAM 一時クレデンシャル)

Terraform 管理

サービスリソース役割
ECS FargateプローバータスクzkVM ホストバイナリによる STARK 証明生成
Step Functionsプローバーディスパッチャーイメージ署名検証 → ECS 実行 → コールバック
SQSワークキュー + DLQ非同期証明リクエストのバッファリング
S3証明バンドルバケット入力・実行成果物・公開バンドル(bundle.zip)の保存
ECRイメージリポジトリプローバーコンテナイメージの管理
CodeBuildビルドプロジェクトDocker イメージのビルド(署名は ECR 設定に依存)
Lambdacheck-image-signatureECR イメージ署名の実行前検証
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 など)の詳細は トポロジー非同期プローバー を参照してください。

この部に含まれる章