<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sujitha Rasamsetty</title>
    <description>The latest articles on DEV Community by Sujitha Rasamsetty (@sujitha_rasamsetty).</description>
    <link>https://dev.to/sujitha_rasamsetty</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2936637%2F08e77f1a-da8c-4f5c-b2f5-f22f9f16687e.png</url>
      <title>DEV Community: Sujitha Rasamsetty</title>
      <link>https://dev.to/sujitha_rasamsetty</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sujitha_rasamsetty"/>
    <language>en</language>
    <item>
      <title>Amazon S3 Vectors: When Your Data Lake Becomes Your Vector Store</title>
      <dc:creator>Sujitha Rasamsetty</dc:creator>
      <pubDate>Sun, 11 Jan 2026 09:06:14 +0000</pubDate>
      <link>https://dev.to/sujitha_rasamsetty/amazon-s3-vectors-when-your-data-lake-becomes-your-vector-store-3c2c</link>
      <guid>https://dev.to/sujitha_rasamsetty/amazon-s3-vectors-when-your-data-lake-becomes-your-vector-store-3c2c</guid>
      <description>&lt;p&gt;For years, Amazon S3 has been depicted as "just storage" in most architectural diagrams.&lt;/p&gt;

&lt;p&gt;We put everything there:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Raw events
&lt;/li&gt;
&lt;li&gt;PDFs and contracts
&lt;/li&gt;
&lt;li&gt;Images and videos
&lt;/li&gt;
&lt;li&gt;Data lake zones
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then we built &lt;em&gt;more&lt;/em&gt; systems around it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vector databases for semantic search
&lt;/li&gt;
&lt;li&gt;Indexing services
&lt;/li&gt;
&lt;li&gt;ETL pipelines to sync embeddings
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every new AI workload meant &lt;strong&gt;one more moving piece&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;With &lt;strong&gt;Amazon S3 Vectors&lt;/strong&gt;, AWS is quietly asking us:&lt;/p&gt;

&lt;p&gt;💡 &lt;em&gt;What if your object store could also be your vector store?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And that's a big shift for anyone building &lt;strong&gt;AI, RAG, agents, or semantic search on AWS&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why S3 Vectors Matter (In One Sentence)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Amazon S3 Vectors lets you store and query vector embeddings directly in S3, with native similarity search no separate vector database needed.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're an AWS builder, architect, or data practitioner, this changes how you think about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where do you keep embeddings?&lt;/li&gt;
&lt;li&gt;How many systems do you operate?&lt;/li&gt;
&lt;li&gt;How do you design RAG and AI search workloads?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not "just another feature".&lt;br&gt;&lt;br&gt;
This is S3 stepping into the &lt;strong&gt;AI runtime&lt;/strong&gt; 🚀.&lt;/p&gt;




&lt;h2&gt;
  
  
  First, What Are "Vectors" in This Story?
&lt;/h2&gt;

&lt;p&gt;Short version:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Take &lt;strong&gt;text&lt;/strong&gt;, &lt;strong&gt;image&lt;/strong&gt;, &lt;strong&gt;audio&lt;/strong&gt;, or a &lt;strong&gt;document&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Run it through an embedding model (Bedrock, SageMaker, open-source, etc.)
&lt;/li&gt;
&lt;li&gt;You get a list of numbers like: &lt;code&gt;[0.12, -0.83, 0.07, …]&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That list of numbers is a &lt;strong&gt;vector embedding&lt;/strong&gt;, a mathematical representation of meaning.&lt;/p&gt;

&lt;p&gt;Two items with &lt;strong&gt;similar meaning&lt;/strong&gt; → &lt;strong&gt;similar vectors&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This unlocks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Semantic search ("find things like this")
&lt;/li&gt;
&lt;li&gt;Recommendations ("suggest similar items")
&lt;/li&gt;
&lt;li&gt;RAG ("retrieve the right context for my LLM query")
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And now, S3 understands this type of data &lt;strong&gt;natively&lt;/strong&gt; ✨&lt;/p&gt;




&lt;h2&gt;
  
  
  What Did AWS Actually Add?
&lt;/h2&gt;

&lt;p&gt;Amazon S3 Vectors introduces three core building blocks:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Vector bucket&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A special type of S3 bucket designed for &lt;strong&gt;storing and querying vectors&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Same durability and elasticity guarantees as S3
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Vector index&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lives inside a vector bucket
&lt;/li&gt;
&lt;li&gt;Groups vectors logically (for example: &lt;code&gt;docs&lt;/code&gt;, &lt;code&gt;products&lt;/code&gt;, &lt;code&gt;support tickets&lt;/code&gt;)
&lt;/li&gt;
&lt;li&gt;This is where similarity search happens
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Vectors&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The embeddings you write into a vector index
&lt;/li&gt;
&lt;li&gt;Can include &lt;strong&gt;metadata&lt;/strong&gt; (&lt;code&gt;doc_id&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, &lt;code&gt;tenant&lt;/code&gt;, &lt;code&gt;created_at&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You interact with this using dedicated APIs and console support, not just &lt;code&gt;PutObject&lt;/code&gt; / &lt;code&gt;GetObject&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Is a Big Deal for AI Builders
&lt;/h2&gt;

&lt;p&gt;Let's be honest: vector databases solved real problems.&lt;/p&gt;

&lt;p&gt;But at scale, many teams ended up with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;S3 for raw objects
&lt;/li&gt;
&lt;li&gt;A vector DB for embeddings
&lt;/li&gt;
&lt;li&gt;Glue/Spark/ETL to sync between them
&lt;/li&gt;
&lt;li&gt;Extra monitoring, security, and cost overhead&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With &lt;strong&gt;S3 Vectors&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Storage and vectors live together&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;No extra vector infrastructure to deploy and babysit
&lt;/li&gt;
&lt;li&gt;You pay based on &lt;strong&gt;S3 style storage + query usage&lt;/strong&gt;, not "always-on" clusters
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is especially attractive if you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Already treat S3 as your "source of truth."
&lt;/li&gt;
&lt;li&gt;Are cost-sensitive with AI workloads
&lt;/li&gt;
&lt;li&gt;Want fewer systems in your architecture diagram
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How S3 Vectors Fit Into a RAG / AI Architecture
&lt;/h2&gt;

&lt;p&gt;Here's a simple mental flow for a RAG-style app on AWS:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Content lands in S3&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PDFs, docs, wiki exports, tickets, transcripts, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Embedding generation&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use Amazon Bedrock (for example, a Titan embedding model) or another model to generate embeddings for these items.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Store embeddings in S3 Vectors&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One &lt;strong&gt;vector bucket&lt;/strong&gt;, one or more &lt;strong&gt;vector indexes&lt;/strong&gt; (for example: &lt;code&gt;kb-docs&lt;/code&gt;, &lt;code&gt;faqs&lt;/code&gt;, &lt;code&gt;tickets&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Query at runtime&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Given a user query → generate a query embedding → run similarity search on S3 Vectors → get the top-K closest vectors&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Feed top-K results into your LLM&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use Bedrock, SageMaker, or any LLM endpoint&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Return final answer to user&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Combine retrieved context + LLM response&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No external vector DB.&lt;br&gt;&lt;br&gt;
No "sync job" to keep storage and vectors aligned.&lt;/p&gt;

&lt;p&gt;If your &lt;strong&gt;data lake is in S3&lt;/strong&gt;, your &lt;strong&gt;AI retrieval layer can now live there too&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where S3 Vectors Shine (Concrete Use Cases)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1️⃣ Semantic Search Over Documents
&lt;/h3&gt;

&lt;p&gt;Perfect for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Internal knowledge bases
&lt;/li&gt;
&lt;li&gt;Policy/compliance documents
&lt;/li&gt;
&lt;li&gt;Customer contracts
&lt;/li&gt;
&lt;li&gt;Product manuals
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Store both the &lt;strong&gt;original files&lt;/strong&gt; in S3 and the &lt;strong&gt;embeddings&lt;/strong&gt; in S3 Vectors.&lt;br&gt;&lt;br&gt;
Search by &lt;strong&gt;meaning&lt;/strong&gt;, not just exact keyword match.&lt;/p&gt;




&lt;h3&gt;
  
  
  2️⃣ RAG for Enterprise Assistants
&lt;/h3&gt;

&lt;p&gt;LLM-powered assistants need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Relevant context
&lt;/li&gt;
&lt;li&gt;Low latency retrieval
&lt;/li&gt;
&lt;li&gt;Cost-effective storage
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;S3 Vectors can power the retrieval layer for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Support chatbots 💬
&lt;/li&gt;
&lt;li&gt;Internal Q&amp;amp;A over Confluence / SharePoint exports
&lt;/li&gt;
&lt;li&gt;Developer assistants over code snippets &amp;amp; docs
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With &lt;strong&gt;Bedrock Knowledge Bases&lt;/strong&gt; and other integrations, you can plug S3 Vectors into a managed RAG pipeline.&lt;/p&gt;




&lt;h3&gt;
  
  
  3️⃣ Recommendations &amp;amp; Similarity
&lt;/h3&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Show me products similar to this one."
&lt;/li&gt;
&lt;li&gt;"Find images visually similar to this photo."
&lt;/li&gt;
&lt;li&gt;"Recommend articles similar to what I just read."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Store behavior or content embeddings in S3 Vectors and query for &lt;em&gt;nearest neighbors&lt;/em&gt; based on vector distance.&lt;/p&gt;




&lt;h3&gt;
  
  
  4️⃣ Multi-Tenant AI Platforms
&lt;/h3&gt;

&lt;p&gt;If you're building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A SaaS AI product on AWS
&lt;/li&gt;
&lt;li&gt;A multi-tenant knowledge platform
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use metadata like &lt;code&gt;tenant_id&lt;/code&gt;, &lt;code&gt;project&lt;/code&gt;, &lt;code&gt;visibility.&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Filter queries per customer/user
&lt;/li&gt;
&lt;li&gt;Keep it all in one storage + vector layer&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  S3 Vectors vs Dedicated Vector Databases
&lt;/h2&gt;

&lt;p&gt;So does this kill vector databases?&lt;/p&gt;

&lt;p&gt;Not necessarily.&lt;/p&gt;

&lt;p&gt;It changes the question from:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Which vector DB should I use?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Do I &lt;em&gt;actually&lt;/em&gt; need a separate vector DB for this workload?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  ✅ When S3 Vectors Are a Great Fit
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Your primary data is already in S3
&lt;/li&gt;
&lt;li&gt;You need &lt;strong&gt;durable&lt;/strong&gt;, &lt;strong&gt;cost-optimized&lt;/strong&gt;, &lt;strong&gt;large-scale&lt;/strong&gt; vector storage
&lt;/li&gt;
&lt;li&gt;You don't want to operate another distributed system
&lt;/li&gt;
&lt;li&gt;You're building RAG, semantic search, and recommendations on top of existing S3 data&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When a Separate Vector DB Might Still Make Sense
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ultra-low-latency, very high-QPS workloads with complex query patterns
&lt;/li&gt;
&lt;li&gt;Tight coupling with existing non-AWS ecosystems
&lt;/li&gt;
&lt;li&gt;Highly customized index tuning or retrieval logic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a &lt;strong&gt;huge percentage of GenAI and AI-search workloads on AWS&lt;/strong&gt;, S3 Vectors will be the &lt;strong&gt;default starting point&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ Getting Started (Builder Mindset)
&lt;/h2&gt;

&lt;p&gt;If I were starting a &lt;strong&gt;PoC this week&lt;/strong&gt;, here's how I'd approach it:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Pick one narrow use case&lt;/strong&gt;&lt;br&gt;
   Example:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Semantic search over our User Group session notes and slide decks."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;2. Create a vector bucket + index&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
   Follow the "Getting started with S3 Vectors" section in the AWS docs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Generate embeddings with Bedrock or another model&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start with a Bedrock embedding model (for example, Amazon Titan)
&lt;/li&gt;
&lt;li&gt;One embedding per document, page, or chunk&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Write embeddings to S3 Vectors&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
   Include metadata like &lt;code&gt;title&lt;/code&gt;, &lt;code&gt;speaker&lt;/code&gt;, &lt;code&gt;date&lt;/code&gt;, &lt;code&gt;tags&lt;/code&gt;, &lt;code&gt;url&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Build a tiny API or CLI&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Input: natural language query
&lt;/li&gt;
&lt;li&gt;Output: top-K sessions/docs that match
&lt;/li&gt;
&lt;li&gt;Return relevant links/summaries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📌 In my next post, I’ll walk you through a hands-on PoC using Amazon S3 Vector Engine — so you can see this in action.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧭 Architect's Lens: Designing for the Next 12–18 Months
&lt;/h2&gt;

&lt;p&gt;As AI workloads mature, we'll care more about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unified data governance&lt;/strong&gt; (one place to manage access)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost curves&lt;/strong&gt;, not just PoCs
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operational simplicity&lt;/strong&gt; – fewer systems, fewer outages
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;S3 Vectors aligns nicely with all three:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uses &lt;strong&gt;IAM + S3 policies&lt;/strong&gt; for control 🔐
&lt;/li&gt;
&lt;li&gt;Priced like &lt;strong&gt;storage + queries&lt;/strong&gt;, not another cluster
&lt;/li&gt;
&lt;li&gt;Integrates with &lt;strong&gt;Bedrock, OpenSearch, analytics tools&lt;/strong&gt;, and more
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As builders, our job is not to collect more tools.&lt;br&gt;&lt;br&gt;
It's to design systems that are &lt;strong&gt;boring to operate and exciting to use&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;S3 Vectors is one of those quiet features that moves us in that direction.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 TL;DR – In Simple Words
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Amazon S3 Vectors lets you store AI embeddings in S3 and search them by meaning, without needing a separate vector database. It makes semantic search easier, scalable, and integrated with the AWS ecosystem you already use.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🔗 References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/s3/features/vectors/" rel="noopener noreferrer"&gt;Amazon S3 Vectors – Feature overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-vectors.html" rel="noopener noreferrer"&gt;Working with S3 Vectors and vector buckets – User guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-vectors-getting-started.html" rel="noopener noreferrer"&gt;Getting started with S3 Vectors&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;What are you planning to build with S3 Vectors? Drop your thoughts in the comments!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Happy Building!&lt;/em&gt; 🚀&lt;/p&gt;




&lt;h3&gt;
  
  
  About the Author
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh20gtafyrilx45b4tiag.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh20gtafyrilx45b4tiag.png" alt=" " width="800" height="199"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sujitha Rasamsetty&lt;/strong&gt; is an &lt;strong&gt;AWS Community Builder in AI Engineering&lt;/strong&gt; and a &lt;strong&gt;Data Scientist at Relanto&lt;/strong&gt;, with a strong passion for emerging technologies in &lt;strong&gt;cloud computing and artificial intelligence&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In her role, she works hands-on with &lt;strong&gt;data, cloud architectures, and AI-driven solutions&lt;/strong&gt;, focusing on building scalable, secure, and production-ready systems. Her interests span across &lt;strong&gt;machine learning, generative AI, cloud-native architectures, and data platforms&lt;/strong&gt;, where she enjoys bridging the gap between advanced analytics and real-world cloud implementations.&lt;/p&gt;

&lt;p&gt;Sujitha actively shares her learning and experiences with the community through blogs, discussions, and technical knowledge sharing, with a strong belief in &lt;em&gt;learning in public&lt;/em&gt; and growing together as a community.&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Let’s Connect:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
For updates, discussions, and questions, feel free to connect with her on LinkedIn:&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://www.linkedin.com/in/sujitharasamsetty/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/sujitharasamsetty/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awscommunity</category>
      <category>ai</category>
      <category>vectordatabase</category>
    </item>
    <item>
      <title>🗣️ Hey Dev. to fam!

This is a hands-on guide for building a serverless logging pipeline for Amazon Bedrock — covering everything from invocation to insights using Lambda, S3, CloudWatch, and Athena. If you’ve been wondering how to monitor, store, and an</title>
      <dc:creator>Sujitha Rasamsetty</dc:creator>
      <pubDate>Fri, 09 Jan 2026 15:56:42 +0000</pubDate>
      <link>https://dev.to/sujitha_rasamsetty/hey-dev-to-fam-this-is-a-hands-on-guide-for-building-a-serverless-logging-pipeline-for-59he</link>
      <guid>https://dev.to/sujitha_rasamsetty/hey-dev-to-fam-this-is-a-hands-on-guide-for-building-a-serverless-logging-pipeline-for-59he</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/sujitha_rasamsetty" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2936637%2F08e77f1a-da8c-4f5c-b2f5-f22f9f16687e.png" alt="sujitha_rasamsetty"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/sujitha_rasamsetty/serverless-logging-for-amazon-bedrock-from-invocation-to-insight-12pe" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Serverless Logging for Amazon Bedrock: From Invocation to Insight&lt;/h2&gt;
      &lt;h3&gt;Sujitha Rasamsetty ・ Jan 2&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#aws&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#awscommunity&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#awsbedrock&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#ai&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>aws</category>
      <category>awscommunity</category>
      <category>awsbedrock</category>
      <category>ai</category>
    </item>
    <item>
      <title>Serverless Logging for Amazon Bedrock: From Invocation to Insight</title>
      <dc:creator>Sujitha Rasamsetty</dc:creator>
      <pubDate>Fri, 02 Jan 2026 14:53:00 +0000</pubDate>
      <link>https://dev.to/sujitha_rasamsetty/serverless-logging-for-amazon-bedrock-from-invocation-to-insight-12pe</link>
      <guid>https://dev.to/sujitha_rasamsetty/serverless-logging-for-amazon-bedrock-from-invocation-to-insight-12pe</guid>
      <description>&lt;p&gt;&lt;em&gt;A hands-on, step-by-step guide to setting up model response logging, error alerts, and actionable insights using AWS Lambda, Amazon Bedrock, S3, CloudWatch, and Athena.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Why This Matters
&lt;/h2&gt;

&lt;p&gt;As Generative AI adoption grows within enterprises, using services like Amazon Bedrock becomes a preferred approach for building scalable LLM-powered applications. However, as models get integrated into business-critical flows, &lt;strong&gt;tracking what is invoked, how it's performing, and where it fails&lt;/strong&gt; becomes vital.&lt;/p&gt;

&lt;p&gt;This PoC demonstrates a &lt;strong&gt;serverless, zero-infrastructure approach&lt;/strong&gt; to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log model prompts and responses&lt;/li&gt;
&lt;li&gt;Catch and alert on errors in real-time&lt;/li&gt;
&lt;li&gt;Store and analyze logs with Athena&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;For stakeholders&lt;/strong&gt;, it offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Engineering&lt;/strong&gt;: Track model behavior over time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Product&lt;/strong&gt;: See usage patterns or prompt gaps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance&lt;/strong&gt;: Maintain traceability of model interactions.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why We Built This PoC
&lt;/h2&gt;

&lt;p&gt;As enterprises integrate &lt;strong&gt;generative AI&lt;/strong&gt; into realworld applications from chatbots to knowledge assistants ensuring &lt;strong&gt;operational visibility&lt;/strong&gt; becomes critical.&lt;/p&gt;

&lt;p&gt;However, when using &lt;strong&gt;Amazon Bedrock&lt;/strong&gt;, developers typically focus only on model integration. What’s often missed is &lt;strong&gt;observability&lt;/strong&gt; — knowing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What prompts are being sent?&lt;/li&gt;
&lt;li&gt;What responses are returned?&lt;/li&gt;
&lt;li&gt;What errors occur and when?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This PoC answers that gap.&lt;/p&gt;




&lt;h3&gt;
  
  
  Purpose
&lt;/h3&gt;

&lt;p&gt;We built this PoC to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Track&lt;/strong&gt; model usage (prompts, responses)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor&lt;/strong&gt; for failures (e.g., access issues, quota breaches)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alert&lt;/strong&gt; stakeholders in real-time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Store&lt;/strong&gt; structured logs for audit/compliance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enable&lt;/strong&gt; analytics using SQL (Athena),without extra infrastructure&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  How This Helps the IT Industry
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Architects / DevOps&lt;/strong&gt;: Build fault-tolerant LLM apps with integrated monitoring and logging pipelines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Product Teams&lt;/strong&gt;: Analyze prompts, user behavior, or failure trends to improve UX.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security &amp;amp; Compliance&lt;/strong&gt;: Ensure that model usage is tracked and auditable,a growing requirement in regulated industries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Startups&lt;/strong&gt;: Use this serverless pattern to scale quickly without managing infrastructure.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Architecture Overview
&lt;/h2&gt;

&lt;p&gt;Here’s what we’re building:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2d39i1eja3urcbc04bjq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2d39i1eja3urcbc04bjq.png" alt=" " width="718" height="460"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Architecture Overview: Serverless Logging for Amazon Bedrock
&lt;/h2&gt;

&lt;p&gt;This architecture illustrates a &lt;strong&gt;serverless logging and monitoring pipeline&lt;/strong&gt; for Amazon Bedrock model invocations. It is designed to capture model responses, log interactions, and notify stakeholders of any issues, all without maintaining any infrastructure.&lt;/p&gt;

&lt;h3&gt;
  
  
  Here's what happens step-by-step:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;End User&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Initiates a request (e.g., a prompt) that is handled by a serverless backend.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AWS Lambda&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A Lambda function acts as the compute layer, invoking the &lt;strong&gt;Amazon Bedrock&lt;/strong&gt; model (e.g., Claude, Titan, or any supported foundation model) and capturing the response.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Amazon Bedrock&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Processes the request and returns the generated response back to Lambda.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;S3 (Audit Logs)&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The prompt and response pair (along with a timestamp) is stored in Amazon S3 in structured JSON format, organized into &lt;code&gt;success&lt;/code&gt; and &lt;code&gt;error&lt;/code&gt; folders for easy retrieval and analysis.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Athena&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Athena queries the audit logs directly from S3 to extract insights, track usage, or debug issues using SQL, without needing to move data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CloudWatch&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Monitors the Lambda function’s execution and captures any error logs or anomalies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SNS (Simple Notification Service)&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
When an error is detected (e.g., failed Bedrock call or S3 write), CloudWatch triggers an alarm that notifies stakeholders via an SNS topic (email/SMS/Slack).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Set Up IAM Roles and Policies
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Lambda Execution Role
&lt;/h3&gt;

&lt;p&gt;Create a role with the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;AmazonBedrockFullAccess&lt;/code&gt; (or scoped-down invoke permissions)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;AmazonS3FullAccess&lt;/code&gt; (or fine-grained access to specific bucket/prefix)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CloudWatchLogsFullAccess&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnmijfdap1s5yq93xmx88.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnmijfdap1s5yq93xmx88.png" alt=" " width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Attach the role to the Lambda function.&lt;/p&gt;

&lt;h3&gt;
  
  
  S3 Bucket Policy
&lt;/h3&gt;

&lt;p&gt;Allow the Lambda role to &lt;code&gt;PutObject&lt;/code&gt; to the audit log bucket:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"s3:PutObject"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:s3:::bedrock-model-audit-logs-sujitha/bedrock-backups/*"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 2: Create Lambda Function
&lt;/h2&gt;

&lt;p&gt;Use Python for the function.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Receives prompt via event&lt;/li&gt;
&lt;li&gt;Invokes Bedrock model (Titan / Claude / others)&lt;/li&gt;
&lt;li&gt;Stores response in S3 (success or error folder)&lt;/li&gt;
&lt;li&gt;Logs to CloudWatch&lt;/li&gt;
&lt;li&gt;Sends SNS alert on failure
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;uuid&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;

&lt;span class="n"&gt;bedrock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bedrock-runtime&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;s3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;s3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;S3_BUCKET&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bedrock-model-audit-logs-sujitha&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;S3_PREFIX&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bedrock-backups&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;lambda_handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Default prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;timestamp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;isoformat&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;interaction_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;uuid4&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# Bedrock inference
&lt;/span&gt;        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bedrock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invoke_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;modelId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amazon.titan-text-express-v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;inputText&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;textGenerationConfig&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxTokenCount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;temperature&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;topP&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.9&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;}),&lt;/span&gt;
            &lt;span class="n"&gt;contentType&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;accept&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;results&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[{}])[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;outputText&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# Save success log
&lt;/span&gt;        &lt;span class="n"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put_object&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;Bucket&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;S3_BUCKET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;Key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;S3_PREFIX&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/success/interaction-&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;interaction_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;Body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;timestamp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;response&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt;
            &lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;statusCode&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;response&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt;
            &lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;error_message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# Save error log
&lt;/span&gt;        &lt;span class="n"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put_object&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;Bucket&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;S3_BUCKET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;Key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;S3_PREFIX&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/error/interaction-&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;interaction_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;Body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;timestamp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;error_message&lt;/span&gt;
            &lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;statusCode&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;error_message&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 3: Create S3 Folder Structure
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4vygc4qi7ycoqwoc4kkv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4vygc4qi7ycoqwoc4kkv.png" alt=" " width="800" height="263"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  CloudWatch Metrics &amp;amp; Error Alerts
&lt;/h2&gt;

&lt;p&gt;To ensure production-grade reliability, we monitor our Lambda function using &lt;strong&gt;Amazon CloudWatch&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9p8r47uwfsp738xkklno.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9p8r47uwfsp738xkklno.png" alt=" " width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flckb2p7zjzttg3nj3i47.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flckb2p7zjzttg3nj3i47.png" alt=" " width="800" height="517"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Custom Metric: &lt;code&gt;Errors&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;We use the built-in Lambda metric:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Namespace&lt;/strong&gt;: &lt;code&gt;AWS/Lambda&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metric name&lt;/strong&gt;: &lt;code&gt;Errors&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dimension&lt;/strong&gt;: &lt;code&gt;FunctionName = bedrock-model-backup&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Period&lt;/strong&gt;: &lt;code&gt;10 seconds&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Statistic&lt;/strong&gt;: &lt;code&gt;Average&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This metric tracks how often the Lambda function fails — for example, when the Bedrock invocation fails or when S3 writes are denied.&lt;/p&gt;




&lt;h3&gt;
  
  
  🚨 Alarm Setup
&lt;/h3&gt;

&lt;p&gt;A CloudWatch alarm is created with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Threshold&lt;/strong&gt;: ≥ 1 error&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evaluation Period&lt;/strong&gt;: 1 datapoint (10 seconds)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TreatMissingData&lt;/strong&gt;: &lt;code&gt;missing&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alarm Action&lt;/strong&gt;: Triggers an &lt;strong&gt;SNS Topic&lt;/strong&gt; to notify stakeholders&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This ensures real-time notifications when even a &lt;strong&gt;single error&lt;/strong&gt; occurs helpful during early testing or production monitoring.&lt;/p&gt;

&lt;p&gt;You’ll receive emails like this from &lt;strong&gt;Amazon SNS&lt;/strong&gt;, alerting you to issues immediately:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;ALARM: "bedrock-error-alarm"&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Threshold Crossed: 1 out of the last 1 datapoints was ≥ 1.0&lt;br&gt;&lt;br&gt;
FunctionName = &lt;code&gt;bedrock-model-backup&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjigxyprgh9znq4p4d8ix.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjigxyprgh9znq4p4d8ix.png" alt=" " width="800" height="517"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvullv3l1re010f0rpwy4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvullv3l1re010f0rpwy4.png" alt=" " width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Why This Helps
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Engineering teams&lt;/strong&gt; get &lt;strong&gt;real-time visibility&lt;/strong&gt; into model failures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Product managers&lt;/strong&gt; can track stability over time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stakeholders&lt;/strong&gt; are kept in the loop via email/SMS.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 4: Set Up SNS Alert
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Create an SNS topic: &lt;code&gt;bedrock-model-errors.&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Subscribe to your email to the topic.&lt;/li&gt;
&lt;li&gt;Use the topic ARN in Lambda.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9j47318zpze0gxdjz4nc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9j47318zpze0gxdjz4nc.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: Set Up Athena for Log Querying
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Create Database
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;EXISTS&lt;/span&gt; &lt;span class="n"&gt;bedrock_audit_logs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Create Table (Success Logs)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;EXTERNAL&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;EXISTS&lt;/span&gt; &lt;span class="n"&gt;bedrock_audit_logs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;success_logs&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nv"&gt;`timestamp`&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nv"&gt;`prompt`&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nv"&gt;`response`&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;ROW&lt;/span&gt; &lt;span class="n"&gt;FORMAT&lt;/span&gt; &lt;span class="n"&gt;SERDE&lt;/span&gt; &lt;span class="s1"&gt;'org.openx.data.jsonserde.JsonSerDe'&lt;/span&gt;
&lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="n"&gt;SERDEPROPERTIES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="s1"&gt;'ignore.malformed.json'&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'true'&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;LOCATION&lt;/span&gt; &lt;span class="s1"&gt;'s3://bedrock-model-audit-logs-sujitha/bedrock-backups/success/.'&lt;/span&gt;
&lt;span class="n"&gt;TBLPROPERTIES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'has_encrypted_data'&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'false'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Repeat similarly for &lt;code&gt;error_logs&lt;/code&gt; table with an &lt;code&gt;error&lt;/code&gt; column.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Run Queries
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;timestamp&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;bedrock_audit_logs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;success_logs&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="nb"&gt;timestamp&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn44w5p9h4sae7873f2g0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn44w5p9h4sae7873f2g0.png" alt=" " width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ka3ny6mdx14fnzfi6fh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ka3ny6mdx14fnzfi6fh.png" alt=" " width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion: Wrapping It All Together
&lt;/h2&gt;

&lt;p&gt;In a world rapidly adopting Generative AI, &lt;strong&gt;observability is not optional&lt;/strong&gt; especially when models power customer-facing or compliance-sensitive applications.&lt;/p&gt;

&lt;p&gt;This Proof of Concept (PoC) offers a &lt;strong&gt;fully serverless, production-grade pattern&lt;/strong&gt; to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log every Amazon Bedrock prompt and response
&lt;/li&gt;
&lt;li&gt;Detect and alert on errors in real-time
&lt;/li&gt;
&lt;li&gt;Store structured audit logs for compliance and monitoring
&lt;/li&gt;
&lt;li&gt;Run post-hoc analysis using SQL, without managing infrastructure
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By combining &lt;strong&gt;Lambda&lt;/strong&gt;, &lt;strong&gt;Amazon Bedrock&lt;/strong&gt;, &lt;strong&gt;S3&lt;/strong&gt;, &lt;strong&gt;CloudWatch&lt;/strong&gt;, &lt;strong&gt;SNS&lt;/strong&gt;, and &lt;strong&gt;Athena&lt;/strong&gt;, we’ve created a scalable blueprint that any team can adopt and extend.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Whether you're building internal tools or external-facing AI apps, this architecture ensures visibility, accountability, and agility.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;If you found this helpful, don’t forget to ❤️ and follow for more &lt;strong&gt;serverless + GenAI&lt;/strong&gt; guides!&lt;br&gt;&lt;br&gt;
Questions or suggestions? Drop them in the comments 👇  &lt;/p&gt;




&lt;h3&gt;
  
  
  About the Author
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh20gtafyrilx45b4tiag.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh20gtafyrilx45b4tiag.png" alt=" " width="800" height="199"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sujitha Rasamsetty&lt;/strong&gt; is an &lt;strong&gt;AWS Community Builder in AI Engineering&lt;/strong&gt; and a &lt;strong&gt;Data Scientist at Relanto&lt;/strong&gt;, with a strong passion for emerging technologies in &lt;strong&gt;cloud computing and artificial intelligence&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In her role, she works hands on with &lt;strong&gt;data, cloud architectures, and AI-driven solutions&lt;/strong&gt;, focusing on building scalable, secure, and production-ready systems. Her interests span across &lt;strong&gt;machine learning, generative AI, cloud-native architectures, and data platforms&lt;/strong&gt;, where she enjoys bridging the gap between advanced analytics and real-world cloud implementations.&lt;/p&gt;

&lt;p&gt;Sujitha actively shares her learning and experiences with the community through blogs, discussions, and technical knowledge sharing, with a strong belief in &lt;em&gt;learning in public&lt;/em&gt; and growing together as a community.&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Let’s Connect:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
For updates, discussions, and questions, feel free to connect with her on LinkedIn:&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://www.linkedin.com/in/sujitharasamsetty/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/sujitharasamsetty/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awscommunity</category>
      <category>awsbedrock</category>
      <category>ai</category>
    </item>
    <item>
      <title>How to Become an AWS Community Builder (What Nobody Tells You)</title>
      <dc:creator>Sujitha Rasamsetty</dc:creator>
      <pubDate>Fri, 02 Jan 2026 06:30:18 +0000</pubDate>
      <link>https://dev.to/sujitha_rasamsetty/how-to-become-an-aws-community-builder-what-nobody-tells-youpublished-true-449c</link>
      <guid>https://dev.to/sujitha_rasamsetty/how-to-become-an-aws-community-builder-what-nobody-tells-youpublished-true-449c</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frmd90ite748n0vn6qwk3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frmd90ite748n0vn6qwk3.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👋 Hey there, tech enthusiasts!&lt;/p&gt;

&lt;p&gt;I’m writing this not as a recruiter, not as an AWS employee, and not as someone who “figured it all out” early — but as someone who learned the hard way what community actually means in tech.&lt;/p&gt;

&lt;p&gt;This article is for people who:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are curious about the AWS Community Builders Program
&lt;/li&gt;
&lt;li&gt;Feel they might be “too early” or “not ready.”
&lt;/li&gt;
&lt;li&gt;Are tired of shallow posts that only talk about benefits and swag
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not a hype piece.&lt;br&gt;&lt;br&gt;
This is a &lt;strong&gt;reality-based guide&lt;/strong&gt; built from observation, participation, mistakes, and mentoring others.&lt;/p&gt;




&lt;h2&gt;
  
  
  First, Let’s Reset Expectations
&lt;/h2&gt;

&lt;p&gt;Most content about the AWS Community Builder program follows the same template:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What the program is
&lt;/li&gt;
&lt;li&gt;What benefits you get
&lt;/li&gt;
&lt;li&gt;How to apply
&lt;/li&gt;
&lt;li&gt;What swag looks like
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That information is easy to find.&lt;/p&gt;

&lt;p&gt;What’s harder to find — and more important — is this truth:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;You don’t become an AWS Community Builder by applying.&lt;br&gt;&lt;br&gt;
You apply because you already behave like one.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The program doesn’t &lt;em&gt;create&lt;/em&gt; community builders.&lt;br&gt;&lt;br&gt;
It &lt;strong&gt;recognizes patterns that already exist&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Quick Note on Applications
&lt;/h2&gt;

&lt;p&gt;The AWS Community Builder applications usually:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open &lt;strong&gt;once a year&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Typically around &lt;strong&gt;early January&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Stay open for &lt;strong&gt;~2 weeks&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But timing matters far less than &lt;strong&gt;what you’ve been doing in the months before&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⏳ Join the Official Waitlist
&lt;/h3&gt;

&lt;p&gt;If applications are not yet open, AWS provides an official waitlist so you don’t miss the next cycle.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;AWS Community Builders – Waitlist &amp;amp; Program Page:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://builder.aws.com/community/community-builders" rel="noopener noreferrer"&gt;https://builder.aws.com/community/community-builders&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’re serious about applying, joining the waitlist is the &lt;strong&gt;first practical step&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Biggest Myth About AWS Community Builders
&lt;/h2&gt;

&lt;p&gt;Let’s kill this myth immediately:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“AWS Community Builders are experts with tons of certifications and followers.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is &lt;strong&gt;not&lt;/strong&gt; what AWS is selecting.&lt;/p&gt;

&lt;p&gt;AWS is selecting &lt;strong&gt;signals&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The signals that matter:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Are you learning continuously?&lt;/li&gt;
&lt;li&gt;Are you sharing consistently?&lt;/li&gt;
&lt;li&gt;Are you helping others without being asked?&lt;/li&gt;
&lt;li&gt;Do you show up even when no one is watching?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Skill level helps.&lt;br&gt;&lt;br&gt;
Visibility helps.&lt;br&gt;&lt;br&gt;
But neither is the deciding factor.&lt;/p&gt;




&lt;h2&gt;
  
  
  What AWS Is &lt;em&gt;Actually&lt;/em&gt; Looking For (Without Saying It)
&lt;/h2&gt;

&lt;p&gt;After observing multiple cycles — people getting selected, rejected, reapplying, and eventually succeeding — a few patterns become very clear.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Learning in Public Beats Private Excellence
&lt;/h3&gt;

&lt;p&gt;AWS strongly favors people who &lt;strong&gt;document their learning openly&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This does &lt;em&gt;not&lt;/em&gt; mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writing perfect tutorials&lt;/li&gt;
&lt;li&gt;Explaining everything, like documentation&lt;/li&gt;
&lt;li&gt;Acting like an expert&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It &lt;em&gt;does&lt;/em&gt; mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writing about what confused you&lt;/li&gt;
&lt;li&gt;Sharing what failed before it worked&lt;/li&gt;
&lt;li&gt;Explaining concepts in your own words&lt;/li&gt;
&lt;li&gt;Turning notes into blogs, posts, or videos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Learning in public shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Curiosity
&lt;/li&gt;
&lt;li&gt;Humility
&lt;/li&gt;
&lt;li&gt;Long-term intent
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That alignment matters far more than polish.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Consistency Is Louder Than Talent
&lt;/h3&gt;

&lt;p&gt;One excellent article written a year ago is weaker than:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Two or three honest contributions spread across months
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The program intentionally looks at &lt;strong&gt;recent activity&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Why?&lt;br&gt;&lt;br&gt;
Because they are not evaluating your past achievements —&lt;br&gt;&lt;br&gt;
they’re evaluating your &lt;strong&gt;current behavior&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;AWS is not looking for a burst of effort.&lt;br&gt;&lt;br&gt;
They’re looking for &lt;strong&gt;momentum&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Your Voice Matters More Than Your Topic
&lt;/h3&gt;

&lt;p&gt;If your content:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sounds like copied documentation
&lt;/li&gt;
&lt;li&gt;Feels like marketing material
&lt;/li&gt;
&lt;li&gt;Reads like an LLM-generated summary
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…it silently weakens your application.&lt;/p&gt;

&lt;p&gt;AWS wants &lt;em&gt;your thinking&lt;/em&gt;, not recycled explanations.&lt;/p&gt;

&lt;p&gt;If it doesn’t sound like you — rewrite it.&lt;/p&gt;

&lt;p&gt;Clarity &amp;gt; complexity&lt;br&gt;&lt;br&gt;
Honesty &amp;gt; perfection&lt;br&gt;&lt;br&gt;
Voice &amp;gt; volume  &lt;/p&gt;




&lt;h2&gt;
  
  
  “What Should I Even Contribute?”
&lt;/h2&gt;

&lt;p&gt;Here’s the simplest answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Contribute what you are already learning, building, fixing, or explaining.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Strong contribution examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What went wrong when setting up your first VPC
&lt;/li&gt;
&lt;li&gt;IAM mistakes you didn’t expect
&lt;/li&gt;
&lt;li&gt;Cost surprises from your first AWS bill
&lt;/li&gt;
&lt;li&gt;Explaining a service the way you wish someone had explained it to you
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Content rooted in &lt;strong&gt;real experience&lt;/strong&gt; always wins.&lt;/p&gt;

&lt;h3&gt;
  
  
  Formats That Work Well
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Blog posts (dev.to, Medium, personal site)&lt;/li&gt;
&lt;li&gt;GitHub repos (PoCs, IaC, demos)&lt;/li&gt;
&lt;li&gt;Short videos or walkthroughs&lt;/li&gt;
&lt;li&gt;Community answers with explanations (not just fixes)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Language is &lt;strong&gt;not a barrier&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Local-language content is welcome and encouraged.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Hidden Lifecycle of a Community Builder
&lt;/h2&gt;

&lt;p&gt;Most successful Community Builders move through these stages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Learning&lt;/strong&gt; – courses, docs, labs
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Narrating&lt;/strong&gt; – blogs, notes, walkthroughs
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contributing&lt;/strong&gt; – helping others consistently
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connecting&lt;/strong&gt; – mentoring, speaking, enabling
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The program does not force this journey.&lt;br&gt;&lt;br&gt;
It &lt;strong&gt;recognizes people who are already on it&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Application Is Not a Test — It’s a Story
&lt;/h2&gt;

&lt;p&gt;The application is not asking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How impressive are you?&lt;/li&gt;
&lt;li&gt;How many followers do you have?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s asking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can you explain your journey clearly?&lt;/li&gt;
&lt;li&gt;Do your contributions back your words?&lt;/li&gt;
&lt;li&gt;Will you continue contributing after selection?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exaggeration hurts more than honesty.&lt;/p&gt;

&lt;p&gt;Rejection is not failure.&lt;br&gt;&lt;br&gt;
It’s timing and alignment.&lt;/p&gt;




&lt;h2&gt;
  
  
  About Benefits (Let’s Be Real)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn907ptjx15zhct7pw6kw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn907ptjx15zhct7pw6kw.png" alt=" " width="800" height="809"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yes, there are credits, learning resources, and swag.&lt;/p&gt;

&lt;p&gt;But the real impact is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Confidence to share publicly
&lt;/li&gt;
&lt;li&gt;Access to global peers
&lt;/li&gt;
&lt;li&gt;A sense of belonging
&lt;/li&gt;
&lt;li&gt;A platform that amplifies learning, not ego
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  If I Were Starting Today
&lt;/h2&gt;

&lt;p&gt;Here’s what I would do differently if I started today:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pick &lt;strong&gt;one AWS area&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Publish &lt;strong&gt;consistently&lt;/strong&gt;, not perfectly&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;one platform&lt;/strong&gt; and commit&lt;/li&gt;
&lt;li&gt;Help beginners openly&lt;/li&gt;
&lt;li&gt;Treat rejection as part of the process&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stop asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“How do I get selected?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Start asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“How do I become useful?”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Selection always follows usefulness.&lt;/p&gt;




&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;You don’t become an AWS Community Builder in January when applications open.&lt;/p&gt;

&lt;p&gt;You become one quietly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Month by month
&lt;/li&gt;
&lt;li&gt;Post by post
&lt;/li&gt;
&lt;li&gt;Help by help
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application simply confirms what you’ve already built.&lt;/p&gt;




&lt;h3&gt;
  
  
  📌 Wrapping Up
&lt;/h3&gt;

&lt;p&gt;If this helped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❤️ Like it&lt;/li&gt;
&lt;li&gt;🔁 Share it with someone applying&lt;/li&gt;
&lt;li&gt;💬 Drop your thoughts or questions in the comments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Community growth always starts with conversation.&lt;/p&gt;

&lt;p&gt;Happy learning 🚀&lt;/p&gt;




&lt;h3&gt;
  
  
  About the Author
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh20gtafyrilx45b4tiag.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh20gtafyrilx45b4tiag.png" alt=" " width="800" height="199"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sujitha Rasamsetty&lt;/strong&gt; is an &lt;strong&gt;AWS Community Builder in AI Engineering&lt;/strong&gt; and a &lt;strong&gt;Data Scientist at Relanto&lt;/strong&gt;, with a strong passion for emerging technologies in &lt;strong&gt;cloud computing and artificial intelligence&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In her role, she works hands-on with &lt;strong&gt;data, cloud architectures, and AI-driven solutions&lt;/strong&gt;, focusing on building scalable, secure, and production-ready systems. Her interests span across &lt;strong&gt;machine learning, generative AI, cloud-native architectures, and data platforms&lt;/strong&gt;, where she enjoys bridging the gap between advanced analytics and real-world cloud implementations.&lt;/p&gt;

&lt;p&gt;Sujitha actively shares her learning and experiences with the community through blogs, discussions, and technical knowledge sharing, with a strong belief in &lt;em&gt;learning in public&lt;/em&gt; and growing together as a community.&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Let’s Connect:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
For updates, discussions, and questions, feel free to connect with her on LinkedIn:&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://www.linkedin.com/in/sujitharasamsetty/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/sujitharasamsetty/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awscommunity</category>
      <category>beginners</category>
      <category>ai</category>
    </item>
    <item>
      <title>AWS Clean Rooms: End-to-End Analytics Collaboration Across Two AWS Accounts</title>
      <dc:creator>Sujitha Rasamsetty</dc:creator>
      <pubDate>Mon, 22 Dec 2025 09:10:14 +0000</pubDate>
      <link>https://dev.to/sujitha_rasamsetty/aws-clean-rooms-end-to-end-analytics-collaboration-across-two-aws-accounts-445j</link>
      <guid>https://dev.to/sujitha_rasamsetty/aws-clean-rooms-end-to-end-analytics-collaboration-across-two-aws-accounts-445j</guid>
      <description>&lt;h2&gt;
  
  
  Why AWS Clean Rooms, and why this PoC?
&lt;/h2&gt;

&lt;p&gt;Most cross-company data collaborations fail at the same point: data sharing.&lt;/p&gt;

&lt;p&gt;Even when both sides want the same outcome (insights), sharing raw data introduces compliance, security, and trust barriers. AWS Clean Rooms addresses that gap by letting multiple parties run &lt;strong&gt;approved analytics&lt;/strong&gt; across their datasets while preventing raw data exposure.&lt;/p&gt;

&lt;p&gt;In this post, I’ll show a simple, reproducible PoC where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Two AWS accounts participate in a Clean Rooms collaboration&lt;/li&gt;
&lt;li&gt;Each account contributes a small S3 dataset&lt;/li&gt;
&lt;li&gt;Query access is governed by &lt;strong&gt;analysis rules&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The analyst gets &lt;strong&gt;aggregated results only&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is intentionally a small PoC, designed to be easy to understand and easy to reproduce exactly the kind of “teachable build” that works well for community learning.&lt;/p&gt;




&lt;h2&gt;
  
  
  What we are building
&lt;/h2&gt;

&lt;p&gt;The simplest useful story is: &lt;strong&gt;count customers by region&lt;/strong&gt;, without letting anyone download or view raw rows.&lt;/p&gt;

&lt;h3&gt;
  
  
  The roles in this PoC:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Account A&lt;/strong&gt;: “Data owner” — hosts a dataset in S3 and allows limited analysis through rules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Account B&lt;/strong&gt;: “Second participant” — joins the collaboration and contributes its dataset (or can be an analyst member depending on your setup).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Clean Rooms&lt;/strong&gt;: enforces collaboration boundaries and query-level privacy controls.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even if the real world is more complex, this PoC covers the core fundamentals.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Two AWS accounts (Account A and Account B)&lt;/li&gt;
&lt;li&gt;Same region in both accounts (I used &lt;code&gt;us-east-1&lt;/code&gt; for simplicity)&lt;/li&gt;
&lt;li&gt;S3 access in both accounts&lt;/li&gt;
&lt;li&gt;AWS Clean Rooms access in both accounts&lt;/li&gt;
&lt;li&gt;Athena will be used as the query engine (Clean Rooms integrates with Athena)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  IAM quick checklist (minimum for a PoC)
&lt;/h3&gt;

&lt;p&gt;In &lt;strong&gt;both&lt;/strong&gt; accounts, ensure the user you’re logged in with has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AWSCleanRoomsFullAccess&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;S3 permissions (at least to your PoC buckets)&lt;/li&gt;
&lt;li&gt;Athena + Glue permissions (for catalog + querying)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a PoC, using AWS managed policies is acceptable and helps you move quickly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frefrkzvnf56r1ev1c8tl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frefrkzvnf56r1ev1c8tl.png" alt=" " width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 1: Create the datasets (one per account)
&lt;/h3&gt;

&lt;p&gt;Create two small CSV files.&lt;/p&gt;

&lt;h3&gt;
  
  
  Account A dataset (example: &lt;code&gt;company_a_customers.csv&lt;/code&gt;)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;customer_id,region
A001,India
A002,India
A003,USA
A004,UK
A005,USA

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Account B dataset (example: company_b_customers.csv)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;customer_id,region
B101,India
B102,USA
B103,USA
B104,Canada
B105,UK
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Upload them to S3:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Account A bucket example: aws-clean-rooms-poc-org-a&lt;/li&gt;
&lt;li&gt;Account B bucket example: aws-clean-rooms-poc-org-b&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmmbugl2r83zxotyk2o37.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmmbugl2r83zxotyk2o37.png" alt=" " width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 2: Create the AWS Clean Rooms collaboration (Account A)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Sign in to &lt;strong&gt;Account A&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Navigate to:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;AWS Console → AWS Clean Rooms → Collaborations → Create collaboration&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Enter collaboration details:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Collaboration name:&lt;/strong&gt; &lt;code&gt;aws-clean-rooms-collaboration-poc&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Short, goal-oriented description&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcu3zslq1s3z1c5hffmui.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcu3zslq1s3z1c5hffmui.png" alt=" " width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Add members:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Member 1:&lt;/strong&gt; Account A (automatically added as the creator)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Member 2:&lt;/strong&gt; Account B (must be a different AWS Account ID)&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Each collaboration member must be a unique AWS account.&lt;br&gt;&lt;br&gt;
Duplicate account IDs are not allowed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgp4nfrilp79ryks3cxjr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgp4nfrilp79ryks3cxjr.png" alt=" " width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Configure collaboration abilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable &lt;strong&gt;Queries (SQL)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Do not enable Jobs or ML workflows for this PoC&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fawgb3c6kknbgwkodwuiy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fawgb3c6kknbgwkodwuiy.png" alt=" " width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.Configure query cost responsibility:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pay for queries:&lt;/strong&gt; Account A&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh8vyaozgzjjj0u94qo1j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh8vyaozgzjjj0u94qo1j.png" alt=" " width="800" height="322"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.Create the collaboration.&lt;br&gt;
8.Review and create:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Create Collaboration&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3uzzi0ncwu1dc182l2nx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3uzzi0ncwu1dc182l2nx.png" alt=" " width="800" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, create the collaboration and join it by creating a membership immediately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why the “two accounts” requirement matters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Clean Rooms enforces collaboration boundaries at the account level, so each member must be in a unique AWS account. This is not optional; it’s the security boundary.&lt;/p&gt;


&lt;h3&gt;
  
  
  Step 3: Accept invitation and create membership (Account B)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;In Account B:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open AWS Clean Rooms in the same region&lt;/li&gt;
&lt;li&gt;You should see a pending invitation under Collaborations&lt;/li&gt;
&lt;li&gt;Click Create membership to join&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you see "Access denied" or "needs subscription."&lt;/p&gt;

&lt;p&gt;This usually means one of two things:&lt;/p&gt;

&lt;p&gt;AWS Clean Rooms is not enabled/initialized in the account (first-time access)&lt;/p&gt;

&lt;p&gt;Your IAM user does not have AWSCleanRoomsFullAccess&lt;/p&gt;

&lt;p&gt;Fix: attach the policy to the IAM user you are logged in with (creating a role alone won’t help unless you assume it).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxwxuxrguvvvs4b7eqgh4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxwxuxrguvvvs4b7eqgh4.png" alt=" " width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  Step 4: Catalog S3 data (Glue) so Clean Rooms/Athena can query it
&lt;/h3&gt;

&lt;p&gt;This step confuses many people at first, so I’ll explain clearly:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need AWS Glue?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Yes, if your data source is S3 and you plan to query with Athena&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Clean Rooms uses query engines like Athena. Athena queries tables defined in the &lt;strong&gt;Glue Data Catalog&lt;/strong&gt;. So the S3 files must be represented as tables in Glue (schema matters).&lt;/p&gt;

&lt;p&gt;You can create the Glue table either by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;creating a Glue table manually (fast for PoC), or&lt;/li&gt;
&lt;li&gt;using a crawler (overkill for this PoC)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Create Glue table in Account A:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In Account A → AWS Glue → Databases / Tables:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create database: cleanrooms_poc_db&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgtgwl2rx55b7x9xg7uvw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgtgwl2rx55b7x9xg7uvw.png" alt=" " width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Create table: company_a_customers&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkca21eq8ymf6wovkdgad.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkca21eq8ymf6wovkdgad.png" alt=" " width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Location: s3://aws-clean-rooms-poc-org-a/&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Format: CSV&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Schema (must match your CSV):&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;customer_id (string)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;region (string)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Repeat the same in Account B:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Database: cleanrooms_poc_db&lt;/li&gt;
&lt;li&gt;Table: company_b_customers&lt;/li&gt;
&lt;li&gt;Location: s3://aws-clean-rooms-poc-org-b-/&lt;/li&gt;
&lt;li&gt;Schema:&lt;/li&gt;
&lt;li&gt;customer_id (string)&lt;/li&gt;
&lt;li&gt;region (string)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Important lesson:&lt;/strong&gt; If a column is missing in Glue schema, you will get errors like:&lt;/p&gt;

&lt;p&gt;Column 'customer_id' not found in any table&lt;/p&gt;

&lt;p&gt;This is not a Clean Rooms bug; it's a catalog/schema mismatch.&lt;/p&gt;


&lt;h3&gt;
  
  
  Step 5: Create configured tables (Account A and Account B)
&lt;/h3&gt;

&lt;p&gt;Configured tables are how Clean Rooms expose a dataset to the collaboration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In Account A&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.AWS Clean Rooms → &lt;strong&gt;Tables → Configure new table&lt;/strong&gt;&lt;br&gt;
 2.Data source: &lt;strong&gt;Amazon S3&lt;/strong&gt;&lt;br&gt;
 3.Choose the Glue database/table you created:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cleanrooms_poc_db.company_a_customers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;4.Columns available to collaboration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For this PoC, allow both:&lt;/li&gt;
&lt;li&gt;customer_id&lt;/li&gt;
&lt;li&gt;region&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;5.Allowed analysis methods:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Direct query only&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Do not enable jobs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe2rejqiulyv96y4daqsh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe2rejqiulyv96y4daqsh.png" alt=" " width="800" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.Create configured table.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8sn7wmjpgotft46l7vsm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8sn7wmjpgotft46l7vsm.png" alt=" " width="800" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0c8t7noc4kpzotexivy5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0c8t7noc4kpzotexivy5.png" alt=" " width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In Account B :&lt;/strong&gt;&lt;br&gt;
  Repeat the same steps for:&lt;br&gt;
    - cleanrooms_poc_db.company_b_customers&lt;/p&gt;


&lt;h3&gt;
  
  
  Step 6: Associate configured tables with the collaboration
&lt;/h3&gt;

&lt;p&gt;Still in each account:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to the configured table&lt;/li&gt;
&lt;li&gt;Choose Associate to collaboration
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhny3g5qpigl81p4nbhbv.png" alt=" " width="800" height="519"&gt;
&lt;/li&gt;
&lt;li&gt;Skip data access budget for now (optional feature; not needed for  a basic PoC)
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy0i6gnnqwds19dtppjrx.png" alt=" " width="800" height="519"&gt;
&lt;/li&gt;
&lt;li&gt;When you return to the collaboration view, you should see tables associated with both members.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you only see Account A’s table, it means Account B hasn’t associated its table yet.&lt;/p&gt;


&lt;h3&gt;
  
  
  Step 7: Configure the analysis rule (this is the core of Clean Rooms)
&lt;/h3&gt;

&lt;p&gt;Analysis rules define what is allowed.&lt;br&gt;
For a community-friendly PoC, use &lt;strong&gt;Aggregation&lt;/strong&gt; rules.&lt;br&gt;
&lt;strong&gt;Recommended aggregation rule design&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Goal: allow results like “count customers by region” while blocking raw output.&lt;/p&gt;

&lt;p&gt;In the analysis rule UI:&lt;/p&gt;

&lt;p&gt;1.Choose Aggregation&lt;br&gt;
2.Query controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Allow COUNT (or COUNT_DISTINCT) on customer_id
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg81ebq24zqn24q7u9j3u.png" alt=" " width="800" height="519"&gt;
3.Dimension controls:&lt;/li&gt;
&lt;li&gt;Allow region as a dimension column&lt;/li&gt;
&lt;li&gt;This is what makes region appear in SELECT/GROUP BY
4.Join controls:

&lt;ul&gt;
&lt;li&gt;If you want standalone aggregation, allow “queried by itself = Yes”&lt;/li&gt;
&lt;li&gt;If you want overlap-only analytics, choose overlap-only (stricter)
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuwld38v79mo8ei31xkyr.png" alt=" " width="800" height="519"&gt;
5.Output constraints (aggregation thresholds):&lt;/li&gt;
&lt;li&gt;Set minimum threshold (e.g., 2)
This prevents returning results for very small groups (privacy guardrail)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Common error and the fix:&lt;/strong&gt;&lt;br&gt;
If you see an error like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;columns prohibited by aggregation analysis rule&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It means your analysis rule doesn’t allow that column in the SELECT/PROJECT clause.&lt;/p&gt;

&lt;p&gt;Fix it by ensuring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;region is included as a dimension column&lt;/li&gt;
&lt;li&gt;aggregate function is defined on customer_id&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is exactly how Clean Rooms enforces safe query structure.&lt;/p&gt;


&lt;h3&gt;
  
  
  Step 8: Where to run queries
&lt;/h3&gt;

&lt;p&gt;You can run queries from the &lt;strong&gt;AWS Clean Rooms analysis experience&lt;/strong&gt;, not directly from Athena.&lt;/p&gt;

&lt;p&gt;In the collaboration:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AWS Clean Rooms → Collaborations → select your collaboration&lt;/li&gt;
&lt;li&gt;Go to Analysis (or “Run analysis / Queries”, depending on console)&lt;/li&gt;
&lt;li&gt;Choose the tables and run SQL there&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This ensures the query is evaluated against Clean Rooms analysis rules and constraints.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw896apqawm1f802q77j7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw896apqawm1f802q77j7.png" alt=" " width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  Step 9: Example query
&lt;/h3&gt;

&lt;p&gt;Once both tables are associated and analysis rules allow it, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT
  region,
  COUNT(DISTINCT customer_id) AS customer_count
FROM company_a_customers_v2
GROUP BY region;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or, if you designed the collaboration to require overlap joins, your query will need to join Account A and Account B tables using approved join columns.&lt;/p&gt;

&lt;p&gt;Either way, the result should be aggregated and controlled by thresholds.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fffas4w2ai2ijh6d6g10k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fffas4w2ai2ijh6d6g10k.png" alt=" " width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmefy8nts3299p6400nzo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmefy8nts3299p6400nzo.png" alt=" " width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgmukrqdgkj2mv6s9py0h.png" alt=" " width="800" height="411"&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What this PoC demonstrates:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;This simple PoC proves several important points:&lt;/li&gt;
&lt;li&gt;Collaboration is enforced at the AWS account boundary&lt;/li&gt;
&lt;li&gt;Data stays in each owner’s S3 bucket; what changes is what can be computed&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Glue/Athena catalog integration matters (schema correctness is critical)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Analysis rules are the real power:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They control columns&lt;/li&gt;
&lt;li&gt;    They control query structure&lt;/li&gt;
&lt;li&gt;    They control privacy thresholds&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;This is not “sharing data safely.”&lt;br&gt;
It is “designing a system where raw data sharing is not required.”&lt;/p&gt;




&lt;h3&gt;
  
  
  Closing
&lt;/h3&gt;

&lt;p&gt;If you’re learning or teaching privacy-first data collaboration patterns on AWS, Clean Rooms is worth investing time into. The service is less about analytics features and more about &lt;strong&gt;architectural trust boundaries.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you build this PoC, feel free to adapt the dataset and analysis rules to your domain (ad measurement, fraud, healthcare research). The core idea remains the same.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awscleanrooms</category>
      <category>ai</category>
      <category>awscommunity</category>
    </item>
  </channel>
</rss>
