[1.1.1] — 2026-03-29
Added
- Amazon EC2 (
ministack/services/ec2.py) — full API-level emulation (no real VMs)- Instances:
RunInstances,DescribeInstances,TerminateInstances,StopInstances,StartInstances,RebootInstances - Images:
DescribeImages— returns 3 stub AMIs (Amazon Linux 2, Ubuntu 22.04, Windows Server 2022) - Security Groups:
CreateSecurityGroup,DeleteSecurityGroup,DescribeSecurityGroups,AuthorizeSecurityGroupIngress,RevokeSecurityGroupIngress,AuthorizeSecurityGroupEgress,RevokeSecurityGroupEgress - Key Pairs:
CreateKeyPair,DeleteKeyPair,DescribeKeyPairs,ImportKeyPair - VPC:
CreateVpc,DeleteVpc,DescribeVpcs,ModifyVpcAttribute— default VPC pre-created - Subnets:
CreateSubnet,DeleteSubnet,DescribeSubnets,ModifySubnetAttribute— default subnet pre-created - Internet Gateways:
CreateInternetGateway,DeleteInternetGateway,DescribeInternetGateways,AttachInternetGateway,DetachInternetGateway - Route Tables:
CreateRouteTable,DeleteRouteTable,DescribeRouteTables,AssociateRouteTable,DisassociateRouteTable,CreateRoute,ReplaceRoute,DeleteRoute— default route table pre-created for default VPC - Network Interfaces (ENI):
CreateNetworkInterface,DeleteNetworkInterface,DescribeNetworkInterfaces,AttachNetworkInterface,DetachNetworkInterface— full botocore-compliant response shape (availabilityZone,sourceDestCheck,interfaceType,privateIpAddressesSet) - VPC Endpoints:
CreateVpcEndpoint,DeleteVpcEndpoints,DescribeVpcEndpoints— Gateway and Interface types;routeTableIdSet/subnetIdSetserialized correctly - Availability Zones:
DescribeAvailabilityZones - Elastic IPs:
AllocateAddress,ReleaseAddress,AssociateAddress,DisassociateAddress,DescribeAddresses - Tags:
CreateTags,DeleteTags,DescribeTags - Default VPC, subnet, security group, internet gateway, and route table always present
- Rules stored but not enforced (matches LocalStack behaviour)
- 26 integration tests
- Instances:
- Step Functions Activities — full worker-based activity task pattern
CreateActivity,DeleteActivity,DescribeActivity,ListActivities— full CRUDGetActivityTask— async long-poll (up to 60 s) returningtaskToken+inputto worker; non-blocking (usesasyncio.sleep— does not stall the event loop)- Activity Task state execution — when a Task state's
Resourceis an activity ARN, the execution enqueues the task and waits for a worker to callSendTaskSuccessorSendTaskFailure ActivityAlreadyExistsraised on duplicateCreateActivity(matches AWS behaviour — not idempotent)ActivityDoesNotExistraised onDeleteActivity,DescribeActivity,GetActivityTaskfor unknown ARN- Activity ARN format:
arn:aws:states:{region}:{account}:activity:{name} - 5 integration tests: CRUD, list, duplicate-name error, worker success flow, worker failure flow
Tests
- 644 integration tests — all passing