Skip to content

Infrastructure Intents Example

Demonstrates the full range of infrastructure intents in VentureKit.

Source: examples-code/infrastructure-intents/

  • Databases — PostgreSQL/MySQL with HA, backups, encryption
  • Storage — buckets for uploads, assets, backups with CDN
  • Auth — Cognito user pools with MFA and password policies
  • Queues — standard and FIFO queues with dead-letter queues
  • Caches — Redis/Memcached with clustering
  • Schedules — rate-based and cron-based scheduled tasks
  • Intent outputs — accessing provisioned resources in handlers
  • Multi-environment — dev (nano/relaxed) vs prod (medium/strict)

Shared definitions go in vk.config.ts. Per-env overrides go in each env config:

// vk.config.ts — define what resources exist
export default defineVenture({
base,
security,
databases: [
{ id: 'main-db', type: 'postgres', name: 'app_main' },
],
storage: [
{ id: 'user-uploads', purpose: 'uploads', versioned: true },
{ id: 'public-assets', purpose: 'assets', corsOrigins: ['*'] },
],
auth: [
{ id: 'user-pool', signInWith: ['email'], allowSignUp: true, mfa: 'optional' },
],
queues: [
{ id: 'email-queue', type: 'standard', retentionDays: 7 },
],
caches: [
{ id: 'session-cache', type: 'redis' },
],
schedules: [
{ id: 'cleanup-job', handler: 'src/jobs/cleanup.handler', schedule: { rate: '1 hour' } },
{ id: 'daily-report', handler: 'src/jobs/report.handler', schedule: { cron: '0 8 * * ? *' } },
],
envs: { dev, prod },
});
// config/dev.ts — override sizing for dev
export const dev: EnvConfigInput = {
preset: 'free',
databases: [
{ id: 'main-db', size: 'small' },
],
caches: [
{ id: 'session-cache', size: 'small' },
],
};
// config/prod.ts — override sizing/behavior for prod
export const prod: EnvConfigInput = {
preset: 'medium',
databases: [
{ id: 'main-db', size: 'large', highAvailability: true, backups: true },
],
storage: [
{ id: 'public-assets', cdn: true },
],
queues: [
{ id: 'email-queue', deadLetterQueue: true },
],
caches: [
{ id: 'session-cache', size: 'medium' },
],
};
const outputs = ctx.intentOutputs as IntentOutputs;
outputs.databases['main-db'].endpoint
outputs.storage['user-uploads'].bucketName
outputs.storage['public-assets'].cdnUrl
outputs.queues['email-queue'].queueUrl
outputs.caches['session-cache'].endpoint
outputs.auth['user-pool'].userPoolId
Terminal window
cd venturekit-doc/examples-code/infrastructure-intents
npm install
vk dev