- Error injection: LocalStack allows developers to inject errors frequently occurring in real cloud environments, for instance ProvisionedThroughputExceededException which is thrown by Kinesis or DynamoDB if the amount of read/write throughput is exceeded.
- Actual HTTP REST services are available in LocalStack. All services allow actual HTTP connections on TCP ports. Boto client proxy is used by moto, which are embedded into all methods that are annotated with @mock_sqs. These client proxies don’t perform an actual REST call but instead call a local mock-service method that lives in the same environment as the test code.
- Language neutral: LocalStack is written in Python but can be used with any programming language or environment. This is due to the fact that it uses the REST APIs via HTTP.
- Isolated processes: All LocalStack services run in their own processes. The overhead of additional processes are negligible and the entire stack can be executed easily on any developer machine or CI server. Components in moto are often hard-wired to RAM. For example, when forwarding a message from an SNS topic to a SQS queue, the queue’s endpoint is found in a local map. LocalStack services, on the other hand, live in isolation (separate process available via HTTP), which encourages true decoupling and closely resembles a cloud environment.
- LocalStack pluggable services: Because we use isolated processes for each service, all services in LocalStack can be easily plugged-in (and replaced). This allows us keep the framework current and to select best-of breed mocks for each service (for instance, kinesalite has a much better interface than its moto counterpart).
The prerequisites for using the tool are: Python; Python; and the pip Python package manger;