AWS Emulatorのfidelityスコアと注意点、エージェント用スキルを確認してみた

AWS Emulatorのfidelityスコアと注意点、エージェント用スキルを確認してみた

AWS Emulatorはリリースごとにfidelityスコアを公開しています。1.0.322のスコアをサービス別に集計し、IAMやリージョンの注意点を動かして確かめました。Rancher Desktopでの起動エラーの対処と、aws-emulatorスキルによる互換性チェックの結果も載せています。
2026.11.12

こんにちは。サービス開発部の武田です。

2026年11月11日に、AWS公式のローカルエミュレータ「AWS Emulator」がリリースされました。AWS CLIやAWS SDKの接続先をローカルのエンドポイントに変えるだけで、AWSアカウントなしにリソースの作成や操作を試せます。

https://aws.amazon.com/about-aws/whats-new/2026/11/aws-emulator-now-available/

https://aws.amazon.com/blogs/aws/test-your-applications-against-aws-locally-with-aws-emulator/

起動の手順と、S3やDynamoDBなどの基本操作は、次の記事にまとまっています。

https://dev.classmethod.jp/articles/aws-emulator-local-try/

今回は手元のmacOSで動かして、AWS公式ならではの利点と現時点の注意点を確かめてみました。一緒に公開されたエージェント用のスキルも試しています。

検証環境

  • macOS(Apple silicon)、Rancher Desktop(Docker Engine 29.5.3)
  • AWS CLI 2.36.30
  • Claude Code(aws-emulatorスキル v1)
  • AWS Emulator 1.0.322
  • 検証日は2026年11月12日

Rancher Desktopでは--userを付けて起動する

ユーザーガイドのdocker runをRancher Desktopでそのまま実行すると、次のエラーで終了しました。

emulator serve failed: server I/O error: Operation not permitted (os error 1)

コンテナ内のユーザー(UID 1000)に、マウントしたディレクトリへの書き込み権限がないためです。ユーザーガイドではLinux向けとされている--userを足すと起動します。

mkdir -p ~/.aws/emulator
PORT=9297
docker run --rm --memory=2g --memory-swap=2g -p 127.0.0.1:$PORT:$PORT \
  --user "$(id -u):$(id -g)" \
  -e HOME="$HOME" -v "$HOME/.aws/emulator:$HOME/.aws/emulator" \
  aws-emulator -p $PORT

Docker Desktopでは試していません。

https://docs.aws.amazon.com/emulator/latest/userguide/getting-started-docker.html

公式が提供することの利点

サードパーティ製のエミュレータと比べると、AWS自身が作っていることがそのまま利点になっています。

fidelityテストとスコアが公開されている

AWSとどこまで同じ動きをするかは、fidelityテストで測られています。AWSは、本物のAWSで検証したテストをaws-emulator-evaluation-suiteで公開しています。まだ通っていないテストも含まれます。リリースごとの結果はscores.json.gzとしてGitHubのリリースに添付されます。1.0.322の結果をサービス別に集計しました。

サービス パスした数 / テスト数
Amazon S3 763 / 924
Amazon DynamoDB 661 / 808
Amazon SQS 286 / 304
AWS IAM 359 / 463
AWS CloudFormation 354 / 451
AWS Lambda 293 / 616

集計したのはkindがbehavioralのテストで、テストIDの先頭のサービス名ごとに数えました。スキップされたテストと、複数のサービスにまたがるテストは除いています。使いたいAPIがどこまで再現されているかを、動かす前に調べられますね。

fidelityテストは、不正な呼び出しに対するエラーコードとメッセージまで照合しています。ユーザーガイドが例に挙げている短すぎるテーブル名を試すと、次のValidationExceptionが返りました。本物のAWSでも同じメッセージが返ります。

An error occurred (ValidationException) when calling the CreateTable operation: 1 validation error detected: Value 'ab' at 'tableName' failed to satisfy constraint: Member must have length greater than or equal to 3

未実装のAPIは501で失敗する

未実装のオペレーションは、ステータスコード501のNotImplementedを返します。対応していないAPIを呼んでいることが、テストの失敗ですぐにわかります。

$ aws athena list-work-groups
An error occurred (NotImplemented) when calling the ListWorkGroups operation: operation ListWorkGroups is scaffolded but not implemented in this emulator

本物のAWSと取り違えにくい認証

エミュレータは起動のたびにアクセスキーを生成し、SigV4署名を検証します。アクセスキーIDはEMULATORで始まり、それ以外のキーで署名したリクエストは拒否されます。

An error occurred (AccessDenied) when calling the ListBuckets operation: Sign the request with the emulator credentials

ポートを変えて2つ起動すると、キーと状態は別々になりました。9297のキーで9300を呼ぶと、同じエラーで拒否されます。並列のCIジョブやエージェントごとに1つずつ割り当てられます。

新しいAPIへの追随

各サービスはAWS SDKと同じAPIモデルから生成されているので、AWSにサービスやAPIが追加されるとエミュレータにも現れます。挙動はリリースを重ねて実装されていきます。

AWS News Blogによると、その実装と保守はエージェントが担っています。本物のAWSやAPIモデルとの差分を見つけてissueにするエージェントと、issueを拾って実装・レビューするエージェントに分かれているそうです。リポジトリはPRを受け付けておらず、利用者からの報告はissueで行います。

コーディングエージェント用のスキル

AWS Emulatorと一緒に、コーディングエージェント用のaws-emulatorスキルが公開されています。AWS CLI 2.35.0以降で次のコマンドを実行すると、~/.claude/skills/aws-emulator/にSKILL.mdと8本の参照ドキュメントが置かれます。--agentを省略すると、検出されたエージェントすべてが対象になります。

aws agent-toolkit add-skill --skill-name aws-emulator --region us-east-1 --agent claude-code

boto3でDynamoDB、S3、SQS、Athenaを呼ぶ小さなサンプルアプリを用意して、ユーザーガイドの例文と同じ依頼をClaude Codeに2つ出しました。

セットアップを任せる

1つ目の依頼は「Install AWS Emulator and point my project at it.」(AWS Emulatorをインストールして、プロジェクトをそこに向けて)です。頼んでみると、イメージのビルドから接続の確認までを4分半ほどで終えました。接続用の環境変数は~/.aws/emulator/9297.envに出力されます。( . ~/.aws/emulator/9297.env && aws s3 ls )のように、サブシェルで読み込んで使います。

Rancher Desktopでは、スキルが指示するdocker runも先ほどのエラーで失敗しました。-d --rm付きのため、コンテナとログは残りません。スキルのトラブルシューティングにこのエラーは載っていません。エージェントは--rmを外して起動し直し、ログから原因を調べて--userを足していました。

互換性チェックを任せる

2つ目の依頼は「Will my app in this repo work on AWS Emulator?」(このリポジトリのアプリケーションはAWS Emulatorで動きますか)です。エージェントはまず、アプリケーションのコードからAWSの呼び出しを洗い出します。次にfidelityテストのソースを読み、それぞれの呼び出しを直接検証しているテストを選びます。最後にリリースのスコアレポートと突き合わせます。エミュレータやAWSは呼び出しません。12分ほどかかりました。

判定はWILL NOT WORKで、内訳は次のとおりです。

項目 結果
DynamoDB、S3、SQSの呼び出し(12項目) VERIFIED
athena:StartQueryExecution VERIFIED
athena:ListWorkGroups FAILING
リージョンと認証情報を環境から受け取る前提(2項目) UNVERIFIED

このあとサンプルアプリをエミュレータに向けて動かしてみました。DynamoDB、S3、SQSを通るテストは成功し、AthenaのレポートはListWorkGroupsの501で失敗しました。動かせた範囲では、項目ごとの結果と合っています。StartQueryExecutionはその前で止まったので確かめていません。

判定は二択で、裏付けのない項目が1つでもあるとWILL NOT WORKになります。どのAPIが引っかかるのかは、項目ごとの結果を見るのがよさそうですね。macOSではGNU grep(ggrep)のインストールが前提です。

https://docs.aws.amazon.com/emulator/latest/userguide/getting-started-agent.html

現時点の注意点

IAMポリシーの評価はAWSと一致しない

ユーザーガイドは、セキュリティのテストに使わないよう明記しています。エミュレータの中でポリシーを1つも付けていないIAMユーザーを作り、そのアクセスキーで操作してみました。

S3のGetObjectとPutObject、DynamoDBのScanとPutItem、SQSのSendMessage、IAMのListUsersは拒否されました。一方で、S3のCreateBucketとDeleteBucket、DynamoDBのListTables、SNSのCreateTopic、SSMのPutParameterは成功しました。AWSではどれも拒否される操作です。

ユーザーガイドにはS3バケットポリシーは確認しないとあります。1.0.322では、s3:ListBucketをDenyするバケットポリシーを付けると、エミュレータ自身のキーでもAccessDeniedになりました。ポリシーが評価されるかどうかは、オペレーションによって異なります。権限の確認は本物のAWSで行いましょう。

https://docs.aws.amazon.com/emulator/latest/userguide/security.html

1つのエミュレータは1アカウント・1リージョンで使う

アカウントは000000000000の1つだけで、クロスアカウントの動作は再現されません。リージョンはどの値でも受け付けます。us-east-1で作ったDynamoDBテーブルは、ap-northeast-1を指定すると見えませんでした。ただしリージョンをまたぐ動作はサポート外で、リージョンごとに分かれるかどうかもサービスによります。複数リージョンを試すときは、リージョンごとにエミュレータを起動します。

状態と認証情報は停止すると消える

永続化のオプションはありません。再起動するとバケットやテーブルは消え、アクセスキーと証明書も新しく作り直されます。テストで使うリソースは毎回作ります。ユーザーガイドによると、長時間の稼働や負荷をかける使い方は試されていません。

fidelityスコアはサービスによって差がある

ユーザーガイドによると、現時点でAWSに近いのはリソースを作成・取得・削除するコントロールプレーンのAPIです。データプレーンやIaCツールへの対応はサービスごとに異なります。先ほどと同じ集計で、EC2は1,299件中576件、Athenaは306件中50件でした。複数のサービスにまたがるテストは6,380件中2,667件です。

Bedrockのconverseは呼び出せますが、モデルは動きません。次のような決まったメッセージが返ります。

No language model runs in this emulator. anthropic.claude-3-haiku-20240307-v1:0 generated no text for this request. The request carried 1 message(s) and 1 input token(s).

テレメトリはデフォルトでオン

利用状況とエラーのデータがAWSに送られます。リクエストやレスポンスの中身、認証情報は含まれないとされています。無効にするときはaws-emulatorに-t offを渡すか、環境変数EMULATOR_TELEMETRY=offを設定します。Dockerではdocker runに-e EMULATOR_TELEMETRY=offを足します。

まとめ

AWS Emulatorは、どのAPIがどこまで再現されているかをテストとスコアで確かめられます。デプロイ前にAPI呼び出しの誤りを見つける用途や、コーディングエージェントに試行錯誤させる環境には使えそうです。権限の確認と、データプレーンに依存するテストは、引き続き本物のAWSで行います。

リリースは11月7日から11日の間だけで12回ありました。セキュリティ修正は最新版にしか入らないので、バージョンは固定せず、スコアもリリースごとに見直しましょう。

どなたかの参考になりましたら幸いです。

参考リンク

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事