0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS 未経験でも大丈夫:AWS Emulator でアカウントなし・0 円のまま S3 と DynamoDB を動かす

0
Last updated at Posted at 2026-11-13

はじめに

「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 という名前で次の内容を保存します(公式ドキュメントのとおりです)。

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 .

次に、エミュレータが認証情報を書き出すフォルダを作ってから、コンテナを起動します。

macOS・Linux
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
Windows PowerShell
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/ に 自分用の認証情報と証明書 を書き出します。それを使うように設定します。

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
Windows PowerShell
$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 のようにサービスをまたぐ処理が動くか、忠実度スコアの読み方まで、詳しく検証されています。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?