---
title: "AWS Managed Blockchainの代替: AMB AccessとAMB QueryをAlchemyに移行する方法"
description: "AWS Managed Blockchain（AMB）は2027年9月29日に終了する。同じJSON-RPC呼び出しとブロックチェーンデータAPIで、AMB AccessとAMB QueryをAlchemyに移行できる。"
---

# AWS Managed Blockchainの代替: AMB AccessとAMB QueryをAlchemyに移行する方法

<ImageBlock
  src="https://media.alchemy.com/blog/amazon-managed-blockchain-alternative-hero.png"
  alt="AMB AccessとAMB QueryからAlchemyへの移行のタイトルカード"
  width={1920}
  height={900}
  priority
/>

Amazon Web Servicesは、マネージドブロックチェーンサービスであるAmazon Managed Blockchain（AMB）を終了する。既存の顧客は2027年9月29日まで引き続き利用でき、その日を過ぎるとAMB AccessとAMB Queryは応答しなくなる。Ethereum、Bitcoin、PolygonでAMB Accessを使っている場合、Alchemyへの切り替えはエンドポイントの変更で済む。JSON-RPC呼び出しはそのままで、SigV4によるリクエスト署名やAMB Accessor tokensはAPIキーに置き換わる。

AMB Queryはノードではなくインデックス済みのデータAPIであるため、URLの変更だけでは済まない。私たちのData APIは同じEthereumの読み取り（残高、送金、トークンとNFTのメタデータ）をカバーし、UTXO APIはBitcoinのアドレス、残高、トランザクションをカバーする。このガイドでは両方の移行パスを取り上げる。エンドポイントの取得、コードの変更をコーディングエージェントに任せる方法、SigV4の置き換え、AMB Queryの各オペレーションの対応付け、新しいエンドポイントが同じデータを返すことの確認、そして課金の比較だ。

## AWS Managed Blockchainはいつ終了するか

AWSの[Amazon Managed Blockchainのサポート終了に関する告知](https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/managed-blockchain-end-of-support.html)によると、既存の顧客は2027年9月29日を過ぎると、すべてのAMBプロダクトにアクセスできなくなる。対象は次の5つのサービスだ。

- **AMB Access Ethereum**。Ethereumメインネット上の専用フルノード。HTTPとWebSocketでJSON-RPCを提供し、Consensus APIも利用できる。
- **AMB Access Bitcoin**。Bitcoinのメインネットとテストネットの共有エンドポイント。
- **AMB Access Polygon**。Polygonメインネットの共有エンドポイント。
- **AMB Query**。Ethereum（メインネットとSepolia）とBitcoin（メインネットとテストネット）の残高、トランザクション、トークンデータを提供するインデックス済みAPI。
- **AMB Access Hyperledger Fabric**。プライベートな許可型ネットワーク。

私たちは、このリストにあるすべてのパブリックチェーン（Ethereum、Bitcoin、Polygon）をすでにサポートしており、同じAPIキーでそれ以外の100以上のチェーンも利用できる。Hyperledger Fabricはパブリックチェーンではなくプライベートな台帳を運用するものなので、このガイドの対象外だ。その選択肢はAWSの告知に記載されている。

AWSの[ノードおよびRPCの移行ガイド](https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/migrating-node-rpc-workloads.html)は、AMB Access Ethereum、Bitcoin、PolygonのサードパーティプロバイダーとしてAlchemyを挙げている。すべてのトラフィックがAlchemyで動くようになったら、AMB Ethereumノード、Accessor tokens、そしてAMBへのアクセスを付与しているIAM権限を削除する。AWSはAMB Ethereumノードを削除するまで秒単位で課金する。

## AMB Accessを新しいRPCプロバイダーにどう切り替えるか

<ImageBlock
  src="https://media.alchemy.com/blog/amazon-managed-blockchain-alternative-migration-support.png"
  alt="AWSによるAmazon Managed Blockchainの終了と、Alchemyによる移行サポートを伝える告知画像"
  width={3200}
  height={1800}
/>

[Alchemyダッシュボード](https://dashboard.alchemy.com/)でサインアップし、アプリを作成して、AMBで使っていたネットワークを有効にする。ネットワークごとに個別のURLが発行され、1つのアプリのAPIキーはそのすべてで使える。

ターミナルを使いたい場合は、[Alchemy CLI](/agents)でサインイン、アプリの作成、最初のテスト呼び出しまで済ませられる。

<CodeSnippet
  language="bash"
  code={`npm i -g @alchemy/cli@latest
alchemy auth                                  # browser sign-in
alchemy app create --name amb-migration --networks ETH_MAINNET
alchemy app select <app-id>                   # use the new app's key
alchemy evm block latest -n eth-mainnet       # confirm the endpoint answers`}
/>

ブラウザのないリモートサーバーでは、`alchemy auth login --device-code`を使う。`alchemy app chains`は、BitcoinやPolygonを含め、追加できる他のすべてのネットワークの識別子を一覧表示する。

チームがAWS経由でソフトウェアを購入している場合、私たちは[AWS Marketplace](https://aws.amazon.com/marketplace/pp/prodview-vvdwfua4ksmkc)にも出品しているため、AlchemyのサブスクリプションをAWSアカウント経由で請求できる。

## AIコーディングエージェントにAMBからの移行を任せられるか

任せられる。特にAMBでは時間の節約効果が最も大きい。署名コードが、アプリケーションのクライアント、Lambda関数、API Gatewayのプロキシなど、複数の場所に散らばっていることが多いからだ。私たちは、コーディングエージェント（Claude Code、Cursor、Codexなど）が必要とするものを提供する3つのツールを用意している。

- [Alchemy CLI](/docs/alchemy-cli)はコマンドを実行する。アプリの作成、許可リストの設定、各ネットワークへのテスト呼び出しなどだ。
- [Alchemy Agent Skills](/docs/alchemy-agent-skills)は、私たちのエンドポイント形式、Data APIのメソッド、CLIの使い方をエージェントに教える。`alchemy install skills`でインストールできる。
- [Alchemy MCP server](/docs/alchemy-mcp-server)は、100以上のネットワークにわたるチェーンデータへの直接アクセスをエージェントに与えるため、エージェントは作業しながら結果を比較できる。`https://mcp.alchemy.com/mcp`でホストされており、Alchemyアカウントでサインインするので、APIキーを貼り付ける必要はない。`alchemy install mcp`で追加するか、Claude Codeでは次のように追加する。

<CodeSnippet
  language="bash"
  code={`claude mcp add alchemy --transport http https://mcp.alchemy.com/mcp`}
/>

Claude Codeでは、[Claude Code用のAlchemyプラグイン](/docs/alchemy-claude-plugin)を使えばSkillsとMCPサーバーを1ステップでインストールでき、[Claude CodeとAlchemyのセットアップ](/blog/setup-claude-code-with-alchemy)でその手順を解説している。

次に、リポジトリのルートで、次のようなプロンプトをエージェントに与える。

<CodeSnippet
  language="text"
  code={`Move this project off Amazon Managed Blockchain (AMB Access and AMB Query) before the September 29, 2027 shutdown. The new provider is Alchemy. Use the Alchemy MCP server, the Alchemy CLI, and Alchemy skills. If the MCP tools aren't available, walk me through setup and sign-in first.
Plan first. Don't change files or Alchemy settings until I approve. Never print or commit credentials.
Before changing anything, ask me:
- which AMB products and networks we use (Ethereum, Bitcoin, Polygon, AMB Query)
- where our secrets live (env files, AWS Secrets Manager, CI variables)
- whether the new Alchemy app needs IP or origin allowlists
Then find every AMB dependency: managedblockchain.amazonaws.com endpoints, SigV4 signing code (signature-v4, aws4, awscurl, botocore signers), billingtoken query parameters, IAM policies granting managedblockchain actions, and every AMB Query SDK call (ManagedBlockchainQuery clients and operations). Show me the list with file paths and wait.
After I approve, replace each RPC endpoint with an environment variable holding the Alchemy URL, remove the signing code, and add placeholders to .env.example. For AMB Query, propose an adapter that maps each operation we use to Alchemy Data API or UTXO API calls, and list any fields that don't map one-to-one.
Finally, verify each migrated network with the Alchemy CLI and report the results.`}
/>

エージェントを使わずに移行する場合は、コードと設定ファイルから`managedblockchain`のホスト名とSigV4の署名ヘルパーを検索し、ネットワークごとにAlchemyのURLに置き換えて、署名の処理を削除する。

## AWSのブロックチェーン構成の各部分は何に置き換わるか

対応関係のほとんどは1対1で、AMBのいくつかの制限はなくなる。

<EmbeddedTable
  table={{
    columns: [
      {
        key: "1",
        width: 360,
        title: "Amazon Managed Blockchainの場合",
        dataType: "object",
      },
      { key: "2", width: 360, title: "Alchemyの場合", dataType: "object" },
    ],
    data: [
      {
        "1": {
          title: "<p>AMB Access Ethereumのメインネットノード</p>",
          tooltip: "",
          icon: "",
        },
        "2": {
          title:
            "<p>HTTPとWebSocketに対応したEthereumメインネットのエンドポイント（同じエンドポイントで履歴状態も提供）</p>",
          tooltip: "",
          icon: "",
        },
        id: 0,
      },
      {
        "1": {
          title: "<p>AMB EthereumのConsensus API</p>",
          tooltip: "",
          icon: "",
        },
        "2": {
          title: "<p>EthereumのBeaconエンドポイント</p>",
          tooltip: "",
          icon: "",
        },
        id: 1,
      },
      {
        "1": {
          title: "<p>AMB Access Bitcoin（メインネット、テストネット）</p>",
          tooltip: "",
          icon: "",
        },
        "2": {
          title:
            "<p>BitcoinのJSON-RPCエンドポイントと、アドレス単位のデータを扱うUTXO API</p>",
          tooltip: "",
          icon: "",
        },
        id: 2,
      },
      {
        "1": {
          title: "<p>AMB Access Polygon（メインネット）</p>",
          tooltip: "",
          icon: "",
        },
        "2": {
          title:
            "<p>WebSocketサブスクリプションとバッチリクエストに対応したPolygonメインネットのエンドポイント</p>",
          tooltip: "",
          icon: "",
        },
        id: 3,
      },
      {
        "1": { title: "<p>AMB Query</p>", tooltip: "", icon: "" },
        "2": {
          title: "<p>EthereumにはData API、BitcoinにはUTXO API</p>",
          tooltip: "",
          icon: "",
        },
        id: 4,
      },
      {
        "1": {
          title: "<p>SigV4署名またはAccessor tokens</p>",
          tooltip: "",
          icon: "",
        },
        "2": {
          title: "<p>URLパスに含まれるAPIキー</p>",
          tooltip: "",
          icon: "",
        },
        id: 5,
      },
      {
        "1": {
          title: "<p>managedblockchainアクションに対するIAMポリシー</p>",
          tooltip: "",
          icon: "",
        },
        "2": {
          title: "<p>アプリごとのIPおよびオリジンの許可リスト</p>",
          tooltip: "",
          icon: "",
        },
        id: 6,
      },
      {
        "1": {
          title: "<p>専用のEthereumノード</p>",
          tooltip: "",
          icon: "",
        },
        "2": {
          title:
            "<p>私たちのRPC API、またはシングルテナントのキャパシティが必要な場合はAlchemy Dedicated Clusters</p>",
          tooltip: "",
          icon: "",
        },
        id: 7,
      },
    ],
  }}
/>

移行によって、AMBのいくつかの制限はなくなる。AMB Ethereumノードはフルノードであるため、AWSは履歴データについてはAMB Queryを使うようチームに案内しているが、私たちの[RPC API](/rpc-api)は同じエンドポイントで、過去の任意のブロックに対する`eth_getBalance`と`eth_call`に応答する。AMB EthereumとPolygonはJSON-RPCのバッチリクエストを受け付けないが、私たちは両方で[バッチリクエスト](/docs/reference/batch-requests)をサポートしている。AMB PolygonにはWebSocketエンドポイントがないが、私たちのエンドポイントにはある。また、AMB Ethereumはメインネットのみに対応しているのに対し、私たちはテスト用にSepoliaとHoodiも提供している。

シングルテナントのノードを目的にAMBを選んでいたチームは[Alchemy Dedicated Clusters](/dedicated-clusters)で運用でき、それが見合うのはどのような場合かは[Node RPCとDedicated Clustersの選択](/overviews/dedicated-vs-shared-nodes)で解説している。

エンドポイントの切り替えを環境変数の形で示す。

<CodeSnippet
  language="bash"
  code={`# Before: Amazon Managed Blockchain
ETH_RPC_URL=https://<node-id>.ethereum.managedblockchain.<region>.amazonaws.com/
ETH_WS_URL=wss://<node-id>.wss.ethereum.managedblockchain.<region>.amazonaws.com/
# Accessor-token variant: https://<node-id>.t.ethereum.managedblockchain.<region>.amazonaws.com?billingtoken=<token>
BTC_RPC_URL=https://mainnet.bitcoin.managedblockchain.<region>.amazonaws.com/
POLYGON_RPC_URL=https://mainnet.polygon.managedblockchain.<region>.amazonaws.com/
# After: Alchemy
ETH_RPC_URL=https://eth-mainnet.g.alchemy.com/v2/<your-key>
ETH_WS_URL=wss://eth-mainnet.g.alchemy.com/v2/<your-key>
ETH_BEACON_URL=https://eth-mainnetbeacon.g.alchemy.com/v2/<your-key>
BTC_RPC_URL=https://bitcoin-mainnet.g.alchemy.com/v2/<your-key>
POLYGON_RPC_URL=https://polygon-mainnet.g.alchemy.com/v2/<your-key>
POLYGON_WS_URL=wss://polygon-mainnet.g.alchemy.com/v2/<your-key>`}
/>

Bitcoinのテスト用には、同じURL形式で`bitcoin-testnet`と`bitcoin-signet`のエンドポイントを提供している。

## ブロックチェーンのリクエストからAWS SigV4署名をどう取り除くか

AMBでは、すべてのリクエストにAWS Signature Version 4（SigV4）で署名するか、URLにAccessor tokenを含める。SigV4は、呼び出しごとにIAM認証情報を付与する方式だ。Alchemyでは、URL内のAPIキーが認証情報そのものなので、署名の処理は置き換えるのではなく削除する。

Bitcoinでは、リクエストボディは変わらない。変わるのはツールとURLだけだ。

<CodeSnippet
  language="bash"
  code={`# Before: AMB Access Bitcoin, signed with awscurl
awscurl -X POST --service managedblockchain --region us-east-1 \\
  -d '{"jsonrpc":"1.0","id":"1","method":"getblockcount","params":[]}' \\
  https://mainnet.bitcoin.managedblockchain.us-east-1.amazonaws.com
# After: Alchemy, plain curl
curl -X POST -H "Content-Type: application/json" \\
  -d '{"jsonrpc":"1.0","id":"1","method":"getblockcount","params":[]}' \\
  "https://bitcoin-mainnet.g.alchemy.com/v2/$ALCHEMY_API_KEY"`}
/>

アプリケーションコードでは、AWS SDKの署名機能、認証情報プロバイダー、リクエストのラッパーがすべて不要になる。EVMチェーンでは、標準のクライアントで十分だ。

<CodeSnippet
  language="typescript"
  code={`import { createPublicClient, http } from "viem";
import { mainnet } from "viem/chains";
const { ETH_RPC_URL } = process.env;
// Fail fast: viem's http() silently falls back to a public RPC when the URL is undefined.
if (!ETH_RPC_URL) {
  throw new Error("Set ETH_RPC_URL to your Alchemy Ethereum Mainnet URL");
}
// No SignatureV4, credential provider, or signed fetch wrapper.
const client = createPublicClient({ chain: mainnet, transport: http(ETH_RPC_URL) });
async function main() {
  console.log(await client.getBlockNumber());
}
main();`}
/>

ethers、`web3.py`、その他あらゆるJSON-RPCクライアントでも同じだ。AMBを呼び出すものがなくなったら、AMBのIAM権限とあわせて署名関連の依存関係を削除する。

## AMB Queryを置き換えるブロックチェーンデータAPIはどれか

私たちのData APIは、Ethereumやその他のEVMチェーンのインデックス済みトランザクション履歴とトークンデータを提供するブロックチェーンデータAPIであり、UTXO APIはアドレス、残高、トランザクションを扱うBitcoin APIだ。この2つを組み合わせれば、AMB Queryが提供していた読み取りをカバーできる。

AMB Queryは、SigV4で署名された一連のオペレーションを通じて、正規化されたインデックス済みデータを返す。AWSの[AMB Query移行ガイド](https://docs.aws.amazon.com/managed-blockchain/latest/ambq-dg/migrating-query-workloads.html)は、1対1で置き換えられるプロバイダーはないと明言しているため、現実的なアプローチはアダプター層を設けることだ。アプリケーションは1つのインターフェースを呼び出し続け、アダプターがAMBの各オペレーションを私たちのAPIに対応付け、実際に使うフィールドを正規化する。

<EmbeddedTable
  table={{
    columns: [
      {
        key: "1",
        width: 240,
        title: "AMB Queryのオペレーション",
        dataType: "object",
      },
      {
        key: "2",
        width: 240,
        title: "AlchemyでのEthereum",
        dataType: "object",
      },
      { key: "3", width: 240, title: "AlchemyでのBitcoin", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p>GetTokenBalance</p>", tooltip: "", icon: "" },
        "2": {
          title:
            "<p>ブロックを指定した<code>eth_getBalance</code>または<code>eth_call</code>（ERC-20とERC-1155は<code>balanceOf</code>、ERC-721は<code>ownerOf</code>）</p>",
          tooltip: "",
          icon: "",
        },
        "3": {
          title:
            "<p>UTXO APIの<code>address</code>エンドポイント（現在の残高）</p>",
          tooltip: "",
          icon: "",
        },
        id: 0,
      },
      {
        "1": { title: "<p>BatchGetTokenBalance</p>", tooltip: "", icon: "" },
        "2": {
          title:
            "<p>ネイティブ残高とERC-20はToken Balances By Wallet、ERC-721とERC-1155はトークンごとの<code>eth_call</code></p>",
          tooltip: "",
          icon: "",
        },
        "3": {
          title:
            "<p>UTXO APIの<code>address</code>、アドレスごとに1回の呼び出し</p>",
          tooltip: "",
          icon: "",
        },
        id: 1,
      },
      {
        "1": { title: "<p>ListTokenBalances</p>", tooltip: "", icon: "" },
        "2": {
          title:
            "<p>Token Balances By Walletと<code>getNFTsForOwner</code>、NFTの保有者一覧には<code>getOwnersForContract</code></p>",
          tooltip: "",
          icon: "",
        },
        "3": {
          title:
            "<p>UTXO APIの<code>address</code>および<code>utxo</code>エンドポイント</p>",
          tooltip: "",
          icon: "",
        },
        id: 2,
      },
      {
        "1": { title: "<p>GetTransaction</p>", tooltip: "", icon: "" },
        "2": {
          title:
            "<p><code>eth_getTransactionByHash</code>と<code>eth_getTransactionReceipt</code></p>",
          tooltip: "",
          icon: "",
        },
        "3": {
          title: "<p>UTXO APIの<code>tx</code>エンドポイント</p>",
          tooltip: "",
          icon: "",
        },
        id: 3,
      },
      {
        "1": { title: "<p>ListTransactions</p>", tooltip: "", icon: "" },
        "2": {
          title:
            "<p>送金アクティビティには<code>alchemy_getAssetTransfers</code>（またはTransfers By Wallet）</p>",
          tooltip: "",
          icon: "",
        },
        "3": {
          title:
            "<p>トランザクションの詳細を含むUTXO APIの<code>address</code>エンドポイント</p>",
          tooltip: "",
          icon: "",
        },
        id: 4,
      },
      {
        "1": { title: "<p>ListTransactionEvents</p>", tooltip: "", icon: "" },
        "2": {
          title: "<p>レシートのログに加え、内部ETH送金にはトレース</p>",
          tooltip: "",
          icon: "",
        },
        "3": {
          title:
            "<p>UTXO APIの<code>tx</code>エンドポイント（インプットとアウトプット）</p>",
          tooltip: "",
          icon: "",
        },
        id: 5,
      },
      {
        "1": { title: "<p>GetAssetContract</p>", tooltip: "", icon: "" },
        "2": {
          title:
            "<p><code>alchemy_getTokenMetadata</code>とNFTの<code>getContractMetadata</code></p>",
          tooltip: "",
          icon: "",
        },
        "3": { title: "<p>該当なし</p>", tooltip: "", icon: "" },
        id: 6,
      },
      {
        "1": { title: "<p>ListAssetContracts</p>", tooltip: "", icon: "" },
        "2": {
          title:
            "<p>単一の呼び出しはない。コントラクトのレジストリを自前で保持する</p>",
          tooltip: "",
          icon: "",
        },
        "3": { title: "<p>該当なし</p>", tooltip: "", icon: "" },
        id: 7,
      },
      {
        "1": {
          title: "<p>ListFilteredTransactionEvents</p>",
          tooltip: "",
          icon: "",
        },
        "2": { title: "<p>該当なし</p>", tooltip: "", icon: "" },
        "3": {
          title:
            "<p>UTXO APIの<code>address</code>および<code>utxo</code>エンドポイント</p>",
          tooltip: "",
          icon: "",
        },
        id: 8,
      },
    ],
  }}
/>

### Ethereum: インデックス済みのトランザクション履歴とトークンデータ

Ethereum側は私たちの[Data API](/docs/data)で動く。[Token API](/token-api)はERC-20の残高とメタデータ、[NFT API](/nft-api)はERC-721とERC-1155の保有状況、[Transfers API](/docs/reference/transfers-api-quickstart)はアドレスの履歴をカバーする。ウォレットの受信と送信を含む完全なトランザクション履歴を得るには、`alchemy_getAssetTransfers`を`fromAddress`で1回、`toAddress`で1回呼び出すか、Transfers By Walletを使って1回のリクエストで複数のチェーンをカバーする。NFTの残高は、過去時点のものも含め、必要なブロックでトークンコントラクトに`eth_call`を実行して取得する（ERC-721は`ownerOf`、ERC-1155は`balanceOf`）。`getNFTsForOwner`が返すのは現在の保有状況だけだからだ。Token Balances By Walletは、1回のリクエストでEthereumとPolygonにわたる複数のアドレスをカバーするため、ネイティブ残高とERC-20残高のバッチ読み取りを置き換えられる。

<CodeSnippet
  language="bash"
  code={`curl -X POST "https://api.g.alchemy.com/data/v1/$ALCHEMY_API_KEY/assets/tokens/balances/by-address" \\
  -H "Content-Type: application/json" \\
  -d '{"addresses":[{"address":"0xYourAddress","networks":["eth-mainnet","matic-mainnet"]}]}'`}
/>

### Bitcoin API: アドレス、残高、UTXO

Bitcoin側は私たちの[UTXO API](/docs/bitcoin/utxo-migration-guide)で動く。UTXO APIは、アドレス、残高、残高履歴、トランザクション、未使用アウトプットを扱うBlockbook形式のエンドポイントを備えたRESTインターフェースだ。ダッシュボードでアドオンとして有効にする。残高履歴は、指定した期間について時間間隔ごとの受取額と送金額を返すため、レポート用のビューに対応できる。

<CodeSnippet
  language="bash"
  code={`curl "https://bitcoin-mainnet.g.alchemy.com/v2/$ALCHEMY_API_KEY/api/v2/balancehistory/<btc-address>?from=1700000000&to=1710000000"`}
/>

返されるのは時間間隔ごとのアクティビティであり、特定の時点の残高ではない。BitcoinでAMBの`GetTokenBalance`をタイムスタンプ付きで使っていた場合は、アドレスのアウトプットと支出からその残高を再構築するか、独自のスナップショットを保持する。

### アダプターでは何を処理すべきか

アダプターで処理しておくべき細部がいくつかある。

- **ファイナリティ**。AMB Queryの残高およびコントラクト関連のオペレーションはファイナライズ済みのデータのみを返し、AWSはこれをEthereumでは64ブロック、Bitcoinでは6ブロックと定義している。同じ結果が必要な場合は、`latest`ではなく、その深さのブロックで読み取る。
- **タイムスタンプ**。AMB Queryは、過去の残高について時点（`atBlockchainInstant`）を受け付ける。私たちのEthereumの残高メソッドはブロック番号を受け取るため、まずタイムスタンプをブロックに変換してから、そのブロックで照会する。
- **トランザクションの網羅範囲**。Transfers APIがカバーするのは送金アクティビティであり、すべてのトランザクションではない。失敗したものも含め、あるアドレスが送信したすべてのトップレベルのトランザクションが必要な場合は、その範囲のブロックを読み取り、各レシートのステータスを確認する。
- **コントラクトの一覧**。`ListAssetContracts`はデプロイヤーでコントラクトを絞り込むが、これを再現できる単一の呼び出しはない。これに依存している場合は、AMB Queryが利用できるうちにその一覧をエクスポートし、自前のストアに保持する。
- **ページネーション**。AMBの`nextToken`は、私たちの`pageKey`（またはUTXO APIのページパラメータ）になる。この違いはアダプター内に閉じ込めておく。

現在AMB Queryから取得したレスポンスを使い、ファイナライズ済みのブロックで、アプリケーションが実際に読み取るオペレーションとフィールドについてアダプターを検証する。

## 移行をどう検証し、ダウンタイムなしで切り替えるか

本番トラフィックを移す前に、固定のファイナライズ済みブロックで両方のプロバイダーを比較する。以下のスクリプトは、AMB Bitcoinですでに使っている`awscurl`ツールを使い、同じ高さで両者が同じブロックハッシュを返すことを確認する。

<CodeSnippet
  language="bash"
  code={`#!/usr/bin/env bash
set -euo pipefail
: "\${ALCHEMY_API_KEY:?Set ALCHEMY_API_KEY}"
: "\${AWS_REGION:?Set AWS_REGION}"
HEIGHT="\${1:-850000}"
BODY="{\\"jsonrpc\\":\\"1.0\\",\\"id\\":\\"parity\\",\\"method\\":\\"getblockhash\\",\\"params\\":[$HEIGHT]}"
AMB=$(awscurl -X POST --service managedblockchain --region "$AWS_REGION" -d "$BODY" \\
  "https://mainnet.bitcoin.managedblockchain.$AWS_REGION.amazonaws.com" | jq -r .result)
ALC=$(curl -s -X POST -H "Content-Type: application/json" -d "$BODY" \\
  "https://bitcoin-mainnet.g.alchemy.com/v2/$ALCHEMY_API_KEY" | jq -r .result)
if [ "$AMB" = "$ALC" ]; then echo "block $HEIGHT match: $ALC"; else echo "MISMATCH at $HEIGHT: AMB=$AMB Alchemy=$ALC"; exit 1; fi`}
/>

EthereumとPolygonについても、ファイナリティを十分に過ぎたブロックで`eth_getBlockByNumber`を使って同じ比較を行い、アプリケーションが依存している過去の`eth_call`についても同様に比較する。AMB EthereumノードでAccessor tokensを使っている場合、そのトークン用エンドポイントは通常のJSON-RPCクライアントで動作するため、この比較に署名コードは不要だ。ファイナライズ済みのブロックで不一致が出る場合、原因はほぼ間違いなくネットワークURLの誤りだ。

チェックに合格したら、フィーチャーフラグや重み付けルーティングを使ってトラフィックを段階的に移し、確信が持てるまではAMBをロールバック先として残しておく。[ダウンタイムなしでRPCプロバイダーを移行する方法](/blog/migrate-between-rpc-providers-zero-downtime)では、移行後も[バックアップのRPCエンドポイント](/overviews/alternative-rpc-endpoint)を維持する方法を含め、段階的な切り替えを詳しく解説している。

## Alchemyの料金はAWS Managed Blockchainとどう違うか

AMBはプロダクトごとに課金方式が異なる。AMB Access Ethereumノードは稼働している間、秒単位で課金され、さらにストレージとリクエストにも課金される。AMB Access BitcoinとAMB Queryはリクエスト単位で課金され、料金はメソッドに応じた段階制だ。私たちはすべてのチェーンとAPIを同じ方法、つまりコンピュートユニット（CU）で課金し、軽い呼び出しは重い呼び出しよりも少ないユニットで済む。

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 240, title: "", dataType: "object" },
      {
        key: "2",
        width: 240,
        title: "Amazon Managed Blockchain",
        dataType: "object",
      },
      { key: "3", width: 240, title: "Alchemy", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p>Ethereumノード</p>", tooltip: "", icon: "" },
        "2": {
          title: "<p>ノード単位、稼働中は秒単位で課金</p>",
          tooltip: "",
          icon: "",
        },
        "3": {
          title: "<p>運用するノードは不要、CUによるリクエスト単位の課金</p>",
          tooltip: "",
          icon: "",
        },
        id: 0,
      },
      {
        "1": { title: "<p>BitcoinとデータAPI</p>", tooltip: "", icon: "" },
        "2": {
          title: "<p>リクエスト単位、メソッドごとの段階別料金</p>",
          tooltip: "",
          icon: "",
        },
        "3": {
          title: "<p>CUによるリクエスト単位、すべてのチェーンで同じ料金</p>",
          tooltip: "",
          icon: "",
        },
        id: 1,
      },
      {
        "1": { title: "<p>利用開始</p>", tooltip: "", icon: "" },
        "2": {
          title: "<p>AWSアカウントとIAMのセットアップ</p>",
          tooltip: "",
          icon: "",
        },
        "3": {
          title: "<p>毎月3,000万CUのFreeプラン</p>",
          tooltip: "",
          icon: "",
        },
        id: 2,
      },
      {
        "1": { title: "<p>有料の利用</p>", tooltip: "", icon: "" },
        "2": {
          title: "<p>リージョンによって異なる料金</p>",
          tooltip: "",
          icon: "",
        },
        "3": {
          title: "<p>Pay As You Goは100万CUあたり$0.525</p>",
          tooltip: "",
          icon: "",
        },
        id: 3,
      },
      {
        "1": { title: "<p>AWS経由での購入</p>", tooltip: "", icon: "" },
        "2": { title: "<p>AWSのネイティブな課金</p>", tooltip: "", icon: "" },
        "3": {
          title: "<p>AWS Marketplaceで利用可能</p>",
          tooltip: "",
          icon: "",
        },
        id: 4,
      },
    ],
  }}
/>

具体的な比較を1つ挙げると、AWSの[AMB料金ページ](https://aws.amazon.com/managed-blockchain/pricing/)は、Bitcoinの例で`getblock`呼び出し100万回あたり$16としている。私たちのエンドポイントでは`getblock`は10CUで、Pay As You Goなら100万回あたり約$5.25になる。プランの詳細は[料金ページ](/pricing)に掲載している。大量のトラフィックを扱うチームは、Enterpriseプランについて営業チームに相談できる。EnterpriseプランはAWS Marketplaceのプライベートオファーとしても利用できる。

## 移行の計画にサポートが必要か

[Alchemyの無料アカウントを作成](https://dashboard.alchemy.com/)すれば、契約も同期待ちのノードもなしに、Ethereum、Bitcoin、Polygonで動作するエンドポイントを今日から手に入れられる。AMBの構成に対する整合性チェックを今週中に実行するには、それで十分だ。

本番ワークロード、AMB Queryの移行、あるいは専用ノードに依存していたチームは、[営業チームに相談してほしい](/contact-sales)。AMBの構成のマッピング、適切なプランの選定、そして2027年9月より十分前の切り替えのスケジュール策定を支援する。Google Cloudからもワークロードを移行する場合は、[Google Cloud Blockchain Node Engineの移行ガイド](/overviews/google-cloud-blockchain-node-engine-alternative)でその切り替えを解説している。

## よくある質問

### AWS Managed Blockchain（AMB）はいつ終了するか

Amazon Managed Blockchainは2027年9月29日にサポートが終了する。その日を過ぎると、既存の顧客はAMB Access Ethereum、Bitcoin、Polygon、Hyperledger Fabric、AMB Queryにアクセスできなくなる。両方のプロバイダーを並行して運用できるよう、期限より十分前に移行を計画しておくべきだ。

### Amazon Managed Blockchainの最適な代替は何か

Ethereum、Bitcoin、PolygonのAMB Accessについては、Alchemyがそのまま置き換えられる代替であり、AWS自身のノードおよびRPCの移行ガイドもAlchemyをサードパーティプロバイダーとして挙げている。Alchemyは同じJSON-RPCメソッドを維持し、SigV4署名をAPIキーに置き換える。AMB Queryについては、AlchemyのData APIとUTXO APIがインデックス済みデータの読み取りをカバーする。

### Amazon Managed Blockchainから移行するにはアプリケーションを書き直す必要があるか

AMB Accessについては必要ない。AlchemyはEthereum、Bitcoin、Polygonで標準のJSON-RPCを使うため、エンドポイントURLを変更し、SigV4署名またはAccessor tokensを削除すればよい。AMB Queryはインデックス済みのAPIなので、そのSDK呼び出しを、アダプターを介したAlchemy Data APIとUTXO APIの呼び出しに置き換える。

### AMB Queryのようにインデックス済みのトランザクション履歴とトークンデータを提供するブロックチェーンAPIはどれか

AlchemyのData APIは、インデックス済みのトランザクション履歴とトークンデータを提供する。Ethereumでは、AMB Queryの残高、トランザクション、送金、トークン、NFTの読み取りをカバーし、Token Balances By Walletがネイティブ残高とERC-20残高のバッチ照会を置き換える。Bitcoinでは、AlchemyのUTXO APIがアドレス、残高、残高履歴、トランザクション、未使用アウトプットをカバーする。使用しているAMB Queryの各オペレーションをアダプターで対応付け、取得しておいたAMBのレスポンスと照らし合わせて検証する。

### AWS経由でAlchemyの料金を支払えるか

支払える。AlchemyはAWS Marketplaceに出品されているため、サブスクリプションをAWSアカウント経由で請求でき、Enterpriseプランはプライベートオファーとして利用できる。毎月3,000万コンピュートユニットが含まれるAlchemyのFreeプランから始め、100万コンピュートユニットあたり$0.525のPay As You Goに移行することもできる。

### Alchemyに移行した後はどのチェーンを使えるか

AMBがサポートしていたすべてのパブリックチェーンが利用できる。Ethereum（メインネットに加えSepoliaとHoodi）、Bitcoin（メインネット、テストネット、Signet）、Polygon（メインネットとAmoy）だ。それ以外にも、AlchemyはBase、Arbitrum、Optimism、Solanaを含む100以上のチェーンをサポートしており、すべて同じAPIキーで利用できる。

### AMB Access Hyperledger Fabricはどうなるか

Hyperledger Fabricはプライベートな許可型台帳を運用するものであり、パブリックチェーンのRPCトラフィックを移すのとは性質の異なる移行になる。AWSのサポート終了告知には、Fabricの選択肢として、別のマネージドFabricネットワーク、AWS上でのセルフマネージドFabric、AWSのデータベースが挙げられている。Fabricのワークロードをパブリックチェーンに移すことを検討している場合は、Alchemyの営業チームに相談してほしい。
