AWS公式「AWS Emulator」登場 — 200超のサービスをローカルで動かす仕組みとLocalStackとの違い

はじめに

2026年11月11日、AWS が公式のローカルエミュレーター「AWS Emulator」を公開しました。AWS アカウントを使わずに、手元のマシンや CI で AWS の API を相手にテストできるツールです。追加料金はかからず、オフラインで動きます。

これまで AWS をローカルで再現する手段といえば LocalStack や Moto、DynamoDB Local のような個別ツールでした。今回 AWS 自身が「200 を超えるサービス」を対象にしたエミュレーターを出したうえに、そのコードはすべて AI エージェントが書いてテストしたと説明しています。

この記事では、AWS Emulator の中身と作り方、SDK から使うときの設定、認証や永続化の制約、LocalStack との使い分けを整理します。

AWS Emulator とは何か

公式 README によると、AWS Emulator は「AWS の API エンドポイントを提供するローカルプログラム」で、GUI はありません。使い方は2通りです。

  • サーバーモード: aws-emulator を起動すると 127.0.0.1:9297 で HTTPS(自己署名証明書)を待ち受ける。AWS CLI や各言語の SDK から使う
  • 組み込みモード: Rust のテストで dev-dependency として追加し、テストごとに独立したインスタンスをプロセス内で動かす。エンドポイントや証明書の設定は不要

導入方法は環境によって異なります。Linux は RPM / Debian パッケージ、Windows と macOS は短い Dockerfile からコンテナを作って動かします。AI エージェントには AWS CLI 2.35.0 以降で aws agent-toolkit add-skill --skill-name aws-emulator --region us-east-1 を実行し、スキルとして追加できます。

ライセンスは CC0 1.0(vendor/ 配下だけ Apache 2.0)です。ただし README に「This repository does not take PRs」とあるため、外部からはコードを直せません。不具合や本物の AWS との差は GitHub Issues で報告する仕組みです。テレメトリは初期状態で有効なので、使いたくない場合は --telemetry off か EMULATOR_TELEMETRY=off で止めておきます。

技術的な背景 — エージェントが「本物の AWS」と突き合わせて作った

最大の特徴は作り方です。Werner Vogels のブログ(Swami Sivasubramanian 氏の寄稿)と、開発者の Matt Goldberg 氏の解説によると、次の2つの材料を使っています。

  1. 仕様: Smithy で書かれた公開 API モデル(438 個、200 以上のサービス分)
  2. 正解の基準: 本物の AWS クラウド

エージェントはまず API モデルから「フィデリティテスト」を作ります。これは顧客の利用シナリオを end-to-end で書いたテストです。たとえば SQS なら「キューを作る → 送信 → 受信 → 確認応答 → 削除」という流れになります。このテストを本物の AWS で通るまで直し、実際の挙動を記録します。そのあと、同じテストに通るようにエミュレーター側を実装します。テストが落ちたら、それがエミュレーターと本物の差です。

始まりは週末の実験でした。Goldberg 氏が Kiro に指示を出すと、約15分で「まずまず動く SQS エミュレーター」ができたそうです。続けて「残りの AWS 全部」を週末のうちに作らせ、翌週の月曜からチーム内で使い始めました。

現在は、エージェントが3つのチームに分かれて開発しています。

チーム役割
1フィデリティテストを書き、本物の AWS で検証する
2テストをエミュレーターで再実行し、失敗を Issue にする
31エージェントが1 Issue を修正する

修正はすべて「マージゲート」を通ります。ゲートではビルド、レビュー、フィデリティの確認に加えて、複数のセキュリティエージェントによる敵対的レビューが行われます。リポジトリにはすでに約3万件のコミットがあり、まだ本物と一致しない挙動は issues/things-that-do-not-work/ にまとめて公開されています。

Vogels のブログでは、この取り組みがエンジニアの役割の変化と結びつけて語られています。

We expect agents to build and check most software, with engineers deciding what gets built and when the work is correct.

エンジニアの仕事は、仕様・テスト・マージゲートを用意して「何が正しいか」を決めることだ、という主張です。エミュレーター自体も、エージェントが自分の書いたコードを手元で検証するための道具として位置づけられています。

SDK から使うときの設定と制約

公式ドキュメントでは、環境変数でエンドポイントを切り替えます(macOS / Linux の例)。

export AWS_ENDPOINT_URL=https://127.0.0.1:9297
export AWS_SHARED_CREDENTIALS_FILE=~/.aws/emulator/9297/emulator_credentials
export AWS_CONFIG_FILE=~/.aws/emulator/9297/config
export AWS_CA_BUNDLE=~/.aws/emulator/9297/ca.pem
export AWS_EC2_METADATA_DISABLED=true
export AWS_DISABLE_HOST_PREFIX_INJECTION=true
export AWS_REGION=us-east-1
export AWS_DEFAULT_REGION=us-east-1
unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN AWS_PROFILE

aws sts get-caller-identity を実行してアカウント 000000000000 が返れば、エミュレーターに接続できています。設定でつまずきやすいのは次の点です。

  • 証明書: CLI v2、Boto3、Go v2 は AWS_CA_BUNDLE を読む。JavaScript v3 は NODE_EXTRA_CA_CERTS、Rust と .NET は SSL_CERT_FILE、Java 2.x は JAVA_TOOL_OPTIONS で truststore.p12 を指定する。証明書は起動のたびに作り直される
  • 認証: サーバーモードの初期設定では SigV4 署名が必須(組み込みモードは初期状態で認証オフ)。起動ごとにアクセスキーが発行され、前回のキーは使えない。本物の認証情報が環境変数に残っていると、リクエストは拒否される。--auth off で署名の確認を止められる
  • S3: エンドポイントは localhost ではなく 127.0.0.1 で書く。S3 Control のリクエストは届かない
  • 永続化なし: リソースはメモリ上にしかなく、停止すると消える
  • セキュリティ検証には使えない: IAM ポリシーは一部のサービスでしか評価されず、評価方法も本物とは違う。KMS のキーポリシーや S3 のバケットポリシーは確認されない。公式にも「セキュリティのテストには使わないこと」と書かれている

エンジニアへの影響 — LocalStack とどう使い分けるか

LocalStack は2026年2月、Community Edition を終了して Pro と統合し、登録制の1つのイメージにすると発表しました(InfoQ)。CI で latest を取得していたチームは対応を迫られています。そこに、無料・登録不要・CC0 の公式エミュレーターが出たことになります。

使い分けの目安は次のとおりです。

  • AWS Emulator が向いている場面: SQS・DynamoDB・S3 などを使うアプリのユニットテストや結合テスト、CI でアカウントを使わずに回すテスト、Kiro(筆者の補足: Claude Code なども同様)などのコーディングエージェントに自分のコードを確かめさせるループ。Rust なら組み込みモードでテストごとに独立した環境を作れる
  • AWS Emulator では扱えない場面: 状態を残したい開発環境(永続化しない)、IAM やバケットポリシーの検証、クロスアカウント・クロスリージョンの構成。これらは他のツールの対応状況を個別に確かめるか、本物の AWS の検証用アカウントで試す
  • 本物の AWS でしか確かめられないこと: 性能、クォータ、セキュリティ設定。エミュレーターを通ったことは「API の挙動が合っている」ことの確認にしかならない

注意点として、各サービスがどこまで本物と一致しているか(フィデリティスコア)はリリースごとに公開される予定ですが、記事執筆時点では数値を確認できていません。導入前に、自分が使うサービスの things-that-do-not-work を確認しておくと安全です。

まとめ

  • AWS が公式ローカルエミュレーター「AWS Emulator」を CC0 で公開した。無料・オフラインで動き、AWS アカウントは要らない
  • 438 個の Smithy API モデルを仕様、本物の AWS を正解の基準にして、エージェントがテストと実装を作った
  • 環境変数で SDK の向け先を切り替えて使う。永続化なし、セキュリティ検証不可という前提を押さえておく
  • LocalStack の Community 版終了と重なり、CI やエージェントで使うテスト環境の有力な選択肢になる

AWS は re:Invent で詳細を共有すると予告しています。フィデリティの測定方法が公開されれば、どの用途まで任せられるかを判断しやすくなるはずです。

ソース