page:recipes:ai workflow runner:nestjs:persistent state

Host ai workflow runner with NestJS: Postgres-backed state

Summary

Deploy a ai workflow runner built with NestJS on Ample using the durable job state pattern. Compute runs the app in an isolated microVM behind a public HTTPS URL, a managed PostgreSQL 16 database is auto-provisioned and injected as DATABASE_URL. Verified on NestJS: a jobs table with a state and attempts counter, processing inside a row-locked transaction, and a second run that is a no-op (job=done attempts=1 idempotent=true). Not separately tested: your job types, payload schema and retry policy; treat the ai workflow runner-specific behavior as your application code.

Framework

NestJS

Workload

AI workflow runner

Release Status

Published

Support Status

Verified

Execution Status

Ready

Prerequisites

Tested Configuration

Workflow Steps

  1. Build and start
    npm install, nest build (TypeScript) then node dist/main.js on the node-22 template. The server must bind 0.0.0.0 on PORT.

  2. Implement the pattern on PostgreSQL
    The fixture's module implements durable job state: a jobs table with a state and attempts counter, processing inside a row-locked transaction, and a second run that is a no-op (job=done attempts=1 idempotent=true). Copy the approach into your schema; keep migrations idempotent and run them with --release-command.

  3. Deploy
    ample deploy . --name --public
    Run the synchronous deploy once and read the result (exit 0 live, 1 failed, 2 blocked). Re-running with no change is a no-op.

  4. Verify
    ample logs --kind build
    Fetch the live URL and the pattern self-test route(s) (/p/durable-job-state) from the example; then run your own checks. On failure read the logs.

Success Checks

Limitations

Cost Estimate

Evidence Summary

  1. Canary Run
    Summary: NestJS pattern fixture deployed on Ample (npm install, nest build (TypeScript) then node dist/main.js on the node-22 template); checks passed for durable-job-state and configuration-secrets.
    Observed At: 2026-09-21T02:34:39Z

  2. Canary Run
    Summary: The same NestJS app deployed with a --release-command migration; the marker it created was readable after activation.
    Observed At: 2026-09-20T02:16:51Z

Next Actions