DocsAWS 101BlogServices

Infrastructure as Code

MiniStack is a drop-in endpoint override for the four major IaC tools. No special plugin, no auth dance — point your provider at http://localhost:4566 and use any credentials.

Terraform

Compatible with AWS Provider v5 and v6. The minimal override:

provider "aws" {
  region                      = "us-east-1"
  access_key                  = "test"
  secret_key                  = "test"
  s3_use_path_style           = true
  skip_credentials_validation = true
  skip_metadata_api_check     = true
  skip_requesting_account_id  = true

  endpoints {
    s3             = "http://localhost:4566"
    dynamodb       = "http://localhost:4566"
    sqs            = "http://localhost:4566"
    sns            = "http://localhost:4566"
    lambda         = "http://localhost:4566"
    iam            = "http://localhost:4566"
    ec2            = "http://localhost:4566"
    ecs            = "http://localhost:4566"
    cloudformation = "http://localhost:4566"
    route53        = "http://localhost:4566"
    cloudwatch     = "http://localhost:4566"
    secretsmanager = "http://localhost:4566"
    ssm            = "http://localhost:4566"
    kms            = "http://localhost:4566"
    rds            = "http://localhost:4566"
    sts            = "http://localhost:4566"
  }
}

Add any other service endpoints you hit (see the services catalog for the full list).

Multi-account

Use a provider alias with a distinct access_key for each simulated account. MiniStack reads the access key to pick the account ID (if it's 12 digits).

CDK

Use the cdklocal wrapper:

npm install -g aws-cdk-local
cdklocal bootstrap
cdklocal deploy

It injects AWS_ENDPOINT_URL=http://localhost:4566 and sane defaults. Works with both CDK v1 and v2.

Pulumi

Configure endpoint overrides in Pulumi.dev.yaml:

config:
  aws:region: us-east-1
  aws:accessKey: test
  aws:secretKey: test
  aws:s3UsePathStyle: true
  aws:skipCredentialsValidation: true
  aws:skipMetadataApiCheck: true
  aws:skipRequestingAccountId: true
  aws:endpoints:
    - s3: http://localhost:4566
      dynamodb: http://localhost:4566
      sqs: http://localhost:4566
      lambda: http://localhost:4566
      cloudformation: http://localhost:4566
      iam: http://localhost:4566
      sts: http://localhost:4566

CloudFormation

MiniStack has a built-in CloudFormation engine — see CloudFormation engine for the full resource-type and intrinsic-function reference.

aws --endpoint-url=http://localhost:4566 cloudformation create-stack \
  --stack-name demo \
  --template-body file://template.yaml

aws --endpoint-url=http://localhost:4566 cloudformation describe-stacks \
  --stack-name demo

Change sets, nested outputs, and cross-stack Fn::ImportValue all work. Unsupported resource types fail at CREATE_IN_PROGRESS with UnsupportedResource.

Tip: run POST /_ministack/reset between test runs to start from a clean state, or use Testcontainers to get per-test isolation.