はじめに
「AWS を使ってみたいけれど、アカウントを作ってクレジットカードを登録するのが怖い」「何から触ればいいのか分からない」。そんな人にちょうどいい道具が出ました。
2026 年 11 月 11 日、AWS が AWS Emulator を公開しました。AWS の API を 自分のパソコンの中で再現する 公式ツールです。
- AWS アカウントは不要
- 追加料金なし(本物の AWS に出すまで、お金はかかりません)
- いつもの AWS CLI や AWS SDK から、そのまま使える
ちなみに、このエミュレータのコードは すべて AI エージェントが書き、人間は書いてもレビューしてもいない そうです。そちらも話題になっています。
この記事では、AWS をまったく触ったことがない人 を想定して、次のことを順に説明します。
- AWS とは何か(この記事で使うサービスだけ)
- AWS Emulator のインストール
- AWS CLI をエミュレータにつなぐ設定と、本物の AWS につながっていないことの確かめ方
- S3(ファイル置き場)と DynamoDB(データベース)を、アカウントなしで触る
この記事で使った環境
| 項目 | バージョン |
|---|---|
| AWS Emulator | 1.0.338(2026-11-12 リリース) |
| AWS CLI | 2.40.2 |
| Docker | 29.9.2 |
| OS | Ubuntu 24.04(x86_64) |
筆者は Linux で試しています。Windows・macOS の手順は AWS の公式ドキュメントのとおりに書いていますが、筆者は実機で試していません。
AWS ってそもそも何?
AWS(Amazon Web Services)は、Amazon が提供する クラウドサービス です。サーバーやデータベース、ファイル置き場などを、自分で機械を買わずに 必要な分だけ借りて使える ものだと考えてください。
AWS には 200 を超えるサービスがありますが、この記事で紹介するのは次の 3 つです(実際に触るのは S3 と DynamoDB)。
| サービス | ひとことで言うと | 身近なたとえ |
|---|---|---|
| S3 | ファイル置き場 | インターネット上の共有フォルダ |
| DynamoDB | データベース | 項目ごとに引き出せる、大きな表 |
| Lambda | プログラムを置いておくと、呼ばれたときだけ動かしてくれる場所 | 電話をかけると答えてくれる係の人 |
もう 1 つ、IAM という「誰が何をしてよいか」を決める権限の仕組みも出てきます。
AWS を操作する方法はいくつかありますが、この記事では AWS CLI(コマンドで AWS を操作する公式ツール)を使います。画面をクリックする方法(マネジメントコンソール)と違い、手順をそのまま記事に書けて、同じ手順でエミュレータにも本物にも使える のが利点です。
AWS Emulator とは
AWS Emulator は、AWS の API に答える プログラム です。自分のパソコンで起動すると、AWS CLI からのリクエストを本物の AWS の代わりに受け取り、本物と同じ形で返事をします。
公式ドキュメントによると、特徴と制限は次のとおりです。
| 特徴 | 内容 |
|---|---|
| アカウント | 不要 |
| 料金 | 追加料金なし |
| 対応サービス | AWS が公開している API の定義から自動で作られている(報道では 200 以上のサービスに対応) |
| 再現度 | 対応している操作は、本物と同じ結果・同じエラーを返す。未対応の操作は「501 Not Implemented」を返す |
| データ | メモリの中だけ。エミュレータを止めると全部消える |
| 制限 | 内容 |
|---|---|
| 権限(IAM) | 本物のように権限をチェックしない。セキュリティの確認には使えない |
| リージョン・アカウント | 1 つだけ。どのリージョンを指定しても、同じ場所として扱われる |
| 用途 | テスト向け。長時間の運用や負荷テストは想定していない |
「本物の AWS で動かす前に、手元で何度でも試して壊せる練習場」と考えるとちょうどいいです。
準備するもの
| Windows・macOS | Linux | |
|---|---|---|
| エミュレータの動かし方 | Docker の中で動かす | パッケージを入れて直接動かす(Docker でも可) |
| 必要なもの | Docker Desktop、AWS CLI | AWS CLI |
どちらの場合も AWS CLI(バージョン 2) が必要です。インストール方法は公式の手順を見てください。
インストールできたら、バージョンを確認します。
aws --version
aws-cli/2.40.2 Python/3.14.8 Linux/6.18.44-fc-v378 exe/x86_64.ubuntu.24
AWS CLI はふつう、最初に aws configure で本物の AWS の認証情報を設定します。エミュレータを使うだけなら、この設定は不要です。 エミュレータが自分用の認証情報を作ってくれます。
エミュレータを入れる
方法 A:Docker で動かす(Windows・macOS・Linux)
AWS は完成品の Docker イメージを配っていないので、短い Dockerfile から自分で作ります。
空のフォルダを作り、Dockerfile という名前で次の内容を保存します(公式ドキュメントのとおりです)。
FROM public.ecr.aws/amazonlinux/amazonlinux:2023-minimal
ADD https://downloads.aws.com/aws-emulator/packages/aws-emulator/LTS/latest/aws-emulator-x86_64.rpm /tmp/aws-emulator.rpm
RUN rpm -i /tmp/aws-emulator.rpm && rm /tmp/aws-emulator.rpm \
&& mkdir -p /home/emulator && chown 1000 /home/emulator
USER 1000
ENV HOME=/home/emulator
EXPOSE 9297
ENTRYPOINT ["aws-emulator", "-b", "0.0.0.0"]
Apple シリコンの Mac(M1〜M4 など)では、2 行目の aws-emulator-x86_64.rpm を aws-emulator-aarch64.rpm に書き換えてください。
そのフォルダで、イメージを作ります。筆者の環境では 1 分ほどかかり、イメージは約 1.8 GB になりました。
docker build -t aws-emulator .
次に、エミュレータが認証情報を書き出すフォルダを作ってから、コンテナを起動します。
mkdir -p ~/.aws/emulator
PORT=9297
docker run --rm -e EMULATOR_TELEMETRY=off \
--memory=2g --memory-swap=2g -p 127.0.0.1:$PORT:$PORT \
-e HOME="$HOME" -v "$HOME/.aws/emulator:$HOME/.aws/emulator" \
aws-emulator -p $PORT
New-Item -ItemType Directory -Force "$env:USERPROFILE\.aws\emulator"
$port = 9297
docker run --rm -e EMULATOR_TELEMETRY=off `
--memory=2g --memory-swap=2g -p "127.0.0.1:${port}:${port}" `
-v "$env:USERPROFILE\.aws\emulator:/home/emulator/.aws/emulator" `
aws-emulator -p $port
-
Linux では、
docker runの直後に--user "$(id -u):$(id -g)"を足してください。足さないと、エミュレータが書き出したファイルが root のものになり、AWS CLI から読めません。 -
-p 127.0.0.1:9297:9297の127.0.0.1:は省略しないでください。省略すると、同じネットワークのほかのパソコンからもエミュレータに接続できてしまいます。 -
-e EMULATOR_TELEMETRY=offは、次の「テレメトリ」の項を見てください。
方法 B:Linux にパッケージを入れる
Debian・Ubuntu(x86_64)なら、次の 2 行で入ります。
curl -fsSLo aws-emulator.deb https://downloads.aws.com/aws-emulator/packages/aws-emulator/LTS/latest/aws-emulator_amd64.deb
sudo apt-get install -y ./aws-emulator.deb
Arm の場合や RPM 系のディストリビューションは、公式ドキュメントにコマンドがあります。パッケージには署名が付いていて、入れる前に本物かどうか確かめる手順も載っています(筆者も確かめてから入れました)。
入ったら、バージョンを確認して起動します。
aws-emulator -v
EMULATOR_TELEMETRY=off aws-emulator
Version: 1.0.338
Release date: 2026.11.12
起動すると、そのターミナルはエミュレータが使い続けます。AWS CLI は別のターミナルで 操作してください。
テレメトリ(使用状況の送信)について
AWS Emulator は、初期設定では 匿名の使用状況とエラーの情報を AWS に送ります。起動時のログにも次のように表示されます。
This emulator collects usage and error telemetry: enabled (on by default; opt out any time); disable with EMULATOR_TELEMETRY=off ...
公式ドキュメントでは、リクエストの中身や作ったデータは送らないとされています。送りたくない場合は、上の手順のように EMULATOR_TELEMETRY=off を付けて起動します。止めた場合は、ログが次のようになります。
This emulator collects usage and error telemetry: disabled (via EMULATOR_TELEMETRY=off)
AWS CLI をエミュレータに向ける
ここが一番大事なところです。AWS CLI は、何も設定しなければ 本物の AWS に接続しにいきます。環境変数で、接続先をエミュレータに切り替えます。
エミュレータは起動すると、~/.aws/emulator/9297/ に 自分用の認証情報と証明書 を書き出します。それを使うように設定します。
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
$env:AWS_ENDPOINT_URL = "https://127.0.0.1:9297"
$env:AWS_SHARED_CREDENTIALS_FILE = "$env:USERPROFILE\.aws\emulator\9297\emulator_credentials"
$env:AWS_CONFIG_FILE = "$env:USERPROFILE\.aws\emulator\9297\config"
$env:AWS_CA_BUNDLE = "$env:USERPROFILE\.aws\emulator\9297\ca.pem"
$env:AWS_EC2_METADATA_DISABLED = "true"
$env:AWS_DISABLE_HOST_PREFIX_INJECTION = "true"
$env:AWS_REGION = "us-east-1"
$env:AWS_DEFAULT_REGION = "us-east-1"
Remove-Item Env:AWS_ACCESS_KEY_ID, Env:AWS_SECRET_ACCESS_KEY, Env:AWS_SESSION_TOKEN, Env:AWS_PROFILE -ErrorAction SilentlyContinue
それぞれの意味は次のとおりです。
| 環境変数 | 意味 |
|---|---|
AWS_ENDPOINT_URL |
接続先をエミュレータ(自分のパソコンの 9297 番ポート)にする |
AWS_SHARED_CREDENTIALS_FILE / AWS_CONFIG_FILE
|
エミュレータが作った認証情報と設定を使う |
AWS_CA_BUNDLE |
エミュレータの証明書を信用する(HTTPS のため) |
AWS_REGION など |
リージョンを 1 つに決めておく |
最後の unset / Remove-Item
|
本物の AWS の認証情報を、念のため消しておく |
この環境変数は、設定したターミナルの中だけで有効です。 新しいターミナルを開いたら、もう一度設定してください。設定し忘れたまま AWS CLI を使うと、本物の AWS に接続しにいきます。
毎回打つのは大変なので、ファイルに保存しておき、source emulator-env.sh(PowerShell では . .\emulator-env.ps1)で読み込むのがおすすめです。
本物に繋がっていないことを確かめる
次のコマンドで、「今、誰として接続しているか」を確認できます。
aws sts get-caller-identity
{
"UserId": "AIDAH5I7GEMO7ADXNFAZU",
"Account": "000000000000",
"Arn": "arn:aws:iam::000000000000:user/emulator"
}
Account が 000000000000(0 が 12 個)なら、エミュレータに繋がっています。ここに自分の 12 桁のアカウント番号が出たら、本物の AWS に繋がっています。すぐに環境変数を見直してください。
作業を始める前に毎回これを確かめる 癖をつけておくと安心です。
触ってみる① S3(ファイル置き場)
S3 では、ファイルを入れる箱のことを バケット と呼びます。バケットを作って、ファイルを出し入れしてみます。
# バケットを作る
aws s3 mb s3://my-first-bucket-20261113
# ファイルを作って、バケットに入れる
echo "はじめての S3" > hello.txt
aws s3 cp hello.txt s3://my-first-bucket-20261113/
# バケットの中身を見る
aws s3 ls s3://my-first-bucket-20261113/
# バケットからファイルを取り出して表示する(最後の - は「画面に出す」)
aws s3 cp s3://my-first-bucket-20261113/hello.txt -
make_bucket: my-first-bucket-20261113
upload: ./hello.txt to s3://my-first-bucket-20261113/hello.txt
2026-11-12 23:40:48 19 hello.txt
はじめての S3
本物の AWS と同じコマンドで、同じように動きました。
本物の S3 では、バケット名は 世界中で重複できません(ほかの人が使っている名前は使えない)。エミュレータでは自分しかいないので重複は起きませんが、本番を見越して、日付などを付けた名前にしておくと練習になります。
触ってみる② DynamoDB(データベース)
DynamoDB では、データを テーブル に入れます。各データ(アイテム)を見分けるための項目(キー)を決めておく必要があります。ここでは id をキーにした memos テーブルを作ります。
aws dynamodb create-table \
--table-name memos \
--attribute-definitions AttributeName=id,AttributeType=S \
--key-schema AttributeName=id,KeyType=HASH \
--billing-mode PAY_PER_REQUEST
-
AttributeType=S:idは文字列(String) -
KeyType=HASH:idをキーにする -
PAY_PER_REQUEST:使った分だけ払う料金方式(本物の AWS で大事になります)
結果の中に "TableStatus": "CREATING" と出ます。ここが最初のつまずきどころです。
作成直後に書き込むと失敗する
テーブルを作った直後に、すぐデータを入れようとすると、こうなりました。
aws dynamodb put-item --table-name memos \
--item '{"id":{"S":"1"},"text":{"S":"はじめてのメモ"}}'
An error occurred (ResourceNotFoundException) when calling the PutItem operation: Requested resource not found
「テーブルが見つからない」と言われます。テーブルは 作成中(CREATING) で、まだ使えないからです。本物の AWS でも同じことが起きます。エミュレータは、こうした本物の動きまで再現しています。
テーブルが使えるようになるまで待つコマンドがあるので、それを挟みます。
aws dynamodb wait table-exists --table-name memos
待ってから書き込むと、成功します。
aws dynamodb put-item --table-name memos \
--item '{"id":{"S":"1"},"text":{"S":"はじめてのメモ"}}'
aws dynamodb scan --table-name memos --query 'Items[].text.S'
[
"はじめてのメモ"
]
--item の {"S":"1"} の S は「文字列」という意味です。DynamoDB では、値ごとに型を書きます。
Windows PowerShell では、--item の JSON の引用符がうまく渡らないことがあります。 うまくいかないときは、JSON をファイルに保存して --item file://item.json のように指定してください。
間違いも本物どおりに怒られる
DynamoDB のテーブル名は 3 文字以上と決まっています。わざと 2 文字の名前で作ろうとすると、本物の AWS と同じエラーが返ってきます。
aws dynamodb create-table --table-name ab \
--attribute-definitions AttributeName=id,AttributeType=S \
--key-schema AttributeName=id,KeyType=HASH \
--billing-mode PAY_PER_REQUEST
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
本物の AWS で試して失敗すると、時間もかかるし、作りかけのものが残ることもあります。エミュレータなら、何度失敗しても何も残らず、お金もかかりません。
片付け
エミュレータを止めるには、エミュレータを動かしているターミナルで Ctrl+C を押します。
- 作ったバケットやテーブルは、すべて消えます(メモリの中にしかないため)
-
~/.aws/emulator/9297/の認証情報と証明書も消えます。次に起動すると、新しい認証情報が作られます
本物の AWS では、使い終わったものを消し忘れると、ずっと料金がかかり続けることがあります。エミュレータでは、止めれば全部消えるので安心です。
まとめ
| やったこと | ポイント |
|---|---|
| AWS Emulator を入れた | Windows・macOS は Docker、Linux はパッケージでも可 |
| AWS CLI をエミュレータに向けた | 環境変数で切り替える。aws sts get-caller-identity で 000000000000 を確かめる
|
| S3 でファイルを出し入れした | 本物と同じコマンドで動く |
| DynamoDB でデータを保存した |
作成直後は使えない(本物と同じ)。wait で待つ |
アカウントも、クレジットカードも、料金も要らないまま、AWS の基本的な操作を一通り試せました。
エミュレータに慣れたら、S3・DynamoDB に Lambda や KMS(鍵の管理)を組み合わせて、小さなアプリを作ってテストすることもできます。本物の AWS に出す前に、手元で何度でも試して壊せるのがエミュレータのいちばんの利点です。
追記
この記事の続きとして、S3・KMS・DynamoDB・Lambda を組み合わせた 「改ざんを見抜く電子署名アプリ」 を AWS Emulator の上で作りました。作る途中で分かった、エミュレータの Lambda と本物の Node.js の違いもまとめています。
CDK や Terraform で AWS Emulator を使いたい人 には、Nana_777 さんの記事がおすすめです。CDK・Terraform のスタックがどこまで動くか、API Gateway → Lambda → DynamoDB のようにサービスをまたぐ処理が動くか、忠実度スコアの読み方まで、詳しく検証されています。