Skip to main content

Overview

The Resilient tier targets applications that need high availability and data durability without the compute baseline of Enterprise. It scaffolds 3 Availability Zones with one NAT Gateway each, an Aurora PostgreSQL cluster with two readers, KMS customer-managed keys for storage and Database Insights, RDS Proxy with TLS required, and the resilient backup tier, which sets 30-day database backups, deletion protection on DynamoDB tables and production load balancers, S3 versioning and AWS Backup enrolment.
Resilient is a gated tier. Selecting it runs an entitlement check that blocks with “Resilient tier requires a Pro plan.” when your organisation is on a lower plan.

Prerequisites

Create a Resilient Application

Run fjall create app with no flags to pick the tier from a menu instead. The first prompt reads ? Choose your starting point? and lists six options in this order: Standard, Lightweight, Resilient, Enterprise, Tinkerer, Custom. Standard is pre-highlighted unless you passed -t/--type.

Architecture

What’s Included

Database Variants

fjall create app --type resilient scaffolds Aurora. Every other variant is available through fjall add database, and each one carries its own Resilient configuration. Add a variant by naming both the database type and the tier:
--tier on fjall add database requires --type, because a tier configures each database type differently.

Generated Infrastructure

Creating a Resilient application writes an infrastructure.ts close to this:
The database and compute constructs both take the application name as their id. Edit this file directly, or use fjall add, fjall modify and fjall remove to change it.

Specifications

Compute (ECS Fargate)

The circuit breaker sets ResetOnHealthyTask: false, which is stricter than the AWS default. A crash loop that occasionally boots one healthy task still trips the breaker rather than holding the deployment IN_PROGRESS.

Database (Aurora)

Network and security controls

Map these controls onto your own compliance framework. Fjall does not carry an attestation for a tier.

High Availability

Multi-AZ topology

  • ECS tasks spread across 3 Availability Zones
  • One NAT Gateway per zone, so a zone failure does not strand egress
  • Aurora promotes a reader on writer failure
  • ALB routes across all three zones

Auto-scaling

Auto-scaling is on by default. Omitting scaling gives a CPU target-tracking policy where minCapacity tracks desiredCount and maxCapacity defaults to Math.max(desiredCount + 1, 3). The Resilient preset sets both explicitly.
Switch the metric with scalingType, or turn scaling off with scaling: false:
The policy targets 50% utilisation with 60-second scale-in and scale-out cooldowns. ScalingType.QUEUE swaps the target-tracking policy for step scaling on SQS backlog, which can wake a service from desiredCount: 0.

Alarms

Compute and database alarms ship on by default and publish to the application’s SNS topic. Override the thresholds on the resource, or pass alarms: false to opt out.

Backup and Recovery

Standard enrols too — a daily snapshot kept 90 days. Resilient is the lowest tier that adds continuous backup and a copy outside the region, and the lowest at which S3 buckets are enrolled (AWS Backup requires versioning, which this tier turns on). Continuous backup is what buys second-level restore, and AWS supports it for RDS instances, Aurora clusters and S3 buckets. DynamoDB tables and ClickHouse data volumes are enrolled by the same rule and receive the daily snapshot instead, so their finest granularity is a day. Resources join the plan through the fjall:disasterRecovery:tier tag, applied from backup: { tier: "resilient" }. The vault and the plans live in the account infrastructure, not the application stack.
AWS Backup’s Region service opt-in has to admit the type, and it is yours to set. Fjall’s plans select resources by tag alone, and AWS applies a Region’s service opt-in to a tag-only selection. So in an account and Region where the opt-in for S3, RDS, Aurora, DynamoDB or EBS is off, a tagged resource of that type is in no backup plan at all — not a missing copy, no backup — and the plan still reports healthy. Fjall never turns one on for you: doing so moves that account’s backup charges and backup ARNs Region-wide. Check it at AWS Backup console → Settings → Service opt-in, in each account and Region you deploy into.
Recovery time depends on which layer you restore from. An Aurora writer failure fails over to a reader in minutes without a restore. A point-in-time restore of the cluster takes as long as Aurora needs to rebuild the volume. Test both paths against your own recovery objectives rather than assuming a figure.

Cost Considerations

Resilient runs at a higher baseline than Standard because of:
  • 4 Fargate tasks running continuously (1 vCPU and 2 GB each)
  • 3 NAT Gateways, one per AZ
  • Aurora with 2 readers plus RDS Proxy
  • 2 VPC interface endpoints, billed per hour per endpoint per AZ
  • KMS customer-managed keys for storage and Database Insights
  • AWS Backup storage at 35-day retention
Expect 200to200 to 600 or more per month, depending on traffic and data volume. Run fjall costs against a deployed application for figures from your own account.

Resilient vs Standard

Moving an existing Standard application up means replacing the RDS Instance with an Aurora cluster, which is a data migration rather than a config change. Plan it as one.

When to Use

Resilient suits:
  • Customer-facing applications that cannot absorb a single-AZ outage
  • Workloads that need customer-managed encryption keys without the Enterprise compute baseline
  • Applications with a backup and retention obligation beyond the database default
  • Teams that want connection pooling and TLS enforcement at the database edge
Pick a different tier when:

Next Steps

Deploy Application

Deploy your Resilient application to AWS

Add Resources

Extend with storage, messaging, or CDN

Database Factory

Customise the Aurora configuration

Enterprise Pattern

Compare against the highest-capability tier