I confused elasticity with scale-to-zero
n8n and OpenClaw were configured with minReplicas=1. The platform could scale, but its two private automation services could never stop billing.
I built a privately operated automation environment around n8n and an OpenClaw personal agent with scoped control of the Azure environment, then learned that technically correct cloud architecture can still be economically wrong. This is the build, the failure, and the evidence-backed recovery.
The platform successfully migrated a stateful automation workload, connected an AI operator to reusable workflows, and supported passwordless container delivery. Its failure was operational and economic rather than functional.
n8n began on a Google Cloud VM. I moved its data and configuration into Azure Files, rebuilt its PostgreSQL dependency, and ran n8n beside an OpenClaw personal agent in Azure Container Apps. Tailscale and Termius provided private remote access. Resource-group-scoped Azure access let the personal agent inspect and operate sibling services, while shared workflow storage let it create, trigger, and reuse n8n automations.
The same Container Apps environment also hosted the PromptTriage frontend and API. That consolidation worked, but VNet integration, always-on replicas, Premium services, private endpoints, and cross-resource-group ownership created a persistent monthly baseline that was disproportionate to actual use.
The shared personalcontenv Consumption environment belonged to the Prompttriage resource group but used the Infastructure subnet from PersonalStuff. Azure then created a Standard Load Balancer and static public IP in the managed ME_personalcontenv_Prompttriage_swedencentral group.
01 Origin and access
02 Shared app environment
03 State and networking
04 Delivery and identity
05 Evidence and recovery
Feedback / evidence note Solid details are supported by Azure exports or repository deployment configuration. External application calls and some service-to-service traffic are inferred from retained environment-variable names.
May exports attribute EUR 156.68 pre-tax to PersonalStuff and the managed Container Apps environment. Another EUR 3.97 came from scheduled query rules outside this platform subtotal.
n8n and OpenClaw were configured with minReplicas=1. The platform could scale, but its two private automation services could never stop billing.
Premium ACR, Premium Files, private endpoints, private DNS, and VNet integration were defensible security controls, but they were not economically proportionate to an intermittently used personal platform.
The Container Apps environment lived in Prompttriage, used a subnet in PersonalStuff, hosted apps from both groups, and created paid load-balancer infrastructure in a third Azure-managed group.
Workbooks explained allocation after usage accumulated. There was no low monthly budget, action threshold, or teardown rule preventing the spend in the first place.
Operational agents need least privilege, deny assignments or resource locks where appropriate, dry-run behavior, human approval, immutable evidence, and a tested restore boundary.
The central lesson is not that private networking or managed services are bad. It is that every control needs a threat model, an ownership model, and a cost model. For a low-traffic personal system, a simpler public Consumption environment with strong application authentication can be the more responsible default.
Recovery boundary: resource definitions and architecture were preserved. Secrets, database rows, Azure Files contents, historical images, DNS-provider records, and completed TLS state were intentionally excluded or treated as disposable.
Original resource-group snapshots retained beside exact resource inventories.
PromptTriage restore automation plus lower-cost n8n/OpenClaw reconstruction notes.
Verified after teardown across nine paid categories rather than assumed from delete commands.
No Premium SKU, private endpoint, VNet integration, or always-on replica without written justification.
A future restore would use Basic ACR, Container Apps with minReplicas=0, Standard storage, and no VNet integration by default. PostgreSQL would exist only while actively needed, and the teardown path would be tested before the runtime was considered complete.
I migrated a stateful n8n workload from a VM into a private Azure Container Apps platform, integrated OpenClaw through shared workflow storage, and built a passwordless GitHub-to-ACR delivery path. The system worked, but I overbuilt the idle architecture.
When the cost evidence exposed that mistake, I mapped the exact topology and meter-level costs, exported recoverable state, removed the paid runtime, verified the result, and designed a cheaper restore path. The main lesson was that FinOps, blast-radius control, and recovery engineering belong in the initial platform design, not in cleanup work.