Spin up cloud machines in seconds. Tear them down just as fast. Spot pricing. Airgap topologies. CI/CD native. Built for operators.
mapt is a command-line tool for provisioning and destroying cloud environments across AWS, Azure, and IBM Cloud. It wraps multi-cloud infrastructure into a single, consistent interface — optimized for cost, speed, and CI/CD integration.
mapt <provider> <target> <create|destroy> [flags]
One pattern. Every cloud. Every OS.
Pull the container and provision a Fedora machine on AWS spot:
podman run -d --name mapt-fedora \
-v ${PWD}:/workspace:z \
-e AWS_ACCESS_KEY_ID=<key> \
-e AWS_SECRET_ACCESS_KEY=<secret> \
-e AWS_DEFAULT_REGION=us-east-1 \
quay.io/redhat-developer/mapt:latest aws fedora create \
--project-name my-fedora \
--backed-url file:///workspace \
--conn-details-output /workspace \
--spotConnection details land at ${PWD}/host, ${PWD}/username, and ${PWD}/id_rsa. Destroy with the same flags, swapping create for destroy.
| Target | AWS | Azure | IBM Cloud |
|---|---|---|---|
| macOS (x86, M1, M2) | docs | — | — |
| Windows Server | docs | — | — |
| Windows Desktop | — | docs | — |
| RHEL | docs | docs | — |
| RHEL AI | docs | docs | — |
| Fedora | docs | docs | — |
| Ubuntu | — | docs | — |
| IBM Z (s390x) | — | — | docs |
| IBM Power (ppc64le) | — | — | docs |
| Service | AWS | Azure | IBM Cloud | Description |
|---|---|---|---|---|
| Kind | docs | docs | docs | Lightweight Kubernetes via Kind |
| EKS | docs | — | — | Managed Kubernetes with spot node groups |
| AKS | — | docs | — | Managed Kubernetes |
| OpenShift SNC | docs | — | — | Single-node OpenShift for testing |
| Mac-Pool | docs | — | — | Shared Mac host pool — amortize the 24h minimum |
| Architecture | Providers |
|---|---|
| x86_64 | AWS, Azure, IBM Cloud |
| arm64 | AWS, Azure |
| s390x | IBM Cloud |
| ppc64le | IBM Cloud |
mapt scans placement scores and pricing across all regions to find the best cost vs. availability balance — no manual region hunting. If a region doesn't have the instance you need, mapt falls back automatically.
mapt aws rhel create --spot \
--project-name my-rhel --backed-url file:///workspace \
--conn-details-output /workspaceDescribe the machine you need; mapt picks the right instance type:
mapt azure fedora create \
--arch arm64 --cpus 4 --memory 16 \
--project-name fedora-arm --backed-url file:///workspace \
--conn-details-output /workspaceFlags: --arch, --cpus, --memory, --nested-virt, --compute-sizes
Details: instance selection docs
Provision an isolated machine behind a jump bastion. mapt wires up the full network — you get bastion connection details alongside the target host.
mapt aws rhel create --airgap \
--project-name rhel-airgap --backed-url file:///workspace \
--conn-details-output /workspaceOutputs: host, username, id_rsa, bastion_host, bastion_username, bastion_id_rsa
Set --timeout and mapt will tear itself down automatically if the destroy never runs — pipeline crash, lost state, whatever. No orphaned resources, no surprise bills.
Details: serverless mode docs
mapt machines register themselves with your CI system at provision time — nothing to configure after the fact.
mapt aws fedora create --spot \
--install-ghactions-runner \
--ghactions-runner-repo "https://github.com/your-org/your-repo" \
--ghactions-app-id "123456" \
--ghactions-app-installation-id "789012" \
--ghactions-app-private-key "/path/to/private-key.pem" \
--project-name fedora-runner --backed-url file:///workspace \
--conn-details-output /workspaceAuth methods: GitHub App (recommended), PAT, or pre-generated registration token. Supported targets: AWS (Windows, RHEL, Fedora, macOS) · Azure (Windows, RHEL) · IBM Cloud (Power, Z) Details: self-hosted runner docs
mapt aws fedora create --spot \
--glrunner-token <token> \
--project-name fedora-gitlab --backed-url file:///workspace \
--conn-details-output /workspaceSupported targets: AWS (Windows, RHEL, Fedora, macOS) · Azure (Windows, RHEL) · IBM Cloud (Power, Z) Details: GitLab runner docs
Tekton tasks for dynamic provisioning inside pipelines are available in the tkn/ directory.
podman run -d --name mapt \
-v ${PWD}:/workspace:z \
-e AWS_ACCESS_KEY_ID=<key> \
-e AWS_SECRET_ACCESS_KEY=<secret> \
-e AWS_DEFAULT_REGION=us-east-1 \
quay.io/redhat-developer/mapt:latest aws fedora create \
--project-name my-env \
--backed-url file:///workspace \
--conn-details-output /workspaceThe --backed-url volume mount holds your stack state — keep it, you need it to destroy.
go install github.com/redhat-developer/mapt/cmd/mapt@latest
mapt --helpmapt uses Pulumi under the hood. Stack state is stored at --backed-url:
- Local:
file:///absolute/path— simplest, works for local dev - S3:
s3://your-bucket— required for serverless mode and shared CI - Azure Blob:
azblob://your-container
The --project-name flag namespaces stacks, so you can run multiple environments from the same backend.