Same system as the rest of the series, drawn purely for engineers. Service names, resource identifiers, region, and the actual flow operations — everything you’d need to recreate this in your own AWS account.
Posts 1–6 walk through the system in plain language. This page is the dense version — no softening, just the architecture as you’d sketch it on a whiteboard during a design review.
Fig 7. Full architecture, ap-southeast-1. White boxes = AWS resources; dashed AWS container; dashed grey boxes = subsystem groupings; dashed grey arrow = cross-subsystem data dependency.
Read this top-down, then column-by-column
Top row is the three external surfaces. Below it, the AWS account contains five subsystems: Build & Deploy across the top, three runtime columns (Posting, KB Sync, Reply) in the middle, and a Cross-cutting strip at the bottom. The dashed grey arrow from the KB Sync output to the Reply column shows the only cross-subsystem data dependency — the Reply pipeline reads the same vectors index that KB Sync writes.
Naming conventions used in the diagram
Lambda functions:fn-<purpose> — e.g. fn-publisher, fn-sync, fn-reply-handler.
DynamoDB tables:tbl-<name>.
SQS queues:q-<name> with paired q-<name>-dlq.
SNS topics:t-<name>.
S3 Vectors indexes:vec-<purpose>-{page} — one index per Facebook page.
S3 buckets:kb-raw partitioned by {page}/ prefix.
Region and Bedrock model access
Everything runs in ap-southeast-1 (Singapore) for low latency from the Philippines. Bedrock model invocations use the Global cross-Region inference profile (model IDs prefixed with global.) — data at rest stays in Singapore; inference may route to other regions for capacity. Pricing is the same as on-demand Singapore pricing.
What’s deliberately not on the diagram
IAM policy details — per-Lambda execution role inline policies are minimal (one secret, one table, one bucket as appropriate).
Per-page configuration JSON in S3 (read by Publisher and Reply Lambdas; lets you tune thresholds without redeploys).
X-Ray tracing — on for the Reply Lambda only, sampling 10%.
The CloudFormation parameter for Bedrock model ID is templated, so swapping models doesn’t require code changes.
If you’re recreating this
Start with Build & Deploy alone (a single Lambda, no triggers). Once git push reliably updates an empty stack, add Posting next. Don’t add Reply until KB Sync is producing a usable vectors index — the Reply pipeline depends on that brain existing. Cross-cutting (audit, logs, alarms, budget) goes in from day one.