目次

Amazon Managed Blockchain 完全ガイド v2.0(2026年最新対応)

Hyperledger Fabric・Ethereum ノードの完全マネージド運用・ブロックチェーンネットワーク構築プラットフォーム

Amazon Managed Blockchain(AMB) は、「Hyperledger Fabric 2.2・Ethereum ノードを完全マネージドで実行し、許可型・パブリック型ブロックチェーンネットワークを構築するサービス」 である。ブロックチェーンノードのプロビジョニング・証明書管理・ネットワーク監視・スケーリングを自動化。サプライチェーン追跡・金融トランザクション・資産デジタル化・NFT プラットフォーム等の本番ブロックチェーンアプリケーションを構築可能。HIPAA・SOC 2 準拠。

⚠️ 重要: Amazon Managed Blockchain(Hyperledger Fabric)は 2023年から新規受付を停止 しており、既存ユーザーのみ利用可能。新規プロジェクトは Amazon Managed Blockchain Access(パブリックチェーン向け)を推奨。


目次

  1. ドキュメントメタデータ
  2. 本質・課題・特徴
  3. このサービスを選ぶ理由
  4. アーキテクチャと設計原則
  5. コアコンポーネント
  6. 主要ユースケース
  7. 設定・操作の具体例
  8. 類似サービス比較表
  9. ベストプラクティス
  10. トラブルシューティング表
  11. 2025-2026 最新動向
  12. 学習リソース・参考文献
  13. 実装例・チェックリスト
  14. まとめ

ドキュメントメタデータ

  • 最終更新: 2026-04-27
  • バージョン: v2.0
  • 対象者: Blockchain Architect、Supply Chain Manager、Consortium Lead、Smart Contract Developer、Compliance Officer
  • 難易度: 上級~エンタープライズレベル
  • 関連サービス: EC2、Lambda、CloudWatch、IAM、KMS、S3、API Gateway
  • 提供開始: 2018年(GA)
  • 重要: 2023年から Hyperledger Fabric 新規受付停止、既存ユーザーのみ継続利用可

本質・課題・特徴

本質

Amazon Managed Blockchain は 「エンタープライズブロックチェーンの完全マネージドプラットフォーム」 である:

  • Hyperledger Fabric ネットワーク完全自動化:CA・Orderer・Peer ノード・Channel 管理を自動化
  • マルチメンバーコンソーシアム対応:複数組織が独立ノードを管理しながら共有台帳を運用
  • パブリック Ethereum ノード対応:Mainnet・Sepolia テストネットの フルノード自動管理
  • トランザクション検証・監査ログ:CloudTrail で全操作を記録、コンプライアンス準拠
  • AWS IAM・KMS 統合:ノード認証・暗号化キーを一元管理
  • スケーラブルアーキテクチャ:Channel 数・Peer 数・Transaction throughput を自動スケール

従来の課題

課題 従来方式(オンプレ Hyperledger Fabric) Managed Blockchain による解決
ノード構築・管理 CA・Orderer・Peer 構成が複雑 自動プロビジョニング・マネージド管理
証明書管理 手動更新・失効管理が負担 自動ローテーション・ライフサイクル管理
ネットワーク監視 Prometheus・Grafana 自前構築必要 CloudWatch 統合監視
スケーリング キャパシティ計画・ノード追加が複雑 自動スケール・エラスティック
マルチメンバー管理 各組織が独立インフラ保持→コスト増 Managed Blockchain が統合管理
Chaincode デプロイ CI/CD パイプライン自前実装 AWS CodePipeline 統合可能

特徴

  1. Hyperledger Fabric 2.2:v1.4 からの大幅改善(Raft Consensus・Chaincode-as-a-Service)
  2. Network・Member・Node 概念:多層階構造でのアクセス制御
  3. Channel 別トランザクション分離:異なる参加者グループの独立台帳運用
  4. Chaincode(スマートコントラクト):Go・Node.js・Java での実装
  5. Ethereum Mainnet/Testnet:パブリックチェーン接続
  6. VPC Endpoint:プライベート接続で外部インターネット遮断

このサービスを選ぶ理由

⚠️ 重要な注意事項

Amazon Managed Blockchain(Hyperledger Fabric)は 2023年から新規受付停止 しており、既存ユーザーのみ利用可能。新規プロジェクトは以下を検討してください:

  • Amazon Managed Blockchain Access(Ethereum・Bitcoin・Polygon):パブリックチェーン向け
  • Amazon QLDB:中央集権的な不変台帳(Blockchain 不要な場合)
  • 自社ホスティング Hyperledger Fabric:AWS EC2 での構築

既存ユーザーの場合:Managed Blockchain が有効な理由

  1. 複雑なノード管理を完全排除

    • EC2 で Hyperledger Fabric を自構築する場合、CA・Peer・Orderer・Kafka の構成・監視が非常に複雑
    • Managed Blockchain は これらを完全自動化
  2. マルチメンバーコンソーシアム構築

    • 複数組織(銀行・保険・商社)が独立ノードを管理しながら共有台帳を保持
    • 中央集権的でない分散ガバナンス実現
  3. 規制コンプライアンス自動化

    • CloudTrail で全トランザクション記録
    • KMS で暗号化キー一元管理
    • HIPAA・SOC 2 準拠で金融機関対応
  4. スケーラビリティ

    • Channel・Peer 数の自動スケール
    • TPS(Transactions Per Second)増加に対応

具体的なユースケース

  1. サプライチェーン追跡(食品安全・医薬品トレーサビリティ)

    • 生産者 → 流通業者 → 小売 → 消費者 の全段階で改ざん防止記録
    • Barcode / QR Code で Blockchain 上のトランザクション参照
  2. 金融機関コンソーシアムの貿易金融プラットフォーム

    • 複数銀行が LC(信用状)・BL(船荷証券)をデジタル化
    • スマートコントラクトで自動決済
  3. NFT・デジタルアセットプラットフォーム

    • Ethereum ノード接続で NFT マーケットプレイス構築
    • オンチェーン資産管理
  4. 不動産登記・資産所有権移転

    • 土地・建物の所有権を Blockchain で記録
    • 改ざん防止・タイムスタンプ付き登記簿
  5. 医療機関間患者同意書・データ共有

    • 患者同意をスマートコントラクトで管理
    • 医療データ共有のトレーサビリティ確保
  6. コンソーシアムカーボンクレジット取引

    • 企業の脱炭素行動をトークン化
    • 取引履歴の改ざん防止
  7. 知的財産権管理・ライセンス管理

    • 著作権者・利用者・使用料支払いを Blockchain で一元管理
    • スマートコントラクトで自動ロイヤルティ支払い
  8. 医療用医薬品の真正性確認

    • Barcode から Blockchain トランザクション参照
    • 偽造医薬品排除
  9. ワーキンググループコンソーシアムの運営

    • 業界団体・規制機関・事業者が共同で Blockchain ネットワーク運営
    • 透明なガバナンス実現
  10. 複数企業の共同 Chaincode 開発・運営

    • 各企業が独立 Peer ノードを管理
    • 共通スマートコントラクトで相互取引を記録・検証

アーキテクチャと設計原則

Managed Blockchain ネットワーク階層

AWS Managed Blockchain
│
├─ Network
│  ├─ Name: trade-finance-network
│  ├─ Framework: Hyperledger Fabric v2.2
│  ├─ Consensus: Raft
│  │
│  ├─ Member 1(Bank A)
│  │  ├─ CA(Certificate Authority)
│  │  ├─ Peer0(Endorsing Peer)
│  │  ├─ Peer1(Committing Peer)
│  │  └─ Admin Client(Fabric CLI)
│  │
│  ├─ Member 2(Bank B)
│  │  ├─ CA
│  │  ├─ Peer0
│  │  ├─ Peer1
│  │  └─ Admin Client
│  │
│  └─ Managed Services
│     ├─ Orderer(Raft consensus manager)
│     ├─ Network monitoring(CloudWatch)
│     └─ Certificate rotation(KMS)
│
├─ Channel(LC - Letter of Credit)
│  ├─ Channel ID: lc-channel
│  ├─ Members: Bank A, Bank B, Bank C
│  ├─ Chaincode: trade-finance-lc-contract
│  └─ Ledger:
│     └─ State DB(CouchDB)
│        ├─ Transaction records
│        └─ LC status tracking
│
└─ Channel(BL - Bill of Lading)
   ├─ Channel ID: bl-channel
   ├─ Members: Bank A, Shipping Co, Bank B
   ├─ Chaincode: trade-finance-bl-contract
   └─ Ledger

トランザクションフロー

graph LR
    A["Client<br/>Application<br/>Python/Go"] -->|1. Invoke| B["Bank A Peer<br/>Endorser"]
    B -->|Chaincode<br/>Execution| C["Ledger<br/>Query"]
    C -->|Return<br/>Endorsement| B
    B -->|2. Endorsement<br/>Signature| A
    A -->|3. Submit<br/>Endorsed Tx| D["Orderer<br/>Raft Consensus"]
    D -->|4. Block<br/>Creation| E["Bank A Peer<br/>Committer"]
    D -->|4. Block| F["Bank B Peer<br/>Committer"]
    E -->|5. Ledger<br/>Update| G["State DB<br/>CouchDB"]
    F -->|5. Ledger<br/>Update| H["State DB<br/>CouchDB"]
    G & H -->|6. Notification<br/>Event| A

コアコンポーネント

1. Network・Member・Node 管理

# Network 作成(既存ユーザーのみ)
aws managedblockchain create-network \
  --client-request-token my-network-$(date +%s) \
  --name "trade-finance-network" \
  --description "Multi-bank LC/BL platform" \
  --framework "HYPERLEDGER_FABRIC" \
  --framework-version "2.2" \
  --networking-fabric-configuration '{
    "Edition": "STANDARD"
  }' \
  --voting-policy '{
    "ApprovalThresholdPolicy": {
      "ThresholdPercentage": 66,
      "ProposalDurationInHours": 24
    }
  }' \
  --region us-east-1

# Network 詳細確認
aws managedblockchain get-network \
  --network-id n-xxxxx \
  --region us-east-1

# Member 作成(コンソーシアムに参加)
aws managedblockchain create-member \
  --network-id "n-xxxxx" \
  --client-request-token member-bank-a-$(date +%s) \
  --member-configuration '{
    "Name": "Bank A",
    "Description": "Commercial Bank",
    "MemberFrameworkConfiguration": {
      "MemberFabricConfiguration": {
        "AdminUsername": "bankadmin",
        "AdminPassword": "SecurePassword123!"
      }
    }
  }' \
  --region us-east-1

# Node 作成(Member が実行)
aws managedblockchain create-node \
  --network-id "n-xxxxx" \
  --member-id "m-xxxxx" \
  --node-configuration '{
    "InstanceType": "bc.t3.small",
    "AvailabilityZone": "us-east-1a"
  }' \
  --region us-east-1

# Node 詳細確認
aws managedblockchain get-node \
  --network-id "n-xxxxx" \
  --member-id "m-xxxxx" \
  --node-id "nd-xxxxx"

Network Edition 選択

  • STARTER:2~3 Member、小〜中規模 PoC(廃止)
  • STANDARD:最大 14 Member、本番運用推奨

2. Channel・Chaincode 管理

# Fabric CLI で Channel 作成(Member の管理ユーザーが実行)
export FABRIC_CFG_PATH=/path/to/fabric/config

# Channel 作成トランザクション生成
configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/lc-channel.tx -channelID lc-channel

# Channel 作成(Admin)
peer channel create \
  -o orderer.n-xxxxx.managedblockchain.us-east-1.amazonaws.com:30001 \
  -c lc-channel \
  -f ./channel-artifacts/lc-channel.tx \
  --tls \
  --cafile /path/to/orderer-ca-cert.pem

# Channel に Join(Peer ノード)
peer channel join -b lc-channel.block \
  --tls \
  --cafile /path/to/peer-ca-cert.pem

# Chaincode インストール
peer lifecycle chaincode package trade-finance-lc.tar.gz \
  --path /path/to/chaincode/trade-finance-lc \
  --lang golang \
  --label trade-finance-lc_1.0

peer lifecycle chaincode install trade-finance-lc.tar.gz \
  --tls \
  --cafile /path/to/ca-cert.pem

# Chaincode をチャネルに承認・コミット
peer lifecycle chaincode approveformyorg \
  --channelID lc-channel \
  --name trade-finance-lc \
  --version 1.0 \
  --package-id trade-finance-lc_1.0:hash \
  --sequence 1 \
  --tls \
  --cafile /path/to/ca-cert.pem

peer lifecycle chaincode commit \
  -C lc-channel \
  -n trade-finance-lc \
  --version 1.0 \
  --sequence 1 \
  --tls \
  --cafile /path/to/ca-cert.pem

3. Chaincode(スマートコントラクト)開発・デプロイ

// trade-finance-lc/main.go - 信用状スマートコントラクト
package main

import (
    "encoding/json"
    "fmt"
    "github.com/hyperledger/fabric-contract-api-go/contractapi"
)

// LetterOfCredit represents a trade finance LC
type LetterOfCredit struct {
    LCID            string  `json:"lcid"`
    Issuer          string  `json:"issuer"`          // 発行銀行
    Applicant       string  `json:"applicant"`       // 申請企業(輸入業者)
    Beneficiary     string  `json:"beneficiary"`     // 受益者(輸出業者)
    Amount          float64 `json:"amount"`
    Currency        string  `json:"currency"`
    ExpiryDate      string  `json:"expiry_date"`
    Status          string  `json:"status"`          // ISSUED, ACCEPTED, PAID, EXPIRED
    DocumentsHash   string  `json:"documents_hash"`  // 提出書類の SHA256
    SubmissionDate  string  `json:"submission_date"`
    PaymentDate     string  `json:"payment_date"`
}

// SmartContract provides functions for managing LC
type SmartContract struct {
    contractapi.Contract
}

// CreateLC creates a new LC transaction
func (s *SmartContract) CreateLC(ctx contractapi.TransactionContextInterface, 
    lcid string, issuer string, applicant string, beneficiary string,
    amount float64, currency string, expiryDate string) error {

    lc := LetterOfCredit{
        LCID:       lcid,
        Issuer:     issuer,
        Applicant:  applicant,
        Beneficiary: beneficiary,
        Amount:     amount,
        Currency:   currency,
        ExpiryDate: expiryDate,
        Status:     "ISSUED",
    }

    lcJSON, err := json.Marshal(lc)
    if err != nil {
        return fmt.Errorf("failed to marshal LC: %w", err)
    }

    // Ledger に記録
    return ctx.GetStub().PutState(lcid, lcJSON)
}

// SubmitDocuments submits shipping documents for LC
func (s *SmartContract) SubmitDocuments(ctx contractapi.TransactionContextInterface,
    lcid string, documentsHash string) error {

    // LC 存在確認
    lcJSON, err := ctx.GetStub().GetState(lcid)
    if err != nil {
        return fmt.Errorf("failed to read LC: %w", err)
    }

    var lc LetterOfCredit
    err = json.Unmarshal(lcJSON, &lc)
    if err != nil {
        return fmt.Errorf("failed to unmarshal LC: %w", err)
    }

    // ステータス更新
    lc.DocumentsHash = documentsHash
    lc.SubmissionDate = ctx.GetStub().GetTxTimestamp().String()
    lc.Status = "DOCUMENTS_SUBMITTED"

    lcJSON, err = json.Marshal(lc)
    if err != nil {
        return fmt.Errorf("failed to marshal LC: %w", err)
    }

    return ctx.GetStub().PutState(lcid, lcJSON)
}

// PayLC pays the LC (called by Issuing Bank)
func (s *SmartContract) PayLC(ctx contractapi.TransactionContextInterface,
    lcid string, paymentAmount float64) error {

    lcJSON, err := ctx.GetStub().GetState(lcid)
    if err != nil {
        return fmt.Errorf("failed to read LC: %w", err)
    }

    var lc LetterOfCredit
    err = json.Unmarshal(lcJSON, &lc)
    if err != nil {
        return fmt.Errorf("failed to unmarshal LC: %w", err)
    }

    // 金額確認
    if paymentAmount != lc.Amount {
        return fmt.Errorf("payment amount mismatch: expected %f, got %f", lc.Amount, paymentAmount)
    }

    lc.Status = "PAID"
    lc.PaymentDate = ctx.GetStub().GetTxTimestamp().String()

    lcJSON, err = json.Marshal(lc)
    if err != nil {
        return fmt.Errorf("failed to marshal LC: %w", err)
    }

    return ctx.GetStub().PutState(lcid, lcJSON)
}

// QueryLC queries the status of an LC
func (s *SmartContract) QueryLC(ctx contractapi.TransactionContextInterface,
    lcid string) (*LetterOfCredit, error) {

    lcJSON, err := ctx.GetStub().GetState(lcid)
    if err != nil {
        return nil, fmt.Errorf("failed to read LC: %w", err)
    }

    var lc LetterOfCredit
    err = json.Unmarshal(lcJSON, &lc)
    if err != nil {
        return nil, fmt.Errorf("failed to unmarshal LC: %w", err)
    }

    return &lc, nil
}

// main function
func main() {
    chaincode, err := contractapi.NewChaincode(&SmartContract{})
    if err != nil {
        fmt.Printf("Error creating chaincode: %s", err.Error())
        return
    }

    if err := chaincode.Start(); err != nil {
        fmt.Printf("Error starting chaincode: %s", err.Error())
    }
}

4. Fabric クライアント(トランザクション実行)

# Python SDK で Fabric トランザクション実行
import os
from fabric_sdk_py import Client
import json

class FabricClient:
    def __init__(self, network_endpoint, user_id, user_password):
        self.client = Client(net_profile={
            'ca': {
                'url': f'https://ca.{network_endpoint}:30002',
                'verify': False
            },
            'peers': {
                'peer0': {
                    'requests': f'grpcs://peer0.{network_endpoint}:30003',
                    'events': f'grpcs://peer0.{network_endpoint}:30004'
                }
            },
            'orderers': {
                'orderer': {
                    'requests': f'grpcs://orderer.{network_endpoint}:30001'
                }
            }
        })
        
        self.user_id = user_id
        self.user_password = user_password
    
    def create_lc(self, lcid, issuer, applicant, beneficiary, amount, currency, expiry_date):
        """信用状を作成"""
        
        # Client リジスト
        admin = self.client.enroll(self.user_id, self.user_password)
        
        # Chaincode Invoke
        response = self.client.chaincode_invoke(
            channel='lc-channel',
            peers=['peer0.managedblockchain.us-east-1.amazonaws.com:30003'],
            cc_name='trade-finance-lc',
            cc_type='golang',
            fcn='CreateLC',
            args=[lcid, issuer, applicant, beneficiary, str(amount), currency, expiry_date],
            is_proposal_resp=True
        )
        
        print(f"LC created: {lcid}, Tx ID: {response.transaction_id}")
        return response
    
    def query_lc(self, lcid):
        """信用状ステータス照会"""
        
        response = self.client.chaincode_query(
            channel='lc-channel',
            peers=['peer0.managedblockchain.us-east-1.amazonaws.com:30003'],
            cc_name='trade-finance-lc',
            fcn='QueryLC',
            args=[lcid]
        )
        
        lc_data = json.loads(response)
        print(f"LC Status: {lc_data['status']}, Amount: {lc_data['amount']} {lc_data['currency']}")
        return lc_data
    
    def submit_documents(self, lcid, documents_hash):
        """船荷証券等の書類提出"""
        
        response = self.client.chaincode_invoke(
            channel='lc-channel',
            peers=['peer0.managedblockchain.us-east-1.amazonaws.com:30003'],
            cc_name='trade-finance-lc',
            fcn='SubmitDocuments',
            args=[lcid, documents_hash]
        )
        
        print(f"Documents submitted for LC {lcid}")
        return response

# 使用例
fabric_client = FabricClient(
    'n-xxxxx.managedblockchain.us-east-1.amazonaws.com',
    'bankadmin',
    'SecurePassword123!'
)

# 信用状作成
fabric_client.create_lc(
    lcid='LC-2026-001',
    issuer='Bank A',
    applicant='Import Corp',
    beneficiary='Export Ltd',
    amount=100000.0,
    currency='USD',
    expiry_date='2026-06-30'
)

# ステータス照会
lc_status = fabric_client.query_lc('LC-2026-001')

# 書類提出
fabric_client.submit_documents('LC-2026-001', 'sha256:abcd1234...')

主要ユースケース(詳細版)

UC1: 複数銀行の貿易金融プラットフォーム(LC・BL)

Network: trade-finance-network
├─ Members: Bank A, Bank B, Bank C, Shipping Co
├─ Channels:
│  ├─ lc-channel(信用状)
│  ├─ bl-channel(船荷証券)
│  └─ settlement-channel(決済)
│
└─ Workflows:
   ├─ 1. Applicant(輸入業者)が LC 申請
   ├─ 2. Issuer Bank(発行銀行)が LC 発行(Blockchain 記録)
   ├─ 3. Beneficiary(輸出業者)が LC 確認
   ├─ 4. Shipping Co が BL 発行(Blockchain 記録)
   ├─ 5. Beneficiary が 書類(Invoice+BL)を提出
   ├─ 6. Issuer Bank が 書類確認・承認
   ├─ 7. Settlement Bank が 自動決済(Smart Contract 実行)
   └─ 8. 全銀行がトランザクション履歴確認可能

UC2-10: 他の主要ユースケース

UC2: サプライチェーン追跡(食品)

  • 農家 → 加工工場 → 流通業者 → 小売 → 消費者 のレコード
  • QR Code で Blockchain トランザクション照会

UC3: 医療用医薬品真正性確認

  • 製造業者 → 卸売業者 → 医療機関 のトレースコード
  • 偽造医薬品 排除

UC4: 不動産登記・資産移転

  • 土地・建物の所有権を Blockchain に記録
  • スマートコントラクトで自動決済

UC5: NFT マーケットプレイス

  • Ethereum ノード接続で NFT 発行・売買
  • Royalty 支払い自動化

UC6: コンソーシアムカーボンクレジット市場

  • 企業の脱炭素行動をトークン化
  • 取引履歴改ざん防止

UC7: 知的財産権・ライセンス管理

  • 著作権者・利用者・使用料を一元管理
  • スマートコントラクトでロイヤルティ自動支払い

UC8: デジタル身分証明・資格認定

  • 大学卒業証書・医師免許を Blockchain で発行・検証
  • 改ざん防止・偽造排除

UC9: 複数企業の共同在庫管理

  • サプライヤー・製造業者・流通業者が在庫情報を共有
  • リアルタイム在庫最適化

UC10: 金融コンソーシアム決済ネットワーク

  • SWIFT 代替の国際送金
  • スマートコントラクトで即時決済

設定・操作の具体例

CLI・SDK での操作(既存ユーザー向け)

# Network 一覧確認
aws managedblockchain list-networks \
  --status AVAILABLE \
  --region us-east-1 \
  --output table

# Member 一覧確認
aws managedblockchain list-members \
  --network-id "n-xxxxx" \
  --region us-east-1

# Node 一覧確認
aws managedblockchain list-nodes \
  --network-id "n-xxxxx" \
  --member-id "m-xxxxx" \
  --status AVAILABLE \
  --region us-east-1

# Node の CA 証明書取得
aws managedblockchain get-member \
  --network-id "n-xxxxx" \
  --member-id "m-xxxxx" \
  --query 'Member.FrameworkAttributes.MemberFabricAttributes.CaEndpoint' \
  --region us-east-1

# CloudWatch Metrics 確認
aws cloudwatch get-metric-statistics \
  --namespace AWS/ManagedBlockchain \
  --metric-name TransactionCount \
  --dimensions Name=NetworkId,Value=n-xxxxx Name=MemberId,Value=m-xxxxx \
  --start-time 2026-04-27T00:00:00Z \
  --end-time 2026-04-27T23:59:59Z \
  --period 3600 \
  --statistics Sum

IaC(Terraform / CloudFormation)での構成例

# Terraform(既存ユーザー用)
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region = "us-east-1"
}

# ⚠️ 注意:Network 作成は既に AWS コンソール/AWS CLI で実施済みと想定
# 以下は Node・CloudWatch リソースのみ管理

# Member Node(既存 Network に追加)
resource "aws_managedblockchain_node" "peer_node" {
  network_id            = "n-xxxxx"  # 既存 Network ID
  member_id             = "m-xxxxx"  # 既存 Member ID
  instance_type         = "bc.t3.small"
  availability_zone     = "us-east-1a"
  logs_cloudwatch_logs  = true

  logs_cloudwatch_logs_log_group = aws_cloudwatch_log_group.fabric_logs.name

  depends_on = [aws_cloudwatch_log_group.fabric_logs]
}

# CloudWatch Log Group
resource "aws_cloudwatch_log_group" "fabric_logs" {
  name              = "/aws/managedblockchain/fabric-node-logs"
  retention_in_days = 30
}

# CloudWatch Alarm(トランザクション監視)
resource "aws_cloudwatch_metric_alarm" "transaction_count_high" {
  alarm_name          = "managedblockchain-transaction-count-high"
  comparison_operator = "GreaterThanThreshold"
  evaluation_periods  = 2
  metric_name         = "TransactionCount"
  namespace           = "AWS/ManagedBlockchain"
  period              = 300
  statistic           = "Sum"
  threshold           = 1000  # 5分以内に1000トランザクション超過
  alarm_description   = "Alert when transaction throughput is high"
  alarm_actions       = [aws_sns_topic.blockchain_alerts.arn]

  dimensions = {
    NetworkId = "n-xxxxx"
    MemberId  = "m-xxxxx"
  }
}

# SNS Topic for Alerts
resource "aws_sns_topic" "blockchain_alerts" {
  name = "managedblockchain-alerts"
}

output "node_id" {
  value       = aws_managedblockchain_node.peer_node.id
  description = "Fabric Node ID"
}

類似サービス比較表

項目 Amazon Managed Blockchain(Hyperledger Fabric) Amazon QLDB Hyperledger Fabric Self-Managed Quorum Corda
Network 形態 許可型・プライベート 中央集権台帳(Blockchain非対応) 許可型・プライベート 許可型・Ethereum互換 許可型・法的拘束力対応
スマートコントラクト ◎ Chaincode(Go/Node.js) △ ストアドプロシージャ ◎ Chaincode ○ Solidity ◎ Kotlin/Java
マルチメンバー ◎ 最大14団体 △ 中央管理 ◎ 自由 ◎ 自由 ◎ 自由
コンセンサス ◎ Raft / BFT N/A ◎ Raft / BFT ◎ PoA / Raft ◎ Pluggable
マネージド度 ◎ 完全マネージド ◎ 完全マネージド △ 自社保有 △ 自社保有 △ 自社保有
AWS 統合 ◎ CloudWatch/IAM ◎ CloudWatch/IAM ○ EC2 基盤 △ EC2 基盤 △ AWS 非対応
新規受付状況 ❌ 2023年停止 ✅ 進行中 ✅ 常時対応 △ 限定的 △ 限定的
導入コスト △ 高額(1-5万$/月) ○ 中程度 △ 高額(開発コスト) △ 高額 △ 高額
エンタープライズ対応 ◎ HIPAA/SOC2 ◎ HIPAA/SOC2 ◎ 対応可能 ◎ 対応可能 ◎ 法的拘束力対応

ベストプラクティス

✅ 推奨事項

  1. 既存ユーザーの継続利用

    • 2023年停止前にネットワーク構築済みの場合、引き続き利用可能
    • マイナー更新・セキュリティパッチは継続提供
  2. 新規プロジェクト:Amazon Managed Blockchain Access 推奨

    • Ethereum・Bitcoin・Polygon ノードのマネージド運用
    • パブリックチェーン向けに最適化
  3. Chaincode デプロイメント戦略

    ① 開発環境:Local Fabric(docker-compose)
    ② テスト環境:STARTER Edition
    ③ 本番環境:STANDARD Edition
    
  4. Channel・Chaincode 設計

    • 参加者グループ別に Channel を分離(プライバシー確保)
    • Chaincode は各参加者が監査可能(透明性)
  5. KMS による暗号化キー管理

    • Customer Managed Key(CMK)で Fabric 通信暗号化
    • Key rotation を定期実施(年1回以上)

❌ アンチパターン

  1. 新規プロジェクトでの Hyperledger Fabric 選択

    ❌ 不適切:2023年新規受付停止のため新規構築不可
    ✅ 推奨:Amazon QLDB または自社ホスティング
    
  2. 単一 Channel への全参加者集約

    ❌ 不適切:プライバシー分離がない
    ✅ 推奨:参加者グループごと Channel 分離
    
  3. Chaincode の外部スクリプトアクセス

    ❌ 危険:SDK 経由外での直接アクセス
    ✅ 推奨:SDK・API Gateway 経由のみ
    

トラブルシューティング表

症状 原因 対処法
Peer が Channel に Join 失敗 Genesis Block 不一致・CA 証明書エラー CA 証明書再発行・Genesis Block 確認
Chaincode Invoke が遅い Endorsement Policy 設定が厳しい(全ピア確認) Endorsement Policy を必要最小限に簡素化
State DB(CouchDB)クエリエラー JSON 形式不正・インデックス未作成 State DB スキーマ検証・インデックス追加
Channel 参加者数の上限(14団体)超過 Hyperledger Fabric 制限 複数 Network を分割運用
Certificate Rotation エラー CA サーバーダウン・期限切れ AWS サポートで CA 再開・手動更新
CloudWatch Metrics が表示されない ロギング未有効化・IAM 権限不足 logs_cloudwatch_logs = true 設定・IAM 確認
VPC Endpoint Connection Refused Security Group ルール不足・CIDR ブロック Security Group で All Traffic 許可(テスト環境)

2025-2026 最新動向

1. 新規受付停止(2023年既に実施)

  • Hyperledger Fabric ネットワーク新規作成は不可
  • 既存ユーザーのみ継続利用

2. Amazon Managed Blockchain Access(推奨)

  • Ethereum・Bitcoin・Polygon のパブリックチェーン接続
  • ノードレンタル形式(マネージド)

3. Hyperledger Fabric 自社ホスティング選択肢

  • AWS EC2 での手動構築(AWS が CloudFormation テンプレート提供予定)
  • AWS ECS での コンテナ化デプロイ

4. Web3 統合拡張(計画中)

  • Amazon Managed Blockchain Access との深い統合
  • Ethers.js / Web3.py の標準サポート

学習リソース・参考文献

公式ドキュメント

  1. Amazon Managed Blockchain Developer Guide
  2. Hyperledger Fabric 2.2 Documentation
  3. AWS Managed Blockchain Pricing
  4. Managed Blockchain Access for Ethereum

オンライン学習・コース

  1. Hyperledger Learning
  2. Coursera - Blockchain Basics
  3. edX - Blockchain Fundamentals
  4. Linux Foundation - Hyperledger Certification

実装例・チェックリスト

Managed Blockchain 運用チェックリスト

## Managed Blockchain(既存ユーザー向け)運用チェック

### Infrastructure Tier
- [ ] Network Status 確認(AVAILABLE)
- [ ] Member Status 確認(CREATE_IN_PROGRESS → AVAILABLE)
- [ ] Node Status 確認(CREATE_IN_PROGRESS → AVAILABLE)
- [ ] CA Endpoint 接続可能性確認
- [ ] VPC / Security Group 設定確認

### Chaincode Management
- [ ] Chaincode パッケージ化(.tar.gz)
- [ ] 全 Peer での Install 確認
- [ ] Approve for My Org で署名
- [ ] Commit(最小 Endorsement Policy 満たす)
- [ ] Lifecycle 状態確認(COMMITTED)

### Channel Operations
- [ ] Channel 作成・Genesis Block 生成
- [ ] 全 Member が Channel に Join
- [ ] Anchor Peer 設定(Gossip プロトコル最適化)
- [ ] 初期テストトランザクション実行

### Monitoring & Alerting
- [ ] CloudWatch Log Group 作成
- [ ] Node logs ローテーション設定
- [ ] CloudWatch Alarm(トランザクション数・エラー率)
- [ ] SNS Topic で Slack / Email 通知設定

### Security & Compliance
- [ ] CA Certificate Rotation スケジュール確認
- [ ] KMS CMK ポリシー確認
- [ ] CloudTrail ロギング有効化
- [ ] IAM Role・Policy 監査
- [ ] VPC Endpoint で 外部ネットワーク遮断

### Disaster Recovery
- [ ] Network Backup 計画(手動)
- [ ] CA Private Key バックアップ(KMS保管)
- [ ] Chaincode Source Code 版管理(GitLab/GitHub)
- [ ] Recovery RTO / RPO 定義

まとめ

Amazon Managed Blockchain は 2023年に新規受付を停止 しており、既存ユーザーのみの利用となります。

既存ユーザーの場合:

  • Hyperledger Fabric ネットワークをマネージドで運用可能
  • 複雑なノード管理・証明書管理が自動化
  • マルチメンバーコンソーシアムで本番レベルのブロックチェーン構築

新規プロジェクトの場合:

  1. Amazon Managed Blockchain Access(Ethereum・Bitcoin・Polygon):パブリックチェーン向け推奨
  2. Amazon QLDB:中央集権的な不変台帳で充分な場合
  3. 自社ホスティング Hyperledger Fabric:EC2 での構築(AWS が CloudFormation サポート予定)

最終更新:2026-04-27 バージョン:v2.0