Function
A Function is a serverless function — invoked per event (a queue message, a scheduled time, an HTTP request, or a direct invoke), scales to zero between invocations, and has cold-start semantics.
Quick example
import { Project, Function, Queue, Database } from '@sprintsail/sdk';
export const app = new Project('orders');
export const queue = new Queue(app, 'orders', {});
export const db = new Database(app, 'orders-db', { engine: 'postgres', version: '16' });
export const processOrder = new Function(app, 'process-order', {
handler: './src/handlers/process-order.ts',
runtime: 'nodejs22',
memory: 512,
timeout: 30,
triggers: [queue],
bindings: { db },
});
The handler:
import { db } from '../../infra.js';
export default async function handler(event: { Records: Array<{ body: string }> }) {
const order = JSON.parse(event.Records[0].body);
await db.query('INSERT INTO orders (id, amount) VALUES ($1, $2)', [order.id, order.amount]);
}
Config
interface FunctionConfig {
handler: string; // relative path to entry .ts/.js
runtime?: 'nodejs22' | 'nodejs20' | 'python3.12'; // default nodejs22
memory?: number; // MB, default 512
timeout?: number; // seconds, default 30
env?: Record<string, string>;
triggers?: Queue[]; // async event sources
bindings?: Record<string, Database | Bucket | Secret | Queue>;
}
Target mapping
| Target | Maps to | Notes |
|---|---|---|
aws | Lambda | arm64. Trigger queues become event-source mappings. |
sprintsail-runtime | Knative Service | Scale-to-zero. Request body is the event; handler return is the response. |
Queue triggers on Sprintsail Runtime
A Function with queue triggers on the runtime is not wired into Knative Eventing in v1.0 — that's the Worker primitive's job. The runtime's Function provider deploys the Function as a request-driven Knative Service only and logs a clear note when triggers are declared. Use a Worker for queue consumption.
Runtime behavior
The handler is invoked with whatever event shape your trigger sends:
- Queue trigger (AWS):
{ Records: [{ messageId, body }] }— same shape as Lambda's SQS event source mapping. - HTTP (only when paired with API): API Gateway v2 HTTP event.
- Direct invoke: the raw event object.
event is typed unknown in the SDK — declare your own type in the handler.
The return value is JSON-serialised. For Knative on the runtime, it becomes the HTTP response body.
Bindings
Any resource primitive can be bound. The binding name (db above) becomes the import name in the handler. See Bindings.
Limits
- AWS: 15-minute timeout cap; 10 GB memory cap; arm64 only.
- Runtime: max
timeoutenforced as KnativetimeoutSeconds. No memory cap from the SDK side.