Choosing Amazon Bedrock Managed Knowledge Bases: An Architecture Decision in My RAG Application A developer building an internal AI assistant chose Amazon Bedrock Managed Knowledge Bases over a self-managed RAG pipeline, delegating document parsing, chunking, embedding generation, indexing, and retrieval to the managed AWS service. The application retains responsibility for business logic, orchestration, model invocation, and user experience, with source documents kept in Amazon S3. The developer argues the managed Knowledge Base should not be viewed as merely a vector database, since it absorbs most of the RAG data pipeline. When I started designing the RAG architecture for the internal AI assistant project, one of the first decisions I had to make was: Where should the application's knowledge live, and which component should be responsible for turning that knowledge into something the model can retrieve? There are several ways to build a RAG system on AWS. I could assemble and manage the retrieval components myself, use a vector database directly, or use Amazon Bedrock Knowledge Bases to manage much of the RAG data pipeline. During the project, I explored the architecture from both perspectives before settling on an Amazon Bedrock Managed Knowledge Base. This article explains that decision and the technical tradeoffs behind it. The application needed to answer questions using internal company documents. The source documents included: Brand Guidelines Script Bank Caption Bank Client Proposal Template My initial mental model was: Documents ↓ Amazon S3 ↓ Vector Storage ↓ Similarity Search ↓ Foundation Model ↓ Response But implementing that architecture means taking responsibility for considerably more than vector storage. The complete pipeline involves: Document ingestion ↓ Document parsing ↓ Chunking ↓ Embedding generation ↓ Vector indexing ↓ Metadata ↓ Similarity search ↓ Retrieval ↓ Context construction ↓ Model invocation ↓ Source attribution At that point, the most important architectural question became: Which parts of the RAG pipeline should my application own, and which parts should I delegate to a managed AWS service? That question led me toward Amazon Bedrock Managed Knowledge Bases. Amazon Bedrock Knowledge Bases provides a managed abstraction for building RAG applications. Instead of my application owning every component of the retrieval pipeline, the architecture becomes: Company Documents │ ▼ Amazon S3 │ ▼ ┌───────────────────────┐ │ Amazon Bedrock │ │ Managed Knowledge │ │ Base │ │ │ │ Parsing │ │ Chunking │ │ Embeddings │ │ Indexing │ │ Retrieval │ └───────────┬───────────┘ │ Relevant Context │ ▼ Application Layer │ ▼ Foundation Model │ ▼ Response That creates a significantly different responsibility boundary. My application remains responsible for the business logic, orchestration, model invocation, and user experience. The Knowledge Base handles much of the document ingestion and retrieval pipeline. It is important not to think of a managed Knowledge Base as simply "a vector database." That misses most of the abstraction it provides. During ingestion, Amazon Bedrock processes the source content, splits it into chunks, generates embeddings, and indexes the resulting vectors for retrieval while maintaining their relationship to the source documents. Conceptually: Source Document │ ▼ Parsing │ ▼ Chunking │ ▼ Embeddings │ ▼ Vector Index │ ▼ Retrieval This means the Knowledge Base owns a substantial portion of the RAG data pipeline that would otherwise have to be implemented and operated by the application. I wanted the original company documents to remain in an object-storage layer rather than making the vector index the primary source of truth. Amazon S3 became that source layer. The document structure was: ai-creative-content/ ├── brand-guidelines/ ├── past-scripts/ ├── captions/ └── proposals/ This gives the architecture a clear separation: S3 │ └── Original company documents Knowledge Base │ └── Searchable representation of those documents The S3 data source can be configured with inclusion prefixes, allowing the Knowledge Base to process specific paths within the bucket. It also supports synchronization when documents are added, modified, or deleted. That separation became particularly useful because the original documents remain easy to manage independently of the retrieval layer. At the AWS API level, the Knowledge Base data source can be configured with an S3 bucket and optional inclusion prefixes. For example: { "s3Configuration": { "bucketArn": "arn:aws:s3:::ai-creative-content", "inclusionPrefixes": "brand-guidelines/", "past-scripts/", "captions/", "proposals/" }, "type": "S3" } The important part is that the Knowledge Base is not simply scanning an arbitrary bucket. The data source configuration tells Bedrock which S3 location contains the documents that belong to the Knowledge Base. The S3 bucket and Knowledge Base also need to satisfy the regional requirements, and the Knowledge Base service role needs permission to access the configured data source. Uploading a document to S3 is only the beginning. The document must be ingested into the Knowledge Base before it can participate in retrieval. The high-level flow is: PDF │ ▼ Amazon S3 │ ▼ Knowledge Base Data Source │ ▼ Ingestion Job │ ├── Parse ├── Chunk ├── Generate Embeddings └── Index │ ▼ Queryable Knowledge Base Ingestion transforms the source content into representations that can be searched semantically. This distinction is important: S3 upload ≠ Knowledge Base ingestion A document existing in S3 does not automatically mean it is available for retrieval. Once the S3 data source is configured, an ingestion job can be started through the AWS Console or CLI. aws bedrock-agent start-ingestion-job \ --knowledge-base-id