fuel.yml

fuel.yml Reference

fuel.yml is the infrastructure configuration file used to generate the /infra folder. Pass it via fuel infra:deploy --config or fuel create:app --config. Once /infra exists, subsequent deploys recover configuration from AWS Secrets Manager and do not require fuel.yml. Generate one interactively with fuel infra:init.

Minimal Example

The smallest valid fuel.yml — single app, no optional features:

name: my-app
deployment: ecs
ssl: arn:aws:acm:us-east-1:123456789012:certificate/abc-123

apps:
  - name: my-app-api
    technology: nest
    dockerfile: Dockerfile
    health_check_path: /health
    domain: api.example.com
    port: 3000

Full Example

Two apps (API + web) with Postgres, Redis, workers, and environment variables:

name: my-app
deployment: ecs
ssl: arn:aws:acm:us-east-1:123456789012:certificate/abc-123
slack_webhook_url: https://hooks.slack.com/services/...

apps:
  - name: my-app-api
    technology: nest
    dockerfile: Dockerfile
    health_check_path: /health
    domain: api.example.com
    port: 3000
    branch: main
    postgres: true
    redis: true
    cpu_units: 1024
    memory_units: 2048
    db_instance_type: db.t3.micro
    db_allocated_storage: 20
    redis_instance_type: cache.t3.micro
    variables:
      NODE_ENV: production
      STRIPE_SECRET_KEY: sk_live_...
    build_env:
      NEXT_PUBLIC_API_URL: https://api.example.com
    workers:
      - name: my-app-worker
        dockerfile: Dockerfile.worker

  - name: my-app-web
    technology: react
    dockerfile: Dockerfile
    health_check_path: /api/health
    domain: example.com
    port: 3001

Field Reference

FieldTypeRequired / DefaultDescription
namestringrequiredProject name. Used as a prefix for all AWS and GitHub resources.
deployment"ecs"requiredDeployment target. Only 'ecs' is currently supported.
sslstringrequiredARN of the ACM SSL certificate (e.g. arn:aws:acm:us-east-1:123:certificate/abc).
slack_webhook_urlstringSlack incoming webhook URL for deploy failure notifications. Leave empty to disable.
appsApp[]requiredList of applications to deploy.
apps[].namestringrequiredApp name. Used as the ECS service and task definition name.
apps[].technology"nest" | "react"requiredApplication technology: 'nest' for NestJS API, 'react' for React/Next.js frontend.
apps[].dockerfilestringrequiredPath to the Dockerfile relative to the project root.
apps[].health_check_pathstringrequiredHTTP path for ALB health checks (e.g. /health).
apps[].domainstringrequiredDomain name for this app (e.g. api.example.com).
apps[].portintegerrequiredContainer port the app listens on.
apps[].branchstringmainGit branch that triggers deployment for this app.
apps[].template_repo_branchstringmainBranch of the template repository to use for scaffolding.
apps[].postgresbooleanfalseProvision an RDS PostgreSQL instance for this app.
apps[].redisbooleanfalseProvision an ElastiCache Redis cluster for this app.
apps[].variablesRecord<string, string>{}Runtime environment variables injected into the ECS task.
apps[].build_envRecord<string, string>{}Build-time arguments passed to Docker build (e.g. NEXT_PUBLIC_API_HOST).
apps[].workersWorker[]Background worker processes for this app.
apps[].workers[].namestringrequiredWorker name. Used as the ECS service name.
apps[].workers[].dockerfilestringrequiredPath to the worker's Dockerfile relative to the project root.
apps[].cpu_unitsinteger1024CPU units for the ECS task (1024 = 1 vCPU).
apps[].memory_unitsinteger2048Memory in MB for the ECS task.
apps[].db_instance_typestringRDS instance type (e.g. db.t3.small). Only used when postgres is true.
apps[].db_allocated_storageintegerRDS storage in GB. Only used when postgres is true.
apps[].redis_instance_typestringElastiCache node type (e.g. cache.t3.small). Only used when redis is true.