When to use Azure Container Apps
Use Azure Container Apps when:- task work should run inside your own Azure subscription
- you want hosted sandboxes without managing an API key (auth uses the ambient Azure login or a managed identity)
- memory+disk snapshots or standby with sub-second resume is useful
Prerequisites
- An Azure subscription and resource group.
-
A sandbox group (one-time bootstrap):
The calling principal is granted the Container Apps SandboxGroup Data Owner role automatically; grant it explicitly to any additional principal, such as a deployed controller’s managed identity.
-
Authentication:
az loginfor local runs; a managed identity when the Roomote controller itself runs in Azure (setAZURE_CLIENT_IDfor a user-assigned identity); or a service principal (recommended for containerized installs, whereaz loginis impractical) —az ad sp create-for-rbac --name <name> --skip-assignment, then grant the app the Data Owner role from step 2 and set all three ofAZURE_TENANT_ID/AZURE_CLIENT_ID/AZURE_CLIENT_SECRET.
Configuration
Add Azure Container Apps from Settings > Sandboxes, or provide the values as deployment env vars:AZURE_SANDBOX_DISK_IMAGE selects the worker disk image. Leave it unset to
let Roomote provision it automatically: the setup wizard and the Settings >
Sandboxes page bake a disk image from the published worker OCI image after
the Azure settings are saved. Private registries (e.g. a private GHCR
worker image) need AZURE_SANDBOX_REGISTRY_USERNAME +
AZURE_SANDBOX_REGISTRY_TOKEN.
Snapshots and standby
Azure snapshots capture memory and disk, so a restored sandbox resumes in sub-second time with processes still alive. Task standby uses the same memory-preserving suspend/resume, and sandboxes bill storage-only while suspended. Preview port URLs do not survive a snapshot restore; Roomote re-adds ports after resume.Idle suspension and cost control
Roomote enables Azure’s memory-preserving auto-suspend policy for new sandboxes and refreshes it when restoring snapshots or resuming standby. The idle interval follows the task’s sandbox timeout, normally five hours. This gives Azure a fallback when Roomote’s cleanup service is offline or a development database has been reset. CPU and memory charges stop while the sandbox is suspended. Azure measures idle time from incoming traffic, API code execution, shell sessions, and file operations. This is an idle fallback, not a hard runtime or spending cap: continued activity can keep a sandbox running. Roomote’s normal task sleep and timeout handling still applies. The separate auto-delete policy retains stopped task sandboxes for at least 30 days. Its timer starts after suspension; it cannot stop a running sandbox. Upgrading refreshes lifecycle settings as sandboxes are reused. Existing orphaned sandboxes that Roomote no longer tracks need to be inspected and suspended separately in Azure.Egress TLS inspection
The ACA egress proxy can TLS-inspect (MITM) outbound traffic. Roomote defaults totrafficInspection: Partial, so with no egress rules configured nothing is
inspected: package managers (npm, Maven/Gradle, pip) see normal public
certificate chains, and non-HTTP traffic such as SSH git works. Override this
with AZURE_SANDBOX_EGRESS_INSPECTION, which accepts Legacy, Full,
Partial, or None and passes the selected mode to ACA. The service default
(Full) resigns all TLS traffic with the proxy CA
(/etc/ssl/certs/adc-egress-proxy-ca.crt, preinstalled in the system store
and referenced by NODE_EXTRA_CA_CERTS/SSL_CERT_FILE) and blocks non-HTTP
traffic; choose Full only when wiring deny-default egress rules or header
transforms, and note Java’s per-JDK cacerts still needs a manual import in
that mode.
Verify setup
- save the Azure subscription, resource group, sandbox group, and region
- select Azure Container Apps as the default sandbox provider
- start a small task from an environment
- confirm the task starts, streams logs, and can run project commands
- verify preview links if the task starts a web app
Common issues
- Authentication fails. Run
az loginlocally, or confirm the deployed controller’s managed identity holds the Container Apps SandboxGroup Data Owner role on the sandbox group. - Sandbox creation is slow on first use. Cold disk image pulls take longer; the worker disk image bake is a one-time provisioning step.