Isaac Automator allows quick deployment of Isaac Sim, Isaac Lab, and Isaac Lab Arena to public clouds (AWS, GCP, Azure, and Alibaba Cloud are currently supported).
The result is a fully configured deployed Isaac Workstation — a remote desktop cloud VM that you can use to develop and test robotic applications within minutes and on a budget. Isaac Automator supports a variety of GPU instances and stop/start functionality to save on cloud costs and provides tools to aid your workflow (uploading and downloading data, autorun, deployment management, etc.).
- TLDR ;)
- Installation
- Usage
- Tips
./build # build the Isaac Automator container (one-time)
./run # enter the container
./deploy-aws # deploy an Isaac Workstation (follow the prompts)
./novnc <deployment-name> # open the remote desktop in your browser
./destroy <deployment-name> # tear down the deployment when doneReplace deploy-aws with deploy-gcp, deploy-azure, or deploy-alicloud for other clouds. See sections below for details.
Docker should be installed on your system. Visit https://docs.docker.com/engine/install/ for installation instructions.
Please enter the following command in the project root directory to build the container:
./builddocker build --platform linux/x86_64 -t isaac_automator .This will build the Isaac Automator container and tag it as isaac_automator.
On Linux and macOS there are two ways to run Isaac Automator commands:
- First enter the Isaac Automator container and then run the command inside the container:
# enter Isaac Automator container
./run
# inside container:
./somecommand- Simply prepend the command with
./run, like so:
./run ./somecommand <parameters>for example:
./run ./deploy-aws
./run ./destroy my-deploymentOn Windows, you can run Isaac Automator commands by entering the container first and then running the command inside the container, like so:
(enter Isaac Automator container)
docker run --platform linux/x86_64 -it --rm -v .:/app isaac_automator bash(run the command inside the container)
./somecommandDetails
Enabling Access Permissions
You need AmazonEC2FullAccess permissions enabled for your AWS user. You can enable those in the Identity and Access Management (IAM) section of the AWS console, as follows:
- Go to https://console.aws.amazon.com/iamv2/home#/home
- Click "Access Management" > "Users" in the left menu
- Search for your user name
- Under "Permissions" tab click "Add permissions"
- Choose "Attach existing policies directly"
- Search for AmazonEC2FullAccess, check the box next to it, click "Next"
- Click "Add permissions"
Details
Getting Access Credentials
You will need an _AWS Access Key_ and _AWS Secret Key_ for an existing account. You can obtain those in the [Identity and Access Management (IAM) section](https://console.aws.amazon.com/iamv2/home#/home) of the AWS console.If you have completed the above steps or already have your permissions and credentials set up, run the following command in the project root directory:
# enter Isaac Automator container
./run
# inside container:
./deploy-awsOn the first run (or when credentials expire), you will be prompted to enter your AWS credentials (via aws configure). The credentials are stored in state/.aws/ and persist across Isaac Automator restarts.
Tip: Run ./deploy-aws --help to see more options.
Setting Up GCP Access
You will be prompted to log in with your Google account (gcloud auth login) during the first deployment. The credentials are stored in state/.gcp/ and persist across container restarts.
Make sure you have a GCP project with Compute Engine API enabled and sufficient GPU quota in the target zone.
# enter Isaac Automator container
./run
# inside container:
./deploy-gcpTip: Run ./deploy-gcp --help to see more options.
Setting Up Azure Access
You will be prompted to log in with your Azure account (az login) during the first deployment. The credentials are stored in state/.azure/ and persist across container restarts.
If you have multiple subscriptions, select the desired one before deploying:
# inside container:
az login
az account show --output table # list subscriptions
az account set --subscription "<subscription_name>"
./deploy-azure --no-loginIf you have a single subscription:
# enter Isaac Automator container
./run
# inside container:
./deploy-azureTip: Run ./deploy-azure --help to see more options.
Details
Getting Access Credentials
You will need an _Access Key_ and _Secret Key_ for an existing Alibaba Cloud account. You can obtain those in the [AccessKey Management](https://usercenter.console.aliyun.com/#/manage/ak) section of the Alibaba Cloud console.Once you have prepared the access credentials, run the following command in the project root directory:
# enter Isaac Automator container
./run
# inside container:
./deploy-alicloudTip: Run ./deploy-alicloud --help to see more options.
GPU-accelerated instances with NVIDIA A100, A10, and T4 GPUs are supported. You can find the complete list of instance types, availability, and pricing at https://www.alibabacloud.com/help/en/ecs/user-guide/gpu-accelerated-compute-optimized-and-vgpu-accelerated-instance-families-1. Please note that vGPU instances are not supported.
All deploy-* commands accept the deployment name as an optional positional argument:
./deploy-aws my-deployment
# equivalent to:
./deploy-aws --deployment-name my-deploymentRun ./deploy-<cloud> --help to see the full list of options. Key options include:
--existing— What to do if a deployment with the same name already exists. Choices:ask(default) — prompt interactivelyrepair— fix a broken deployment without changing parametersmodify— update parameters and attempt to update existing cloud resourcesreplace— delete old cloud resources first, then redeployrun_ansible— re-run software configuration (Ansible) only
--instance-type— Cloud VM instance type (each cloud has its own supported list and default).--isaacsim/--isaaclab/--isaaclab-arena— Git ref for Isaac Sim / Isaac Lab / Isaac Lab Arena version, ornoto skip installation.--from-image— Deploy from a pre-built VM image to speed up provisioning (not supported on GCP).--in-china— Use local mirrors for deployments in China. Choices:auto(default),yes,no.--prefix— Prefix for created cloud resource names (default:isaacautomator).--ingress-cidrs— CIDR blocks for allowed ingress traffic, comma-separated. Usemyipfor your current public IP, ormyip/16,myip/24for subnets.
GCP additionally supports --isaac-workstation-gpu-count (choices: 1, 2, 4, 8; default: 1) to control the number of GPUs attached to the instance:
- N1 instances: up to 4x NVIDIA T4
- G2 instances: up to 8x NVIDIA L4
- G4 instances: up to 8x NVIDIA RTX PRO 6000
deploy-aws options
Options:
--debug / --no-debug Enable debug output. [default: no-debug]
--prefix TEXT Prefix for all cloud resources. [default: isaacautomator]
--from-image / --not-from-image
Deploy from pre-built image, from bare OS
otherwise. [default: not-from-image]
--in-china [auto|yes|no] Is deployment in China? (Local mirrors will be
used.) [default: auto]
--deployment-name TEXT Name of the deployment. [default: <random>]
--ingress-cidrs TEXT CIDR blocks for ingress traffic, comma
separated. "myip" for your public IP.
[default: 0.0.0.0/0]
--existing [ask|repair|modify|replace|run_ansible]
What to do if deployment already exists.
[default: ask]
--isaacsim TEXT Git ref at github.com/isaac-sim/IsaacSim, or
"no". [default: v6.0.0-dev2]
--isaaclab TEXT Git ref at github.com/isaac-sim/IsaacLab, or
"no". [default: v3.0.0-beta]
--isaaclab-arena TEXT Git ref at
github.com/isaac-sim/IsaacLab-Arena, or
"no". [default: release/0.1.1]
--vnc-password TEXT Password for VNC access. [default: <random>]
--system-user-password TEXT System user password. [default: <random>]
--ssh-port TEXT SSH port. [default: 22]
--ssh-user TEXT OS username on the deployed instances.
[default: ubuntu]
--upload / --no-upload Upload user data from "uploads/" to cloud
instances. [default: upload]
--instance-type TEXT Instance type (G4dn, G5, G6, G6e supported).
[default: g6e.2xlarge]
--region TEXT AWS Region. [default: us-east-1]
Note: AWS credentials are managed via `aws configure` and stored in
`state/.aws/`. You will be prompted to enter them on first run or when
they expire.
deploy-gcp options
Options:
--debug / --no-debug Enable debug output. [default: no-debug]
--prefix TEXT Prefix for all cloud resources. [default: isaacautomator]
--in-china [auto|yes|no] Is deployment in China? (Local mirrors will be
used.) [default: auto]
--deployment-name TEXT Name of the deployment. [default: <random>]
--zone TEXT GCP zone (see cloud.google.com/compute/docs/
gpus/gpu-regions-zones).
[default: us-central1-a]
--project TEXT GCP Project ID. [default: from gcloud config]
--ingress-cidrs TEXT CIDR blocks for ingress traffic, comma
separated. "myip" for your public IP.
[default: 0.0.0.0/0]
--existing [ask|repair|modify|replace|run_ansible]
What to do if deployment already exists.
[default: ask]
--isaacsim TEXT Git ref at github.com/isaac-sim/IsaacSim, or
"no". [default: v6.0.0-dev2]
--isaaclab TEXT Git ref at github.com/isaac-sim/IsaacLab, or
"no". [default: v3.0.0-beta]
--isaaclab-arena TEXT Git ref at
github.com/isaac-sim/IsaacLab-Arena, or
"no". [default: release/0.1.1]
--vnc-password TEXT Password for VNC access. [default: <random>]
--system-user-password TEXT System user password. [default: <random>]
--ssh-port TEXT SSH port. [default: 22]
--ssh-user TEXT OS username on the deployed instances.
[default: ubuntu]
--upload / --no-upload Upload user data from "uploads/" to cloud
instances. [default: upload]
--instance-type [g2-standard-4|g2-standard-8|...|n1-standard-4|...|g4-standard-48|...]
Instance type. [default: g2-standard-8]
--isaac-workstation-gpu-count [1|2|4|8]
Number of GPUs. N1: NVIDIA T4, G2: NVIDIA L4,
G4: NVIDIA RTX PRO 6000. [default: 1]
Note: --from-image is not supported on GCP.
deploy-azure options
Options:
--debug / --no-debug Enable debug output. [default: no-debug]
--prefix TEXT Prefix for all cloud resources. [default: isaacautomator]
--from-image / --not-from-image
Deploy from pre-built image, from bare OS
otherwise. [default: not-from-image]
--in-china [auto|yes|no] Is deployment in China? (Local mirrors will be
used.) [default: auto]
--deployment-name TEXT Name of the deployment. [default: <random>]
--region TEXT Azure region. [default: westus3]
--ingress-cidrs TEXT CIDR blocks for ingress traffic, comma
separated. "myip" for your public IP.
[default: 0.0.0.0/0]
--existing [ask|repair|modify|replace|run_ansible]
What to do if deployment already exists.
[default: ask]
--isaacsim TEXT Git ref at github.com/isaac-sim/IsaacSim, or
"no". [default: v6.0.0-dev2]
--isaaclab TEXT Git ref at github.com/isaac-sim/IsaacLab, or
"no". [default: v3.0.0-beta]
--isaaclab-arena TEXT Git ref at
github.com/isaac-sim/IsaacLab-Arena, or
"no". [default: release/0.1.1]
--vnc-password TEXT Password for VNC access. [default: <random>]
--system-user-password TEXT System user password. [default: <random>]
--ssh-port TEXT SSH port. [default: 22]
--ssh-user TEXT OS username on the deployed instances.
[default: ubuntu]
--upload / --no-upload Upload user data from "uploads/" to cloud
instances. [default: upload]
--instance-type TEXT VM type (T4 and A10 supported).
[default: Standard_NV36ads_A10_v5]
--login / --no-login Login into Azure before deploying.
[default: login]
--resource-group TEXT Azure resource group (created if empty).
[default: ""]
deploy-alicloud options
Options:
--debug / --no-debug Enable debug output. [default: no-debug]
--prefix TEXT Prefix for all cloud resources. [default: isaacautomator]
--in-china [auto|yes|no] Is deployment in China? (Local mirrors will be
used.) [default: auto]
--deployment-name TEXT Name of the deployment. [default: <random>]
--ingress-cidrs TEXT CIDR blocks for ingress traffic, comma
separated. "myip" for your public IP.
[default: 0.0.0.0/0]
--existing [ask|repair|modify|replace|run_ansible]
What to do if deployment already exists.
[default: ask]
--isaacsim TEXT Git ref at github.com/isaac-sim/IsaacSim, or
"no". [default: v6.0.0-dev2]
--isaaclab TEXT Git ref at github.com/isaac-sim/IsaacLab, or
"no". [default: v3.0.0-beta]
--isaaclab-arena TEXT Git ref at
github.com/isaac-sim/IsaacLab-Arena, or
"no". [default: release/0.1.1]
--vnc-password TEXT Password for VNC access. [default: <random>]
--system-user-password TEXT System user password. [default: <random>]
--ssh-port TEXT SSH port. [default: 22]
--ssh-user TEXT OS username on the deployed instances.
[default: ubuntu]
--upload / --no-upload Upload user data from "uploads/" to cloud
instances. [default: upload]
--aliyun-access-key TEXT Alibaba Cloud Access Key.
[default: ALIYUN_ACCESS_KEY env var]
--aliyun-secret-key TEXT Alibaba Cloud Secret Key.
[default: ALIYUN_SECRET_KEY env var]
--region TEXT Alibaba Cloud Region ID.
[default: us-east-1]
--instance-type TEXT Instance type.
[default: ecs.gn7i-c16g1.4xlarge]
Note: --from-image is not supported on Alibaba Cloud.
Each cloud provider's credentials are stored inside the state/ directory so they persist across container restarts:
| Cloud | Storage Location | How Credentials Are Set |
|---|---|---|
| AWS | state/.aws/ |
aws configure — prompted automatically when credentials are missing or expired |
| GCP | state/.gcp/ |
gcloud auth login — prompted during the first deployment |
| Azure | state/.azure/ |
az login — prompted during the first deployment |
| Alibaba Cloud | Environment variables | ALIYUN_ACCESS_KEY and ALIYUN_SECRET_KEY — passed from the host via ./run |
All commands that interact with cloud resources (deploy-*, start, stop, destroy, repair) validate credentials before proceeding and prompt you to re-authenticate if they are invalid or expired.
Deployed Isaac Workstation can be accessed via:
- SSH
- noVNC (browser-based VNC client)
- NoMachine (remote desktop client)
Look for the connection instructions at the end of the deployment command output. Additionally, this information is saved in the state/<deployment-name>/info.txt file.
You can view available arguments with the --help switch for the start scripts. In most cases, you won't need to change the defaults.
Use ./ssh <deployment-name> to connect to the deployed instance via SSH.
Use ./novnc <deployment-name> to open the noVNC web client for the deployed instance.
To use the installed applications, connect to the deployed Isaac Workstation using noVNC or NoMachine. You can find the connection instructions at the end of the deployment command output. Additionally, this information is saved in the state/<deployment-name>/info.txt file.
Isaac Sim is installed from source on the deployed Isaac Workstation. By default, it will automatically start when the instance is deployed. Alternatively, click the "Isaac Sim" icon on the desktop, or run the following command in a terminal on the deployed vm:
~/IsaacSim/isaac-sim.shTo install a specific version of Isaac Sim, provide a valid Git reference from https://github.com/isaac-sim/IsaacSim as the value of the --isaacsim parameter to the deployment command. Use --isaacsim no to skip Isaac Sim installation.
Isaac Lab is installed from source on the Isaac Workstation. To install a specific version of Isaac Lab, provide a valid Git reference from https://github.com/isaac-sim/IsaacLab as the value of the --isaaclab parameter to the deployment command. Use --isaaclab no to skip Isaac Lab installation.
To run Isaac Lab CLI, use the following command in the terminal on the deployed instance:
~/IsaacLab/isaaclab.sh [options]Isaac Lab Arena is an extension to Isaac Lab that provides multi-agent task environments and benchmarks. It is installed from source on the Isaac Workstation by default.
To install a specific version, provide a valid Git reference from https://github.com/isaac-sim/IsaacLab-Arena as the value of the --isaaclab-arena parameter to the deployment command. Use --isaaclab-arena no to skip installation.
Isaac Lab Arena is installed to ~/IsaacLab-Arena on the deployed instance.
By default, Isaac Sim will start when the cloud VM is deployed.
If you want to launch a custom application or script on startup, modify the uploads/autorun.sh script (on your local machine). It will either be uploaded to the cloud VM automatically, or you can upload it manually using the ./upload command.
Every time the cloud VM is deployed or started from a stopped state, the autorun.sh script will be executed.
This functionality can be useful for running batch jobs, generating data on startup, or preparing the environment for the user.
Two folders are used for exchanging data between your local machine and the deployed instance:
| Local (Isaac Automator) | Remote (Isaac Workstation) | Purpose |
|---|---|---|
uploads/ |
~/uploads |
Data you send to the instance. Synced automatically on deploy, or manually with ./upload. |
results/ |
~/results |
Data you pull back from the instance with ./download. |
You can stop and restart instances to save on cloud costs. To do so, run the following commands:
# enter Isaac Automator container
./run
# inside container:
./stop <deployment-name>
./start <deployment-name>By default, ./start re-runs necessary Ansible steps (such as ECC disabling, etc) after starting the VM. If you're in a rush, use --quick to skip that and only run the autorun script:
./start <deployment-name> --quickYou can upload user data from the uploads/ folder (in the project root) to the deployment by running the following command:
# enter Isaac Automator container
./run
# inside container:
./upload <deployment-name>Data will be uploaded to the /home/ubuntu/uploads directory by default (the ubuntu part of the path depends on the configured default_ssh_user), on all deployed instances. You can change this by passing the --remote-dir argument to the command. By default, files deleted locally are also deleted on the remote side during sync; use --no-delete to keep remote files that no longer exist locally. Run ./upload --help to see more options.
You can download user data to the results/ folder (in the project root) from deployed instances by running the following command:
# enter Isaac Automator container
./run
# inside container:
./download <deployment-name>Data will be downloaded from the /home/ubuntu/results directory by default (the ubuntu part of the path depends on the configured default_ssh_user). You can change this by passing the --remote-dir argument to the command. By default, local files not present on the remote side are deleted during sync; use --no-delete to keep them. Run ./download --help to see more options.
If, for some reason, the deployment cloud resources or software configuration become corrupted, you can attempt to repair the deployment by running the following commands:
# run both terraform and ansible
./repair <deployment-name>
# just run terraform to try fixing the cloud resources
./repair <deployment-name> --no-ansible
# just run ansible to try fixing the software configuration
./repair <deployment-name> --no-terraformYou can also use ./repair to update the ingress CIDR blocks (firewall rules) on an existing deployment:
# restrict access to your current IP
./repair <deployment-name> --ingress-cidrs myip
# allow a /16 subnet
./repair <deployment-name> --ingress-cidrs myip/16
# specify explicit CIDR blocks
./repair <deployment-name> --ingress-cidrs "10.0.0.0/8,192.168.1.0/24"To destroy a deployment, run the following command:
# enter Isaac Automator container
./run
# inside container:
./destroy <deployment-name>Please note that information about the deployed cloud resources is stored in the state/ directory. Do not delete this directory.
At the moment, only ./image-aws command is implemented. Versions for other clouds are in the works.
You can build pre-built AWS AMIs to speed up future deployments (using the --from-image flag). The image-aws command wraps Packer and handles AWS credential management automatically:
# enter Isaac Automator container
./run
# inside container:
./image-awsThe AMI name defaults to the current date and is automatically prefixed with isaacautomator.isaacworkstation.. When deploying with --from-image, Terraform picks the most recent AMI matching this prefix.
Key options:
- The image name can be passed as a positional argument:
./image-aws my-image-name --instance-type— Instance type for the Packer build (G4dn, G5, G6, G6e supported; default:g6e.2xlarge)--region— AWS Region, can be entered asus-east-1orUS East 1(default:us-east-1)--existing— What to do if an AMI with the same name already exists:overwriteorfail(default:fail)--isaacsim/--isaaclab/--isaaclab-arena— Git refs for the versions to bake into the image
Tip: Run ./image-aws --help to see all options.
Isaac Workstation local data is persistent and survives ./stop/.start cycles.
For changes that need to be re-applied automatically on every deployment or ./start, modify the uploads/autorun.sh script. This script runs each time the instance is deployed or started (see Autorun Script).
For example, you can use autorun.sh to install additional Python packages, apply patches, or run setup scripts:
#!/bin/sh
# This script is executed when
# 1. the VM is first deployed
# 2. the VM is started after being stopped
SELF_DIR="$(dirname $0)"
# example: install additional packages into the Isaac Lab environment
pip install torch