08 - Classic Solutions Architecture Discussions

Instantiating Applications Quickly

awssolutions-architectureec2amiebsefsrdssaa-c03

Overview

When we build highly available, scalable architectures on AWS, we rely on Auto Scaling Groups to launch new EC2 instances on demand. But there's a hidden problem: how long does it take for a new instance to become fully operational?

If your application requires installing packages, downloading dependencies, compiling code, or inserting initial data — that startup time can be very long. During that time, the instance is running (and costing money) but not serving traffic. This lecture covers the techniques to make application instantiation as fast as possible.

The core idea: move as much work as possible out of boot time and into build time.

The Problem: Slow Boot Times

Consider a typical EC2 instance launch with User Data:

┌─────────────────────────────────────────────────────────────────┐
│                    EC2 Instance Launch                          │
│                                                                 │
│  1. Launch instance from base AMI (Amazon Linux 2)    ~30 sec  │
│  2. Run User Data script:                                       │
│     a. yum update -y                                  ~2 min   │
│     b. yum install -y httpd php mysql                 ~1 min   │
│     c. Download application code from S3              ~1 min   │
│     d. Install npm/pip dependencies                   ~3 min   │
│     e. Compile assets                                 ~2 min   │
│     f. Configure application                          ~1 min   │
│     g. Start services                                 ~30 sec  │
│                                                                 │
│  Total time before serving traffic:              ~10+ minutes   │
└─────────────────────────────────────────────────────────────────┘

During those 10+ minutes:

  • The ASG thinks it has scaled out, but the instance isn't ready
  • Users are still hitting overloaded existing instances
  • You're paying for an instance that isn't serving traffic
  • If the ASG launches multiple instances, they're all slow to start
Real-World Impact

In a traffic spike scenario, slow boot times can be catastrophic. If your ASG takes 10 minutes to bring up new instances, your existing instances might be overwhelmed and crash before the new ones are ready. Fast instantiation is not optional — it's critical for production workloads.

Solution 1: Golden AMI

The most powerful technique: instead of installing everything at boot time, pre-bake everything into a custom AMI.

BUILD TIME (once)                          BOOT TIME (every launch)
┌──────────────────────────┐               ┌──────────────────────────┐
│  1. Launch base AMI      │               │  1. Launch Golden AMI    │
│  2. Install OS updates   │               │  2. Start services       │
│  3. Install application  │               │  3. Ready! ✅            │
│  4. Install dependencies │               │                          │
│  5. Configure everything │    ──────▶    │  Total: ~1-2 minutes     │
│  6. Create AMI snapshot  │    "Bake"     │                          │
│     = "Golden AMI"       │               │  vs 10+ minutes with     │
│                          │               │  User Data               │
│  Total: 15 min (once)    │               └──────────────────────────┘
└──────────────────────────┘

A Golden AMI is a custom AMI where you've already installed:

  • All OS packages and updates
  • Your application code and binaries
  • All dependencies (npm modules, pip packages, etc.)
  • Monitoring agents (CloudWatch agent, etc.)
  • Security configurations and hardening
  • Everything your application needs to run

When the ASG launches a new instance from the Golden AMI, it boots up ready to serve traffic in 1-2 minutes instead of 10+.

Aspect User Data (Bootstrap) Golden AMI
Boot time 10+ minutes 1-2 minutes
Reliability Can fail (network issues, package repo down) Deterministic — everything is pre-installed
Consistency Different instances might get different package versions Identical — every instance is the same
Maintenance Update the script Rebuild the AMI (more effort, but more reliable)
Cost Pay for idle boot time Minimal idle time
Exam Tip

If an exam question mentions reducing EC2 boot time, faster scaling, or consistent instance configuration, the answer is almost always Golden AMI. This is one of the most frequently tested concepts in the Solutions Architect exam.

Golden AMI Pipeline

In practice, you automate Golden AMI creation:

┌──────────┐   ┌──────────────┐   ┌──────────────┐   ┌──────────────┐
│  Source   │   │   Build      │   │   Test       │   │   Deploy     │
│  Code     │──▶│   Instance   │──▶│   Instance   │──▶│   AMI to     │
│  Change   │   │   Install    │   │   Run tests  │   │   ASG Launch │
│           │   │   Create AMI │   │   Validate   │   │   Template   │
└──────────┘   └──────────────┘   └──────────────┘   └──────────────┘
                                                        
              Automated with EC2 Image Builder or CI/CD pipeline

AWS provides EC2 Image Builder specifically for automating Golden AMI creation. It can:

  • Build AMIs on a schedule or triggered by code changes
  • Run automated tests against the AMI
  • Distribute AMIs across regions and accounts
  • Manage AMI lifecycle (deprecate old versions)

Golden AMI: build once, boot fast

BUILD TIME (once, about 15 min) BOOT TIME (every launch) Base AMIlaunchInstall + configureOS, app, agentsGolden AMIsnapshotASG launchstart servicesReady1-2 minutes User Data bootstrapping instead: 10+ minutes before serving traffic.
Installing and configuring happens once at build time. Each launch only starts services, so the instance is ready in 1-2 minutes instead of 10+.

Solution 2: Bootstrap with User Data (When Needed)

Sometimes you can't bake everything into the AMI — for example, configuration that changes per environment, or secrets that shouldn't be in an AMI. In those cases, use User Data for the minimal remaining setup:

Golden AMI (pre-baked)              User Data (at boot)
┌──────────────────────┐            ┌──────────────────────┐
│  ✅ OS packages      │            │  Fetch config from   │
│  ✅ Application code │            │  Parameter Store     │
│  ✅ Dependencies     │    +       │  Set environment     │
│  ✅ Agents           │            │  variables           │
│  ✅ Security config  │            │  Start services      │
└──────────────────────┘            └──────────────────────┘
                                     ~30 seconds

The hybrid approach: bake everything static into the AMI, use User Data only for dynamic configuration. This gives you the best of both worlds — fast boot times with environment-specific flexibility.

Solution 3: EBS Snapshots for Data

If your application needs a large dataset at startup (e.g., a database, a data warehouse, a machine learning model), downloading it from S3 or the internet at boot time is slow. Instead, use EBS Snapshots.

WITHOUT Snapshot                     WITH Snapshot
┌──────────────────────┐            ┌──────────────────────┐
│  1. Launch instance  │            │  1. Launch instance  │
│  2. Create EBS vol   │            │  2. Restore EBS from │
│  3. Download 100 GB  │            │     snapshot         │
│     from S3          │            │  3. Attach volume    │
│  4. Write to EBS     │            │  4. Ready! ✅        │
│  5. Ready            │            │                      │
│                      │            │  Data is already     │
│  Time: 30+ minutes   │            │  on the volume!      │
│                      │            │  Time: ~2 minutes    │
└──────────────────────┘            └──────────────────────┘

When you restore an EBS volume from a snapshot, the data is already there. You don't need to download or copy anything. The volume is ready to use almost immediately (data is lazily loaded from S3 in the background, but reads are served immediately).

Lazy Loading from Snapshots

When you restore an EBS volume from a snapshot, the data is loaded lazily from S3. The first read of a block that hasn't been loaded yet will be slower. To avoid this, you can use EBS Fast Snapshot Restore (FSR) which pre-warms the volume, or you can run fio or dd to force-read all blocks after restore.

EBS snapshot vs download at boot

Without snapshot Create EBS volumeDownload 100 GBfrom S3Ready30+ minutes With snapshot Restore EBSfrom snapshotAttach volumedata already thereReadyabout 2 minutes
A volume restored from a snapshot already has the data. Downloading 100 GB at boot takes 30+ minutes.

Solution 4: EFS for Shared Data

If multiple instances need the same large dataset, EFS is even better than EBS snapshots because:

  • The data is already mounted and available — no restore step needed
  • All instances share the same data — no per-instance snapshots
  • New instances just mount the EFS and the data is there
┌──────────────────┐
│  New EC2 Instance │
│                  │──mount──▶ EFS (already has all data)
│  Ready instantly │          ✅ No download, no restore
└──────────────────┘

This is exactly the pattern we saw in the MyWordPress.com case study — EFS provides instant shared access to media files across all instances without any boot-time data loading.

Solution 5: RDS Snapshots for Databases

The same principle applies to databases. If you need to create a new RDS instance with existing data:

WITHOUT Snapshot                     WITH Snapshot
┌──────────────────────┐            ┌──────────────────────┐
│  1. Create RDS       │            │  1. Restore RDS from │
│  2. Run schema       │            │     snapshot         │
│     migrations       │            │  2. Ready! ✅        │
│  3. Insert seed data │            │                      │
│  4. Run data imports │            │  Schema + data       │
│  5. Ready            │            │  already present     │
│                      │            │                      │
│  Time: hours         │            │  Time: minutes       │
└──────────────────────┘            └──────────────────────┘

Restoring from an RDS snapshot creates a fully populated database with all your schema, data, indexes, and configuration. This is dramatically faster than creating a blank database and importing data. The same concept applies to Aurora snapshots and ElastiCache snapshots (Redis).

Summary: The Speed Hierarchy

┌─────────────────────────────────────────────────────────────────┐
│              INSTANTIATION SPEED TECHNIQUES                     │
│                                                                 │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐            │
│  │ COMPUTE     │  │ STORAGE     │  │ DATABASE    │            │
│  │             │  │             │  │             │            │
│  │ Golden AMI  │  │ EBS Snap-   │  │ RDS Snap-   │            │
│  │ + minimal   │  │ shots for   │  │ shots for   │            │
│  │ User Data   │  │ data vols   │  │ populated   │            │
│  │             │  │             │  │ databases   │            │
│  │ EC2 Image   │  │ EFS for     │  │             │            │
│  │ Builder     │  │ shared data │  │ Aurora /    │            │
│  │ automates   │  │ across      │  │ ElastiCache │            │
│  │ AMI builds  │  │ instances   │  │ snapshots   │            │
│  └─────────────┘  └─────────────┘  └─────────────┘            │
│                                                                 │
│  GOLDEN RULE: Move work from BOOT TIME to BUILD TIME           │
└─────────────────────────────────────────────────────────────────┘
Technique What It Speeds Up Time Saved When to Use
Golden AMI EC2 instance boot 10+ min → 1-2 min Always for production ASGs
User Data (minimal) Dynamic config only Keeps boot fast Environment-specific settings
EBS Snapshots Data volume creation 30+ min → 2 min Large datasets on single instances
EFS Shared data access Instant (already mounted) Shared datasets across instances
RDS Snapshots Database creation Hours → minutes New DB environments, DR recovery
The Golden Rule

Move work from boot time to build time. Everything you can pre-bake, pre-snapshot, or pre-mount means faster scaling, more reliable deployments, and lower costs during traffic spikes.

Questions & Answers

Q1: What is a Golden AMI and why is it important?

Answer:

A Golden AMI is a custom Amazon Machine Image where all OS packages, application code, dependencies, agents, and configurations are pre-installed. Instead of installing everything at boot time via User Data (which can take 10+ minutes), instances launched from a Golden AMI are ready to serve traffic in 1-2 minutes. This is critical for ASGs that need to scale quickly during traffic spikes.

Q2: What are the advantages of Golden AMI over User Data bootstrapping?

Answer:

  • Faster boot time — 1-2 minutes vs 10+ minutes
  • More reliable — no dependency on external package repos or network at boot time
  • Consistent — every instance is identical (same package versions, same config)
  • Cost-effective — less time paying for instances that aren't serving traffic
  • Deterministic — if the AMI works once, it works every time
Q3: When would you still use User Data with a Golden AMI?

Answer:

Use User Data for dynamic, environment-specific configuration that can't be baked into the AMI:

  • Fetching secrets from AWS Secrets Manager or Parameter Store
  • Setting environment variables (dev vs staging vs prod)
  • Registering with a service discovery system
  • Starting services with environment-specific flags The key is to keep User Data minimal — only what changes between environments.
Q4: How do EBS Snapshots speed up application instantiation?

Answer:

Instead of downloading large datasets from S3 or the internet at boot time, you restore an EBS volume from a snapshot. The data is already on the volume — no download needed. This can reduce data loading from 30+ minutes to ~2 minutes. The data is lazily loaded from S3 in the background, but reads are served immediately.

Q5: What is EBS Fast Snapshot Restore (FSR)?

Answer:

When restoring from a snapshot, data is loaded lazily — the first read of each block is slower because it's fetched from S3. Fast Snapshot Restore (FSR) pre-warms the volume by loading all blocks upfront, so there's no first-read penalty. Use FSR when you need consistent, low-latency reads immediately after restore (e.g., databases, latency-sensitive applications). Note that FSR has an additional cost.

Q6: Why is EFS better than EBS Snapshots for shared data?

Answer:

  • EFS is already mounted and available — no restore step needed
  • All instances share the same data — no per-instance snapshots to manage
  • New instances just mount EFS and data is instantly accessible
  • EBS snapshots create separate volumes per instance — data isn't shared Use EFS when multiple instances need the same dataset; use EBS snapshots when each instance needs its own copy of the data.
Q7: How do RDS Snapshots help with application instantiation?

Answer:

Restoring from an RDS snapshot creates a fully populated database with all schema, data, indexes, and configuration already in place. This is dramatically faster than creating a blank database and running migrations, seed scripts, and data imports. Use RDS snapshots for creating new environments, disaster recovery, or testing with production-like data.

Q8: What is EC2 Image Builder and how does it relate to Golden AMIs?

Answer:

EC2 Image Builder is an AWS service that automates the creation, testing, and distribution of Golden AMIs. It replaces manual AMI creation with an automated pipeline that can:

  • Build AMIs on a schedule or triggered by code changes
  • Run automated tests to validate the AMI works correctly
  • Distribute AMIs across multiple regions and accounts
  • Manage AMI lifecycle by deprecating old versions This ensures your Golden AMIs are always up-to-date and tested.
Q9: What is the "golden rule" of application instantiation?

Answer:

Move work from boot time to build time. Everything you can pre-bake into an AMI, pre-snapshot into an EBS volume, or pre-mount via EFS means:

  • Faster scaling during traffic spikes
  • More reliable deployments (fewer things to fail at boot)
  • Lower costs (less time paying for idle instances)
  • More consistent environments (every instance is identical) This principle applies across compute (Golden AMI), storage (EBS snapshots, EFS), and databases (RDS snapshots).
Q10: Exam scenario — ASG instances take 15 minutes to pass health checks. How do you fix this?

Answer:

The answer is almost always Golden AMI. The 15-minute delay means the User Data script is doing too much work at boot time. The fix:

  1. Bake the application into a Golden AMI — install all packages, code, and dependencies at build time
  2. Use minimal User Data only for dynamic config (secrets, environment variables)
  3. If large data volumes are needed, use EBS snapshots instead of downloading at boot
  4. Use EC2 Image Builder to automate AMI creation and keep it up-to-date This reduces boot time from 15 minutes to 1-2 minutes.

Check yourself

Quiz

Flashcards

Click the card (or focus it), then use ← → to move and Space to flip.