{
  "manifest_version": "1",
  "slug": "aws-emulator",
  "title": "AWS Emulator",
  "headline": "Run AWS Emulator on a remote server for your agents",
  "description": "Run AWS's own AWS Emulator as a service on an exe.dev VM, so Claude Code, Codex and your scripts test S3, DynamoDB, Lambda and Terraform without AWS keys.",
  "category": "dev-tools",
  "tags": [
    "aws emulator",
    "aws-emulator",
    "localstack alternative",
    "local aws",
    "s3",
    "dynamodb",
    "lambda",
    "terraform",
    "boto3",
    "ai agents"
  ],
  "url": "https://exe.dev/deploy/aws-emulator",
  "markdown_url": "https://exe.dev/deploy/aws-emulator.md",
  "upstream": {
    "website": "https://docs.aws.amazon.com/emulator/latest/userguide/what-is-service.html",
    "source": "https://github.com/aws/aws-emulator",
    "docs": "https://docs.aws.amazon.com/emulator/latest/userguide/what-is-service.html",
    "license": "CC0-1.0 (vendor/ code Apache-2.0)"
  },
  "example_vm_name": "my-aws-emulator",
  "time": "10 minutes",
  "stack": [
    {
      "name": "AWS Emulator",
      "detail": "the aws-emulator Debian package from AWS, run as exedev by a systemd service",
      "port": 9297,
      "data": "in memory only; keys and certificate in ~/.aws/emulator/9297"
    },
    {
      "name": "AWS CLI v2",
      "detail": "AWS's official installer"
    },
    {
      "name": "Claude Code, Codex and Pi",
      "detail": "preinstalled; connected to exe.dev's LLM integration, with AWS's aws-emulator skill",
      "data": "~/.claude, ~/.codex"
    },
    {
      "name": "Your project",
      "detail": "an AGENTS.md that sends every AWS call to the emulator",
      "data": "~/project"
    }
  ],
  "access": [
    {
      "url": "https://127.0.0.1:9297",
      "who": "private",
      "what": "the emulator's AWS API, on the VM only; signed with this run's keys"
    },
    {
      "url": "ssh -L 9297:127.0.0.1:9297 my-aws-emulator.exe.xyz",
      "who": "private",
      "what": "the same API on your laptop, through an SSH tunnel"
    }
  ],
  "delivers": [
    "AWS Emulator from AWS's package, running as `exedev` on 127.0.0.1:9297, back after a reboot",
    "The emulator's usage telemetry turned off",
    "The AWS CLI, and `~/aws-emulator.env`, which points the CLI and SDKs at the emulator",
    "`aws sts get-caller-identity` answers with the emulator's account, 000000000000",
    "Claude Code, Codex and Pi using exe.dev's LLM integration, with AWS's aws-emulator skill",
    "A Git project at `~/project` whose AGENTS.md tells agents to use the emulator, never real AWS"
  ],
  "deployable": true,
  "deploy": {
    "new_vm_url": "https://exe.dev/new?prompt=Set%20up%20AWS%20Emulator%20on%20this%20VM%20by%20following%20the%20exe.dev%20recipe%20at%20https%3A%2F%2Fexe.dev%2Fdeploy%2Faws-emulator.md%20from%20top%20to%20bottom.%0A%0AThe%20recipe%27s%20example%20VM%20name%20is%20my-aws-emulator.%20This%20VM%27s%20name%20is%20the%20output%20of%20%60hostname%60%3A%20use%20it%20wherever%20the%20recipe%20writes%20my-aws-emulator.%20Skip%20the%20step%20that%20creates%20the%20VM%3B%20you%20are%20on%20it.%0A%0AYou%20are%20done%20when%20all%20of%20these%20are%20true.%20Check%20each%20one%20yourself%3A%0A-%20AWS%20Emulator%20from%20AWS%27s%20package%2C%20running%20as%20%60exedev%60%20on%20127.0.0.1%3A9297%2C%20back%20after%20a%20reboot%0A-%20The%20emulator%27s%20usage%20telemetry%20turned%20off%0A-%20The%20AWS%20CLI%2C%20and%20%60~%2Faws-emulator.env%60%2C%20which%20points%20the%20CLI%20and%20SDKs%20at%20the%20emulator%0A-%20%60aws%20sts%20get-caller-identity%60%20answers%20with%20the%20emulator%27s%20account%2C%20000000000000%0A-%20Claude%20Code%2C%20Codex%20and%20Pi%20using%20exe.dev%27s%20LLM%20integration%2C%20with%20AWS%27s%20aws-emulator%20skill%0A-%20A%20Git%20project%20at%20%60~%2Fproject%60%20whose%20AGENTS.md%20tells%20agents%20to%20use%20the%20emulator%2C%20never%20real%20AWS%0A%0ARun%20the%20VM-side%20commands%20in%20%22Set%20up%20the%20VM%22%20only%3B%20skip%20creating%20the%20VM.%0AIf%20%60exeuntu%20configure%60%20reports%20an%20existing%20user%20config%2C%20leave%20it%20alone.%0AIf%20%60~%2Fproject%60%20or%20its%20AGENTS.md%20already%20exists%2C%20add%20the%20AWS%20section%20to%0Ait%20instead%20of%20replacing%20it.%20Never%20put%20real%20AWS%20credentials%20on%20this%20VM%2C%0Anever%20bind%20the%20emulator%20to%20anything%20but%20127.0.0.1%2C%20never%20run%20it%20with%0A%60--auth%20off%60%2C%20and%20never%20expose%20port%209297%20through%20the%20HTTPS%20proxy.%0AVerify%20with%20the%20checks%20at%20the%20end%20of%20that%20section%3A%20the%20service%20is%0Aactive%2C%20the%20health%20check%20prints%20%60ok%60%2C%20the%20log%20says%20telemetry%20is%0Adisabled%2C%20and%20%60aws%20sts%20get-caller-identity%60%20shows%20account%20000000000000.%20Then%20run%20the%20demo%20in%20%22Try%20it%22%20once%20to%20prove%0AS3%2C%20DynamoDB%20and%20Lambda%20work.%20Skip%20the%20later%20sections%20and%20the%20FAQ.%0AFinish%20by%20telling%20the%20owner%20that%20everything%20in%20the%20emulator%20lives%20in%0Amemory%20and%20is%20gone%20when%20the%20service%20restarts.%0A%0AFinish%20with%20the%20URLs%20I%20should%20open.%0A",
    "terminal": "curl -fsSL https://exe.dev/deploy/aws-emulator/prompt.txt | ssh exe.dev new --prompt=/dev/stdin",
    "prompt": "Set up AWS Emulator on this VM by following the exe.dev recipe at https://exe.dev/deploy/aws-emulator.md from top to bottom.\n\nThe recipe's example VM name is my-aws-emulator. This VM's name is the output of `hostname`: use it wherever the recipe writes my-aws-emulator. Skip the step that creates the VM; you are on it.\n\nYou are done when all of these are true. Check each one yourself:\n- AWS Emulator from AWS's package, running as `exedev` on 127.0.0.1:9297, back after a reboot\n- The emulator's usage telemetry turned off\n- The AWS CLI, and `~/aws-emulator.env`, which points the CLI and SDKs at the emulator\n- `aws sts get-caller-identity` answers with the emulator's account, 000000000000\n- Claude Code, Codex and Pi using exe.dev's LLM integration, with AWS's aws-emulator skill\n- A Git project at `~/project` whose AGENTS.md tells agents to use the emulator, never real AWS\n\nRun the VM-side commands in \"Set up the VM\" only; skip creating the VM.\nIf `exeuntu configure` reports an existing user config, leave it alone.\nIf `~/project` or its AGENTS.md already exists, add the AWS section to\nit instead of replacing it. Never put real AWS credentials on this VM,\nnever bind the emulator to anything but 127.0.0.1, never run it with\n`--auth off`, and never expose port 9297 through the HTTPS proxy.\nVerify with the checks at the end of that section: the service is\nactive, the health check prints `ok`, the log says telemetry is\ndisabled, and `aws sts get-caller-identity` shows account 000000000000. Then run the demo in \"Try it\" once to prove\nS3, DynamoDB and Lambda work. Skip the later sections and the FAQ.\nFinish by telling the owner that everything in the emulator lives in\nmemory and is gone when the service restarts.\n\nFinish with the URLs I should open.\n",
    "prompt_url": "https://exe.dev/deploy/aws-emulator/prompt.txt"
  },
  "updated": "2026-11-14",
  "verified": "2026-11-13",
  "related": [
    "agent-secrets",
    "claude-code",
    "codex",
    "ci",
    "dev-test-prod",
    "code-server"
  ],
  "alternatives": [
    "LocalStack"
  ]
}
