Isaac Sim 6 on a bare EC2 instance
The marketplace workstation AMI pins you to Isaac Sim 5.1.0 on Ubuntu 24.04. Standing up a custom g6e.4xlarge — GRID driver, Docker, NVIDIA Container Toolkit — to run 6.0.0-dev2 with WebRTC streaming instead.
Motivation
To address limitations with the preconfigured NVIDIA Isaac Sim Development Workstation (Linux) AMI available on AWS Marketplace. Namely, the AMI is configured strictly for Isaac Sim 5.1.0 on Ubuntu 24.04. This is not ideal for applications that want to leverage:
- Cesium for Omniverse — quickstart and documentation are written for Isaac Sim 6.0.0. Experiencing tile rendering and sim crashing issues on 5.1.0, see issue.
- Replicator RTSPWriter — a missing RGBA-to-
yuv420pconversion in the spawned FFmpeg causes grey RTSP output, see issue and my writeup. 6.0 uses a different architecture for this pipeline. - ROS 2 Humble / rosbridge HIL — our ROS stack is based on Humble, which targets Ubuntu 22.04 rather than Ubuntu 24.04.
Below sets up a custom AWS EC2 instance for testing Isaac Sim 6.0.0-dev2 on Ubuntu 22.04 with NVIDIA L40S GPU support, Docker-based deployment, and WebRTC streaming. The working image used here is:
nvcr.io/nvidia/isaac-sim:6.0.0-dev2
The current setup is suitable as a testbed for Isaac Sim 6 / Kit 109 behavior, Cesium compatibility testing, and RTSPWriter debugging. Docker runs inside the EC2 instance. It uses the EC2 instance’s local CPU, RAM, disk, and attached L40S GPU via NVIDIA Container Toolkit. It is not using local workstation compute.
EC2 instance configuration
Used configuration:
Region: us-west-2 / Oregon
Instance type: g6e.4xlarge
GPU: NVIDIA L40S, 48 GB VRAM
OS: Ubuntu Server 22.04 LTS, x86_64 / amd64
Root volume: 300–500 GiB gp3 recommended
SSH user: ubuntu
Selected Ubuntu AMI:
AMI name: ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-20260521
AMI ID: ami-0ababc7e5826abb79
Owner: 099720109477 # Canonical
Security group
Restrict all inbound rules to the local client IP, not 0.0.0.0/0.
Required:
22/tcp SSH
49100/tcp Isaac Sim WebRTC signaling
47998/udp Isaac Sim WebRTC media stream
Optional:
8210/tcp Browser-based web viewer
8443/tcp NICE DCV remote desktop
NVIDIA livestream endpoints do not provide authentication/encryption by themselves, so do not expose them publicly.
Host setup
1. Update Ubuntu
sudo apt update
sudo apt upgrade -y
sudo reboot
2. Install NVIDIA GRID / RTX Enterprise driver
Largely follow the AWS documentation.
Install prerequisites:
sudo apt update
sudo apt install -y \
gcc make build-essential \
linux-headers-$(uname -r) \
linux-modules-extra-$(uname -r) \
awscli \
pkg-config \
libglvnd-dev
Update AWS kernel and reboot:
sudo apt-get upgrade -y linux-aws
sudo reboot
Disable nouveau:
cat <<'NOUVEAU' | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist nvidiafb
blacklist rivatv
NOUVEAU
sudo update-grub
sudo reboot
Download and install the GRID driver:
mkdir -p ~/nvidia-grid
cd ~/nvidia-grid
aws s3 cp --recursive s3://ec2-linux-nvidia-drivers/latest/ .
chmod +x NVIDIA-Linux-x86_64*.run
sudo /bin/sh ./NVIDIA-Linux-x86_64*.run
sudo reboot
Validate:
nvidia-smi
Expected: NVIDIA L40S visible.
Docker setup
1. Install Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
newgrp docker
docker run hello-world
sudo systemctl enable docker
sudo systemctl start docker
2. Install NVIDIA Container Toolkit
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
| sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
| sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
| sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
Validate GPU passthrough:
docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
Expected: NVIDIA L40S visible inside Docker.
Isaac Sim container image
Pull image:
export ISAAC_IMAGE=nvcr.io/nvidia/isaac-sim:6.0.0-dev2
docker pull $ISAAC_IMAGE
Persistent folders
Host folders are mounted into the container so logs, cache, configs, and work files persist across container restarts.
mkdir -p ~/docker/isaac-sim/cache/main/ov
mkdir -p ~/docker/isaac-sim/cache/main/warp
mkdir -p ~/docker/isaac-sim/cache/computecache
mkdir -p ~/docker/isaac-sim/config
mkdir -p ~/docker/isaac-sim/data/documents
mkdir -p ~/docker/isaac-sim/data/Kit
mkdir -p ~/docker/isaac-sim/logs
mkdir -p ~/docker/isaac-sim/pkg
mkdir -p ~/isaac-projects
sudo chown -R 1234:1234 ~/docker/isaac-sim ~/isaac-projects
Container user is UID/GID 1234:1234, so ownership matters.
Reusable host script: start Isaac container
Create the script without using nano:
mkdir -p ~/bin
cat > ~/bin/start-isaac-container.sh <<'HOSTSCRIPT'
#!/usr/bin/env bash
set -euo pipefail
export ISAAC_IMAGE="nvcr.io/nvidia/isaac-sim:6.0.0-dev2"
mkdir -p ~/docker/isaac-sim/cache/main/ov
mkdir -p ~/docker/isaac-sim/cache/main/warp
mkdir -p ~/docker/isaac-sim/cache/computecache
mkdir -p ~/docker/isaac-sim/config
mkdir -p ~/docker/isaac-sim/data/documents
mkdir -p ~/docker/isaac-sim/data/Kit
mkdir -p ~/docker/isaac-sim/logs
mkdir -p ~/docker/isaac-sim/pkg
mkdir -p ~/isaac-projects
sudo chown -R 1234:1234 ~/docker/isaac-sim ~/isaac-projects
docker run --name isaac-sim \
--entrypoint bash \
-it \
--gpus all \
-e ACCEPT_EULA=Y \
-e PRIVACY_CONSENT=Y \
--rm \
--network=host \
-v ~/docker/isaac-sim/cache/main:/isaac-sim/.cache:rw \
-v ~/docker/isaac-sim/cache/computecache:/isaac-sim/.nv/ComputeCache:rw \
-v ~/docker/isaac-sim/logs:/isaac-sim/.nvidia-omniverse/logs:rw \
-v ~/docker/isaac-sim/config:/isaac-sim/.nvidia-omniverse/config:rw \
-v ~/docker/isaac-sim/data:/isaac-sim/.local/share/ov/data:rw \
-v ~/docker/isaac-sim/pkg:/isaac-sim/.local/share/ov/pkg:rw \
-v ~/isaac-projects:/workspace:rw \
-u 1234:1234 \
"$ISAAC_IMAGE"
HOSTSCRIPT
chmod +x ~/bin/start-isaac-container.sh
Start container:
~/bin/start-isaac-container.sh
Reusable container script: start WebRTC Isaac Sim
Inside the Isaac container, create:
cat > /workspace/run-webrtc.sh <<'WEBRTCSCRIPT'
#!/usr/bin/env bash
set -euo pipefail
PUBLIC_IP=$(curl -4 -s ifconfig.me)
echo "Using public IP: ${PUBLIC_IP}"
cd /isaac-sim
./runheadless.sh -v \
--/exts/omni.kit.livestream.app/primaryStream/publicIp="${PUBLIC_IP}" \
--/exts/omni.kit.livestream.app/primaryStream/signalPort=49100 \
--/exts/omni.kit.livestream.app/primaryStream/streamPort=47998
WEBRTCSCRIPT
chmod +x /workspace/run-webrtc.sh
Run Isaac Sim:
/workspace/run-webrtc.sh
Use the numeric public IPv4 address / Elastic IP, not public DNS, for WebRTC.
Current verified status
The system successfully reached:
Isaac Sim Full Streaming App is loaded.
app ready
Client connected to WebRTC server
The Isaac Sim WebRTC client connected successfully and displayed the Isaac Sim UI.