Build1 distinct publisher3 min readUpdated
A walkthrough of bolting semantic search onto an existing serverless recipes API shows the sync pipeline is now optional. The infrastructure-as-code story has not caught up yet.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
A post on dev.to walks through taking an existing DynamoDB-backed recipes API and adding semantic search to it directly, with no separate search service [s1c1]. The interesting part is not the embeddings, it is what gets deleted from the architecture: the second datastore and the pipeline that kept it in sync [s1c2].
The author's starting stack is unremarkable in the best way: SAM for infrastructure, API Gateway in front, Lambda behind, DynamoDB for storage, and plain CRUD operations to create, read, update, delete and list recipes [s1c3]. The failure mode is familiar too. Adding filters in DynamoDB means adding a Global Secondary Index for every permutation, which the author describes as not scalable, so the only previous option was a separate data pipeline that indexed the data elsewhere and served search from there [s1c4][s1c5]. That is the honest reason search so often lives outside the primary database. It is rarely a query-language problem. It is a fan-out-of-indexes problem, and the escape hatch has historically been a copy of your data somewhere else.
The mechanics are deliberately boring. You store the embedding as an attribute on the item, create a vector index over that attribute, and query it with a dedicated similarity API, which the author compares to creating a GSI and calling it with Query [s1c6]. The embedding model is Amazon Bedrock's Titan Text Embeddings V2, producing 1024-dimension vectors returned normalized, which pairs with cosine similarity [s1c7]. The index was created with cosine distance, 1024 dimensions to match the model output, and an inline filter on cuisine; the author likens the inline filter to a partition key in a regular index, except it is not required [s1c8][s1c9].
The design decision that actually determines search quality is the input text. Structured recipe fields are flattened into a single string covering name, description, cuisine, dietary tags, ingredients and timings, so one query can match on any of them at once [s1c10]. That is six field groups collapsed into one vector [s1c11], which is the direct substitute for the GSI-per-filter sprawl.
Two consequences worth pricing in. First, the embedding is generated inline on write, which is what makes every item searchable the moment it is written [s1c12]; it also means a model invocation now sits on the write path, so write latency and write failures inherit Bedrock's behaviour. Second, vector indexes are not yet supported by CloudFormation, so the author could not declare the index in the SAM template and instead added a post-deployment script that creates it with UpdateTable if it does not already exist [s1c13]. A feature that lives outside your template is a feature that drifts, and a create-if-not-exists script is a workaround with a shelf life.
Watch for CloudFormation and SAM support for vector indexes, which is the gate on this being a first-class part of a deployment rather than a bolt-on step [s1c13]. Watch the inline filter choice as well: it is declared when the index is created, alongside the attribute definition [s1c8][s1c9], so picking the wrong prefilter dimension is a schema commitment, not a query-time decision. And watch what happens to teams whose embedding text definition changes after launch, because the field list is application code [s1c10] while the stored vectors are data.
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
A dev.to post in the AWS Builders space describes taking an existing DynamoDB table and adding vector search to it, so users can search recipes with natural language queries and find results based on meaning rather than exact keyword matches.
The author says the problem with adding search is not the implementation but everything that comes with it: extra components to manage, more failure points, and the constant challenge of keeping data in sync.
The existing API uses a serverless setup with SAM for infrastructure, API Gateway in front, Lambda functions behind, and DynamoDB for storage, exposing plain CRUD operations to create, read, update, delete and list recipes.
Adding filters in DynamoDB requires a Global Secondary Index for every permutation, which the author states is really not scalable.
DynamoDB now supports vector indexes natively: you store the embedding as an attribute on the item, create a vector index over that attribute, and query it with a dedicated similarity API, which the author says is very similar to creating a GSI and calling it with the Query command.
The author picked Amazon Bedrock's Titan Text Embeddings V2 model, which produces 1024-dimension vectors, returns them normalized, and pairs naturally with cosine similarity.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
First-hand code, single source
The mechanics are unusually well evidenced for a single-source cluster: concrete API shapes (UpdateTableCommand with VectorIndexUpdates, SearchVectorsCommand), model id, dimension count, distance function, and the inline-filter search schema are all shown as code the author ran. What is absent is any second publisher, any measurement (latency, cost, recall), and any independent confirmation of the broader claim that a separate index pipeline is no longer needed.
One disclosed implementation
Adoption evidence amounts to a single practitioner's demo-scale recipes API, disclosed with working code. There are no user counts, production deployments, vendor usage figures, or third-party reports in the supplied material, and the missing CloudFormation support is itself a signal that standard deployment tooling has not absorbed the feature yet.
Mildly overstated
The headline framing that the second datastore and the GSI permutation trap are gone runs slightly ahead of what the post demonstrates. The GSI-permutation problem concerns exact-match filtering, which semantic top-K search does not straightforwardly replace; the sync pipeline is removed only by adding a synchronous Bedrock call to every write, whose cost and failure behaviour are unmeasured; and the index still cannot be declared in infrastructure-as-code, so a bespoke deploy step replaces part of the pipeline that was supposedly eliminated. The overstatement is modest because the author documents the caveat himself and shows real code.
Community-program advocacy
The post is published in dev.to's AWS Builders space by an author who says he has worked a lot with DynamoDB for years and who links a prior piece arguing where AWS's new vector store fits the landscape. That is a visible alignment with promoting AWS-native architecture, and the recommended stack is entirely AWS (DynamoDB, Bedrock Titan, SAM, Lambda, API Gateway) with no alternatives evaluated. Mitigating the score: the author volunteers an unflattering platform limitation and supplies inspectable code rather than marketing claims.
Solid on mechanics, thin on impact
Confidence is high that the API surface, model configuration, and CloudFormation gap are described accurately, since they are shown as executed code. Confidence is low on the architectural conclusion, because there is one publisher, one demo-scale workload, no cost or quality measurement, and no corroboration of the claim that separate search infrastructure is now avoidable.
build
Two NAT Gateways nobody asked for: review cloud bills at 100x, not at this month1 distinct publisher
build
One ALB rule, zero legacy commits: shipping a feature around an app nobody will touch1 distinct publisher
build
Two Actions, One Loose Policy: The Bedrock Wildcards That Widen A Least-Privilege Grant1 distinct publisher
build
Bedrock turns GPT-5.6 throughput into a routing choice, with residency as the price1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 20, 2026