Architecture
Progress checklist
Overview
Section titled “Overview”A same-AZ shared hot lookup bakeoff in ap-southeast-2. An
Amazon S3 Express One Zone — single-AZ storage class optimized for consistent single-digit millisecond latency, used only with directory buckets.
S3 Express One Zone directory-bucket
S3 bucket type that hosts the S3 Express One Zone storage class. Names follow bucket-base-name--zone-id--x-s3 and live in a single Availability Zone.
sits in apse2-az1
Availability Zone ID — a unique, account-stable identifier such as apse2-az1. Directory bucket names and Express location config use the AZ ID, not the account-local AZ name (for example ap-southeast-2a).. A Graviton EC2 instance in that AZ continuously
GETs the same small keys from Express and from a Standard general-purpose bucket, then shows live
latency on a built-in harness
Docker container on the lab EC2 instance that continuously GETs the same keys from Express and Standard, exposes a dashboard on :8080, and reports p50/p90 latency ratios. dashboard.
You are not building a production cache, Mountpoint, or multi-AZ design — see Where Express fits for the single-AZ durability trade-off.
What you build
Section titled “What you build”| Piece | What it is |
|---|---|
| Image pipeline | ./scripts/image.sh — ECR + CodeBuild (arm64). Survives demo.sh down; remove with image.sh down. |
| Lab stack | ./scripts/demo.sh — VPC, dual gateway endpoints, two buckets, IAM (+ SSM), m7g.large, seed. |
| Harness | Container on EC2: continuous GETs to both buckets; dashboard at :8080. |
| Dashboard | p50 / p90 / p99 and Standard÷Express ratio — public URL or SSM port-forward. |
Why these constraints
Section titled “Why these constraints”| Constraint | Why it matters |
|---|---|
Compute in apse2-az1 | Express is single-AZ. Cross-AZ or laptop GETs hide the product. |
| Two gateway endpoints | ….s3 for Standard; ….s3express for the directory bucket. |
| CreateSession s3express:CreateSession — session-based auth for zonal (object-level) operations on a directory bucket. The SDK or CLI obtains temporary credentials scoped to that bucket before GET/PUT/LIST. | Zonal object APIs use session auth, not classic s3:GetObject on Express. |
| Identical seed keys | Bakeoff is fair only when both buckets hold the same objects. |
arm64 image + m7g.large | CodeBuild builds for Graviton; EC2 pulls that tag from ECR. |
AmazonSSMManagedInstanceCore | Session Manager / port-forward without opening a bastion. |
Two lifecycles
Section titled “Two lifecycles”Once (or when the harness changes) ./scripts/image.sh up ./scripts/image.sh build → ECR :tag
Each lab run ./scripts/demo.sh up → VPC + buckets + EC2 (pulls image) ./scripts/demo.sh status|dash|port-forward ./scripts/demo.sh down → lab only (image stack remains)
When finished — remove everything ./scripts/demo.sh down → lab (if still up) ./scripts/image.sh down → ECR + CodeBuild + source bucket