Skip to main content

Overview

The Tinkerer tier targets experimentation and learning. It runs ECS on a single t4g.micro EC2 instance with direct port mapping, and pairs it with a t4g.micro RDS Instance. It drops the two largest fixed costs in a Fjall stack: the NAT gateway and the Application Load Balancer. The database sits in a public subnet because there is no NAT gateway to route its traffic.
The Tinkerer tier is for learning and throwaway projects. A publicly accessible database, a single instance with no load balancer, and no Multi-AZ make it unsuitable for anything you care about.

Create a Tinkerer application

Application names are lowercase letters, numbers, and hyphens, starting with a letter. Run fjall create app with no flags to pick the tier interactively. The picker lists Tinkerer as “Free experimental · Single-AZ, Free tier ECS, RDS”.
The Tinkerer tier caps you at one service. The interactive prompt reads “How many services? (tinkerer tier: 1 only)” and rejects anything higher.

What you get

Architecture

Generated infrastructure

fjall create app --name experiment --type tinkerer writes this to fjall/experiment/infrastructure.ts:
Construct ids come from the application name, so both the database and the compute cluster are called experiment. Use those names with fjall modify and fjall remove.

Specifications

Compute (ECS on EC2)

Container images build for linux/arm64 to match the Graviton instance.

Database (RDS Instance)

Networking

Cost

The Tinkerer tier picks the smallest instance sizes and skips the NAT gateway and the load balancer, which is most of what a small stack costs. It is not a guarantee of a zero bill. Three scaffolded defaults sit outside the AWS free-tier allowances. Fix them before you deploy if a zero bill matters. Apply the first two in one command:
Free-tier eligibility depends on your account age and on the instance family, and AWS changes both. Check the current allowances at aws.amazon.com/free and set a billing alarm at 1,1, 5, and $10 before you deploy.
Indicative us-east-1 on-demand rates once you fall outside the free tier:
  • t4g.micro EC2: around $0.0084/hour
  • db.t4g.micro RDS: around $0.016/hour
  • Data transfer out beyond 100 GB: $0.09/GB

Track spend

Customise the stack

Container environment variables

Add keys to the environment block inside the service’s containers entry. The scaffolded database keys stay as they are, since they resolve at synth time.
Secrets belong in secretsImport or in Parameter Store via fjall secret, never in environment.

Add a Lambda function

Lambda’s always-free tier covers 1M requests and 400,000 GB-seconds per month, which suits sporadic work better than a second container.
--type and --needsConnection are both required on a first compute add. Resource names are alphanumeric and start with a letter.

Working within the limits

400 MiB of container memory

The task is capped at 400 MiB. A Node or Python process that fits locally can still be OOM-killed on the instance.
  • Build from a slim base image
  • Drop dependencies you do not import
  • Cap heap size explicitly, for example NODE_OPTIONS=--max-old-space-size=320
  • Read the ECS task logs after a restart to confirm whether the kill was OOM

Database connections

A t4g.micro instance allows few concurrent connections.
  • Pool connections rather than opening one per request
  • Close idle connections
  • Retry on connection failure with backoff

Local development

Run the same image locally against a local Postgres, using the variable names the scaffold injects.

Suitability

Good fit:
  • Learning AWS and Fjall
  • Personal projects and portfolio applications
  • Proof of concepts
  • Hackathon projects
Wrong fit:
  • Production workloads
  • Anything needing a load balancer or a custom domain on the service
  • Multi-AZ or failover requirements
  • Databases over a few gigabytes
  • CPU-intensive or memory-hungry workloads

Move beyond the Tinkerer tier

Tiers are chosen at scaffold time and are not switchable in place. Create a new application at the tier you want, then migrate data and cut traffic over.
Alternatively, keep the application and edit infrastructure.ts directly. The tier only seeds the first version of that file, so every factory call is yours to change: Run fjall validate --deep after hand-editing to typecheck the file before you deploy.

Next Steps

Deploy your application

Ship the Tinkerer stack to AWS.

Add resources

Extend the application with databases, compute, storage, and more.

Move to Lightweight

Switch to Fargate when you outgrow the single instance.

Move to Standard

Run a production-ready, multi-AZ stack.