<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0">

<channel>
	<title>AWS Big Data Blog</title>
	<atom:link href="https://aws.amazon.com/blogs/big-data/feed/" rel="self" type="application/rss+xml"/>
	<link>https://aws.amazon.com/blogs/big-data/</link>
	<description>Official Big Data Blog of Amazon Web Services</description>
	<lastBuildDate>Tue, 07 Apr 2026 16:49:49 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>Introducing workload simulation workbench for Amazon MSK Express broker</title>
		<link>https://aws.amazon.com/blogs/big-data/introducing-workload-simulation-workbench-for-amazon-msk-express-broker/</link>
					
		
		<dc:creator><![CDATA[Manu Mishra]]></dc:creator>
		<pubDate>Tue, 07 Apr 2026 16:49:49 +0000</pubDate>
				<category><![CDATA[Amazon Managed Streaming for Apache Kafka (Amazon MSK)]]></category>
		<category><![CDATA[Technical How-to]]></category>
		<category><![CDATA[Amazon Managed Streaming for Apache Kafka]]></category>
		<category><![CDATA[Amazon MSK]]></category>
		<category><![CDATA[ECS]]></category>
		<category><![CDATA[Kafka]]></category>
		<category><![CDATA[Performance]]></category>
		<guid isPermaLink="false">b3d24418f68f39f35e538a5023c7f6fd258fd3b4</guid>

					<description>In this post, we introduce the workload simulation workbench for Amazon Managed Streaming for Apache Kafka (Amazon MSK) Express Broker. The simulation workbench is a tool that you can use to safely validate your streaming configurations through realistic testing scenarios.</description>
										<content:encoded>&lt;p&gt;Validating Kafka configurations before production deployment can be challenging. In this post, we introduce the workload simulation workbench for &lt;a href="https://docs.aws.amazon.com/msk/latest/developerguide/msk-broker-types-express.html" target="_blank" rel="noopener noreferrer"&gt;Amazon Managed Streaming for Apache Kafka (Amazon MSK) Express Broker&lt;/a&gt;. The simulation workbench is a tool that you can use to safely validate your streaming configurations through realistic testing scenarios.&lt;/p&gt; 
&lt;h2&gt;Solution overview&lt;/h2&gt; 
&lt;p&gt;Varying message sizes, partition strategies, throughput requirements, and scaling patterns make it challenging for you to predict how your Apache Kafka configurations will perform in production. The traditional approaches to test these variables create significant barriers: ad-hoc testing lacks consistency, manual set up of temporary clusters is time-consuming and error-prone, production-like environments require dedicated infrastructure teams, and team training often happens in isolation without realistic scenarios. You need a structured way to test and validate these configurations safely before deployment. The workload simulation workbench for MSK Express Broker addresses these challenges by providing a configurable, infrastructure as code (IaC) solution using &lt;a href="https://aws.amazon.com/cdk/" target="_blank" rel="noopener noreferrer"&gt;AWS Cloud Development Kit (AWS CDK&lt;/a&gt;) deployments for realistic Apache Kafka testing. The workbench supports configurable workload scenarios, and real-time performance insights.&lt;/p&gt; 
&lt;p&gt;Express brokers for MSK Provisioned make managing Apache Kafka more streamlined, more cost-effective to run at scale, and more elastic with the low latency that you expect. Each broker node can provide up to 3x more throughput per broker, scale up to 20x faster, and recover 90% quicker compared to standard Apache Kafka brokers.&amp;nbsp;The &lt;a href="https://github.com/aws-samples/sample-simulation-workbench-for-msk-express-brokers"&gt;workload simulation workbench for Amazon MSK Express&lt;/a&gt; broker facilitates systematic experimentation with consistent, repeatable results. You can use the workbench for multiple use cases like production capacity planning, progressive training to prepare developers for Apache Kafka operations with increasing complexity, and architecture validation to prove streaming designs and compare different approaches before making production commitments.&lt;/p&gt; 
&lt;h2&gt;Architecture overview&lt;/h2&gt; 
&lt;p&gt;The workbench creates an isolated Apache Kafka testing environment in your AWS account. It deploys a private subnet where consumer and producer applications run as containers, connects to a private MSK Express broker and monitors for performance metrics and visibility. This architecture mirrors the production deployment pattern for experimentation. The following image describes this architecture using AWS services.&lt;/p&gt; 
&lt;p&gt;&lt;img class="alignnone wp-image-89469" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/24/ArchitectureDiagram.png" alt="MSK Workload SImulator WorkBench Architecture Diagram" width="1275" height="1040"&gt;&lt;/p&gt; 
&lt;p&gt;This architecture is deployed using the following AWS services:&lt;/p&gt; 
&lt;p&gt;&lt;a href="https://aws.amazon.com/ecs/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Amazon Elastic Container Service (Amazon ECS&lt;/strong&gt;&lt;/a&gt;)&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;generate configurable workloads with Java-based producers and consumers, simulating various real-world scenarios through different message sizes and throughput patterns.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Amazon MSK Express Cluster&lt;/strong&gt;&amp;nbsp;runs&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/msk/latest/developerguide/supported-kafka-versions.html" target="_blank" rel="noopener noreferrer"&gt;Apache Kafka 3.9.0&lt;/a&gt;&amp;nbsp;on&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/msk/latest/developerguide/broker-instance-sizes.html" target="_blank" rel="noopener noreferrer"&gt;Graviton-based instances&lt;/a&gt;&amp;nbsp;with hands-free storage management and&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/msk/latest/developerguide/msk-broker-types-express.html" target="_blank" rel="noopener noreferrer"&gt;enhanced performance characteristics&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Dynamic&amp;nbsp;&lt;/strong&gt;&lt;a href="https://aws.amazon.com/cloudwatch/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Amazon CloudWatch&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&amp;nbsp;Dashboards&lt;/strong&gt;&amp;nbsp;automatically adapt to your configuration, displaying real-time throughput, latency, and resource utilization across different test scenarios.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Secure&amp;nbsp;&lt;/strong&gt;&lt;a href="https://aws.amazon.com/vpc/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Amazon Virtual Private Cloud (Amazon VPC&lt;/strong&gt;&lt;/a&gt;)&lt;strong&gt;&amp;nbsp;Infrastructure&lt;/strong&gt;&amp;nbsp;provides private subnets across three Availability Zones with&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints.html" target="_blank" rel="noopener noreferrer"&gt;VPC endpoints&lt;/a&gt;&amp;nbsp;for secure service communication.&lt;/p&gt; 
&lt;h2&gt;Configuration-driven testing&lt;/h2&gt; 
&lt;p&gt;The workbench provides different configuration options for your Apache Kafka testing environment, so you can customize instance types, broker count, topic distribution, message characteristics, and ingress rate. You can adjust the number of topics, partitions per topic, sender and receiver service instances, and message sizes to match your testing needs. These flexible configurations support two distinct testing approaches to validate different aspects of your Kafka deployment:&lt;/p&gt; 
&lt;h3&gt;Approach 1: Workload validation (single deployment)&lt;/h3&gt; 
&lt;p&gt;Test different workload patterns against the same MSK Express cluster configuration. This is useful for comparing partition strategies, message sizes, and load patterns.&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-code"&gt;// Fixed MSK Express Cluster Configuration
export const mskBrokerConfig: MskBrokerConfig = {
numberOfBrokers: 1, // 1 broker per AZ = 3 total brokers
instanceType: 'express.m7g.large', // MSK Express instance type
};

// Multiple Concurrent Workload Tests
export const deploymentConfig: DeploymentConfig = { services: [
{ topics: 2, partitionsPerTopic: 6, instances: 3, messageSizeBytes: 1024 }, // High-throughput scenario
{ topics: 1, partitionsPerTopic: 3, instances: 1, messageSizeBytes: 512 }, // Latency-optimized scenario
{ topics: 3, partitionsPerTopic: 4, instances: 2, messageSizeBytes: 4096 }, // Multi-topic scenario
]};&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h3&gt;Approach 2: Infrastructure rightsizing (redeploy and compare)&lt;/h3&gt; 
&lt;p&gt;Test different MSK Express cluster configurations by redeploying the workbench with different broker settings while keeping the same workload. This is recommended for rightsizing experiments and understanding the impact of vertical compared to horizontal scaling.&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-code"&gt;// Baseline: Deploy and test
export const mskBrokerConfig: MskBrokerConfig = { numberOfBrokers: 1, instanceType: 'express.m7g.large',};

// Vertical scaling: Redeploy with larger instances
export const mskBrokerConfig: MskBrokerConfig = { numberOfBrokers: 1,
instanceType: 'express.m7g.xlarge', // Larger instances
};

// Horizontal scaling: Redeploy with more brokers
export const mskBrokerConfig: MskBrokerConfig = {
numberOfBrokers: 2, // More brokers
instanceType: 'express.m7g.large',};&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;Each redeployment uses the same workload configuration, so you can isolate the impact of infrastructure changes on performance.&lt;/p&gt; 
&lt;h2&gt;Workload testing scenarios (single deployment)&lt;/h2&gt; 
&lt;p&gt;These scenarios test different workload patterns against the same MSK Express cluster:&lt;/p&gt; 
&lt;h3&gt;Partition strategy impact testing&lt;/h3&gt; 
&lt;p&gt;&lt;em&gt;Scenario: You are debating the usage of fewer topics with many partitions compared to many topics with fewer partitions for your microservices architecture. You want to understand how partition count affects throughput and consumer group coordination before making this architectural decision.&lt;/em&gt;&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-code"&gt;const deploymentConfig = { services: [
{ topics: 1, partitionsPerTopic: 1, instances: 2, messageSizeBytes: 1024 }, // Baseline: minimal partitions
{ topics: 1, partitionsPerTopic: 10, instances: 2, messageSizeBytes: 1024 }, // Medium partitions
{ topics: 1, partitionsPerTopic: 20, instances: 2, messageSizeBytes: 1024 }, // High partitions
]};&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h3&gt;Message size performance analysis&lt;/h3&gt; 
&lt;p&gt;&lt;em&gt;Scenario: Your application handles different types of events – small IoT sensor readings (256 bytes), medium user activity events (1 KB), and large document processing events (8KB). You must understand how message size impacts your overall system performance and if you should separate these into different topics or handle them together.&lt;/em&gt;&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-code"&gt;const deploymentConfig = { services: [
{ topics: 2, partitionsPerTopic: 6, instances: 3, messageSizeBytes: 256 }, // IoT sensor data
{ topics: 2, partitionsPerTopic: 6, instances: 3, messageSizeBytes: 1024 }, // User events
{ topics: 2, partitionsPerTopic: 6, instances: 3, messageSizeBytes: 8192 }, // Document events
]};&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h3&gt;Load testing and scaling validation&lt;/h3&gt; 
&lt;p&gt;&lt;em&gt;Scenario: You expect traffic to vary significantly throughout the day, with peak loads requiring 10× more processing capacity than off-peak hours. You want to validate how your Apache Kafka topics and partitions handle different load levels and understand the performance characteristics before production deployment.&lt;/em&gt;&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-code"&gt;const deploymentConfig = { services: [
{ topics: 2, partitionsPerTopic: 6, instances: 1, messageSizeBytes: 1024 }, // Off-peak load simulation
{ topics: 2, partitionsPerTopic: 6, instances: 5, messageSizeBytes: 1024 }, // Medium load simulation
{ topics: 2, partitionsPerTopic: 6, instances: 10, messageSizeBytes: 1024 }, // Peak load simulation
]};&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h2&gt;Infrastructure rightsizing experiments (redeploy and compare)&lt;/h2&gt; 
&lt;p&gt;These scenarios help you understand the impact of different MSK Express cluster configurations by redeploying the workbench with different broker settings:&lt;/p&gt; 
&lt;h3&gt;MSK broker rightsizing analysis&lt;/h3&gt; 
&lt;p&gt;&lt;em&gt;Scenario: You deploy a cluster with basic configuration and put load on it to establish baseline performance. Then you want to experiment with different broker configurations to see the effect of vertical scaling (larger instances) and horizontal scaling (more brokers) to find the right cost-performance balance for your production deployment.&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Step 1: Deploy with baseline configuration&lt;/strong&gt;&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-code"&gt;// Initial deployment: Basic configuration
export const mskBrokerConfig: MskBrokerConfig = {
numberOfBrokers: 1, // 3 total brokers (1 per AZ)
instanceType: 'express.m7g.large',};export const deploymentConfig: DeploymentConfig = { services: [ { topics: 2, partitionsPerTopic: 6, instances: 3, messageSizeBytes: 1024 }, ]};&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;strong&gt;Step 2: Redeploy with vertical scaling&lt;/strong&gt;&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-code"&gt;// Redeploy: Test vertical scaling impact
export const mskBrokerConfig: MskBrokerConfig = {
numberOfBrokers: 1, // Same broker count
instanceType: 'express.m7g.xlarge', // Larger instances
};

// Keep same workload configuration to compare results&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;strong&gt;Step 3: Redeploy with horizontal scaling&lt;/strong&gt;&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-code"&gt;// Redeploy: Test horizontal scaling impact
export const mskBrokerConfig: MskBrokerConfig = {
numberOfBrokers: 2, // 6 total brokers (2 per AZ)
instanceType: 'express.m7g.large', // Back to original size
};

// Keep same workload configuration to compare results&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;This rightsizing approach helps you understand how broker configuration changes affect the same workload, so you can improve both performance and cost for your specific requirements.&lt;/p&gt; 
&lt;h2&gt;Performance insights&lt;/h2&gt; 
&lt;p&gt;The workbench provides detailed insights into your Apache Kafka configurations through monitoring and analytics, creating a CloudWatch dashboard that adapts to your configuration. The dashboard starts with a configuration summary showing your MSK Express cluster details and workbench service configurations, helping you to understand what you’re testing. The following image shows the dashboard configuration summary:&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89502" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/24/BDB-5479-Dashboard-Summary-1.png" alt="" width="1990" height="208"&gt;&lt;/p&gt; 
&lt;p&gt;The second section of dashboard shows real-time MSK Express cluster metrics including:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Broker performance&lt;/strong&gt;: CPU utilization and memory usage across brokers in your cluster&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Network activity&lt;/strong&gt;: Monitor bytes in/out and packet counts per broker to understand network utilization patterns&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Connection monitoring&lt;/strong&gt;: Displays active connections and connection patterns to help identify potential bottlenecks&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Resource utilization&lt;/strong&gt;: Broker-level resource tracking provides insights into overall cluster health&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The following image shows the MSK cluster monitoring dashboard:&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89501" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/24/BDB-5479-MSKClusterMetric-1.png" alt="" width="1990" height="1521"&gt;&lt;/p&gt; 
&lt;p&gt;The third section of the dashboard shows the Intelligent Rebalancing and Cluster Capacity insights showing:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Intelligent rebalancing: in progress&lt;/strong&gt;: Shows whether a rebalancing operation is currently in progress or has occurred in the past. A value of 1 indicates that rebalancing is actively running, while 0 means that the cluster is in a steady state.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Cluster under-provisioned&lt;/strong&gt;: Indicates whether the cluster has insufficient broker capacity to perform partition rebalancing. A value of 1 means that the cluster is under-provisioned and Intelligent Rebalancing can’t redistribute partitions until more brokers are added or the instance type is upgraded.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Global partition count:&lt;/strong&gt; Displays the total number of unique partitions across all topics in the cluster, excluding replicas. Use this to track partition growth over time and validate your deployment configuration.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Leader count per broker:&lt;/strong&gt; Shows the number of leader partitions assigned to each broker. An uneven distribution indicates partition leadership skew, which can lead to hotspots where certain brokers handle disproportionate read/write traffic.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Partition count per broker:&lt;/strong&gt; Shows the total number of partition replicas hosted on each broker. This metric includes both leader and follower replicas and is key to identifying replica distribution imbalances across the cluster.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The following image shows the Intelligent Rebalancing and Cluster Capacity section of the dashboard:&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89503" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/24/BDB-5479-IntelligentRebalancing-1.png" alt="" width="1990" height="1419"&gt;&lt;/p&gt; 
&lt;p&gt;The fourth section of the dashboard shows the application-level insights showing:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;System throughput&lt;/strong&gt;: Displays the total number of messages per second across services, giving you a complete view of system performance&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Service comparisons&lt;/strong&gt;: Performs side-by-side performance analysis of different configurations to understand which approaches fit&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Individual service performance&lt;/strong&gt;: Each configured service has dedicated throughput tracking widgets for detailed analysis&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Latency analysis&lt;/strong&gt;: The end-to-end message delivery times and latency comparisons across different service configurations&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Message size impact&lt;/strong&gt;: Performance analysis across different payload sizes helps you understand how message size affects overall system behavior&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The following image shows the application performance metrics section of the dashboard:&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89504" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/24/BDB-5479-ApplicationPerformanceMetric-2.png" alt="" width="1990" height="1576"&gt;&lt;/p&gt; 
&lt;h2&gt;Getting started&lt;/h2&gt; 
&lt;p&gt;This section walks you through setting up and deploying the workbench in your AWS environment. You will configure the necessary prerequisites, deploy the infrastructure using AWS CDK, and customize your first test.&lt;/p&gt; 
&lt;h3&gt;Prerequisites&lt;/h3&gt; 
&lt;p&gt;You can deploy the solution from the &lt;a href="https://github.com/aws-samples/sample-simulation-workbench-for-msk-express-brokers" target="_blank" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; Repo. You can clone it and run it on your AWS environment. To deploy the artifacts, you will require:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;AWS account&lt;/strong&gt;&amp;nbsp;with administrative credentials configured for creating AWS resources.&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/cli/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;AWS Command Line Interface (AWS CLI)&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;must be configured with appropriate permissions for AWS resource management.&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/cdk/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;AWS Cloud Development Kit (AWS CDK)&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;should be installed globally using&amp;nbsp;&lt;em&gt;npm install -g aws-cdk&amp;nbsp;&lt;/em&gt;for infrastructure deployment.&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://nodejs.org/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Node.js&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;version 20.9 or higher is required, with version 22+ recommended.&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.docker.com/engine/install/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Docker engine&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;must be installed and running locally as the CDK builds container images during deployment. &lt;strong&gt;Docker daemon&lt;/strong&gt;&amp;nbsp;should be running and accessible to CDK for building the workbench application containers.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Deployment&lt;/h3&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;# Clone the workbench repository
git clone https://github.com/aws-samples/sample-simulation-workbench-for-msk-express-brokers.git

# Install dependencies and build
npm install 
npm run build

# Bootstrap CDK (first time only per account/region)
cd cdk 
npx cdk bootstrap

# Synthesize CloudFormation template (optional verification step)
npx cdk synth

# Deploy to AWS (creates infrastructure and builds containers)
npx cdk deploy&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;After deployment is completed, you will receive a CloudWatch dashboard URL to monitor the workbench performance in real-time.You can also deploy multiple isolated instances of the workbench in the same AWS account for different teams, environments, or testing scenarios. Each instance operates independently with its own MSK cluster, ECS services, and CloudWatch dashboards.To deploy additional instances, modify the Environment Configuration in&amp;nbsp;&lt;code&gt;cdk/lib/config.ts&lt;/code&gt;:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-code"&gt;// Instance 1: Development team
export const AppPrefix = 'mske';export const EnvPrefix = 'dev';

// Instance 2: Staging environment (separate deployment)
export const AppPrefix = 'mske';export const EnvPrefix = 'staging';

// Instance 3: Team-specific testing (separate deployment)
export const AppPrefix = 'team-alpha';export const EnvPrefix = 'test';&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;Each combination of&amp;nbsp;AppPrefix&amp;nbsp;and&amp;nbsp;EnvPrefix&amp;nbsp;creates completely isolated AWS resources so that multiple teams or environments can use the workbench simultaneously without conflicts.&lt;/p&gt; 
&lt;h3&gt;Customizing your first test&lt;/h3&gt; 
&lt;p&gt;You can edit the configuration file located at folder&amp;nbsp;“cdk/lib/config-types.ts”&amp;nbsp;to define your testing scenarios and run the deployment. It is preconfigured with the following configuration:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-code"&gt;export const deploymentConfig: DeploymentConfig = { services: [
// Start with a simple baseline test
{ topics: 1, partitionsPerTopic: 3, instances: 1, messageSizeBytes: 1024 },

// Add a comparison scenario
{ topics: 1, partitionsPerTopic: 6, instances: 1, messageSizeBytes: 1024 }, ]};&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h2&gt;Best practices&lt;/h2&gt; 
&lt;p&gt;Following a structured approach to benchmarking ensures that your results are reliable and actionable. These best practices will help you isolate performance variables and build a clear understanding of how each configuration change affects your system’s behavior. Begin with single-service configurations to establish baseline performance:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;const deploymentConfig = { services: [ { topics: 1, partitionsPerTopic: 3, instances: 1, messageSizeBytes: 1024 } ]};&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;After you understand the baseline, add comparison scenarios.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Change one variable at a time&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;For clear insights, modify only one parameter between services:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-code"&gt;const deploymentConfig = { services: [
{ topics: 1, partitionsPerTopic: 3, instances: 1, messageSizeBytes: 1024 }, // Baseline
{ topics: 1, partitionsPerTopic: 6, instances: 1, messageSizeBytes: 1024 }, // More partitions
{ topics: 1, partitionsPerTopic: 12, instances: 1, messageSizeBytes: 1024 }, // Even more partitions
]};&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;em&gt;This approach helps you understand the impact of specific configuration changes.&lt;/em&gt;&lt;/p&gt; 
&lt;h2&gt;Important considerations and limitations&lt;/h2&gt; 
&lt;p&gt;Before relying on workbench results for production decisions, it is important to understand the tool’s intended scope and boundaries. The following considerations will help you set appropriate expectations and make the most effective use of the workbench in your planning process.&lt;/p&gt; 
&lt;h3&gt;Performance testing disclaimer&lt;/h3&gt; 
&lt;p&gt;&lt;em&gt;The workbench is designed as an educational and sizing estimation tool to help teams prepare for MSK Express production deployments&lt;/em&gt;. While it provides valuable insights into performance characteristics:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Results can vary based on your specific use cases, network conditions, and configurations&lt;/li&gt; 
 &lt;li&gt;Use workbench results as guidance for initial sizing and planning&lt;/li&gt; 
 &lt;li&gt;Conduct comprehensive performance validation with your actual workloads in production-like environments before final deployment&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Recommended usage approach&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Production readiness training&lt;/strong&gt;&amp;nbsp;– Use the workbench to prepare teams for MSK Express capabilities and operations.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Architecture validation&lt;/strong&gt;&amp;nbsp;– Test streaming architectures and performance expectations using MSK Express enhanced performance characteristics.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Capacity planning&lt;/strong&gt;&amp;nbsp;– Use MSK Express streamlined sizing approach (throughput-based rather than storage-based) for initial estimates.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Team preparation&lt;/strong&gt;&amp;nbsp;– Build confidence and expertise with production Apache Kafka implementations using MSK Express.&lt;/p&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;In this post, we showed how the workload simulation workbench for Amazon MSK Express Broker supports learning and preparation for production deployments through configurable, hands-on testing and experiments. You can use the workbench to validate configurations, build expertise, and improve performance before production deployment. If you’re preparing for your first Apache Kafka deployment, training a team, or improving existing architectures, the workbench provides practical experience and insights needed for success. Refer to &lt;a href="https://docs.aws.amazon.com/msk/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Amazon MSK documentation&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;– Complete MSK Express documentation, best practices, and sizing guidance for more information.&lt;/p&gt; 
&lt;hr&gt; 
&lt;h3&gt;About the authors&lt;/h3&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;p&gt;&lt;img loading="lazy" class="size-thumbnail wp-image-89617 alignleft" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/31/ProfilePicture-1-100x100.jpeg" alt="Manu Mishra" width="100" height="100"&gt;&lt;a href="https://manumishra.com/"&gt;&lt;strong&gt;Manu&amp;nbsp;Mishra&lt;/strong&gt;&lt;/a&gt; is a Senior Solutions Architect at AWS with over 18 years of experience in the software industry, specializing in artificial intelligence, data and analytics, and security. His expertise spans strategic oversight and hands-on technical leadership, where he reviews and guides the work of both internal and external customers. Manu collaborates with AWS customers to shape technical strategies that drive impactful business outcomes, providing alignment between technology and organizational goals.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;p&gt;&lt;img loading="lazy" class="size-thumbnail wp-image-89617 alignleft" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/24/Ramesh-100x94.png" alt="Manu Mishra" width="100" height="100"&gt;&lt;a href="https://www.linkedin.com/in/rameshchidirala/"&gt;&lt;strong&gt; Ramesh Chidirala&lt;/strong&gt;&lt;/a&gt; is a Senior Solutions Architect at Amazon Web Services with over two decades of technology leadership experience in architecture and digital transformation, helping customers align business strategy and technical execution. He specializes in designing innovative, AI-powered, cost-efficient serverless event-driven architectures and has extensive experience architecting secure, scalable, and resilient cloud solutions for enterprise customers.&lt;/p&gt; 
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Proactive monitoring for Amazon Redshift Serverless using AWS Lambda and Slack alerts</title>
		<link>https://aws.amazon.com/blogs/big-data/proactive-monitoring-for-amazon-redshift-serverless-using-aws-lambda-and-slack-alerts/</link>
					
		
		<dc:creator><![CDATA[Cristian Restrepo Lopez]]></dc:creator>
		<pubDate>Tue, 07 Apr 2026 16:27:14 +0000</pubDate>
				<category><![CDATA[Amazon Q]]></category>
		<category><![CDATA[Amazon Redshift]]></category>
		<category><![CDATA[AWS Big Data]]></category>
		<category><![CDATA[Intermediate (200)]]></category>
		<category><![CDATA[Monitoring and observability]]></category>
		<category><![CDATA[Technical How-to]]></category>
		<guid isPermaLink="false">65b18cb3fdbb9d590c8c6d0a2c7dd9922e901c5a</guid>

					<description>In this post, we show you how to build a&amp;nbsp;serverless, low-cost monitoring solution&amp;nbsp;for Amazon Redshift Serverless that proactively detects performance anomalies and sends actionable alerts directly to your selected Slack channels.</description>
										<content:encoded>&lt;p&gt;Performance issues in analytics environments often remain invisible until they disrupt dashboards, delay ETL jobs, or impact business decisions. For teams running &lt;a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-serverless.html" target="_blank" rel="noopener noreferrer"&gt;Amazon Redshift Serverless&lt;/a&gt;, unmonitored query queues, long-running queries, or unexpected spikes in compute capacity can degrade performance and increase costs if left undetected.&lt;/p&gt; 
&lt;p&gt;Amazon Redshift Serverless streamlines running analytics at scale by removing the need to provision or manage infrastructure. However, even in a serverless environment, maintaining visibility into performance and usage is essential for efficient operation and predictable costs. While Amazon Redshift Serverless provides advanced built-in dashboards for monitoring performance metrics, delivering notifications directly to platforms like Slack, brings another level of agility. Real-time alerts in the team’s workflow enable faster response times and more informed decision-making without requiring constant dashboard monitoring.&lt;/p&gt; 
&lt;p&gt;In this post, we show you how to build a&amp;nbsp;serverless, low-cost monitoring solution&amp;nbsp;for Amazon Redshift Serverless that proactively detects performance anomalies and sends actionable alerts directly to your selected Slack channels. This approach helps your analytics team identify and address issues early, often before your users notice a problem.&lt;/p&gt; 
&lt;h1&gt;Solution overview&lt;/h1&gt; 
&lt;p&gt;The solution presented in this post uses AWS services to collect key performance metrics from Amazon Redshift Serverless, evaluate them against thresholds that you can flexibly configure, and notify you when anomalies are detected.&lt;/p&gt; 
&lt;p&gt;&lt;a href="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/18/Picture1-5.png"&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89081" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/18/Picture1-5.png" alt="scope of solution" width="864" height="412"&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;The workflow operates as follows:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Scheduled execution&lt;/strong&gt;&amp;nbsp;– An &lt;a href="https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html" target="_blank" rel="noopener noreferrer"&gt;Amazon EventBridge&lt;/a&gt; rule triggers an AWS Lambda function on a configurable schedule (by default, every 15 minutes during business hours).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Metric collection&lt;/strong&gt;&amp;nbsp;– The &lt;a href="https://docs.aws.amazon.com/lambda/" target="_blank" rel="noopener noreferrer"&gt;AWS Lambda&lt;/a&gt; function gathers metrics including queued queries, running queries, compute capacity (RPUs), data storage usage, table count, database connections, and slow-running queries using &lt;a href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html" target="_blank" rel="noopener noreferrer"&gt;Amazon CloudWatch&lt;/a&gt; and the Amazon Redshift Data API.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Threshold evaluation&lt;/strong&gt;&amp;nbsp;– Collected metrics are compared against your predefined thresholds that reflect acceptable performance and usage limits.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Alerting&lt;/strong&gt;&amp;nbsp;– When a threshold is exceeded, the Lambda function publishes a notification to an Amazon SNS topic.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Slack notification&lt;/strong&gt;&amp;nbsp;– &lt;a href="https://docs.aws.amazon.com/chatbot/latest/adminguide/what-is.html" target="_blank" rel="noopener noreferrer"&gt;Amazon Q Developer in Chat applications&lt;/a&gt; (formerly AWS Chatbot) delivers the alert to your designated Slack channel.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Observability&lt;/strong&gt;&amp;nbsp;– Lambda execution logs are stored in Amazon CloudWatch Logs for troubleshooting and auditing.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;This architecture is fully serverless and requires no changes to your existing Amazon Redshift Serverless workloads. To simplify deployment, we provide an &lt;a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html" target="_blank" rel="noopener noreferrer"&gt;AWS CloudFormation&lt;/a&gt; template that provisions all required resources.&lt;/p&gt; 
&lt;h2&gt;Prerequisites&lt;/h2&gt; 
&lt;p&gt;Before deploying this solution, you must collect information about your existing Amazon Redshift Serverless workgroup and namespace that you want to monitor. To identify your Amazon Redshift Serverless resources:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Open the &lt;a href="https://us-east-1.console.aws.amazon.com/redshiftv2/home?region=us-east-1&amp;quot; \l &amp;quot;/landing:" target="_blank" rel="noopener noreferrer"&gt;Amazon Redshift console.&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;In the navigation pane, choose&amp;nbsp;&lt;strong&gt;Serverless dashboard&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Note down your&amp;nbsp;&lt;strong&gt;workgroup&lt;/strong&gt;&amp;nbsp;and&amp;nbsp;&lt;strong&gt;namespace&lt;/strong&gt;&amp;nbsp;names. You will use these values when launching this blog’s AWS CloudFormation template.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Deploy the solution&lt;/h2&gt; 
&lt;p&gt;You can launch the CloudFormation stack and deploy the solution via the provided link.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/aws-samples/sample-proactive-monitoring-for-amazon-redshift-serverless-using-aws-lambda-and-slack-alerts" target="_blank" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;When launching the CloudFormation stack, complete the following steps in the AWS CloudFormation Console:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;For&amp;nbsp;&lt;strong&gt;Stack name&lt;/strong&gt;, enter a descriptive name such as&amp;nbsp;redshift-serverless-monitoring.&lt;/li&gt; 
 &lt;li&gt;Review and modify the parameters as needed for your environment.&lt;/li&gt; 
 &lt;li&gt;Acknowledge that AWS CloudFormation may create IAM resources with custom names.&lt;/li&gt; 
 &lt;li&gt;Choose&amp;nbsp;&lt;strong&gt;Submit&lt;/strong&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;CloudFormation parameters&lt;/h2&gt; 
&lt;h3&gt;Amazon Redshift Serverless Workgroup configuration&lt;/h3&gt; 
&lt;p&gt;Provide details for your existing Amazon Redshift Serverless environment. These values connect the monitoring solution to your Redshift environment. Some parameters come with the default values that you can replace with your actual configuration.&lt;/p&gt; 
&lt;table class="styled-table" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Parameter&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Default value&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Description&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Amazon Redshift Workgroup Name&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Your Amazon Redshift Serverless workgroup name.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Amazon Redshift Namespace Name&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Your Amazon Redshift Serverless namespace name.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Amazon Redshift Workgroup ID&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Workgroup ID (UUID) of the Amazon Redshift Serverless workgroup to monitor. Must follow the UUID format: &lt;code&gt;xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&lt;/code&gt; (lowercase hexadecimal with hyphens).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Namespace ID (UUID) of the Amazon Redshift Serverless namespace. Must follow the UUID format: &lt;code&gt;xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&lt;/code&gt; (lowercase hexadecimal with hyphens).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Database Name&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;code&gt;dev&lt;/code&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Target Amazon Redshift database for SQL-based diagnostic and monitoring queries.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Monitoring schedule&lt;/h3&gt; 
&lt;p&gt;The default schedule runs diagnostic SQL queries every 15 minutes during business hours, balancing responsiveness and cost efficiency. Running more frequently might increase costs, while less frequent monitoring could delay detection of performance issues. You can adjust this schedule to your actual need.&lt;/p&gt; 
&lt;table class="styled-table" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Parameter&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Default value&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Description&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Schedule Expression&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;cron(0/15 8-17 ? * MON-FRI *)&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;EventBridge schedule expression for Lambda function execution. Default runs every 15 minutes, Monday through Friday, 8 AM to 5 PM UTC.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Threshold configuration&lt;/h3&gt; 
&lt;p&gt;Thresholds should be tuned based on your workload characteristics.&lt;/p&gt; 
&lt;table class="styled-table" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Parameter&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Default value&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Description&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Queries Queued Threshold&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;20&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Alerts threshold for queued queries.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Queries Running Threshold&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;20&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Alerts threshold for running queries.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Compute Capacity Threshold (RPUs)&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;64&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Alert threshold for compute capacity (RPUs).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Data Storage Threshold (MB)&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;5242880&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Threshold for data storage in MB (default 5 TB).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Table Count Threshold (MB)&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;1000&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Alerts threshold for total table count.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Database Connections Threshold&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;50&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Alert threshold for database connections.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Slow Query Threshold (seconds)&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;10&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Thresholds in seconds for slow query detection.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Query Timeout (Seconds)&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;30&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Timeout for SQL diagnostics queries.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt;&amp;nbsp;Start with conservative thresholds and refine them after observing baseline behavior for one to two weeks.&lt;/p&gt; 
&lt;h3&gt;Lambda configuration&lt;/h3&gt; 
&lt;p&gt;Configure the AWS Lambda function settings. The selected default values are appropriate for most monitoring scenarios. You may want to change them only in case of troubleshooting.&lt;/p&gt; 
&lt;table class="styled-table" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Parameter&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Default value&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Description&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Lambda Memory Size (MB)&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;256&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Lambda function memory size in MB.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Lambda Time Out (Seconds)&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;240&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Lambda function timeout in seconds.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Security Configuration – Amazon Virtual Private Cloud (VPC)&lt;/h3&gt; 
&lt;p&gt;If your organization has network isolation requirements, you can optionally enable VPC deployment for the Lambda function. When enabled, the Lambda function runs within your specified VPC subnets, providing network isolation and allowing access to VPC-only resources.&lt;/p&gt; 
&lt;table class="styled-table" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Parameter&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Default value&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Description&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;VPC ID&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;VPC ID for Lambda deployment (required if &lt;code&gt;EnableVPC&lt;/code&gt; is true). The Lambda function will be deployed in this VPC. Ensure that the VPC has appropriate routing (NAT Gateway or VPC Endpoints) to allow Lambda to access AWS services like CloudWatch, Amazon Redshift, and Amazon SNS.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;VPC Subnet IDs&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Comma-separated list of subnet IDs for Lambda deployment (required if &lt;code&gt;EnableVPC&lt;/code&gt; is true).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Security Group IDs&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Comma-separated list of security group IDs for Lambda (optional). If not provided and &lt;code&gt;EnableVPC&lt;/code&gt; is true, a default security group will be created with outbound HTTPS access. Custom security groups must allow outbound HTTPS (port 443) to AWS service endpoints.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Note that VPC deployment might increase cold start times and requires an NAT Gateway or VPC endpoints for AWS service access. We recommend provisioning interface VPC endpoints (through AWS PrivateLink) for the five services the Lambda function calls which keeps all traffic private without the recurring cost of a NAT Gateway.&lt;/p&gt; 
&lt;h3&gt;Security configuration – Encryption&lt;/h3&gt; 
&lt;p&gt;If your organization requires encryption of data at rest, you can optionally enable AWS Key Management Service (AWS KMS) encryption for the Lambda function’s environment variables, CloudWatch Logs, and SNS topic. When enabled, the template encrypts each resource using the AWS KMS keys that you provide, either a single shared key for all three services, or individual keys for granular key management and audit separation.&lt;/p&gt; 
&lt;table class="styled-table" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Parameter&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Default value&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Description&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Shared KMS Key ARN&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;AWS KMS key ARN to use for all encryption (Lambda, Logs, and SNS) unless service-specific keys are provided. This streamlines key management by using a single key for all services. The key policy must grant encrypt/decrypt permissions to Lambda, CloudWatch Logs, and SNS.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Lambda KMS Key ARN&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;AWS KMS key ARN for Lambda environment variable encryption (optional, overrides &lt;code&gt;SharedKMSKeyArn&lt;/code&gt;). Use this for separate key management per service. The key policy must grant decrypt permissions to the Lambda execution role. If not provided, &lt;code&gt;SharedKMSKeyArn&lt;/code&gt; will be used when &lt;code&gt;EnableKMSEncryption&lt;/code&gt; is true.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;CloudWatch Logs KMS Key ARN&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;AWS KMS key ARN for CloudWatch Logs encryption (optional, overrides &lt;code&gt;SharedKMSKeyArn&lt;/code&gt;). Use this for separate key management per service. The key policy must grant encrypt/decrypt permissions to the CloudWatch Logs service. If not provided, &lt;code&gt;SharedKMSKeyArn&lt;/code&gt; will be used when &lt;code&gt;EnableKMSEncryption&lt;/code&gt; is true.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;SNS Topic KMS Key ARN&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;AWS KMS key ARN for SNS topic encryption (optional, overrides &lt;code&gt;SharedKMSKeyArn&lt;/code&gt;). Use this for separate key management per service. The key policy must grant encrypt/decrypt permissions to SNS service and the Lambda execution role. If not provided, &lt;code&gt;SharedKMSKeyArn&lt;/code&gt; will be used when &lt;code&gt;EnableKMSEncryption&lt;/code&gt; is true.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Enable Dead Letter Queue&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;False&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Optionally enable Dead Letter Queue (DLQ) for failed Lambda invocations to improve reliability and security monitoring. When enabled, events that fail after all retry attempts will be sent to an SQS queue for investigation and potential replay. This helps prevent data loss, provides visibility into failures, and enables security audit trails for monitoring anomalies. The DLQ retains messages for 14 days.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Note that AWS KMS encryption requires the key policy to grant appropriate permissions to each consuming service (Lambda, CloudWatch Logs, and SNS).&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;On the review page, select &lt;strong&gt;I acknowledge that AWS CloudFormation might create IAM resources with custom names&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Submit&lt;/strong&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Resources created&lt;/h2&gt; 
&lt;p&gt;The CloudFormation stack creates the following resources:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;EventBridge rule for scheduled execution&lt;/li&gt; 
 &lt;li&gt;AWS Lambda function (Python 3.12 runtime)&lt;/li&gt; 
 &lt;li&gt;Amazon SNS topic for alerts&lt;/li&gt; 
 &lt;li&gt;IAM role with permissions for CloudWatch, Amazon Redshift Data API, and SNS&lt;/li&gt; 
 &lt;li&gt;CloudWatch Log Group for Lambda logs&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; CloudFormation deployment typically takes 10–15 minutes to complete. You can monitor progress in real time under the &lt;strong&gt;Events&lt;/strong&gt; tab of your CloudFormation stack.&lt;/p&gt; 
&lt;h2&gt;Post-deployment configuration&lt;/h2&gt; 
&lt;p&gt;After the CloudFormation stack has been successfully created, complete the following steps.&lt;/p&gt; 
&lt;h3&gt;Step 1: Record CloudFormation outputs&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Navigate to the &lt;a href="https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1&amp;quot; \l &amp;quot;/getting-started" target="_blank" rel="noopener noreferrer"&gt;AWS CloudFormation console&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Select your stack and choose the &lt;strong&gt;Outputs&lt;/strong&gt; tab.&lt;/li&gt; 
 &lt;li&gt;Note the values for &lt;strong&gt;LambdaRoleArn&lt;/strong&gt; and &lt;strong&gt;SNSTopicArn&lt;/strong&gt;. You will need these in subsequent steps.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Step 2: Grant Amazon Redshift permissions&lt;/h3&gt; 
&lt;p&gt;Grant permissions to the Lambda function to query Amazon Redshift system tables for monitoring data. Complete the following steps to grant the necessary access:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Navigate to the &lt;a href="https://us-east-1.console.aws.amazon.com/redshiftv2/home?region=us-east-1&amp;quot; \l &amp;quot;/landing:" target="_blank" rel="noopener noreferrer"&gt;Amazon Redshift console&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;In the left navigation pane, choose &lt;strong&gt;Query Editor V2&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Connect to your Amazon Redshift Serverless workgroup.&lt;/li&gt; 
 &lt;li&gt;Execute the following SQL commands, replacing &amp;lt;IAM Role ARN&amp;gt; with the &lt;strong&gt;LambdaRoleArn&lt;/strong&gt; value from your CloudFormation outputs:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-sql"&gt;CREATE USER "IAMR:&amp;lt;IAM Lambda Role&amp;gt;" WITH PASSWORD DISABLE;

GRANT ROLE "sys:monitor" TO "IAMR:&amp;lt;IAM Role&amp;gt;";&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;a href="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/18/Picture2-7.png"&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89088" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/18/Picture2-7.png" alt="RedshiftSQL-DBD-5612" width="1276" height="468"&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;These commands create an &lt;code&gt;AmazonRedshift&lt;/code&gt; user associated with the Lambda IAM role and grant it the &lt;code&gt;sys:monitor&lt;/code&gt; Amazon Redshift role. This role provides read-only access to catalog and system tables without granting permissions to user data tables.&lt;/p&gt; 
&lt;h3&gt;Step 3: Configure Slack notifications&lt;/h3&gt; 
&lt;p&gt;Amazon Q Developer in chat applications provides native AWS integration and managed authentication, removing custom webhook code and reducing setup complexity. To receive alerts in Slack, configure Amazon Q Developer in Chat Applications to connect your SNS topic to your preferred Slack channel:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Navigate to &lt;a href="https://us-east-2.console.aws.amazon.com/chatbot/home?region=us-east-1&amp;quot; \l &amp;quot;/home" target="_blank" rel="noopener noreferrer"&gt;Amazon Q Developer in chat applications&lt;/a&gt; (formerly AWS Chatbot) in the AWS console.&lt;/li&gt; 
 &lt;li&gt;Follow the instructions in the &lt;a href="https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html" target="_blank" rel="noopener noreferrer"&gt;Slack integration documentation&lt;/a&gt; to authorize AWS access to your Slack workspace.&lt;/li&gt; 
 &lt;li&gt;When configuring the Slack channel, ensure that you select the correct AWS Region where you deployed the CloudFormation stack.&lt;/li&gt; 
 &lt;li&gt;In the &lt;strong&gt;Notifications&lt;/strong&gt; section, select the SNS topic created by your CloudFormation stack (refer to the &lt;strong&gt;SNSTopicArn&lt;/strong&gt; output value).&lt;/li&gt; 
 &lt;li&gt;Keep the default IAM read-only permissions for the channel configuration.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;a href="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/18/Picture3-4.png"&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89083" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/18/Picture3-4.png" alt="SNS topic " width="864" height="254"&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;After configured, alerts automatically appear in Slack whenever thresholds are exceeded.&lt;/p&gt; 
&lt;h2&gt;&lt;a href="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/18/Untitled-design.png"&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89086" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/18/Untitled-design.png" alt="result-upon-success" width="864" height="682"&gt;&lt;/a&gt;&lt;/h2&gt; 
&lt;h2&gt;&lt;strong&gt;Cost considerations&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;With the default configuration, this solution incurs minimal ongoing costs. The Lambda function executes approximately 693 times per month (every 15 minutes during an 8-hour business day, Monday through Friday), resulting in a monthly cost of approximately $0.33 USD. This includes Lambda compute costs ($0.26) and CloudWatch &lt;code&gt;GetMetricData&lt;/code&gt; API calls ($0.07). All other services (EventBridge, SNS, CloudWatch Logs, and Amazon Redshift Data API). The Amazon Redshift Data API has no additional charges beyond the minimal Amazon Redshift Serverless RPU consumption for the Amazon Redshift Serverless system table query execution. You can reduce costs by decreasing the monitoring frequency (such as, every 30 minutes) or increase responsiveness by running more frequently (such as, every 5 minutes) with a proportional cost increase.&lt;/p&gt; 
&lt;p&gt;All costs are estimates and may vary based on your environment. Variations often occur because queries scanning system tables may take longer or require additional resources depending on the system complexity&lt;/p&gt; 
&lt;h2&gt;&lt;strong&gt;Security best practices&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;This solution implements the following security controls:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;IAM policies scoped to specific resource ARNs for the Amazon Redshift workgroup, namespace, SNS topic, and log group.&lt;/li&gt; 
 &lt;li&gt;Data API statement access restricted to the Lambda function’s own IAM user ID.&lt;/li&gt; 
 &lt;li&gt;Read-only &lt;code&gt;sys:monitor&lt;/code&gt; database role for operational metadata access. Limit to the role created by the CloudFormation template.&lt;/li&gt; 
 &lt;li&gt;Reserved concurrent executions capped at five.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;To further strengthen your security posture, consider the following enhancements:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Enable &lt;code&gt;EnableKMSEncryption&lt;/code&gt; to encrypt environment variables, logs, and SNS messages at rest.&lt;/li&gt; 
 &lt;li&gt;Enable &lt;code&gt;EnableVPC&lt;/code&gt; to deploy the function within a VPC for network isolation.&lt;/li&gt; 
 &lt;li&gt;Audit access through AWS CloudTrail.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Important: This is sample code for non-production usage. Work with your security and legal teams to meet your organizational security, regulatory, and compliance requirements before deployment. This solution demonstrates monitoring capabilities but requires additional security hardening for production environments, including encryption configuration, IAM policy scoping, VPC deployment, and comprehensive testing.&lt;/p&gt; 
&lt;h2&gt;Clean up&lt;/h2&gt; 
&lt;p&gt;To remove all resources and avoid ongoing charges if you don’t want to use the solution anymore:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html" target="_blank" rel="noopener noreferrer"&gt;Delete the CloudFormation stack&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Remove the Slack integration from Amazon Q Developer in chat applications.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Troubleshooting&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;If no metrics or incomplete SQL diagnostics are returned, verify that the Amazon Redshift Serverless workgroup is active with recent query activity, and ensure the database user has the &lt;code&gt;sys:monitor&lt;/code&gt; role (&lt;code&gt;GRANT ROLE sys:monitor TO &amp;lt;user&amp;gt;&lt;/code&gt;) in the query editor. Without this role, queries execute successfully but only return data visible to that user’s permissions rather than the full cluster activity.&lt;/li&gt; 
 &lt;li&gt;For VPC-deployed functions that fail to reach AWS services, confirm that VPC endpoints or a NAT Gateway are configured for CloudWatch, Amazon Redshift Data API, Amazon Redshift Serverless, SNS, and CloudWatch Logs.&lt;/li&gt; 
 &lt;li&gt;If the Lambda function times out, increase the &lt;code&gt;LambdaTimeout&lt;/code&gt; and &lt;code&gt;QueryTimeoutSeconds&lt;/code&gt; parameters. The default timeout of 240 seconds accommodates most workloads, but clusters with many active queries may require additional time for SQL diagnostics to complete.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;In this post, we showed how you can build a proactive monitoring solution for Amazon Redshift Serverless using AWS Lambda, Amazon CloudWatch, and Amazon SNS with Slack integration. By automatically collecting metrics, evaluating thresholds, and delivering alerts in near real time to Slack or your preferred collaborative platform, this solution helps detect performance and cost issues early. Because the solution itself is serverless, it aligns with the operational simplicity goals of Amazon Redshift Serverless—scaling automatically, requiring minimal maintenance, and delivering high value at low cost. You can extend this foundation with additional metrics, diagnostic logic, or alternative notification channels to meet your organization’s needs.&lt;/p&gt; 
&lt;p&gt;To learn more, see the Amazon Redshift documentation on monitoring and performance optimization.&lt;/p&gt; 
&lt;hr style="width: 80%"&gt; 
&lt;h2&gt;About the authors&lt;/h2&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="alignleft wp-image-89079 size-thumbnail" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/18/headshot1-100x133.png" alt="Headhost author 1" width="100" height="133"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Cristian Restrepo Lopez&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/cristianrestrepolopez/"&gt;Cristian&lt;/a&gt; is a Solutions Architect at AWS, helping customers build modern data applications with a focus on analytics. Outside of work, he enjoys exploring emerging technologies and connecting with the data community.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="alignleft wp-image-89089" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/18/headshot2-1.jpg" alt="" width="100" height="133"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Satesh Sonti&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/satish-kumar-sonti/"&gt;Satesh&lt;/a&gt; is a Principal Analytics Specialist Solutions Architect based out of Atlanta, specializing in building enterprise data platforms, data warehousing, and analytics solutions. He has over 19 years of experience in building data assets and leading complex data platform programs for banking and insurance clients across the globe.&lt;/p&gt; 
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Modernize business intelligence workloads using Amazon Quick</title>
		<link>https://aws.amazon.com/blogs/big-data/modernize-business-intelligence-workloads-using-amazon-quick/</link>
					
		
		<dc:creator><![CDATA[Satesh Sonti]]></dc:creator>
		<pubDate>Mon, 06 Apr 2026 17:56:35 +0000</pubDate>
				<category><![CDATA[Amazon Athena]]></category>
		<category><![CDATA[Amazon Quick Suite]]></category>
		<category><![CDATA[Amazon Redshift]]></category>
		<category><![CDATA[Generative BI]]></category>
		<category><![CDATA[Intermediate (200)]]></category>
		<category><![CDATA[Technical How-to]]></category>
		<guid isPermaLink="false">70927b97fee08a1a07e5c01da8e18b507bcefe19</guid>

					<description>In this post, we provide implementation guidance for building integrated analytics solutions that combine the generative BI features of Amazon Quick with Amazon Redshift and Amazon Athena SQL analytics capabilities.</description>
										<content:encoded>&lt;p&gt;Traditional business intelligence (BI) integration with enterprise data warehouses has been the established pattern for years. With generative AI, you can now modernize BI workloads with capabilities like interactive chat agents, automated business processes, and using natural language to generate dashboards.&lt;/p&gt; 
&lt;p&gt;In this post, we provide implementation guidance for building integrated analytics solutions that combine the generative BI features of &lt;a href="https://docs.aws.amazon.com/quicksuite/latest/userguide/what-is.html" target="_blank" rel="noopener noreferrer"&gt;Amazon Quick&lt;/a&gt; with &lt;a href="https://aws.amazon.com/redshift/" target="_blank" rel="noopener noreferrer"&gt;Amazon Redshift&lt;/a&gt; and &lt;a href="https://aws.amazon.com/athena/" target="_blank" rel="noopener noreferrer"&gt;Amazon Athena&lt;/a&gt; SQL analytics capabilities. Use this post as a reference for proof-of-concept implementations, production deployment planning, or as a learning resource for understanding Quick integration patterns with Amazon Redshift and Athena.&lt;/p&gt; 
&lt;h2&gt;&lt;strong&gt;Common use cases&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;You can use this integrated approach across several scenarios. The following are some of the most common use cases.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Traditional BI reporting benefits from bundled data warehouse and BI tool pricing, making generative BI the primary use case with significant cost advantages. 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Insurance:&lt;/em&gt; Automates Solvency II and IFRS 17 regulatory reporting, replacing manual spreadsheet consolidation.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Banking:&lt;/em&gt; Accelerates FDIC call report generation and capital adequacy dashboards, cutting month-end close from days to hours.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Interactive dashboards with contextual chat agents give BI teams conversational interfaces alongside their visual metrics. 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Gaming:&lt;/em&gt; Live ops teams query player retention and monetization KPIs in plain English—no SQL needed.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Financial Services:&lt;/em&gt; Trading analysts chat with real-time P&amp;amp;L dashboards to surface anomalies and drill into positions on demand.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Domain-specific analytics workspaces democratize enterprise data exploration through Quick Spaces and natural language queries. 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Insurance:&lt;/em&gt; Actuarial and underwriting teams query claims and risk data without waiting on data engineering.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Banking:&lt;/em&gt; Risk and compliance teams explore credit, market, and operational data through a single natural language interface.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Workflow automation removes repetitive tasks and accelerates self-service analytics. 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Financial Services:&lt;/em&gt; Automated AR reconciliation flows replace manual ledger matching, shrinking close cycle effort significantly.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Gaming:&lt;/em&gt; Telemetry ingestion pipelines trigger reporting refreshes automatically, freeing data engineers from routine work.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Let us examine an end-to-end solution combining these technologies.&lt;/p&gt; 
&lt;h2&gt;&lt;strong&gt;Solution flow&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;AWS offers two native SQL analytics engines for building analytics workloads. &lt;a href="https://aws.amazon.com/redshift/" target="_blank" rel="noopener noreferrer"&gt;Amazon Redshift&lt;/a&gt; provides a fully managed data warehouse with columnar storage and massively parallel processing. &lt;a href="https://aws.amazon.com/athena/" target="_blank" rel="noopener noreferrer"&gt;Amazon Athena&lt;/a&gt; delivers serverless interactive query capabilities directly against data in Amazon S3.&lt;/p&gt; 
&lt;p&gt;You can use either Amazon Redshift or Amazon Athena as a SQL engine while implementing the steps in this post. The following are the steps involved in building an end-to-end solution.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignleft wp-image-89725 size-full" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/02/BDB-4727-1.png" alt="Solution steps to integrate SQL Analytics engines with Amazon Quick" width="1354" height="329"&gt;&lt;/p&gt; 
&lt;p&gt;Figure1: Solution steps to integrate SQL Analytics engines with Amazon Quick&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Set up your SQL analytics engines: Amazon Redshift or Amazon Athena.&lt;/li&gt; 
 &lt;li&gt;Load data and create business views designed for analytics workloads.&lt;/li&gt; 
 &lt;li&gt;Configure integration between SQL analytics engines and Amazon Quick.&lt;/li&gt; 
 &lt;li&gt;Create data sources in Amazon Quick.&lt;/li&gt; 
 &lt;li&gt;Create datasets and dashboards for visual analytics.&lt;/li&gt; 
 &lt;li&gt;Use Topics and Spaces to provide natural language interfaces to your data.&lt;/li&gt; 
 &lt;li&gt;Deploy chat agents to deliver conversational AI experiences for business users.&lt;/li&gt; 
 &lt;li&gt;Implement business flows to automate repetitive workflows and processes.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Let’s start by walking through steps 1–4 for Amazon Redshift. We then describe the same four steps for Amazon Athena before explaining the Amazon Quick steps 5–8.&lt;/p&gt; 
&lt;h2&gt;Configure and create datasets in Amazon Redshift&lt;/h2&gt; 
&lt;p&gt;Amazon Redshift offers two deployment options to meet your data warehousing needs. Provisioned clusters provide traditional deployment where you manage compute resources by selecting node types and cluster size. Serverless automatically scales compute capacity based on workload demands with pay-per-use pricing. Both options are supported by Amazon Quick. For this walkthrough, we use Redshift Serverless.&lt;/p&gt; 
&lt;h3&gt;Set up SQL analytics engine&lt;/h3&gt; 
&lt;p&gt;To create a Redshift Serverless namespace and workgroup:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Open the &lt;a href="https://console.aws.amazon.com/redshift/" target="_blank" rel="noopener noreferrer"&gt;Amazon Redshift console&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;On the left navigation pane, select &lt;strong&gt;Redshift Serverless.&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;Follow the steps described in the &lt;a href="https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-console-workgroups-create-workgroup-wizard.html" target="_blank" rel="noopener noreferrer"&gt;Creating a workgroup with a namespace&lt;/a&gt; documentation page to create a workgroup and a namespace. Note the username and password provided. You will use these details for configuring connections in Amazon Redshift and Quick.&lt;/li&gt; 
 &lt;li&gt;You should see the status as &lt;strong&gt;Available &lt;/strong&gt;for both the workgroup and namespace in the Serverless dashboard.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignleft wp-image-89726 size-full" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/02/BDB-4727-2.png" alt="Amazon Redshift Serverless Workgroup and Namespaces" width="1719" height="446"&gt;&lt;/p&gt; 
&lt;p&gt;Figure 2: Amazon Redshift Serverless Workgroup and NamespacesThe deployment will be completed in approximately 3–5 minutes.&lt;/p&gt; 
&lt;h3&gt;Load data and create business views&lt;/h3&gt; 
&lt;p&gt;Now you can load data using the industry-standard TPC-H benchmark dataset, which provides realistic customer, order, and product data for analytics workloads.To load data into Amazon Redshift:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Open the &lt;a href="https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2-getting-started.html" target="_blank" rel="noopener noreferrer"&gt;Amazon Redshift Query Editor V2&lt;/a&gt; from the console.&lt;/li&gt; 
 &lt;li&gt;Run the &lt;a href="https://github.com/awslabs/amazon-redshift-utils/blob/master/src/CloudDataWarehouseBenchmark/Cloud-DWB-Derived-from-TPCH/100GB/ddl.sql" target="_blank" rel="noopener noreferrer"&gt;TPC H DDL statements&lt;/a&gt; to create TPC-H tables.&lt;/li&gt; 
 &lt;li&gt;Run the following COPY commands to load data from the public S3 bucket: &lt;code&gt;s3://redshift-downloads/TPC-H/&lt;/code&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Ensure that the IAM role attached to the namespace is set as the default IAM role. If you didn’t set up the default IAM role at the time of namespace creation, you can refer to the &lt;a href="\Users\crysdu\Downloads\Creating%20an%20IAM%20role%20as%20default%20for%20Amazon%20Redshift" target="_blank" rel="noopener noreferrer"&gt;Creating an IAM role as default for Amazon Redshift&lt;/a&gt; documentation page to set it now.&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-code"&gt;copy customer from 's3://redshift-downloads/TPC-H/2.18/100GB/customer/' iam_role default delimiter '|' region 'us-east-1'; 

copy orders from 's3://redshift-downloads/TPC-H/2.18/100GB/orders/' iam_role default delimiter '|' region 'us-east-1'; 

copy lineitem from 's3://redshift-downloads/TPC-H/2.18/100GB/lineitem/' iam_role default delimiter '|' region 'us-east-1'; &lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;Run the following query to validate load status. The &lt;strong&gt;status&lt;/strong&gt; column should show as completed. You can also review the information in other columns to see details about the loads such as record counts, duration, and data source.&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-sql"&gt;select * from &amp;nbsp;SYS_LOAD_HISTORY &amp;nbsp;Where table_name in ('customer','orders','lineitem');&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89727" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/02/BDB-4727-3.png" alt="Output of SYS_LOAD_HISTORY showing successful completion of COPY Jobs" width="1511" height="125"&gt;&lt;br&gt; Figure 3: Output of SYS_LOAD_HISTORY showing successful completion of COPY Jobs&lt;/p&gt; 
&lt;ol start="4"&gt; 
 &lt;li&gt;Create a materialized view to improve query performance:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Run the following SQL to create a materialized view that pre-compute results set for customer revenues and order volumes by market segment.&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-sql"&gt;CREATE MATERIALIZED VIEW mv_customer_revenue AS 
SELECT 
c.c_custkey, 
c.c_name, 
c.c_mktsegment, 
SUM(l.l_extendedprice * (1 - l.l_discount)) as total_revenue, 
COUNT(DISTINCT o.o_orderkey) as order_count 
FROM customer c 
JOIN orders o ON c.c_custkey = o.o_custkey
JOIN lineitem l ON o.o_orderkey = l.l_orderkey
GROUP BY c.c_custkey, c.c_name, c.c_mktsegment;&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;Run the following SQL to review the data in the materialized view.&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-sql"&gt;select * from mv_customer_revenue limit 10;&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h3&gt;Configure integration with Amazon Quick&lt;/h3&gt; 
&lt;p&gt;Amazon Quick auto discovers the Amazon Redshift provisioned clusters that are associated with your AWS account. These resources must be in the same AWS Region as your Amazon Quick account. For Amazon Redshift clusters in other accounts or Amazon Redshift Serverless, we recommend that you add a VPC connection following the steps in &lt;a href="https://docs.aws.amazon.com/quicksuite/latest/userguide/enabling-access-redshift.html#redshift-vpc-access" target="_blank" rel="noopener noreferrer"&gt;Enabling access to an Amazon Redshift cluster in a VPC&lt;/a&gt; documentation. Usually, these steps are performed by your organization’s cloud security administration team.&lt;/p&gt; 
&lt;p&gt;For serverless, you will apply the same steps in the workgroup instead of the cluster. You can find the VPC and Security Group settings in the &lt;strong&gt;Data Access&lt;/strong&gt; tab of a workgroup.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="size-full wp-image-89728 alignleft" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/02/BDB-4727-4.png" alt="Amazon Redshift Serverless workgroup VPC and Security groups " width="1603" height="752"&gt;&lt;br&gt; Figure 4: Amazon Redshift Serverless workgroup VPC and Security groups&lt;/p&gt; 
&lt;p&gt;You can also refer to &lt;a href="https://www.youtube.com/watch?v=_3ncNGVttTU" target="_blank" rel="noopener noreferrer"&gt;How do I privately connect Quick to an Amazon Redshift or RDS data source in a private subnet?&lt;/a&gt; for a demonstration.&lt;/p&gt; 
&lt;h3&gt;Create data source&lt;/h3&gt; 
&lt;p&gt;To create a dataset connecting to Amazon Redshift, complete the following steps.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;In the Quick left navigation pane, go to &lt;strong&gt;Datasets.&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;Choose the &lt;strong&gt;Data sources &lt;/strong&gt;tab and select &lt;strong&gt;Create data source&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Select Amazon Redshift and enter the following: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;strong&gt;Data Source Name&lt;/strong&gt;: Provide &lt;code&gt;customer-rev-datasource&lt;/code&gt; as data source name.&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Connection type&lt;/strong&gt;: Select the VPC connection created in the previous step.&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Database server&lt;/strong&gt;: Enter the Amazon Redshift workgroup endpoint (for example, &lt;code&gt;quick-demo-wg.123456789.us-west-2.redshift-serverless.amazonaws.com&lt;/code&gt;).&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Port&lt;/strong&gt;: 5439 (default).&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Database&lt;/strong&gt;: &lt;code&gt;dev&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Username/Password&lt;/strong&gt;: Amazon Redshift credentials with access to the database.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Choose&lt;strong&gt; Validate&lt;/strong&gt; &lt;strong&gt;connection&lt;/strong&gt;. The validation should be successful.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89729" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/02/BDB-4727-5.png" alt="Amazon Redshift data source configuration" width="574" height="607"&gt;&lt;br&gt; Figure 5: Amazon Redshift data source configuration&lt;/p&gt; 
&lt;ol start="5"&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Create Data Source &lt;/strong&gt;to create a data source.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Now let’s explore how to perform all these four steps to configure Athena in Amazon Quick.&lt;/p&gt; 
&lt;h2&gt;Configure and create datasets in Amazon Athena&lt;/h2&gt; 
&lt;p&gt;Amazon Athena provides immediate query capabilities against petabytes of data with automatic scaling to handle concurrent users. Let’s go through the steps to configure connections between Amazon Quick and Amazon Athena.&lt;/p&gt; 
&lt;h3&gt;Set up SQL analytics engine&lt;/h3&gt; 
&lt;p&gt;To create an Athena workgroup:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Open the &lt;a href="https://console.aws.amazon.com/athena/" target="_blank" rel="noopener noreferrer"&gt;Amazon Athena console&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;In the navigation pane, choose &lt;strong&gt;Workgroups&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Create workgroup&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;For &lt;strong&gt;Workgroup name&lt;/strong&gt;, enter &lt;code&gt;quick-demo&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;For &lt;strong&gt;Query result configuration&lt;/strong&gt;, select &lt;strong&gt;Athena managed&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Create workgroup&lt;/strong&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Your workgroup is ready immediately for querying data.&lt;/p&gt; 
&lt;h3&gt;Load data and create business views&lt;/h3&gt; 
&lt;p&gt;For Athena, you create tables using the TPC-H benchmark dataset that AWS provides in a public S3 bucket. This approach gives you 1.5 million customer records already optimized in Parquet format without requiring data loading.&lt;/p&gt; 
&lt;p&gt;To create tables and views in Athena:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Open the Athena Query Editor from the console.&lt;/li&gt; 
 &lt;li&gt;Create a database for your analytics (create S3 bucket if it exists already): 
  &lt;div class="hide-language"&gt; 
   &lt;pre&gt;&lt;code class="lang-sql"&gt;CREATE DATABASE IF NOT EXISTS athena_demo_db 
COMMENT 'Analytics database for customer insights' 
LOCATION 's3://my-analytics-data-lake-[account-id]/';&lt;/code&gt;&lt;/pre&gt; 
  &lt;/div&gt; &lt;/li&gt; 
 &lt;li&gt;Create an external table pointing to the TPC-H public dataset: 
  &lt;div class="hide-language"&gt; 
   &lt;pre&gt;&lt;code class="lang-sql"&gt;CREATE EXTERNAL TABLE IF NOT EXISTS athena_demo_db.customer_csv ( 
  C_CUSTKEY INT, 
  C_NAME STRING, 
  C_ADDRESS STRING, 
  C_NATIONKEY INT, 
  C_PHONE STRING, 
  C_ACCTBAL DOUBLE, 
  C_MKTSEGMENT STRING, 
  C_COMMENT STRING 
) 

ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '|' 
STORED AS TEXTFILE 
LOCATION 's3://redshift-downloads/TPC-H/2.18/100GB/customer/' &lt;/code&gt;&lt;/pre&gt; 
  &lt;/div&gt; &lt;/li&gt; 
 &lt;li&gt;Create a business-friendly view for analytics:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Run the following SQL to create a view that aggregates customer account balances grouped by market segments.&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-sql"&gt;CREATE VIEW athena_demo_db.customer_deep_analysis AS 
SELECT 
    c_custkey AS customer_id, 
    c_name AS customer_name, 
    c_mktsegment AS market_segment, 
    c_nationkey, 
    ROUND(c_acctbal, 2) AS account_balance, 
    CASE 
        WHEN c_acctbal &amp;lt; 0    THEN 'At-Risk' 
        WHEN c_acctbal &amp;lt; 2500 THEN 'Low' 
        WHEN c_acctbal &amp;lt; 5000 THEN 'Mid' 
        WHEN c_acctbal &amp;lt; 8000 THEN 'High' 
        ELSE 'Premium' 
    END                                                              
AS balance_tier, 

    ROUND(AVG(c_acctbal) OVER (PARTITION BY c_mktsegment), 2)        AS segment_avg, 
    ROUND(c_acctbal - AVG(c_acctbal) OVER (PARTITION BY c_mktsegment), 2) AS vs_segment_avg, 
    ROUND((c_acctbal - AVG(c_acctbal) OVER (PARTITION BY c_mktsegment)) 
          / NULLIF(STDDEV(c_acctbal) OVER (PARTITION BY c_mktsegment), 0), 2) AS segment_z_score, 
    RANK() OVER (PARTITION BY c_mktsegment ORDER BY c_acctbal DESC)  AS rank_in_segment, 
    NTILE(5) OVER (ORDER BY c_acctbal DESC)                          AS global_quintile 

FROM athena_demo_db.customer_csv 
ORDER BY c_acctbal DESC; &lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;ol start="5"&gt; 
 &lt;li&gt;Verify your view from Athena with:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-sql"&gt;SELECT * FROM athena_demo_db.customer_deep_analysis limit 5;&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89730" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/02/BDB-4727-6.png" alt="Output from the SELECT query" width="1583" height="412"&gt;&lt;br&gt; Figure 6: Output from the SELECT query&lt;/p&gt; 
&lt;h3&gt;Configure integration with Amazon Quick&lt;/h3&gt; 
&lt;p&gt;To connect to Amazon Athena in Amazon Quick, follow these steps, consolidated from &lt;a href="https://docs.aws.amazon.com/quicksuite/latest/userguide/create-a-data-set-athena.html" target="_blank" rel="noopener noreferrer"&gt;official AWS documentation&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/quicksuite/latest/userguide/athena.html" target="_blank" rel="noopener noreferrer"&gt;authorizing connections to Amazon Athena&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Authorize Quick to Access Athena, S3 Bucket for data, and S3 bucket for Athena Results.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Open the Amazon Quick Security Settings&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Sign in to the &lt;a href="https://quicksight.aws.amazon.com/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Amazon Quick console&lt;/strong&gt;&lt;/a&gt; as an administrator.&lt;/li&gt; 
 &lt;li&gt;In the top-right corner, choose your profile icon, then select &lt;strong&gt;Manage account&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Under &lt;strong&gt;Permissions&lt;/strong&gt;, choose &lt;strong&gt;AWS resources&lt;/strong&gt;.&lt;img loading="lazy" class="alignnone size-full wp-image-89731" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/02/BDB-4727-7.png" alt="AWS resource permissions" width="1778" height="685"&gt;&lt;br&gt; Figure 7: AWS resource permissions&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Enable Athena Access&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Under &lt;strong&gt;Quick access to AWS services&lt;/strong&gt;, choose &lt;strong&gt;Manage&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Locate &lt;strong&gt;Amazon Athena&lt;/strong&gt; in the list of AWS services.&lt;/li&gt; 
 &lt;li&gt;If Athena is already selected but access issues persist, clear the checkbox and re-select it to re-enable Athena.&lt;/li&gt; 
 &lt;li&gt;Under &lt;strong&gt;Amazon S3&lt;/strong&gt;, select &lt;strong&gt;S3 buckets&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Check the boxes next to each S3 bucket that Amazon Quick needs to access—including buckets used for Athena query results and any Redshift COPY source buckets.&lt;/li&gt; 
 &lt;li&gt;Enable &lt;strong&gt;Write permission for Athena Workgroup&lt;/strong&gt; to allow Amazon Quick to write Athena query results to S3 and choose &lt;strong&gt;Finish&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Save&lt;/strong&gt; to update the configuration.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The final step is to grant your Amazon Quick author permissions to query your database, Athena tables, and views. Configuration depends on whether AWS Lake Formation is enabled.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;If AWS Lake Formation is not enabled&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Permissions are managed at the Quick service role level through standard IAM-based S3 access control. Ensure that the Quick service role (for example, aws-quick-service-role-v0) has the appropriate IAM permissions for the relevant S3 buckets and Athena resources. No additional Lake Formation configuration is required.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;If AWS Lake Formation is enabled&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Lake Formation acts as the central authorization layer, overriding standard IAM-based S3 permissions. Grant permissions directly to the Amazon Quick author or IAM role.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;To grant data permissions:&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Open the &lt;a href="https://console.aws.amazon.com/lakeformation/" target="_blank" rel="noopener noreferrer"&gt;AWS Lake Formation&lt;/a&gt; console.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Permissions&lt;/strong&gt;, then &lt;strong&gt;Data permissions&lt;/strong&gt;, then &lt;strong&gt;Grant&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Select the IAM user or role.&lt;/li&gt; 
 &lt;li&gt;Choose the required databases, tables, and columns.&lt;/li&gt; 
 &lt;li&gt;Grant &lt;strong&gt;SELECT&lt;/strong&gt; at minimum; add &lt;strong&gt;DESCRIBE&lt;/strong&gt; for dataset creation.&lt;/li&gt; 
 &lt;li&gt;Repeat for each user or role that requires access.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Create data source&lt;/h3&gt; 
&lt;p&gt;Follow these steps to create an Athena data source on Amazon Quick.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;In the &lt;strong&gt;Amazon Quick&lt;/strong&gt; console, navigate to &lt;strong&gt;Datasets&lt;/strong&gt; and choose &lt;strong&gt;Data sources &lt;/strong&gt;tab.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Create data source&lt;/strong&gt;, then select the &lt;strong&gt;Amazon Athena&lt;/strong&gt; card.&lt;/li&gt; 
 &lt;li&gt;Enter a &lt;strong&gt;Data source name &lt;/strong&gt;(you can give any name of your choice), select your &lt;strong&gt;Athena workgroup &lt;/strong&gt;(like quick-demo), and choose &lt;strong&gt;Validate connection&lt;/strong&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89732" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/02/BDB-4727-8.png" alt="Athena data source creation" width="583" height="291"&gt;&lt;br&gt; Figure 8: Athena data source creation&lt;/p&gt; 
&lt;ol start="4"&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Create data source&lt;/strong&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Your Athena data source is now available for building datasets, dashboards, and Topics.&lt;/p&gt; 
&lt;h2&gt;Use Amazon Quick generative AI features&lt;/h2&gt; 
&lt;p&gt;The next steps, from 5–8, demonstrate Amazon Quick generative AI capabilities using Amazon Redshift as a data source. While we use Amazon Redshift in this example, you can substitute with Amazon Athena based on your specific requirements.&lt;/p&gt; 
&lt;h3&gt;Create dashboards&lt;/h3&gt; 
&lt;p&gt;Let’s start by creating datasets from the Amazon Redshift data source.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;In the left navigation pane, choose &lt;strong&gt;Datasets&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;On the Datasets page, choose &lt;strong&gt;Create Dataset&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;For the data source, select Amazon Redshift data source &lt;code&gt;customer-rev-datasource&lt;/code&gt;&lt;strong&gt;. &lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;From the menu, choose &lt;code&gt;mv_customer_revenue&lt;/code&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89733" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/02/BDB-4727-9.png" alt="Select table to visualize" width="581" height="468"&gt;&lt;br&gt; Figure 9: Select table to visualize&lt;/p&gt; 
&lt;ol start="5"&gt; 
 &lt;li&gt;You can choose one of the following query modes. For this post, select &lt;strong&gt;Directly query your data&lt;/strong&gt; option and choose &lt;strong&gt;Visualize&lt;/strong&gt;. 
  &lt;ul&gt; 
   &lt;li&gt;&lt;strong&gt;Import to SPICE for quicker analytics&lt;/strong&gt; – Quick loads a snapshot into its in-memory engine for faster dashboard performance.&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Directly query&lt;/strong&gt; &lt;strong&gt;your data&lt;/strong&gt;– Quick runs queries on demand against your query engine.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Select &lt;strong&gt;Build&lt;/strong&gt; icon to open a chat window. Enter “Show me orders by market segments” as the prompt. Note that you need &lt;a href="https://docs.aws.amazon.com/quick/latest/userguide/generative-bi-get-started.html" target="_blank" rel="noopener noreferrer"&gt;Author Pro&lt;/a&gt; access to use this feature.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89734" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/02/BDB-4727-10.png" alt="Build visualization using generative BI feature" width="1907" height="615"&gt;&lt;br&gt; Figure 10: Build visualization using generative BI feature&lt;/p&gt; 
&lt;ol start="7"&gt; 
 &lt;li&gt;You can change the visual type to a pie chart and add it to the analysis.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89735" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/02/BDB-4727-11.gif" alt="Change visual type" width="420" height="598"&gt;&lt;br&gt; Figure 10: Change visual type&lt;/p&gt; 
&lt;p&gt;To publish your analysis as a dashboard&lt;/p&gt; 
&lt;ol start="8"&gt; 
 &lt;li&gt;After you add the visuals, choose &lt;strong&gt;Publish&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Enter a name for the dashboard. For this post, use the &lt;strong&gt;&lt;a href="https://us-west-2.quicksight.aws.amazon.com/sn/dashboards/b7bb989a-c5ef-4ded-bb61-6c6cfcb7c186&amp;quot; \o &amp;quot;Market Segement Analysis" target="_blank" rel="noopener noreferrer"&gt;Market Segment Dashboard.&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Publish dashboard&lt;/strong&gt;. Your dashboard is now available for viewing and sharing.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Create topics and spaces&lt;/h3&gt; 
&lt;p&gt;To fully maximize enterprise data with AI, we must provide the right structure and context. That’s where&amp;nbsp;&lt;strong&gt;Topics&lt;/strong&gt;&amp;nbsp;and&amp;nbsp;&lt;strong&gt;Spaces&lt;/strong&gt;&amp;nbsp;come in. Topics act as natural language interfaces to your structured datasets, automatically analyzing your data, mapping fields, and adding synonyms. Business users can ask&amp;nbsp;&lt;em&gt;“What are total revenues by market segment?”&lt;/em&gt;&amp;nbsp;and receive instant, visualized answers without writing a single line of SQL. Spaces bring together all of your related assets into a single collaborative workspace that democratizes data access, reduces context-switching, accelerates team onboarding, so everyone is working from the same trusted, AI-ready data sources.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;To create a Quick topic&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;From the Amazon Quick homepage, choose &lt;strong&gt;Topics&lt;/strong&gt;, then choose &lt;strong&gt;Create topic&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Enter a name for your topic. For this post, use &lt;strong&gt;Customer Revenue Analytics&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Enter a description. For example:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;em&gt;The Customer Revenue Analytics topic is designed for business users (including analysts, sales operations teams, finance, and market segment owners who need to explore customer and revenue data without SQL expertise. It serves as a natural language interface over the mv_customer_revenue Amazon Redshift dataset, allowing users to ask plain-English questions like “What are total revenues by market segment?” and receive instant, visualized answers. By automatically mapping business language to the underlying schema, it democratizes access to revenue insights across the organization.&lt;/em&gt;&lt;/p&gt; 
&lt;ol start="4"&gt; 
 &lt;li&gt;Under &lt;strong&gt;Dataset&lt;/strong&gt;, select &lt;code&gt;mv_customer_revenue&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Create&lt;/strong&gt;. The topic can take 15–30 minutes to enable depending on the data. During this time, Amazon Quick automatically analyzes your data, selects relevant fields, and adds synonyms.&lt;/li&gt; 
 &lt;li&gt;After the topic is enabled, take a few minutes to review and enrich it. The following are some example enrichments. 
  &lt;ol type="a"&gt; 
   &lt;li&gt;Add column descriptions to clarify field meaning for business users.&lt;/li&gt; 
   &lt;li&gt;Define preferred aggregations (for example, sum compared to average for revenue fields).&lt;/li&gt; 
   &lt;li&gt;Confirm which fields are &lt;strong&gt;Dimensions&lt;/strong&gt; and which are &lt;strong&gt;Measures&lt;/strong&gt;.&lt;/li&gt; 
  &lt;/ol&gt; &lt;/li&gt; 
 &lt;li&gt;(Optional) To further refine how your topic interprets and responds to queries, add multiple datasets (for example, a customer CSV combined with a database view), custom instructions, filters, and calculated fields.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;After your topic is created, its columns are available to add to a Space or to an Agent by selecting it as a data source.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full" src="https://d2908q01vomqb2.cloudfront.net/artifacts/DBSBlogs/BDB-5727/BDB-4727-12.gif" width="1920" height="888"&gt;&lt;br&gt; Figure 11: Create a Quick Topic&lt;/p&gt; 
&lt;h3&gt;Create a Space for your team&lt;/h3&gt; 
&lt;p&gt;Spaces bring together dashboards, topics, datasets, documents, and other resources into organized, collaborative workspaces. By centralizing related assets in a single workspace, Spaces reduce context-switching, accelerate onboarding, so everyone is working from the same trusted data sources.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;What to include in your Quick Space&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Dashboard&lt;/strong&gt; – Add the dashboard &lt;strong&gt;Market Segment Dashboard&lt;/strong&gt; published from your &lt;code&gt;mv_customer_revenue&lt;/code&gt; analysis. This gives team members instant access to visualizations such as revenue by market segment, top customers by order volume, and revenue distribution.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Topic&lt;/strong&gt; – Connect the &lt;a href="https://us-west-2.quicksight.aws.amazon.com/sn/topics/EDyPgicLVwCh1ZAUjrb6RJM8dNtA4yyQ/summary" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Customer Revenue Analytics&lt;/strong&gt;&lt;/a&gt; (built on the &lt;code&gt;mv_customer_revenue&lt;/code&gt; materialized view) to enable natural language queries directly against your Amazon Redshift data.&lt;/li&gt; 
 &lt;li&gt;Optionally, you can upload supporting context to ground your team’s analysis: 
  &lt;ul&gt; 
   &lt;li&gt;Data dictionary or field definitions for &lt;code&gt;mv_customer_revenue&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;Market segment definitions (AUTOMOBILE, BUILDING, FURNITURE, MACHINERY, HOUSEHOLD)&lt;/li&gt; 
   &lt;li&gt;Business rules for revenue calculation (for example, how discounts are applied in the TPC-H model)&lt;/li&gt; 
   &lt;li&gt;This implementation guide, so new team members can onboard quickly&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;To create the Quick Space&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;From the left navigation menu, choose &lt;strong&gt;Spaces&lt;/strong&gt;, then choose &lt;strong&gt;Create space&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Enter a name, for example, &lt;strong&gt;Customer Revenue &amp;amp; Segmentation&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Enter a description. For example:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Centralized workspace for customer revenue analysis powered by Amazon Redshift includes interactive dashboards, natural language query access to customer and segment data, and supports documentation for the TPC-H revenue model.&lt;/p&gt; 
&lt;ol start="4"&gt; 
 &lt;li&gt;Add knowledge by connecting the &lt;strong&gt;Market Segment Dashboard&lt;/strong&gt; and topic&lt;strong&gt; Customer Revenue Analytics&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;You can invite team members, such as finance, sales operations, and segment owners, and set appropriate permissions.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Your Space is now ready for collaborative data exploration.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full" src="https://d2908q01vomqb2.cloudfront.net/artifacts/DBSBlogs/BDB-5727/BDB-4727-13.gif" width="1920" height="888"&gt;&lt;br&gt; Figure 12: Create a Quick Space&lt;/p&gt; 
&lt;h3&gt;Build chat agents&lt;/h3&gt; 
&lt;p&gt;A custom chat agent delivers conversational AI experiences that understand business context and provide intelligent, grounded responses to user queries. These agents go beyond question-and-answer interactions. They synthesize knowledge from your dashboards, topics, datasets, and documents to explain trends, surface anomalies, guide users through complex analytics workflows, and recommend next steps.&lt;/p&gt; 
&lt;p&gt;Rather than requiring users to navigate multiple tools or write SQL queries, agents serve as a single conversational interface to your entire analytics environment. Agents can also connect to&amp;nbsp;&lt;strong&gt;Actions&lt;/strong&gt;, pre-built integrations with enterprise tools such as Slack, Microsoft Teams, Outlook, and SharePoint, enabling them to answer questions and trigger real-world workflows, send notifications, create tasks, and interact with external systems directly from the conversation. Custom agents can be tailored to specific business domains, teams, or use cases so that responses align with organizational terminology, data definitions, and business processes. After created, agents can be shared across teams, enabling consistent, actionable, AI-powered data access at scale. For teams working with the&amp;nbsp;&lt;code&gt;mv_customer_revenue&lt;/code&gt;&amp;nbsp;dataset, we recommend creating a dedicated&amp;nbsp;Customer Revenue Analysis Agent. This is a purpose-built conversational assistant grounded in your Amazon Redshift data, dashboards, and the Customer Revenue &amp;amp; Segmentation Space.&lt;/p&gt; 
&lt;h3&gt;Create a Quick chat agent&lt;/h3&gt; 
&lt;p&gt;There are two ways that you can use Amazon Quick to create a Quick agent. You can use the navigation menu or directly from Space. The following steps walk you through creating one from the navigation menu.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;To create a Quick chat agent&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;From the left navigation menu, choose &lt;strong&gt;Agents&lt;/strong&gt;, then choose &lt;strong&gt;Create agent&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Enter a name for your agent, for example, &lt;strong&gt;Customer Revenue Analyst&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Enter a description. For example:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;em&gt;An AI assistant for analyzing customer revenue, market segment performance, and order trends using our Amazon Redshift or data warehouse&lt;/em&gt;.&lt;/p&gt; 
&lt;ol start="4"&gt; 
 &lt;li&gt;Under &lt;strong&gt;Knowledge Sources&lt;/strong&gt;, add the &lt;strong&gt;Customer Revenue &amp;amp; Segmentation&lt;/strong&gt; Space as a data source. This gives your agent access to the dashboards, topics, and reference documents you’ve already built.&lt;/li&gt; 
 &lt;li&gt;(Optional) Define custom persona instructions to align the agent’s responses with your business context. For example, specifying preferred terminology, response style, or the types of questions it should prioritize.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Launch chat agent&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Start having a conversation with your data. You are welcome to ask any questions. The following are some examples. 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Which market segment generated most revenue? &lt;/em&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Show me order trends&lt;/em&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full" src="https://d2908q01vomqb2.cloudfront.net/artifacts/DBSBlogs/BDB-5727/BDB-4727-14.gif" width="1920" height="888"&gt;&lt;br&gt; Figure 13: Create a Quick Chat agent&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;To share your Quick chat agent&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;After your agent is published, choose &lt;strong&gt;Share&lt;/strong&gt; and invite team members or share it across your organization. Custom agents can be tailored to specific business contexts so that different teams can get AI assistance that speaks their language, without needing to configure anything themselves.&lt;/p&gt; 
&lt;h3&gt;Create Quick Flows&lt;/h3&gt; 
&lt;p&gt;Quick Flows automate repetitive tasks and orchestrate multi-step workflows across your entire analytics environment. This removes manual effort, reducing human error, and ensuring consistent execution of critical business processes. Flows can be triggered on a schedule or launched on demand, giving you flexible control over when and how automation runs.&lt;/p&gt; 
&lt;p&gt;You can build flows that span the full analytics lifecycle: monitoring data quality and flagging anomalies, generating and distributing scheduled reports to stakeholders, and triggering downstream actions in integrated systems such as Slack, Outlook. Amazon Quick gives you three ways to create a flow, so whether you prefer a no-code conversation or a visual step-by-step builder, there’s an option that fits how you work.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;To create a flow from chat&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;While conversing with My Assistant or a custom agent, describe the workflow that you want to automate in plain English.&lt;/li&gt; 
 &lt;li&gt;Amazon Quick generates the flow and offers to create it directly from your conversation — no configuration screens required.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;strong&gt;To create a flow from a natural language description&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;From the left navigation menu, choose &lt;strong&gt;Flows&lt;/strong&gt;, then choose &lt;strong&gt;Create flow&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Enter a plain-English description of your workflow. For example:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;” Query revenue data by market segments. Filter by order count and all dates. Search web for comparable relevant market trends. Generate formatted summary reports providing market summary and look ahead per segment. ”&lt;/p&gt; 
&lt;ol start="3"&gt; 
 &lt;li&gt;Amazon Quick automatically generates the complete workflow with all the necessary steps.&lt;/li&gt; 
 &lt;li&gt;Optionally, you can add additional steps.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Run Mode&lt;/strong&gt; to test the Flow.&lt;/li&gt; 
 &lt;li&gt;After your flow is created, share it with team members or publish it to your organization’s flow library, so everyone benefits from the same automation without having to rebuild it independently.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full" src="https://d2908q01vomqb2.cloudfront.net/artifacts/DBSBlogs/BDB-5727/BDB-4727-15.gif" width="1920" height="888"&gt;&lt;br&gt; Figure 14: Create a Quick Flow to generate summaries and publish dashboards&lt;/p&gt; 
&lt;p&gt;For more complex flow, review weekly customer revenue summary flow as an example.&lt;/p&gt; 
&lt;ol start="7"&gt; 
 &lt;li&gt;Queries the &lt;code&gt;mv_customer_revenue&lt;/code&gt; materialized view in Amazon Redshift for the latest weekly revenue figures by market segment.&lt;/li&gt; 
 &lt;li&gt;Compares results against the prior week to calculate segment-level variance.&lt;/li&gt; 
 &lt;li&gt;Generates a formatted summary report and publishes it to the Customer Revenue &amp;amp; Segmentation Space.&lt;/li&gt; 
 &lt;li&gt;Sends a notification through email or Slack to finance, sales operations, and segment owners with a direct link to the updated dashboard.&lt;/li&gt; 
 &lt;li&gt;Flags any segment where revenue has declined more than a defined threshold, routing an alert to the appropriate owner for follow-up.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;This flow transforms what might otherwise be a manual, multi-step reporting process into a fully automated pipeline, so stakeholders receive consistent, timely revenue insights without analyst intervention and saving analysts an estimated &lt;strong&gt;3–5 hours per week&lt;/strong&gt;. For detailed guidance on creating and managing flows, see &lt;a href="https://docs.aws.amazon.com/quicksuite/latest/userguide/using-amazon-quick-flows.html" target="_blank" rel="noopener noreferrer"&gt;Using Amazon Quick Flows&lt;/a&gt;. Also review &lt;a href="https://youtu.be/nUUS3iYUQi0" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Create workflows for routine tasks&lt;/strong&gt;&lt;/a&gt; demo&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt; 
&lt;h2&gt;Cleanup&lt;/h2&gt; 
&lt;p&gt;Consider deleting the following resources created while following this post to avoid incurring costs. We encourage you to use the trials at no cost as much as possible to familiarize yourself with the features described.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Delete the Amazon Redshift Serverless &lt;a href="https://docs.aws.amazon.com/redshift/latest/mgmt/serverless_delete-workgroup.html" target="_blank" rel="noopener noreferrer"&gt;workgroup&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-console-namespace-delete.html" target="_blank" rel="noopener noreferrer"&gt;namespace&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Delete &lt;a href="https://docs.aws.amazon.com/athena/latest/ug/deleting-workgroups.html" target="_blank" rel="noopener noreferrer"&gt;Athena workgroup&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html" target="_blank" rel="noopener noreferrer"&gt;S3 Buckets&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Delete the &lt;a href="https://docs.aws.amazon.com/quick/latest/userguide/troubleshoot-delete-quicksight-account.html" target="_blank" rel="noopener noreferrer"&gt;Amazon Quick account&lt;/a&gt; used while following this post. If you used an existing account, delete the data sets, dashboards, topics, spaces, agents and flows created.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;This integrated approach to business intelligence combines the power of AWS SQL analytics engines with Amazon Quick generative AI capabilities to deliver comprehensive analytics solutions. By following these implementation steps, you establish a foundation for traditional BI reporting, interactive dashboards, natural language data exploration, and intelligent workflow automation. The architecture scales from proof-of-concept implementations to production deployments, transforming how organizations access and act on data insights. For more information about Amazon Quick features and capabilities, see the &lt;a href="https://docs.aws.amazon.com/quick/" target="_blank" rel="noopener noreferrer"&gt;Amazon Quick documentation&lt;/a&gt;. To learn more about Amazon Redshift, visit the &lt;a href="https://aws.amazon.com/redshift/" target="_blank" rel="noopener noreferrer"&gt;Amazon Redshift product page&lt;/a&gt;. For Amazon Athena details, see the &lt;a href="https://aws.amazon.com/athena/" target="_blank" rel="noopener noreferrer"&gt;Amazon Athena product page&lt;/a&gt;.&lt;/p&gt; 
&lt;hr style="width: 80%"&gt; 
&lt;h2&gt;About the authors&lt;/h2&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="alignnone size-full wp-image-85290" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2025/11/18/internal-cdn.amazon.jpg" alt="" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;“Satesh Sonti”&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/satish-kumar-sonti/" target="_blank" rel="noopener"&gt;Satesh&lt;/a&gt; is a Principal Analytics Specialist Solutions Architect based in Atlanta, specializing in building enterprise data platforms, data warehousing, and analytics solutions. He has over 20 years of experience in building data assets and leading complex data platform programs for banking and insurance clients across the globe.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="alignnone size-full wp-image-89736" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/02/ramonlopez.jpeg" alt="" width="100" height="133"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;“Ramon Lopez”&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/ramonjose/" target="_blank" rel="noopener"&gt;Ramon Lopez&lt;/a&gt; is a Principal Solutions Architect for Amazon Quick. With many years of experience building BI solutions and a background in accounting, he loves working with customers, creating solutions, and making world-class services. When not working, he prefers to be outdoors in the ocean or up on a mountain.&lt;/p&gt; 
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Agentic AI for observability and troubleshooting with Amazon OpenSearch Service</title>
		<link>https://aws.amazon.com/blogs/big-data/agentic-ai-for-observability-and-troubleshooting-with-amazon-opensearch-service/</link>
					
		
		<dc:creator><![CDATA[Muthu Pitchaimani]]></dc:creator>
		<pubDate>Thu, 02 Apr 2026 21:44:17 +0000</pubDate>
				<category><![CDATA[Amazon Bedrock AgentCore]]></category>
		<category><![CDATA[Amazon OpenSearch Service]]></category>
		<category><![CDATA[Analytics]]></category>
		<guid isPermaLink="false">ed1d3f381488d96c6acb8c9b6f81bbfda0729f33</guid>

					<description>Now, Amazon OpenSearch Service brings three new agentic AI features to OpenSearch UI. In this post, we show how these capabilities work together to help engineers go from alert to root cause in minutes. We also walk through a sample scenario where the Investigation Agent automatically correlates data across multiple indices to surface a root cause hypothesis.</description>
										<content:encoded>&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html" target="_blank" rel="noopener noreferrer"&gt;Amazon OpenSearch Service&lt;/a&gt; powers observability workflows for organizations, giving their Site Reliability Engineering (SRE) and DevOps teams a single pane of glass to aggregate and analyze telemetry data.&amp;nbsp;During incidents, correlating signals and identifying root causes demand deep expertise in log analytics and hours of manual work. Identifying the root cause remains largely manual. For many teams, this is the bottleneck that delays service recovery and burns engineering resources.&lt;/p&gt; 
&lt;p&gt;We recently showed how to &lt;a href="https://aws.amazon.com/blogs/big-data/reduce-mean-time-to-resolution-with-an-observability-agent/" target="_blank" rel="noopener noreferrer"&gt;build an Observability Agent &lt;/a&gt;using &lt;a href="https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html" target="_blank" rel="noopener noreferrer"&gt;Amazon OpenSearch Service&lt;/a&gt; and &lt;a href="https://aws.amazon.com/bedrock/" target="_blank" rel="noopener noreferrer"&gt;Amazon Bedrock&lt;/a&gt; to reduce Mean time to Resolution (MTTR).&amp;nbsp; Now, Amazon OpenSearch Service brings many of these functions to the &lt;a href="https://docs.aws.amazon.com/opensearch-service/latest/developerguide/application.html" target="_blank" rel="noopener noreferrer"&gt;OpenSearch UI&lt;/a&gt;—no additional infrastructure required.&amp;nbsp;Three new agentic AI features are offered to streamline and accelerate MTTR:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;An &lt;strong&gt;Agentic Chatbot&lt;/strong&gt; that can access the context and the underlying data that you’re looking at, apply agentic reasoning, and use tools to query data and generate insights on your behalf.&lt;/li&gt; 
 &lt;li&gt;An&lt;strong&gt; Investigation Agent&lt;/strong&gt; that deep-dives across signal data with hypothesis-driven analysis, explaining its reasoning at every step.&lt;/li&gt; 
 &lt;li&gt;An &lt;strong&gt;Agentic Memory&lt;/strong&gt; that supports both agents, so their accuracy and speed improve the more you use them.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;In this post, we show how these capabilities work together to help engineers go from alert to root cause in minutes. We also walk through a sample scenario where the Investigation Agent automatically correlates data across multiple indices to surface a root cause hypothesis.&lt;/p&gt; 
&lt;h2&gt;How the agentic AI capabilities work together&lt;/h2&gt; 
&lt;p&gt;These AI capabilities are accessible from &lt;a href="https://docs.aws.amazon.com/opensearch-service/latest/developerguide/application.html" target="_blank" rel="noopener noreferrer"&gt;OpenSearch UI&lt;/a&gt;&amp;nbsp;through an &lt;strong&gt;Ask AI&lt;/strong&gt; button, as shown in the following diagram, which gives an entry point for the&amp;nbsp;&lt;strong&gt;Agentic Chatbot&lt;/strong&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89637" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/01/BDB-5859-image-1.jpg" alt="" width="2560" height="1029"&gt;&lt;/p&gt; 
&lt;h3&gt;Agentic Chatbot&lt;/h3&gt; 
&lt;p&gt;To open the chatbot interface, choose Ask AI.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89638" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/01/BDB-5859-image-2.jpg" alt="" width="1274" height="1358"&gt;&lt;/p&gt; 
&lt;p&gt;The chatbot understands the context of the current page, so it understands what you’re looking at before you ask a question. You can ask questions about your data, initiate an investigation, or ask the chatbot to explain a concept. After it understands your request, the chatbot plans and uses tools to access data, including generating and running queries in the Discover page, and applies reasoning to produce a data-driven answer. You can also use the chatbot in the Dashboard page, initiating conversations from a particular visualization to get a summary as shown in the following image.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89639" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/01/BDB-5859-image-3.jpg" alt="" width="2560" height="1401"&gt;&lt;/p&gt; 
&lt;h3&gt;Investigation agent&lt;/h3&gt; 
&lt;p&gt;Many incidents are too complex to resolve with one or two queries. Now you can get the help of the investigation agent to handle these complex situations. The investigation agent uses&amp;nbsp;the &lt;a href="https://docs.opensearch.org/latest/ml-commons-plugin/agents-tools/agents/plan-execute-reflect/" target="_blank" rel="noopener noreferrer"&gt;plan-execute-reflect agent&lt;/a&gt;, which is designed for solving complex tasks that require iterative reasoning and step-by-step execution.&amp;nbsp;It uses a Large Language Model (LLM) as a planner and another LLM as an executor. When an engineer identifies a suspicious observation, like an error rate spike or a latency anomaly, they can ask the investigation agent to investigate. One of the important steps the investigation agent performs is re-evaluation. The agent, after executing each step, reevaluates the plan using the planner and the intermediate results. The planner can adjust the plan if necessary or skip a step or dynamically add steps based on this new information. Using the planner, the agent generates a root cause analysis report led by the most likely hypothesis and recommendations, with full agent traces showing every reasoning step, all findings, and how they support the final hypotheses. You can provide feedback, add your own findings, iterate on the investigation goal, and review and validate each step of the agent’s reasoning. This approach mirrors how experienced incident responders work, but completes automatically in minutes. You can also use the “/investigate” slash command to initiate an investigation directly from the chatbot, building on an ongoing conversation or starting with a different investigation goal.&lt;/p&gt; 
&lt;h2&gt;Agent in action&lt;/h2&gt; 
&lt;h3&gt;Automatic query generation&lt;/h3&gt; 
&lt;p&gt;Consider a situation where you’re&amp;nbsp;an SRE or DevOps engineer&amp;nbsp;and received an alert that a key service is experiencing elevated latency. You log in to the OpenSearch UI, navigate to the Discover page, and select the Ask AI button. Without any expertise in the Piped Processing Language (PPL) query language, you enter the question “find all requests with latency greater than 10 seconds”. The chatbot understands the context and the data that you’re looking at, thinks through the request, generates the right PPL command, and updates it in the query bar to get you the results. And if the query runs into any errors, the chatbot can learn about the error, self-correct, and iterate on the query to get the results for you.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89640" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/01/BDB-5859-image-4.jpg" alt="" width="2560" height="1172"&gt;&lt;/p&gt; 
&lt;h3&gt;Investigation and investigation management&lt;/h3&gt; 
&lt;p&gt;For complex incidents that normally require manually analyzing and correlating multiple logs for the possible root cause, you can choose &lt;strong&gt;Start Investigation&lt;/strong&gt; to initiate the investigation agent. You can provide a goal for the investigation, along with any context or hypothesis that you want to instruct the investigation. For example, “identify the root cause of widespread high latency across services. Use TraceIDs from slow spans to correlate with detailed log entries in the related log indices. Analyze affected services, operations, error patterns, and any infrastructure or application-level bottlenecks without sampling&lt;strong&gt;”.&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89641" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/01/BDB-5859-image-5.jpg" alt="" width="636" height="358"&gt;&lt;/p&gt; 
&lt;p&gt;The agent, as part of the conversation, will offer to investigate any issue that you’re trying to debug.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89642" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/01/BDB-5859-image-6.jpg" alt="" width="1426" height="1356"&gt;&lt;/p&gt; 
&lt;p&gt;The agent sets goals for itself along with any other relevant information like indices, associated time range, and other, and asks for your confirmation before creating a &lt;em&gt;Notebook&lt;/em&gt; for this investigation. A Notebook&amp;nbsp;is a way within the OpenSearch UI to develop a rich report that’s live and collaborative. This helps with the management of the investigation and allows for reinvestigation at a later date if necessary.&lt;/p&gt; 
&lt;p&gt;After the investigation starts, the agent will&amp;nbsp;perform a quick analysis by log sequence and data distribution to surface outliers. Then, it will plan for the investigation into a series of actions, and then performs each action, such as query for a specific log type and time range. It will reflect on the results at every step, and iterate on the plan until it reaches the most likely hypotheses. Intermediate results will appear on the same page as the agent works so that you can follow the reasoning in real time. For example, you find that the Investigation Agent accurately mapped out the service topology and used it as a key intermediary steps for the investigation.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89643" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/01/BDB-5859-image-7.jpg" alt="" width="1942" height="1748"&gt;&lt;/p&gt; 
&lt;p&gt;As the investigation completes, the investigation agent concludes that the most likely hypothesis is&amp;nbsp;a fraud detection timeout. The associated finding shows a log entry from the payment service: “currency amount is too big, waiting for fraud detection”. This matches a known system design where large transactions trigger a fraud detection call that blocks the request until the&amp;nbsp;transaction is scored and assessed. The agent arrived at this finding by correlating data across two separate indices, a metrics index where the original duration data lived, and a correlated log index where the payment service entries were stored. The agent linked these indices using trace IDs, connecting the latency measurement to the specific log entry that explained it.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89644" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/01/BDB-5859-image-8.jpg" alt="" width="2560" height="1644"&gt;&lt;/p&gt; 
&lt;p&gt;After reviewing the hypothesis and the supporting evidence, you find the result reasonable and aligns with your domain knowledge and past experiences with similar issues. You can now accept the hypothesis and review the request flow topology for the affected traces that were provided as part of the hypothesis investigation.&lt;/p&gt; 
&lt;p&gt;Alternatively, if you find that the initial hypothesis wasn’t helpful, you can review the alternative hypothesis at the bottom of the report and select any of the alternative hypotheses if there’s one that’s more accurate. You can also trigger a re-investigation with additional inputs, or corrections from previous input so that the Investigation Agent can rework it.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89645" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/01/BDB-5859-image-9.jpg" alt="" width="660" height="612"&gt;&lt;/p&gt; 
&lt;h2&gt;Getting started&lt;/h2&gt; 
&lt;p&gt;You can use any of the new agentic AI features (limits apply) in the OpenSearch UI at no cost.&amp;nbsp;You will find the new agentic AI features ready to use in your OpenSearch UI applications, unless you have previously disabled AI features in any OpenSearch Service domains in your account.&amp;nbsp;To enable or disable the AI features, you can navigate to the details page of the OpenSearch UI application in AWS Management Console and update the AI settings from there. Alternatively, you can also use the &lt;code&gt;registerCapability&lt;/code&gt; API to enable the AI features or use the &lt;code&gt;deregisterCapability&lt;/code&gt; API to disable them.&amp;nbsp;Learn more at&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/opensearch-service/latest/developerguide/application-ai-assistant.html" target="_blank" rel="noopener noreferrer"&gt;Agentic AI in Amazon OpenSearch Services&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The agentic AI feature uses the identity and permissions of the logged in users for authorizing access to the connected data sources. Make sure that your users have the necessary permissions to access the data sources. For more information, see&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/opensearch-service/latest/developerguide/application-getting-started.html" target="_blank" rel="noopener noreferrer"&gt;Getting Started with OpenSearch UI&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The investigation results are saved in the metadata system of OpenSearch UI and encrypted with a service managed key. Optionally, you can configure a customer managed key to encrypt all of the metadata with your own key. For more information, see &lt;a href="https://docs.aws.amazon.com/opensearch-service/latest/developerguide/application-encryption-cmk.html" target="_blank" rel="noopener noreferrer"&gt;Encryption and Customer Managed Key with OpenSearch UI&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The AI features are powered by Claude Sonnet 4.6 model in Amazon Bedrock. Learn more at&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/bedrock/latest/userguide/data-protection.html" target="_blank" rel="noopener noreferrer"&gt;Amazon Bedrock Data Protection&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;The new agentic AI capabilities announced for Amazon OpenSearch Service help reduce Mean Time to Resolution by providing context-aware agentic chatbot for assistance, hypothesis-driven investigations with full explainability, and agentic memory for context consistency. With the new agentic AI capabilities, your engineering team can spend less time writing queries and correlating signals, and more time acting on confirmed root causes. We invite you to explore these capabilities and experiment with your applications today.&lt;/p&gt; 
&lt;hr style="width: 80%"&gt; 
&lt;h2&gt;About the authors&lt;/h2&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="alignnone size-full wp-image-89646" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/01/BDB-5859-image-10.jpg" alt="" width="119" height="163"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Muthu Pitchaimani&lt;/h3&gt; 
  &lt;p&gt;Muthu is a Search Specialist with Amazon OpenSearch Service. He builds large-scale search applications and solutions. Muthu is interested in the topics of networking and security, and is based out of Austin, Texas.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="alignnone size-full wp-image-89647" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/01/BDB-5859-image-11.jpg" alt="" width="125" height="164"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Hang (Arthur) Zuo&lt;/h3&gt; 
  &lt;p&gt;Arthur is a Senior Product Manager with Amazon OpenSearch Service. Arthur leads OpenSearch UI platform and agentic AI features for observability and search use cases. Arthur is interested in the topics of Agentic AI and data products.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="alignnone size-full wp-image-89648" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/04/01/BDB-5859-image-12.jpg" alt="" width="117" height="157"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Mikhail Vaynshteyn&lt;/h3&gt; 
  &lt;p&gt;Mikhail is a Solutions Architect with Amazon Web Services. Mikhail works with healthcare and life sciences customers and specializes in data analytics services. Mikhail has more than 20 years of industry experience covering a wide range of technologies and sectors.&lt;/p&gt; 
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Streamline Apache Kafka topic management with Amazon MSK</title>
		<link>https://aws.amazon.com/blogs/big-data/streamline-apache-kafka-topic-management-with-amazon-msk/</link>
					
		
		<dc:creator><![CDATA[Swapna Bandla]]></dc:creator>
		<pubDate>Thu, 02 Apr 2026 15:32:26 +0000</pubDate>
				<category><![CDATA[Advanced (300)]]></category>
		<category><![CDATA[Amazon Managed Streaming for Apache Kafka (Amazon MSK)]]></category>
		<category><![CDATA[Technical How-to]]></category>
		<guid isPermaLink="false">ad1a9cd24dfcf01687f2d298e6f11890cb9809d4</guid>

					<description>In this post, we show you how to use the new topic management capabilities of Amazon MSK to streamline your Apache Kafka operations. We demonstrate how to manage topics through the console, control access with AWS Identity and Access Management (IAM), and bring topic provisioning into your continuous integration and continuous delivery (CI/CD) pipelines.</description>
										<content:encoded>&lt;p&gt;If you manage Apache Kafka today, you know the effort required to manage topics. Whether you use infrastructure as code (IaC) solutions or perform operations with admin clients, setting up topic management takes valuable time that could be spent on building streaming applications.&lt;/p&gt; 
&lt;p&gt;&lt;a href="https://aws.amazon.com/msk/" target="_blank" rel="noopener noreferrer"&gt;Amazon Managed Streaming for Apache Kafka&lt;/a&gt; (Amazon MSK) now streamlines topic management by supporting new topic APIs and console integration. You can programmatically create, update, and delete Apache Kafka topics using familiar interfaces including &lt;a href="https://aws.amazon.com/cli/" target="_blank" rel="noopener noreferrer"&gt;AWS Command Line Interface&lt;/a&gt; (AWS CLI), &lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/API/sdk-general-information-section.html" target="_blank" rel="noopener noreferrer"&gt;AWS SDKs&lt;/a&gt;, and &lt;a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html" target="_blank" rel="noopener noreferrer"&gt;AWS CloudFormation&lt;/a&gt;. With these APIs, you can define topic properties such as replication factor and partition count and configuration settings like retention and cleanup policies. The Amazon MSK console integrates these APIs, bringing all topic operations to one place. You can now create or update topics with a few selections using guided defaults while gaining comprehensive visibility into topic configurations, partition-level information, and metrics. You can browse for topics within a cluster, review replication settings and partition counts, and go into individual topics to examine detailed configuration, partition-level information, and metrics. A unified dashboard consolidates partition topics and metrics in one view.&lt;/p&gt; 
&lt;p&gt;In this post, we show you how to use the new topic management capabilities of Amazon MSK to streamline your Apache Kafka operations. We demonstrate how to manage topics through the console, control access with &lt;a href="https://aws.amazon.com/iam/" target="_blank" rel="noopener noreferrer"&gt;AWS Identity and Access Management (IAM)&lt;/a&gt;, and bring topic provisioning into your continuous integration and continuous delivery (CI/CD) pipelines.&lt;/p&gt; 
&lt;h2&gt;Prerequisites&lt;/h2&gt; 
&lt;p&gt;To get started with topic management, you need:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;An active AWS account with appropriate IAM permissions for Amazon MSK.&lt;/li&gt; 
 &lt;li&gt;An existing Amazon MSK Express or Standard cluster using Apache Kafka version 3.6 and above.&lt;/li&gt; 
 &lt;li&gt;Basic familiarity with Apache Kafka concepts like topics, partitions, and replication.&lt;/li&gt; 
 &lt;li&gt;AWS CLI installed and configured (for command line examples).&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Creating topics&lt;/h2&gt; 
&lt;p&gt;The MSK console provides a guided experience with sensible defaults while still offering advanced configuration options when you need them.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Navigate to the &lt;a href="http://console.aws.amazon.com/msk" target="_blank" rel="noopener noreferrer"&gt;Amazon MSK console&lt;/a&gt; and select your cluster.&lt;/li&gt; 
 &lt;li&gt;Choose the &lt;strong&gt;Topics&lt;/strong&gt; tab, then choose &lt;strong&gt;Create topic&lt;/strong&gt;.&lt;br&gt; &lt;img loading="lazy" class="aligncenter wp-image-89205 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5775-1.png" alt="" width="939" height="420"&gt;&lt;/li&gt; 
 &lt;li&gt;Enter a topic name (for example, &lt;code&gt;customer-orders&lt;/code&gt;).&lt;/li&gt; 
 &lt;li&gt;Specify the number of partitions (use the guided defaults or customize based on your needs).&lt;/li&gt; 
 &lt;li&gt;Set the replication factor. Note that Express brokers improve the availability and durability of your Amazon MSK clusters by setting values for critical configurations and protecting them from common misconfiguration. If you try to create a topic with a replication factor value other than 3, Amazon MSK Express will create the topic with a replication factor of 3 by default.&lt;/li&gt; 
 &lt;li&gt;(Optional) Configure advanced settings like retention period or message size limits.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Create topic&lt;/strong&gt;.&lt;br&gt; &lt;img loading="lazy" class="aligncenter wp-image-89206 size-full" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5775-2.png" alt="" width="939" height="699"&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;The console validates your configuration and creates the topic. You can create multiple topics simultaneously with the same configuration settings. These topic API responses reflect data that updates approximately every minute. For the most current topic state after making changes, wait approximately one minute before querying.&lt;/p&gt; 
&lt;h2&gt;Configuration considerations&lt;/h2&gt; 
&lt;p&gt;When choosing configuration options, consider your workload requirements:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;You can configure more partitions to achieve higher throughput but this requires more broker resources. Refer to &lt;a href="https://docs.aws.amazon.com/msk/latest/developerguide/bestpractices.html" target="_blank" rel="noopener noreferrer"&gt;Best practices for Standard brokers&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/msk/latest/developerguide/limits.html#msk-express-quota" target="_blank" rel="noopener noreferrer"&gt;Amazon MSK Express broker quota&lt;/a&gt; for more information on partition limits.&lt;/li&gt; 
 &lt;li&gt;With Standard brokers you can improve durability by configuring higher replication factors, though this will increase your storage costs. Refer to “Build highly available clusters” in &lt;a href="https://docs.aws.amazon.com/msk/latest/developerguide/bestpractices.html" target="_blank" rel="noopener noreferrer"&gt;Best practices for Standard brokers&lt;/a&gt; for more information on replication factors.&lt;/li&gt; 
 &lt;li&gt;Standard brokers support the full range of Apache Kafka topic configurations.&lt;/li&gt; 
 &lt;li&gt;Express brokers offer a curated set of the most important settings. Refer to &lt;a href="https://docs.aws.amazon.com/msk/latest/developerguide/msk-configuration-express-read-write.html#msk-configuration-express-topic-configuration" target="_blank" rel="noopener noreferrer"&gt;Topic-level configurations on Express Brokers&lt;/a&gt; for more information.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Viewing and monitoring topics&lt;/h2&gt; 
&lt;p&gt;After you create topics, the MSK console provides comprehensive visibility into their configuration. When you select a specific topic, you will see detailed information:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Partitions tab&lt;/strong&gt;: Shows the distribution of partitions across brokers, including leader assignments and in-sync replica status showcasing Broker IDs for leader and replicas.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Configuration tab&lt;/strong&gt;: Displays all topic-level configuration settings.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Monitoring tab&lt;/strong&gt;: Integrates with Amazon CloudWatch to show metrics like bytes in/out, message rates, and consumer lag.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;img loading="lazy" class="aligncenter wp-image-89207 size-large" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5775-3-1024x598.png" alt="" width="1024" height="598"&gt;&lt;/p&gt; 
&lt;h2&gt;Updating topic configurations&lt;/h2&gt; 
&lt;p&gt;As your workload requirements evolve, you might need to adjust topic configurations. You can modify various topic settings depending on your cluster type. For example:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Retention settings: Adjust &lt;code&gt;retention.ms&lt;/code&gt; (time-based) or &lt;code&gt;retention.bytes&lt;/code&gt; (size-based) to control how long messages are retained.&lt;/li&gt; 
 &lt;li&gt;Message size limits: Modify &lt;code&gt;max.message.bytes&lt;/code&gt; to accommodate larger or smaller messages.&lt;/li&gt; 
 &lt;li&gt;Compression: Change &lt;code&gt;compression.type&lt;/code&gt; to optimize storage and network usage.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Configuration changes take effect immediately for new messages. Existing messages remain subject to the previous configuration until they age out or are consumed.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="aligncenter wp-image-89208 size-full" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5775-4.png" alt="" width="955" height="608"&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="aligncenter wp-image-89209 size-full" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5775-5.png" alt="" width="955" height="567"&gt;&lt;/p&gt; 
&lt;h2&gt;Deleting topics&lt;/h2&gt; 
&lt;p&gt;Amazon MSK also provides APIs for deleting topics that are no longer in use. Before deleting a topic, verify that:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;No active producers are writing to the topic&lt;/li&gt; 
 &lt;li&gt;All consumers have finished processing messages&lt;/li&gt; 
 &lt;li&gt;You have backups if you need to retain the data&lt;/li&gt; 
 &lt;li&gt;Downstream applications won’t be impacted&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: Topic deletion permanently removes all messages in the topic.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="aligncenter wp-image-89210 size-large" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5775-6-1024x637.png" alt="" width="1024" height="637"&gt;&lt;/p&gt; 
&lt;h2&gt;Control access with IAM&lt;/h2&gt; 
&lt;p&gt;Beyond streamlining topic operations, you also need appropriate access controls. Access control uses IAM, so you define permissions using the same model that you apply to other AWS resources. Amazon MSK uses a two-level permission model:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Resource-level permissions: An IAM policy that enforces which operations the cluster will allow&lt;/li&gt; 
 &lt;li&gt;Principal-level permissions: IAM policies attached to Roles or Users that enforce which operations a principal is allowed to perform on a cluster&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;With this separation, you can control access depending on your organizational needs and access patterns for your cluster. Refer to the &lt;a href="https://docs.aws.amazon.com/msk/latest/developerguide/msk-topic-operations-information.html#topic-operations-permissions" target="_blank" rel="noopener noreferrer"&gt;IAM permissions&lt;/a&gt; documentation for IAM permissions required for topic management for the Amazon MSK cluster.&lt;/p&gt; 
&lt;p&gt;You can grant your operations team broad access to manage all topics and restrict application teams to manage only their own topics. The permission granularity that you need is available through standard IAM policies. If you’ve already configured IAM permissions for Apache Kafka topics, they work immediately with the new functionality without any migration or reconfiguration.&lt;/p&gt; 
&lt;p&gt;Here is a sample IAM policy definition that allows Describe Topic API&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-code"&gt;{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:Connect"
            ],
            "Resource": [
                "arn:aws:kafka:us-east-1:111111111111:cluster/iam-auth-acl-test/a6b5c6d5-f74f-4dbc-ad14-63fb5e87fe4f-2"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:DescribeTopic",
                "kafka-cluster:DescribeTopicDynamicConfiguration"
            ],
            "Resource": [
                "arn:aws:kafka:us-east-1:111111111111:topic/iam-auth-acl-test/a6b5c6d5-f74f-4dbc-ad14-63fb5e87fe4f-2/*"
            ]
        }
    ]
}&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;This IAM policy grants the necessary permissions to describe Kafka topics in your Amazon MSK cluster. The policy includes three key permissions:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;kafka-cluster:Connect&lt;/code&gt; – Allows connection to the specified MSK cluster&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;kafka-cluster:DescribeTopic&lt;/code&gt; – Enables viewing topic details&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;kafka-cluster:DescribeTopicDynamicConfiguration&lt;/code&gt; – Enables viewing topic dynamic configuration&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The policy is scoped to a specific cluster ARN and applies to all topics within that cluster using the wildcard pattern &lt;code&gt;/*&lt;/code&gt;. Replace the placeholder Amazon MSK cluster ARN with your MSK cluster ARN.&lt;/p&gt; 
&lt;h2&gt;Infrastructure as Code&lt;/h2&gt; 
&lt;p&gt;If you manage infrastructure as code (IaC), you can now define topics alongside clusters in your CloudFormation templates:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-code"&gt;Resources:
    OrdersTopic:
      Type: AWS::MSK::Topic
      Properties:
        ClusterArn: !GetAtt MyMSKCluster.Arn
        TopicName: orders
        NumPartitions: 6
        ReplicationFactor: 3
        Config:
          retention.ms: "604800000"&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;This approach brings topic provisioning into your CI/CD pipelines.&lt;/p&gt; 
&lt;h2&gt;Availability and pricing&lt;/h2&gt; 
&lt;p&gt;The new Amazon MSK topic management experience is available today for Standard and Express Amazon MSK clusters using Apache Kafka version 3.6 and above in all AWS Regions where Amazon MSK is offered, at no additional cost.&lt;/p&gt; 
&lt;h2&gt;Cleanup&lt;/h2&gt; 
&lt;p&gt;To avoid incurring additional charges to your AWS account, ensure you delete all resources created during this tutorial, including:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Amazon MSK cluster&lt;/li&gt; 
 &lt;li&gt;Any Kafka topics created&lt;/li&gt; 
 &lt;li&gt;Associated AWS resources (security groups, VPCs, etc., if created specifically for this blog)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Remember to verify that all resources have been successfully removed to prevent ongoing costs.&lt;/p&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;Topic management has been a persistent pain point for Apache Kafka operations. The new integrated experience in Amazon MSK now reduces operational friction by bringing topic operations into the AWS tools that you use every day. You now have a consistent, streamlined way to handle these operations for all Apache Kafka topics across multiple MSK clusters. This capability reflects our commitment to reducing operational complexity in Apache Kafka. You get the reliability and performance of Apache Kafka without the operational overhead that traditionally comes with it. Your team spends less time on infrastructure maintenance and more time building streaming applications that drive your business forward.&lt;/p&gt; 
&lt;p&gt;Ready to start streamlining your topic management? Start managing your topics today through the Amazon MSK console or by visiting the &lt;a href="https://docs.aws.amazon.com/msk/latest/developerguide/msk-topic-operations-information.html" target="_blank" rel="noopener noreferrer"&gt;Amazon MSK documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;hr style="width: 80%"&gt; 
&lt;h2&gt;About the authors&lt;/h2&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="alignnone size-thumbnail wp-image-85003" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2025/11/08/swapnaba-100x133.jpg" alt="" width="100" height="133"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Swapna Bandla&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/swapnabandla/" target="_blank" rel="noopener noreferrer"&gt;Swapna&lt;/a&gt; is a Senior Streaming Solutions Architect at AWS. With a deep understanding of real-time data processing and analytics, she partners with customers to architect scalable, cloud-native solutions that align with AWS Well-Architected best practices. Swapna is passionate about helping organizations unlock the full potential of their data to drive business value. Beyond her professional pursuits, she cherishes quality time with her family.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="alignnone size-full wp-image-89475" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/24/bdb-5775-mmehrten-headshot.png" alt="" width="100" height="107"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Mazrim Mehrtens&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/mmehrtens/" target="_blank" rel="noopener noreferrer"&gt;Mazrim&lt;/a&gt; is a Sr. Specialist Solutions Architect for messaging and streaming workloads. They work with customers to build and support systems that process and analyze terabytes of streaming data in real time, run enterprise Machine Learning pipelines, and create systems to share data across teams seamlessly with varying data toolsets and software stacks.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="alignnone size-thumbnail wp-image-89211" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/Screenshot-2026-03-20-at-4.25.49 PM-100x133.png" alt="" width="100" height="133"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Judy Huang&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/judy-jun-h-9920b99a/" target="_blank" rel="noopener noreferrer"&gt;Judy&lt;/a&gt; is a Senior Product Manager for Amazon Managed Streaming for Apache Kafka (MSK) at AWS. She is passionate about real-time data systems and helping organizations unlock the value of streaming data at scale. Her work focuses on improving how customers manage Kafka infrastructure and building capabilities that make streaming platforms more accessible, resilient, and integrated with the broader data ecosystem.&lt;/p&gt; 
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>How to set up an air-gapped VPC for Amazon SageMaker Unified Studio</title>
		<link>https://aws.amazon.com/blogs/big-data/how-to-set-up-an-air-gapped-vpc-for-amazon-sagemaker-unified-studio/</link>
					
		
		<dc:creator><![CDATA[Rohit Vashishtha]]></dc:creator>
		<pubDate>Thu, 02 Apr 2026 15:28:23 +0000</pubDate>
				<category><![CDATA[Amazon DataZone]]></category>
		<category><![CDATA[Amazon SageMaker Unified Studio]]></category>
		<category><![CDATA[Amazon VPC]]></category>
		<category><![CDATA[Expert (400)]]></category>
		<category><![CDATA[Technical How-to]]></category>
		<guid isPermaLink="false">67d2a499e9cd9c11ff7c275ba382f552beffdded</guid>

					<description>In this post, we explore scenarios where customers need more control over their network infrastructure when building their unified data and analytics strategic layer. We’ll show how you can bring your own Amazon Virtual Private Cloud (Amazon VPC) and set up Amazon SageMaker Unified Studio for strict network control.</description>
										<content:encoded>&lt;p&gt;Organizations are finding significant value using&amp;nbsp;&lt;a href="https://aws.amazon.com/blogs/big-data/an-integrated-experience-for-all-your-data-and-ai-with-amazon-sagemaker-unified-studio/" target="_blank" rel="noopener noreferrer"&gt;an integrated experience for all your data and AI with Amazon SageMaker Unified&amp;nbsp;Studio&lt;/a&gt;. However, many organizations require strict network control to meet security and regulatory compliance requirements like HIPAA or FedRAMP for their data and AI initiatives, while maintaining operational efficiency.&lt;/p&gt; 
&lt;p&gt;In this post, we explore scenarios where customers&amp;nbsp;need more control over their network infrastructure when building their unified data and analytics strategic layer. We’ll show how you can bring your own &lt;a href="https://aws.amazon.com/vpc/" target="_blank" rel="noopener noreferrer"&gt;Amazon Virtual Private Cloud&lt;/a&gt; (Amazon VPC) and set up &lt;a href="https://aws.amazon.com/sagemaker/unified-studio/" target="_blank" rel="noopener noreferrer"&gt;Amazon SageMaker Unified&amp;nbsp;Studio&lt;/a&gt; for strict network control.&lt;/p&gt; 
&lt;h2&gt;Solution overview&lt;/h2&gt; 
&lt;p&gt;The solution covers complete technical know-how of a fully private network architecture using Amazon VPC with no public internet exposure. The approach leverages &lt;a href="https://aws.amazon.com/privatelink/" target="_blank" rel="noopener noreferrer"&gt;AWS PrivateLink&lt;/a&gt; through VPC endpoints to provide a secure communication between SageMaker Unified Studio and essential AWS services entirely over the &lt;a href="https://aws.amazon.com/about-aws/global-infrastructure/" target="_blank" rel="noopener noreferrer"&gt;AWS backbone network&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The architecture consists of three core components: a custom VPC named &lt;em&gt;airgapped&lt;/em&gt; with multiple private subnets distributed across at least three Availability Zones for high availability, a comprehensive set of VPC interface and gateway endpoints for service connectivity, and the SageMaker Unified Studio domain configured to operate exclusively within this isolated environment. This design helps ensure that sensitive data never traverses the public internet while maintaining full functionality for data cataloging, query execution, and machine learning workflows.&lt;/p&gt; 
&lt;p&gt;By implementing this air-gapped configuration, organizations gain granular control over network traffic, simplified compliance auditing, and the ability to integrate SageMaker Unified Studio with existing private data sources through controlled network pathways. The solution supports both immediate operational needs and long-term scalability through careful IP address planning and modular endpoint architecture.&lt;/p&gt; 
&lt;h2&gt;Prerequisites&lt;/h2&gt; 
&lt;p&gt;The set&amp;nbsp;up requires you to have an existing VPC (for this post, we’ll refer to the name as&amp;nbsp;&lt;em&gt;airgapped&lt;/em&gt; but in reality, it refers to the VPC you would like to securely set up SageMaker Unified&amp;nbsp;Studio). If you don’t have an existing VPC, you can follow &lt;a href="https://docs.aws.amazon.com/pdfs/sagemaker-unified-studio/latest/adminguide/sagemaker-unified-studio-admin.pdf" target="_blank" rel="noopener noreferrer"&gt;SageMaker Unified Studio domain quick create administrator guide&lt;/a&gt; to get started.&lt;/p&gt; 
&lt;p&gt;The high level steps to create a VPC meeting minimum requirements for SageMaker Unified&amp;nbsp;Studio are as follows:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;In the &lt;a href="https://console.aws.amazon.com/console/home" target="_blank" rel="noopener noreferrer"&gt;AWS Management Console&lt;/a&gt;, navigate to the &lt;a href="https://console.aws.amazon.com/vpcconsole/home" target="_blank" rel="noopener noreferrer"&gt;VPC console&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Create VPC&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Select the &lt;strong&gt;VPC and more&lt;/strong&gt; radio button.&lt;/li&gt; 
 &lt;li&gt;For&amp;nbsp;&lt;strong&gt;Name tag auto-generation&lt;/strong&gt;, enter &lt;em&gt;airgapped&lt;/em&gt; or a name of your choice.&lt;/li&gt; 
 &lt;li&gt;Keep the default values for&amp;nbsp;&lt;strong&gt;IPv4 CIDR block&lt;/strong&gt;,&lt;strong&gt;&amp;nbsp;IPv6 CIDR block&lt;/strong&gt;,&lt;strong&gt;&amp;nbsp;Tenancy&lt;/strong&gt;,&lt;strong&gt; NAT gateways&lt;/strong&gt;,&lt;strong&gt;&amp;nbsp;VPC endpoints&lt;/strong&gt;, and&lt;strong&gt; DNS options&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Select &lt;strong&gt;3&lt;/strong&gt; for&amp;nbsp;&lt;strong&gt;Number of Availability Zones (AZs)&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Select&lt;strong&gt; 0&lt;/strong&gt; for&lt;strong&gt; Number of public subnets&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Create VPC&lt;/strong&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;This produces the following VPC resource map:&lt;/p&gt; 
&lt;div id="attachment_89342" style="width: 1378px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-89342" loading="lazy" class="wp-image-89342 " src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/23/BDB-55181.jpg" alt="Figure 1 - VPC configuration" width="1368" height="539"&gt;
 &lt;p id="caption-attachment-89342" class="wp-caption-text"&gt;&lt;em&gt;Figure 1 – VPC configuration&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt; 
&lt;h2&gt;Set&amp;nbsp;up SageMaker Unified&amp;nbsp;Studio&lt;/h2&gt; 
&lt;p&gt;Now, we will set&amp;nbsp;up SageMaker Unified&amp;nbsp;Studio in an existing VPC, named &lt;em&gt;airgapped-vpc&lt;/em&gt;.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Navigate to the&amp;nbsp;&lt;a href="http://us-east-1.console.aws.amazon.com/datazone/home?region=us-east-1#/domains" target="_blank" rel="noopener noreferrer"&gt;SageMaker console&lt;/a&gt;, choose &lt;strong&gt;Domains&lt;/strong&gt; in the navigation pane.&lt;/li&gt; 
 &lt;li&gt;Choose&amp;nbsp;&lt;strong&gt;Create Domain&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;For &lt;strong&gt;How do you want to set up your domain?&lt;/strong&gt;, select &lt;strong&gt;Quick set&amp;nbsp;up&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Expand the Quick set&amp;nbsp;up settings&lt;/li&gt; 
 &lt;li&gt;Provide a &lt;strong&gt;name&lt;/strong&gt; for your domain, such as&amp;nbsp;&lt;em&gt;airgapped-domain.&lt;/em&gt;&lt;/li&gt; 
 &lt;li&gt;For &lt;strong&gt;Virtual private cloud (VPC)&lt;/strong&gt;, select &lt;em&gt;airgapped-vpc&lt;/em&gt;.&lt;/li&gt; 
 &lt;li&gt;For &lt;strong&gt;subnets&lt;/strong&gt;, select a minimum of two private subnets.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Continue&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Enter an email address to create a user in &lt;a href="https://aws.amazon.com/iam/identity-center/" target="_blank" rel="noopener noreferrer"&gt;AWS&amp;nbsp;IAM Identity Center&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Create domain&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Once the domain is created, choose &lt;strong&gt;Open unified&amp;nbsp;studio&lt;/strong&gt; or use&lt;strong&gt; SageMaker Unified&amp;nbsp;Studio URL&lt;/strong&gt; under &lt;strong&gt;Domain details&lt;/strong&gt; to&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/getting-started-access-the-portal.html" target="_blank" rel="noopener noreferrer"&gt;access SageMaker Unified Studio&lt;/a&gt;. &lt;p&gt;&lt;/p&gt;
  &lt;div id="attachment_89344" style="width: 1347px" class="wp-caption alignright"&gt;
   &lt;img aria-describedby="caption-attachment-89344" loading="lazy" class="wp-image-89344" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/23/BDB-55183.png" alt="Figure 2 - Amazon SageMaker Unified Studio URL Welcome Page" width="1337" height="708"&gt;
   &lt;p id="caption-attachment-89344" class="wp-caption-text"&gt;&lt;em&gt;Figure 2 – Amazon SageMaker Unified Studio URL Welcome Page&lt;/em&gt;&lt;/p&gt;
  &lt;/div&gt;&lt;/li&gt; 
 &lt;li&gt;After logging in to SageMaker Unified&amp;nbsp;Studio, &lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/getting-started-create-a-project.html" target="_blank" rel="noopener noreferrer"&gt;create a project&lt;/a&gt; using the guided wizard.&lt;/li&gt; 
 &lt;li&gt;Once the project is created, we need to add the necessary VPC endpoints to allow traffic from the project to communicate to AWS services.&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html" target="_blank" rel="noopener noreferrer"&gt;S3 Gateway VPC endpoint&lt;/a&gt; was already selected as part of VPC creation step 5 in prerequisites and thus created by default. Now we must add two more VPC endpoints for &lt;a href="https://aws.amazon.com/datazone/" target="_blank" rel="noopener noreferrer"&gt;Amazon DataZone&lt;/a&gt; and&amp;nbsp;AWS Security Token Service as illustrated in following step.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;These are the minimum set of VPC endpoints to allow using the tooling within SageMaker Unified&amp;nbsp;Studio. For a list of other mandatory and non-mandatory VPC endpoints refer to the tables in the latter part of this post.&lt;/p&gt; 
&lt;h2&gt;Create an interface endpoint&lt;/h2&gt; 
&lt;p&gt;To create an interface endpoint, complete following steps:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Go to the SageMaker Unified&amp;nbsp;Studio &lt;strong&gt;Project details&lt;/strong&gt; page and copy the &lt;strong&gt;Project ID&lt;/strong&gt;.&lt;br&gt; &lt;img loading="lazy" class="wp-image-89346 size-full" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/23/BDB-55185.png" alt="Figure 3 - SageMaker Unifed Studio Project Details Page" width="874" height="479"&gt;&lt;em&gt;Figure 3 – SageMaker Unifed Studio Project Details Page&lt;/em&gt;&lt;/li&gt; 
 &lt;li&gt;Go to the &lt;strong&gt;VPC console&lt;/strong&gt; and choose &lt;strong&gt;Endpoints&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Create Endpoint&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Enter a name for the endpoint, for example, &lt;em&gt;DataZone endpoint for SageMaker Unified&amp;nbsp;Studio&lt;/em&gt;.&lt;/li&gt; 
 &lt;li&gt;For AWS Services, enter&amp;nbsp;&lt;em&gt;DataZone&lt;/em&gt;.&lt;br&gt; 
  &lt;div id="attachment_89348" style="width: 1356px" class="wp-caption alignright"&gt;
   &lt;img aria-describedby="caption-attachment-89348" loading="lazy" class="wp-image-89348" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/23/BDB-55187.png" alt="Figure 4 - Interface Endpoint creation wizard for AWS Service datazone" width="1346" height="426"&gt;
   &lt;p id="caption-attachment-89348" class="wp-caption-text"&gt;&lt;em&gt;Figure 4 – Interface Endpoint creation wizard for AWS Service datazone&lt;/em&gt;&lt;/p&gt;
  &lt;/div&gt;&lt;/li&gt; 
 &lt;li&gt;Select &lt;strong&gt;Service Name = com.amazonaws.us-east-1.datazone&lt;/strong&gt; from the available options.&lt;br&gt; 
  &lt;div id="attachment_89350" style="width: 1346px" class="wp-caption alignright"&gt;
   &lt;img aria-describedby="caption-attachment-89350" loading="lazy" class="wp-image-89350" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/23/BDB-55189.png" alt="Figure 5 - Interface Endpoint creation wizard network settings" width="1336" height="528"&gt;
   &lt;p id="caption-attachment-89350" class="wp-caption-text"&gt;&lt;em&gt;Figure 5 – Interface Endpoint creation wizard network settings&lt;/em&gt;&lt;/p&gt;
  &lt;/div&gt;&lt;/li&gt; 
 &lt;li&gt;Select the subnets in the &lt;em&gt;airgapped-vpc&lt;/em&gt; that you created earlier.&lt;/li&gt; 
 &lt;li&gt;Filter the &lt;strong&gt;Security Groups&lt;/strong&gt; by pasting the copied &lt;strong&gt;Project ID&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Select the security group with &lt;strong&gt;Group Name&lt;/strong&gt; &lt;em&gt;datazone-&amp;lt;project-id&amp;gt;-dev&lt;/em&gt;.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Create Endpoint&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Repeat the same steps to create a VPC endpoint for AWS STS.&lt;/li&gt; 
 &lt;li&gt;Once the VPC endpoints are created, validate connectivity in the SageMaker project by running a SQL query or using a Jupyterlab notebook.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;For a successful domain and project which does not get into any service level usage, the mandatory VPC endpoints to be created are: S3 Gateway, DataZone, and STS interface endpoints. For other service usage dependent operations like authentication, data preview and working with compute, you would require other mandatory service specific endpoints explained later in this post.&lt;/p&gt; 
&lt;h2&gt;Best practices for VPC set&amp;nbsp;up for various use cases&lt;/h2&gt; 
&lt;p&gt;When setting up SageMaker Unified Studio domain and project profiles, you need to specify the VPC network, subnets, and security groups. Here are some best practices around IP allocation, usage volume and expected growth to consider for different use cases within enterprises.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Production and enterprise use cases&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;If your organization require strict network control to meet security and compliance requirements for data and AI initiatives, consider following best practices in your production environment.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Use the bring-your-own (BYO) VPC approach to comply with company-specific networking and security requirements.&lt;/li&gt; 
 &lt;li&gt;Implement private networking using VPC endpoints to keep traffic within the AWS backbone.&lt;/li&gt; 
 &lt;li&gt;Use at least two private subnets across different Availability Zones.&lt;/li&gt; 
 &lt;li&gt;Enable DNS hostnames and DNS Support.&lt;/li&gt; 
 &lt;li&gt;Disable auto-assign public IP on subnets.&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/vpc/latest/ipam/planning-ipam.html" target="_blank" rel="noopener noreferrer"&gt;Plan IP capacity&lt;/a&gt; for at least 5 years. A prescriptive guidance for SageMaker Unified&amp;nbsp;Studio is shared in &lt;strong&gt;&lt;em&gt;VPC and Networking details&lt;/em&gt;&lt;/strong&gt; section later in this post. Consider the following: 
  &lt;ul&gt; 
   &lt;li&gt;Number of users&lt;/li&gt; 
   &lt;li&gt;Number of apps per user&lt;/li&gt; 
   &lt;li&gt;Number of unique instance types per user&lt;/li&gt; 
   &lt;li&gt;Average number of training instances&lt;/li&gt; 
   &lt;li&gt;Expected growth percentage&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Testing and non-production use cases&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;For development, testing, non-prod environment where use cases don’t have stringent security and compliance requirements, use automated setup for quick experiments. Use sample &lt;a href="https://github.com/aws/Unified-Studio-for-Amazon-Sagemaker/tree/main/cloudformation" target="_blank" rel="noopener noreferrer"&gt;CloudFormation github templates&lt;/a&gt; as part of the SageMaker Unified&amp;nbsp;Studio express set&amp;nbsp;up, to automate domain and project creation. However, this includes an Internet Gateway which may not be suitable for security-sensitive environments.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Private networking use cases&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;VPCs with private subnets require essential service endpoints to allow client resources like Amazon EC2 instances to securely access AWS services. The traffic between your VPC and AWS services remains within AWS network avoiding public internet exposure.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Implement all mandatory VPC endpoints for core services (SageMaker, DataZone, Glue, and more).&lt;/li&gt; 
 &lt;li&gt;Add optional &lt;a href="https://docs.aws.amazon.com/general/latest/gr/rande.html#view-service-endpoints" target="_blank" rel="noopener noreferrer"&gt;endpoints based on specific service needs&lt;/a&gt;, like IPv4 endpoints, dual-stack endpoints, and FIPS endpoints to programmatically connect to an AWS service.&lt;/li&gt; 
 &lt;li&gt;Work with network administrators for: 
  &lt;ul&gt; 
   &lt;li&gt;Preinstalling needed resources through secure channels like private subnets and self-referencing inbound rules in security groups to enable limited access.&lt;/li&gt; 
   &lt;li&gt;Allowlisting only necessary external connections like NAT gateway IP and bastion host access in firewall rules.&lt;/li&gt; 
   &lt;li&gt;Setting up appropriate proxy configurations if required.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;External data source access use cases&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Consider the following when working with external systems like third-party SaaS platforms, on-premises databases, partner APIs, legacy systems, or external vendors.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Consult with network administrators for appropriate connection methods.&lt;/li&gt; 
 &lt;li&gt;Consider AWS PrivateLink integration where available.&lt;/li&gt; 
 &lt;li&gt;Implement appropriate security measures for non-AWS data your source documents.&lt;/li&gt; 
 &lt;li&gt;For High Availability: 
  &lt;ul&gt; 
   &lt;li&gt;Deploy across at least three different Availability Zones (at least two for AWS Regions with only two AZs).&lt;/li&gt; 
   &lt;li&gt;Verify there’s a minimum of three free IPs per subnet.&lt;/li&gt; 
   &lt;li&gt;Consider larger CIDR blocks (/16 recommended) for future scalability.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;VPC and networking details&lt;/h2&gt; 
&lt;p&gt;In this section, we provide details of each networking aspect starting with choice of VPCs, network connectivity details for integrated services to work, the basis of VPC and subnet requirements, and finally the VPC endpoints required for private service access.&lt;/p&gt; 
&lt;h3&gt;VPC&lt;/h3&gt; 
&lt;p&gt;At a high level, you have two options to supply VPCs and subnets:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Bring-your-own (BYO) VPC&lt;/strong&gt;. This is typically the case for most customers, as most have company specific networking and security requirements to reuse an existing VPC, or to create a VPC that are compliant with those requirements.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Create VPC with the SageMaker quick set up template&lt;/strong&gt;. When creating a SageMaker Unified&amp;nbsp;Studio domain (DataZone V2 domain in CloudFormation) through the automated quick set&amp;nbsp;up, you will be shown a &lt;em&gt;Quick create stack&lt;/em&gt; wizard in CloudFormation which creates VPCs and subnets used to configure your domain.&lt;strong&gt; &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; Note: &lt;/strong&gt;The quick create stack using template URL is not intended for production use. The template creates an Internet Gateway, which is not allowed in many enterprise settings. This is only appropriate if you are either trying out SageMaker Unified&amp;nbsp;Studio or, running SageMaker Unified&amp;nbsp;Studio for use cases that don’t have stringent security requirements.If you choose this option, you start with &lt;a href="http://us-east-1.console.aws.amazon.com/datazone/home?region=us-east-1&amp;quot; \l &amp;quot;/domains" target="_blank" rel="noopener noreferrer"&gt;SageMaker console&lt;/a&gt;, navigate to domains and click &lt;strong&gt;Create domain&lt;/strong&gt; button, followed by &lt;strong&gt;Create VPC&lt;/strong&gt; button. You will navigate to CloudFormation and click on &lt;strong&gt;Create stack&lt;/strong&gt; button to create a sample VPC named &lt;em&gt;SageMakerUnifiedStudio-VPC &lt;/em&gt;with just one-click for trying out SageMaker Unified Studio.&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;div id="attachment_89352" style="width: 1351px" class="wp-caption alignright"&gt;
 &lt;img aria-describedby="caption-attachment-89352" loading="lazy" class="wp-image-89352" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/23/BDB-551811.png" alt="Figure 6 - Create VPC button in SageMaker Unified Studio Create Domain Wizard" width="1341" height="167"&gt;
 &lt;p id="caption-attachment-89352" class="wp-caption-text"&gt;&lt;em&gt;Figure 6 – Create VPC button in SageMaker Unified Studio Create Domain Wizard&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt; 
&lt;h4&gt;Cost estimation for recommended VPC set&amp;nbsp;up&lt;/h4&gt; 
&lt;p&gt;The exact cost depends on the configuration of your VPC. For more complex networking set&amp;nbsp;ups (multi-VPC), you may need to use additional networking components such as a Transit Gateway, Network Firewall, and VPC Lattice. These components may incur charges, and cost depends on usage and AWS Region. Interface VPC endpoints are charged per availability zone. They also have a fixed and a variable component in the pricing structure. Use the&amp;nbsp;&lt;a href="https://calculator.aws.amazon.com/" target="_blank" rel="noopener noreferrer"&gt;AWS Pricing Calculator&lt;/a&gt; for a detailed estimate.&lt;/p&gt; 
&lt;h3&gt;Network Connectivity&lt;/h3&gt; 
&lt;p&gt;With regards to connectivity to the underlying AWS services integrated within SageMaker Unified&amp;nbsp;Studio, there are two ways to enable connectivity (these are not Studio specific, these are standard ways to enable network connectivity within a VPC). This is an&amp;nbsp;&lt;strong&gt;important security consideration that depends on your organization’s security policies&lt;/strong&gt;.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Through the public Internet&lt;/strong&gt;. Your traffic will traverse over the public Internet through an Internet Gateway in your VPC. 
  &lt;ol type="a"&gt; 
   &lt;li&gt;Your VPC must have an&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html" target="_blank" rel="noopener noreferrer"&gt;Internet Gateway&lt;/a&gt; attached to it.&lt;/li&gt; 
   &lt;li&gt;Your public subnet must have a &lt;a href="https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html" target="_blank" rel="noopener noreferrer"&gt;NAT Gateway&lt;/a&gt;. In addition, your public subnet’s route table must have a default route (&lt;code&gt;0.0.0.0&lt;/code&gt;&amp;nbsp;for IPv4) to the Internet Gateway. This route is what makes the subnet public.&lt;/li&gt; 
   &lt;li&gt;Your private subnets must have a default route to the public subnet’s&amp;nbsp;NAT Gateway.&lt;/li&gt; 
  &lt;/ol&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Through the AWS backbone&lt;/strong&gt;. Your traffic will remain within the private AWS backbone through PrivateLink (by provisioning Interface and Gateway endpoints for the necessary AWS services in each Availability Zone). 
  &lt;ol type="a"&gt; 
   &lt;li&gt;A list of all the AWS services integrated into Studio and the VPC endpoints required can be found in section&amp;nbsp;&lt;strong&gt;&lt;em&gt;VPC Endpoints&lt;/em&gt;&lt;/strong&gt; covered later in this post.&lt;/li&gt; 
   &lt;li&gt;For non-AWS resources, certain external providers of these services may offer PrivateLink integration. Check with each provider’s documentation and your network administrator to understand the most suitable way to connect to these external providers.&lt;/li&gt; 
  &lt;/ol&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;In a private networking scenario, you will need to consider whether you need connectivity to non-AWS resources in a way that’s compliant with your organization’s security policies. A few examples include the following:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;If you need to download software in your remote IDE host (for example, command line programs, such as Ping and Traceroute)&lt;/li&gt; 
 &lt;li&gt;If you have code that connects to external APIs.&lt;/li&gt; 
 &lt;li&gt;If you use software (such as JupyterLab or Code Editor extensions) that rely on external APIs.&lt;/li&gt; 
 &lt;li&gt;If you depend on software dependencies hosted in the public domain (such as Maven, PyPi, npm)&lt;/li&gt; 
 &lt;li&gt;If you need cross-Region access to certain resources (such as access to S3 buckets in a different Region)&lt;/li&gt; 
 &lt;li&gt;If you need functionality whose underlying AWS services do not have VPC endpoints in all Regions or any Region. 
  &lt;ol type="a"&gt; 
   &lt;li&gt;&lt;a href="https://aws.amazon.com/q/" target="_blank" rel="noopener noreferrer"&gt;Amazon Q&lt;/a&gt; (powers Q and code suggestions)&lt;/li&gt; 
   &lt;li&gt;SQL Workbench (powers Query Editor)&lt;/li&gt; 
   &lt;li&gt;IAM (powers Glue connections)&lt;/li&gt; 
  &lt;/ol&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;If you need to connect to data sources outside of AWS (such as Snowflake, Microsoft SQL Server, Google BigQuery)&lt;br&gt; Enterprise network administrators must also complete either of the following prerequisites to handle private networking scenarios:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Preinstall needed resources through secure channels if possible. An example would be to customize your &lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/byoi.html" target="_blank" rel="noopener noreferrer"&gt;SageMaker AI image&lt;/a&gt; by installing dependencies, after they are code scanned, vetted technically and legally by your organization.&lt;/li&gt; 
 &lt;li&gt;If AWS PrivateLink integration is not available for external providers, allowlist network connections to these external sources. Allow firewall egress rules, directly or indirectly, through a proxy in your organization’s network. Check with your network administrator to understand the most appropriate option for your organization.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;VPC Requirements&lt;/h3&gt; 
&lt;p&gt;When setting up a new SageMaker Unified&amp;nbsp;Studio Domain, it’s necessary to supply a VPC. It’s important to note that these VPC requirements&amp;nbsp;are a union of all the requirements from the respective compute services integrated into Studio, some of which are reinforced by validation checks during the corresponding blueprint’s deployment. If these requirements that have validation checks are not fulfilled, the resource(s) contained in that blueprint may fail to create on project creation (on-create), or when creating the compute resource (on-demand). This section will present a summary of these requirements, as well as relevant documentation links from which they originate.&lt;/p&gt; 
&lt;h4&gt;Subnet requirements for specific compute in a VPC&lt;/h4&gt; 
&lt;p&gt;This section lists the compute services integrated in SageMaker Unified&amp;nbsp;Studio that require VPC/subnets when provisioning the respective compute resources.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Compute Connections&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-usage-considerations.html" target="_blank" rel="noopener noreferrer"&gt;Redshift Serverless&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-vpc-host-job-flows.html?utm_source=chatgpt.com" target="_blank" rel="noopener noreferrer"&gt;EMR on EC2&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/vpc-access.html" target="_blank" rel="noopener noreferrer"&gt;EMR Serverless&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Other Services&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/mwaa/latest/userguide/networking-about.html" target="_blank" rel="noopener noreferrer"&gt;Managed Workflows for Apache Airflow&lt;/a&gt; (MWAA)&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-and-internet-access.html" target="_blank" rel="noopener noreferrer"&gt;SageMaker AI Domain&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Requirements&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Number of subnets&lt;/strong&gt;: At least two private subnets. This requirement comes from&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-usage-considerations.html" target="_blank" rel="noopener noreferrer"&gt;Redshift Serverless&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Availability zones (AZs)&lt;/strong&gt;: At least two different AZs&amp;nbsp;(for Regions with two AZs, two subnets are sufficient).&amp;nbsp;This requirement comes from&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-usage-considerations.html" target="_blank" rel="noopener noreferrer"&gt;Redshift Serverless&lt;/a&gt;. For workgroups with Enhanced VPC Routing (EVR), you need three AZs.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Free IPs per subnet&lt;/strong&gt;: At least three Ips per subnet. This requirement comes from&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-usage-considerations.html" target="_blank" rel="noopener noreferrer"&gt;Redshift Serverless&lt;/a&gt; without EVR. For detailed IP addresses requirement with EVR enabled workgroups, refer to &lt;a href="https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-usage-considerations.html" target="_blank" rel="noopener noreferrer"&gt;Serverless usage considerations&lt;/a&gt;. Three is a minimum and may not be enough for your needs. For example, &lt;a href="https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-vpc-launching-job-flows.html" target="_blank" rel="noopener noreferrer"&gt;EMR cluster creation&lt;/a&gt; will fail if no subnets with enough IPs are found in the VPC. We recommend doing a forward-looking &lt;a href="https://docs.aws.amazon.com/vpc/latest/ipam/planning-ipam.html" target="_blank" rel="noopener noreferrer"&gt;capacity planning exercise&lt;/a&gt; based on your use cases (for example, growth rate, users, compute needs) to project at least 5 years into the future. This helps to determine how many IPs are needed by the team using Studio and other services that use this VPC and come up with a ceiling for the CIDR block size.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Private or public subnets&lt;/strong&gt;: We enforce that at least three private subnets be supplied, and recommend that &lt;em&gt;only&lt;/em&gt;&amp;nbsp;private subnets are chosen, with a few nuances. This requirement comes from SageMaker AI domain. A new &lt;a href="https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-and-internet-access.html" target="_blank" rel="noopener noreferrer"&gt;SageMaker AI domain&lt;/a&gt;, when set&amp;nbsp;up with &lt;code&gt;VpcOnly&lt;/code&gt; mode, requires that all subnets in the VPC be private. This is the default networking mode in the Tooling blueprint. If you choose to use &lt;code&gt;PublicInternetOnly&lt;/code&gt;&amp;nbsp;mode, this restriction does not apply, you may choose public subnets from your VPC. To change the mode, &lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/adminguide/blueprints.html&amp;quot; \l &amp;quot;manage-tooling-blueprint" target="_blank" rel="noopener noreferrer"&gt;modify the Tooling Blueprint&lt;/a&gt; parameter &lt;code&gt;sagemakerDomainNetworkType&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Enable DNS hostname and DNS Support&lt;/strong&gt;: Both must be enabled. This requirement comes from EMR.&amp;nbsp;Without these VPC settings, &lt;code&gt;enableDnsHostname&lt;/code&gt;&amp;nbsp;and &lt;code&gt;enableDnsSupport&lt;/code&gt;, connecting to the EMR Cluster using the private DNS name through the Livy Endpoint will fail. SSL Verification, which can only be done when connecting using the DNS name, not the IP.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Auto assign public IP:&lt;/strong&gt; Disable. We recommend that this EC2 subnet setting (&lt;code&gt;mapPublicIpOnLaunch&lt;/code&gt;) be disabled when using private subnets, because public IPs come at a cost and are a scarce resource in the total addressable IPv4 space.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;VPC endpoints&lt;/h3&gt; 
&lt;p&gt;If you choose to &lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/adminguide/network-isolation.html" target="_blank" rel="noopener noreferrer"&gt;run SageMaker Unified Studio without public internet access&lt;/a&gt;, VPC endpoints are required for all services SageMaker Unified&amp;nbsp;Studio needs to access.&amp;nbsp;These endpoints provide secure, private connectivity between your VPC and AWS services without traversing the public internet. The following table lists the required endpoints, their types, and what each is used for.&lt;/p&gt; 
&lt;p&gt;Some endpoints may not show up directly in your browser’s network tab. The reason is that some of these services (such as CloudWatch) are transitively invoked by other services.&lt;/p&gt; 
&lt;h4&gt;Mandatory endpoints&lt;/h4&gt; 
&lt;p&gt;The following are required endpoints for SageMaker Unified&amp;nbsp;Studio and supporting services to function properly.&amp;nbsp;Gateway endpoints can be used where available, you can use interface endpoints for all other AWS services.&lt;/p&gt; 
&lt;table class="styled-table" style="height: 500px" border="1px" width="900" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;AWS service&lt;/td&gt; 
   &lt;td width="28%"&gt;Endpoint&lt;/td&gt; 
   &lt;td&gt;Type&lt;/td&gt; 
   &lt;td width="38%"&gt;Purpose&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Glue&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.glue&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;For Data Catalog and metadata management&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;STS&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.sts&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;Required for assuming IAM roles&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;S3&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.s3&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Gateway&lt;/td&gt; 
   &lt;td&gt;Required for datasets, Git backups, notebooks, and Git sync&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td rowspan="2"&gt;&lt;strong&gt;SageMaker&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.sagemaker.api&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;Required for calling SageMaker APIs&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.sagemaker.runtime&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;For invoking deployed inference endpoints&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;DataZone&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.datazone&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;For data catalog and governance&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Secrets Manager&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.secretsmanager&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;To securely access secrets&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td rowspan="2"&gt;&lt;strong&gt;SSM&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.ssm&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;For secure command execution&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.ssmmessages&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;Enables live SSM sessions&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;KMS&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.kms&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;For decrypting data (volumes, S3, secrets)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td rowspan="2"&gt;&lt;strong&gt;EC2&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.ec2&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;For subnet and ENI management&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.ec2messages&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;Required for SSM messaging&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Athena&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.athena&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;Required to run SQL queries&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Amazon Q&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.q&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;Used by SageMaker Notebooks for enhanced productivity&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Optional Endpoints&lt;/h4&gt; 
&lt;p&gt;Only create these if the corresponding service is used in your environment.&lt;/p&gt; 
&lt;table class="styled-table" style="height: 700px" border="1px" width="900" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;AWS service&lt;/td&gt; 
   &lt;td width="28%"&gt;Endpoint&lt;/td&gt; 
   &lt;td&gt;Type&lt;/td&gt; 
   &lt;td width="38%"&gt;Purpose&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td rowspan="4"&gt;&lt;strong&gt;EMR&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.emr-serverless&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;Serverless Spark/Hive jobs&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.emr-serverless-services.livy&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;Required for Livy job submission (EMR Serverless)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.elasticmapreduce&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;Classic EMR (EC2-based)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.emr-containers&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;EMR on EKS workloads&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td rowspan="3"&gt;&lt;strong&gt;Redshift&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.redshift&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;For provisioned Redshift clusters&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.redshift-serverless&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;For Redshift Serverless&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.redshift-data&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;Required for running SQL against Redshift&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td rowspan="3"&gt;&lt;strong&gt;Amazon Bedrock&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.bedrock-runtime&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;Invoke Bedrock models at runtime&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.bedrock-agent&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;For Bedrock knowledge agents&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.bedrock-agent-runtime&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;For running knowledge agent workloads&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;CloudWatch&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.logs&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;Application and notebook logs&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;RDS&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.rds&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;Connect to Amazon RDS and Aurora&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td rowspan="2"&gt;&lt;strong&gt;CodeCommit&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.codecommit&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;Git integration with CodeCommit&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.git-codecommit&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;Alternative endpoint for CodeCommit&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td rowspan="2"&gt;&lt;strong&gt;CodeConnections and CodeStar&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.codeconnections.api&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;GitHub and GitLab repo integration&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt; 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-css"&gt;com.amazonaws.${region}.codestar-connections.api&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td&gt;Interface&lt;/td&gt; 
   &lt;td&gt;Alias of CodeConnections&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Clean up&lt;/h2&gt; 
&lt;p&gt;AWS resources provisioned in your AWS accounts may incur costs based on the resources consumed. Make sure you do not leave any unintended resources provisioned. If you created a VPC and subsequent resources as part of this post, make sure you delete them.&lt;/p&gt; 
&lt;p&gt;The following service resources provisioned during this blog post need to be deleted:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;IAM Identity Center users and groups.&lt;/li&gt; 
 &lt;li&gt;Resources provisioned within your project using tooling configuration and blueprints within your domain.&lt;/li&gt; 
 &lt;li&gt;The &lt;em&gt;airgapped&lt;/em&gt; VPC.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;In this post,&amp;nbsp;we walked through the process of using your own existing VPC when creating domains and projects in SageMaker Unified&amp;nbsp;Studio. This approach benefits customers by giving them greater control over their network infrastructure while using the comprehensive data, analytics, and AI/ML capabilities of Amazon SageMaker.&amp;nbsp;We also explored the critical role of VPC endpoints in this set&amp;nbsp;up. You now understand when these become necessary components of your architecture, particularly in scenarios requiring enhanced security, compliance with data residency requirements, or improved network performance.&lt;/p&gt; 
&lt;p&gt;While using a custom VPC requires more initial set&amp;nbsp;up than the Quick Create option, it provides the flexibility and control many organizations need for their data science and analytics workflows. This approach provides a mechanism for your SageMaker environment to integrate with your existing infrastructure and adheres to your organization’s networking policies. Custom VPC configurations are a powerful tool in your arsenal for building secure, compliant, and efficient data science environments.&lt;/p&gt; 
&lt;p&gt;To learn more, visit Amazon SageMaker Unified Studio – &lt;a href="https://docs.aws.amazon.com/pdfs/sagemaker-unified-studio/latest/adminguide/sagemaker-unified-studio-admin.pdf" target="_blank" rel="noopener noreferrer"&gt;Administrator Guide&lt;/a&gt; and&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/pdfs/sagemaker-unified-studio/latest/userguide/sagemaker-unified-studio-user-guide.pdf" target="_blank" rel="noopener noreferrer"&gt;User Guide&lt;/a&gt;.&lt;/p&gt; 
&lt;hr style="width: 80%"&gt; 
&lt;h2&gt;About the authors&lt;/h2&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="alignleft wp-image-13110 size-full" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2020/11/03/Saurabh-Bhutyani.jpg" alt="Saurabh Bhutyani" width="100" height="133"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Saurabh Bhutyani&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/s4saurabh"&gt;&lt;strong&gt;Saurabh&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;is a Principal Analytics Specialist Solutions Architect at AWS. He is passionate about new technologies. He joined AWS in 2019 and works with customers to provide architectural guidance for running generative AI use cases, scalable analytics solutions and data mesh architectures using AWS services like Amazon Bedrock, Amazon SageMaker, Amazon EMR, Amazon Athena, AWS Glue, AWS Lake Formation, and Amazon DataZone.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="wp-image-38880 size-full alignleft" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2022/11/29/rohitvas.png" alt="Rohit Vashishtha" width="100" height="133"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Rohit Vashishtha&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/rohit-vashishtha-analytics/"&gt;&lt;strong&gt;Rohit&lt;/strong&gt;&lt;/a&gt; is a Senior Analytics Specialist Solutions Architect at AWS based in Dallas, Texas. He has two decades of experience architecting, building, leading, and maintaining big data platforms. Rohit helps customers modernize their analytic workloads using the breadth of AWS services and ensures that customers get the best price/performance with utmost security and data governance.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="size-thumbnail wp-image-89455 alignleft" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/23/image-22-1-100x122.png" alt="" width="100" height="122"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Baggio Wong&lt;/h3&gt; 
  &lt;p&gt;&lt;strong&gt;&lt;a href="https://www.linkedin.com/in/baggiowong/" target="_blank" rel="noopener"&gt;Baggio&lt;/a&gt;&lt;/strong&gt; is a Software Engineer on the SageMaker Unified Studio team, where he designs and delivers experiences that empower data practitioners to build and deploy AI/ML workloads.&lt;/p&gt; 
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Navigating multi-account deployments in Amazon SageMaker Unified Studio: a governance-first approach</title>
		<link>https://aws.amazon.com/blogs/big-data/navigating-multi-account-deployments-in-amazon-sagemaker-unified-studio-a-governance-first-approach/</link>
					
		
		<dc:creator><![CDATA[Ben Shafabakhsh]]></dc:creator>
		<pubDate>Wed, 01 Apr 2026 19:12:46 +0000</pubDate>
				<category><![CDATA[Advanced (300)]]></category>
		<category><![CDATA[Amazon DataZone]]></category>
		<category><![CDATA[Amazon SageMaker Data & AI Governance]]></category>
		<category><![CDATA[Amazon SageMaker Unified Studio]]></category>
		<category><![CDATA[Technical How-to]]></category>
		<guid isPermaLink="false">1f03dfa96a8e4e783ba0fd9c7c55ced067b54a79</guid>

					<description>In this post, we explore SageMaker Unified Studio multi-account deployments in depth: what they entail, why they matter, and how to implement them effectively. We examine architecture patterns, evaluate trade-offs across security boundaries, operational overhead, and team autonomy. We also provide practical guidance to help you design a deployment that balances centralized control with distributed ownership across your organization.</description>
										<content:encoded>&lt;p&gt;&lt;a href="https://aws.amazon.com/sagemaker/unified-studio/"&gt;Amazon SageMaker Unified Studio&lt;/a&gt; brings together data engineering, &lt;a href="https://aws.amazon.com/big-data/datalakes-and-analytics/" target="_blank" rel="noopener noreferrer"&gt;analytics&lt;/a&gt;, and &lt;a href="https://aws.amazon.com/ai/machine-learning/" target="_blank" rel="noopener noreferrer"&gt;machine learning&lt;/a&gt; (ML) workflows into a cohesive, governed environment. This unified approach reduces traditional silos between data teams and ML practitioners, so organizations can advance their AI and ML initiatives with greater collaboration and efficiency.&lt;/p&gt; 
&lt;p&gt;As enterprises begin their SageMaker Unified Studio adoption, they must determine the best practices for implementing data federation principles when using SageMaker Unified Studio across the organization. The way that you structure your SageMaker Unified Studio deployment is more than a technical decision. It directly impacts your &lt;a href="https://aws.amazon.com/what-is/data-governance/" target="_blank" rel="noopener noreferrer"&gt;governance&lt;/a&gt; framework, security posture, operational scalability, and day-to-day team collaboration.&lt;/p&gt; 
&lt;p&gt;In this post, we explore SageMaker Unified Studio &lt;a href="https://docs.aws.amazon.com/organizations/latest/userguide/orgs_best-practices.html" target="_blank" rel="noopener noreferrer"&gt;multi-account&lt;/a&gt; deployments in depth: what they entail, why they matter, and how to implement them effectively. We examine architecture patterns, evaluate trade-offs across security boundaries, operational overhead, and team autonomy. We also provide practical guidance to help you design a deployment that balances centralized control with &lt;a href="https://aws.amazon.com/solutions/guidance/secure-data-mesh-with-distributed-data-asset-ownership-on-aws/" target="_blank" rel="noopener noreferrer"&gt;distributed ownership&lt;/a&gt; across your organization.&lt;/p&gt; 
&lt;h2&gt;&lt;strong&gt;The multi-account challenge: why organizations struggle&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;If you’re working in a large enterprise, a multi-account AWS environment is often your starting position. If you’re starting from scratch, consider whether to use a single-account for all SageMaker Unified Studio components or dedicate separate accounts for governance and business units. A multi-account architecture aligns with AWS best practices and proves valuable if you have:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Distributed teams with independent operations&lt;/strong&gt;: multi-account architecture accommodates multiple teams or business units that maintain separate operations so that each team can manage their projects autonomously within isolated environments. Each unit can deploy and manage resources independently, implement team-specific security controls, and scale infrastructure without impacting others. This is achieved through a shared, unified &lt;a href="https://aws.amazon.com/what-is/ide/" target="_blank" rel="noopener noreferrer"&gt;integrated development environment (IDE)&lt;/a&gt; for collaboration and standardized tools across the organization.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Compliance and data governance requirements&lt;/strong&gt;: For regulatory mandates like &lt;a href="https://aws.amazon.com/compliance/gdpr-center/" target="_blank" rel="noopener noreferrer"&gt;GDPR&lt;/a&gt;, &lt;a href="https://aws.amazon.com/compliance/hipaa-compliance/" target="_blank" rel="noopener noreferrer"&gt;HIPAA&lt;/a&gt;, or data sovereignty needs, you will benefit from this setup, because sensitive data remains segregated in business-unit specific accounts. This reduces risk exposure, streamlines audits, and maintains compliance boundaries without compromising access to centralized collaboration tools.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Centralized governance:&lt;/strong&gt; A multi-account architecture maintains visibility across all projects and business units from a single control plane. The Domain account can enforce security policies and compliance requirements across the entire organization and provide centralized monitoring, audit logging, and user access management.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Clear cost visibility and accountability&lt;/strong&gt;: Multi-account architecture enables granular billing tracking, with each account generating separate bills that clearly attribute costs to specific teams or business units. This transparency streamlines budgeting and financial accountability, removing the complexity of cost allocation tags and manual reporting that’s typically required in single-account models where multiple teams share the same infrastructure and resources.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Overall, this approach improves efficiency, security, and scalability for you, whether you’re managing a few teams or coordinating across a larger organizational structure.&lt;/p&gt; 
&lt;h2&gt;&lt;strong&gt;Understanding the core constructs of SageMaker Unified Studio&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;Before diving into multi-account strategies, it’s important to understand the foundational constructs of SageMaker Unified Studio. Each is elaborated in greater detail in the &lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/adminguide/what-is-sagemaker-unified-studio.html" target="_blank" rel="noopener noreferrer"&gt;Administrator Guide&lt;/a&gt;.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Domain:&amp;nbsp;&lt;/strong&gt;The top-level administrative boundary where governance lives. In a multi-account setup, this is your centralized control plane for catalog, policies, and user access.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Project:&amp;nbsp;&lt;/strong&gt;A collaborative workspace for developing data, AI, and ML initiatives. In multi-account deployments, a Project’s metadata lives in the Domain account and compute and data resources deploy into associated business unit accounts. This separation is central to the pattern that we explore.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Project Profile:&lt;/strong&gt; A template that standardizes how Projects are created. For multi-account setups, this is where administrators define which accounts and AWS Regions Projects can target.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Blueprints:&amp;nbsp;&lt;/strong&gt;Infrastructure as code (IaC) components that define what gets provisioned inside a Project. Each associated account must enable its relevant Blueprints before Projects can deploy there.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The following diagram illustrates how these key constructs interact. Within a Domain, users create &lt;em&gt;Projects&lt;/em&gt; organized through a single &lt;em&gt;Project Profile&lt;/em&gt;. The Project Profile defines and configures a collection of &lt;em&gt;Blueprints&lt;/em&gt;. When a project is created, the infrastructure specified in those Blueprints is automatically provisioned and becomes available within the project workspace.&lt;/p&gt; 
&lt;p style="text-align: center"&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89568" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/29/BDB-5776-image-1.png" alt="SageMaker Unified Studio Domain architecture diagram demonstrating blueprint management and infrastructure deployment workflow. This technical diagram illustrates how AWS SageMaker projects utilize enabled blueprints through profile configuration to deploy infrastructure resources. The workflow shows Project ABC with People, Data/Code, and Compute/Resources components connecting to Project Profile X, which filters enabled blueprints (Tooling Blueprint and X Blueprint) for deployment while excluding disabled blueprints (Y Blueprint and Z Blueprint). The deployed infrastructure section displays the resulting Tooling Blueprint Infrastructure and X Blueprint Infrastructure as purple cube icons, representing the final deployed resources in the SageMaker environment." width="1956" height="1270"&gt;&lt;br&gt; &lt;em&gt;Figure 1: Amazon SageMaker Unified Studio Core Constructs&lt;/em&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;strong&gt;Multi-account setup in SageMaker Unified Studio&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;To illustrate these concepts in practice, we demonstrate with a sample enterprise organization that exemplifies enterprise environments with several AWS accounts belonging to different business units:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Central Data Governance team&lt;/strong&gt;: Owns and&amp;nbsp;manages governance and access control across the organization. They plan to build a data solution in a dedicated AWS account using SageMaker Unified Studio. The platform must provide an integrated development environment (IDE) to work with data and ML use cases and connect to multiple business unit’s AWS accounts (Finance and Marketing).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Finance Business Unit&lt;/strong&gt;: Owns datasets for fraud analysis and churn prediction in their own AWS account.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Marketing Business Unit&lt;/strong&gt;: Maintains customer sentiment data and campaign analytics in their own AWS account.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;In the following diagram we show the Data platform constructs provided by SageMaker Unified Studio in each AWS account showing the clear separation between centralized governance and distributed resource deployment.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89569" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/29/BDB-5776-image-2.png" alt="AWS multi-account data governance architecture diagram illustrating centralized policy management with distributed departmental execution. This enterprise architecture shows how a Central Data Governance Team maintains standards across multiple AWS accounts. The Central Data Governance Account serves as the control plane, housing the Domain with Platform Resources (Catalog and Shared infrastructure), Governance Constructs (Domain Units and Metadata Forms), and Governance Policies (Authorization Policies and Enforcement). Marketing Teams and Finance Teams access their respective projects within the central governance framework, which then connect to separate Marketing and Finance AWS accounts. Each departmental account maintains its own Resources and Data infrastructure while adhering to centralized governance standards, enabling federated data management with consistent oversight across the organization." width="1430" height="761"&gt;&lt;/p&gt; 
&lt;p style="text-align: center"&gt;&lt;em&gt;Figure 2: Sample organization architecture in&amp;nbsp;Amazon SageMaker Unified Studio&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;The&amp;nbsp;&lt;strong&gt;Central Data Governance Account&lt;/strong&gt; contains the SageMaker Unified Studio Domain. This contains the shared platform resources (Catalog, shared infrastructure), governance constructs (&lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/adminguide/domain-units.html" target="_blank" rel="noopener noreferrer"&gt;Domain units&lt;/a&gt;, &lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/create-metadata-form.html" target="_blank" rel="noopener noreferrer"&gt;metadata forms&lt;/a&gt;), and governance policies (&lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/adminguide/domain-units.html" target="_blank" rel="noopener noreferrer"&gt;authorization policies&lt;/a&gt;, &lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/metadata-rules-publishing.html" target="_blank" rel="noopener noreferrer"&gt;enforcement rules&lt;/a&gt;). These configuration elements define the standards and capabilities available across the organization.&amp;nbsp;They’re the &lt;strong&gt;Service-level configuration data&lt;/strong&gt;: Metadata, policies, and governance rules that define &lt;em&gt;how&lt;/em&gt; resources should be provisioned.&lt;/p&gt; 
&lt;p&gt;In contrast, the Associated Accounts (Marketing and Finance) contain the actual AWS infrastructure, compute/storage (purple cubes) and data stores (cylinders), provisioned when Projects are created. The diagram shows how Marketing Projects and Finance Projects ultimately deploy their runtime resources into their respective business unit accounts. The separation keeps the governance centralized and consistent while allowing business unit dependent resources to be isolated, billed separately, and managed according to each business unit’s specific requirements.&lt;/p&gt; 
&lt;p&gt;To understand the core constructs of SageMaker Unified Studio, we listed the core components of SageMaker Unified Studio and explained how they relate to each other. Taking the same diagram as the basis, we will now represent how these constructs are created in our multi-account sample scenario.&lt;/p&gt; 
&lt;table class="styled-table" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;strong&gt;Construct&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;strong&gt;Deployment Location&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;strong&gt;Deployed Resources&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/adminguide/working-with-domains.html" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Domain&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Central Data Governance Account&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt; 
    &lt;ul&gt; 
     &lt;li&gt;Portal&lt;/li&gt; 
     &lt;li&gt;Catalog&lt;/li&gt; 
     &lt;li&gt;Metadata Forms&lt;/li&gt; 
     &lt;li&gt;Authorization Policies&lt;/li&gt; 
    &lt;/ul&gt; &lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/projects.html" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Project&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Central Data Governance Account + Associated Account&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;In Central Data Governance Account:&lt;p&gt;&lt;/p&gt; 
    &lt;ul&gt; 
     &lt;li&gt;Project configuration and metadata&lt;/li&gt; 
    &lt;/ul&gt; &lt;p&gt;In Associated Account:&lt;/p&gt; 
    &lt;ul&gt; 
     &lt;li&gt;Project Infrastructure resources such as Compute&lt;/li&gt; 
     &lt;li&gt;Project Data&lt;/li&gt; 
    &lt;/ul&gt; &lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/adminguide/project-profiles.html" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Project Profile&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Central Data Governance Account&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt; 
    &lt;ul&gt; 
     &lt;li&gt;Project Profile Configuration&lt;/li&gt; 
    &lt;/ul&gt; &lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/adminguide/blueprints.html" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Blueprint&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Associated Account&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt; 
    &lt;ul&gt; 
     &lt;li&gt;Blueprints are enabled in each associated account&lt;/li&gt; 
    &lt;/ul&gt; &lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p style="text-align: center"&gt;&lt;em&gt;Core construct deployment locations and resources in SageMaker Unified Studio &lt;/em&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;strong&gt;Implementing multi-account deployments&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;To enable production-ready data science and analytics workflows across multiple AWS accounts governed by a SageMaker Unified Studio Domain, organizations must establish a structured cross-account configuration. This setup allows each business unit (BU) to retain ownership of its Projects and AWS resources while using centralized governance provided by the Domain.&amp;nbsp;The process involves four key steps: &lt;strong&gt;account association, Blueprint enablement&lt;/strong&gt;, &lt;strong&gt;Project Profile configuration, &lt;/strong&gt;and &lt;strong&gt;Project creation.&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Note&lt;/em&gt;&lt;/strong&gt;&lt;em&gt;: The following steps provide a high-level overview of the multi-account deployment process. For a more detailed, step-by-step guide, refer to &lt;/em&gt;&lt;a href="https://builder.aws.com/content/2hWBRoptzBMoS2LNedpzVSOGYzs/how-to-associate-an-account-when-using-amazon-sagemaker-next-generation-unified-studio" target="_blank" rel="noopener noreferrer"&gt;&lt;em&gt;How to associate an account when using Amazon SageMaker Unified Studio&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt; 
&lt;h3&gt;Step 1: Account association to a domain&lt;/h3&gt; 
&lt;p&gt;The Domain administrator associates each AWS account with the SageMaker Unified Studio Domain for seamless cross-account functionality by providing the AWS account number for the targeted accounts. This association lets the Domain publish and consume data from associated accounts, create resources within them, maintain cross-account access for the &lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/working-with-business-catalog.html" target="_blank" rel="noopener noreferrer"&gt;SageMaker Catalog&lt;/a&gt;, and deploy Projects directly into business unit accounts. Account association is a critical prerequisite for cross-account Project deployment. Behind the scenes, SageMaker Unified Studio uses &lt;a href="https://aws.amazon.com/ram/" target="_blank" rel="noopener noreferrer"&gt;AWS Resource Access Manager (AWS RAM)&lt;/a&gt; to make this cross-account functionality happen.&lt;/p&gt; 
&lt;h3&gt;Step 2: Enabling blueprints&lt;/h3&gt; 
&lt;p&gt;Each associate account administrator must enable the relevant Blueprints before creating Project Profiles. This important step verifies that Projects can provision the necessary tools and resources that users need to run their workloads. Blueprints serve as standardized infrastructure templates that administrators can use to enforce organizational standards, security controls, and best practices across all Projects. Through Blueprints, administrators configure essential resources including AWS Identity and Access Management (IAM) roles, AWS Key Management Service (AWS KMS) keys, Amazon Simple Storage Service (Amazon S3) buckets, Amazon Virtual Private Cloud (Amazon VPC) settings, and security groups. This centralized approach helps maintain consistency, compliance, and governance at scale while preventing users from creating Projects with misconfigured or non-compliant infrastructure.&lt;/p&gt; 
&lt;h3&gt;Step 3:&amp;nbsp;Configuring project profile&lt;/h3&gt; 
&lt;p&gt;With the accounts successfully associated and the Blueprints enabled, the next step is to configure a Project Profile that determines where your Project resources will be deployed. Your choice of Project Profile strategy impacts both operational flexibility and governance.&lt;/p&gt; 
&lt;p&gt;Domain administrators control which Blueprints are included in each Project Profile and can specify the target AWS Regions and accounts for deployment, providing the governance foundation to standardize Project creation. Administrators can use pre-created Project Profiles like &lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/adminguide/all-capabilities.html" target="_blank" rel="noopener noreferrer"&gt;“All Capabilities”&lt;/a&gt; or &lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/adminguide/sql-analytics.html" target="_blank" rel="noopener noreferrer"&gt;“SQL Analytics”&lt;/a&gt;, or create &lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/adminguide/custom.html" target="_blank" rel="noopener noreferrer"&gt;custom Project Profiles&lt;/a&gt; tailored to specific organizational needs.&lt;/p&gt; 
&lt;h3&gt;When configuring Project Profiles, you can choose between two deployment models:&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Static (Pre-Defined): Profile specifies a fixed account and Region. Projects by default deploy to the same location. This is recommended for strict governance controls and compliance requirements where production resources must remain in designated accounts or Regions.&lt;/li&gt; 
 &lt;li&gt;Dynamic (Parameterized): Users select from available associated accounts and Regions during Project creation (configured through &lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/adminguide/account-pools.html" target="_blank" rel="noopener noreferrer"&gt;Account Pools&lt;/a&gt;). This is recommended for multi-environment workflows (Dev/Test/Prod) and reducing administrative overhead by maintaining fewer profile templates.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Dynamic profiles balance governance with agility: Administrators define standards once, while users retain deployment flexibility aligned with their business needs.&lt;/p&gt; 
&lt;h3&gt;Step 4: Project creation&lt;/h3&gt; 
&lt;p&gt;With Project Profiles configured, you can now create a new Project from any of the associated accounts using the profile created in the previous step.&lt;/p&gt; 
&lt;h3&gt;Defining project boundaries: when to create a new project&lt;/h3&gt; 
&lt;p&gt;One of the common challenges that you will face is determining when to create a new Project. The answer significantly impacts collaboration effectiveness, resource isolation, cost tracking, and governance. Here’s a practical framework to guide your decision-making.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;A Project should represent a distinct business initiative with a defined scope, a dedicated team, and measurable outcomes.&lt;/strong&gt;&amp;nbsp;&lt;strong&gt;Think of Projects as team workspaces organized around business outcomes, not technical components.&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Create a new Project when you need clear separation across multiple dimensions: cost allocation, access control, and data governance. If Finance and Marketing teams require separate budget tracking, distinct data access policies, and different governance controls, they should have separate Projects. For example, “Customer Churn Prediction” and “Fraud Detection” might use similar tools, but if they have different stakeholders, budget owners, and data sensitivity requirements, so they warrant separation.&amp;nbsp;Similarly, create separate Projects when facing different compliance or regulatory requirements (like HIPAA versus PCI-DSS) or when initiatives have independent deployment lifecycles. Experimental ML research Projects shouldn’t share workspaces with production recommendation engines that require stricter change controls and availability guarantees.&lt;/p&gt; 
&lt;p&gt;However, avoid fragmenting related work into unnecessary silos:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Don’t create separate Projects for individual workflows or pipelines, a single “Marketing Campaign Optimization” Project should contain audience segmentation, propensity modeling, and campaign attribution workflows together.&lt;/li&gt; 
 &lt;li&gt;Don’t separate different data processing stages; keep data ingestion, transformation, and analysis within one Project to maintain clear lineage and enable seamless collaboration.&lt;/li&gt; 
 &lt;li&gt;Projects are team workspaces, not personal sandboxes, so use shared Projects with role-based access control rather than creating individual Projects per team member.&lt;/li&gt; 
 &lt;li&gt;Small proof of concepts (POC) or temporary experiments should be conducted within the parent Project, with successful initiatives promoted to dedicated production Projects only when they mature into full-scale capabilities requiring independent governance.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;Throughout this post, we explored how the separation of governance and working accounts forms the foundation of a scalable, secure, and compliant data and AI platform.&lt;/p&gt; 
&lt;p&gt;With centralized governance in the Domain account, organizations can enforce consistent security policies, compliance requirements, and cost management, while allowing sub-accounts the autonomy over their own resources. This approach enhances security and compliance, and fosters collaboration and innovation within teams by providing them with the flexibility that they need to operate effectively. Ultimately, this governance-first strategy supports keeping data remains protected and accessible in a controlled manner, empowering teams to drive business outcomes efficiently. To implement a multi-account deployment for your organization, &lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/getting-started.html" target="_blank" rel="noopener noreferrer"&gt;get started by creating your first SageMaker Unified Studio Domain&lt;/a&gt; and follow the step-by-step guidance to establish your governance-first architecture.&lt;/p&gt; 
&lt;hr style="width: 80%"&gt; 
&lt;h2&gt;About the authors&lt;/h2&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;p&gt;&lt;img loading="lazy" class="size-full wp-image-89580 alignleft" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/29/BDB-5776-image-3.png" alt="Ben Shafabakhsh" width="512" height="512"&gt;&lt;/p&gt; 
  &lt;h3 class="lb-h4"&gt;Ben Shafabakhsh&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/benyaminsh/" target="_blank" rel="noopener"&gt;Ben&lt;/a&gt; is a Partner Solution Architect at AWS. He works with AWS consulting and system integrator partners in building technology solutions and implementing strategies to drive adoption of AWS services.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="wp-image-89587 size-full alignleft" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/29/BDB-5776-image-4-1.png" alt="Adriana Lopez" width="100" height="115"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Adriana Lopez&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="http://www.linkedin.com/in/adriana-l%C3%B3pez" target="_blank" rel="noopener"&gt;Adriana&lt;/a&gt; is a Software Development Engineer at AWS Professional Services. She is passionate about data and AI governance, focusing on building ingenious solutions that empower teams with the data and AI agents and tools they need to innovate.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="wp-image-89588 size-full alignleft" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/29/BDB-5776-image-5.png" alt="Juan Daza" width="100" height="115"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Juan Daza&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/juandanieldaza/" target="_blank" rel="noopener"&gt;Juan&lt;/a&gt; is a Senior Delivery Consultant for Data &amp;amp; Analytics at AWS Professional Services. He specializes in the design, development, and deployment of modern data and analytics platforms. His work focuses on data governance and architecting AI-ready data systems.&lt;/p&gt; 
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Improve the discoverability of your unstructured data in Amazon SageMaker Catalog using generative AI</title>
		<link>https://aws.amazon.com/blogs/big-data/improve-the-discoverability-of-your-unstructured-data-in-amazon-sagemaker-catalog-using-generative-ai/</link>
					
		
		<dc:creator><![CDATA[Nishchai JM]]></dc:creator>
		<pubDate>Wed, 01 Apr 2026 19:09:48 +0000</pubDate>
				<category><![CDATA[Advanced (300)]]></category>
		<category><![CDATA[Amazon SageMaker]]></category>
		<category><![CDATA[Analytics]]></category>
		<guid isPermaLink="false">5ab849d9719a352b4a7ad361678590a65b5c90f1</guid>

					<description>This is a two-part series post. In the first part, we walk you through how to set up the automated processing for unstructured documents, extract and enrich metadata using AI, and make your data discoverable through SageMaker Catalog. The second part is currently in the works and will show you how to discover and access the enriched unstructured data assets as a data consumer. By the end of this post, you will understand how to combine Amazon Textract and Anthropic Claude through Amazon Bedrock to extract key business terms and enrich metadata using Amazon SageMaker Catalog to transform unstructured data into a governed, discoverable asset.</description>
										<content:encoded>&lt;p&gt;Every day, businesses generate massive amounts of unstructured data such as PDFs, images, emails, customer feedback. Although this data holds valuable business insights, extracting meaningful value from it remains a significant challenge. Its lack of proper context and searchability often keeps it siloed and underutilized, limiting data-driven decision making. Financial reports, legal documents, and customer feedback are prime examples. They contain the answers that your business needs, yet they frequently go unanalyzed due to these barriers.The sheer volume of unstructured content requires scalable infrastructure and automated processing tools, while sensitive information embedded within demands sophisticated classification and protection strategies. Without proper management, organizations face operational inefficiencies, high costs, and increased regulatory risks and reduced AI effectiveness.&lt;/p&gt; 
&lt;p&gt;What if business context from your PDFs, images, and emails could be automatically extracted and surfaced wherever your teams search for information? In this post, we show you how to implement this. By combining &lt;a href="https://aws.amazon.com/sagemaker/catalog/?refid=31926bd3-3ed0-43f3-a835-1801081fa158" target="_blank" rel="noopener noreferrer"&gt;Amazon SageMaker Catalog&lt;/a&gt; with generative AI capabilities, you can make unstructured data searchable and queryable through the same interfaces that your teams use for structured data analysis.&amp;nbsp;Success requires balancing advanced AI techniques with governance frameworks so that your data is discoverable and secure for better decision making.&lt;/p&gt; 
&lt;p&gt;This is a two-part series post. In the first part, we walk you through how to set up the automated processing for unstructured documents, extract and enrich metadata using AI, and make your data discoverable through SageMaker Catalog. The second part is currently in the works and will show you how to discover and access the enriched unstructured data assets as a data consumer. By the end of this post, you will understand how to combine &lt;a href="https://aws.amazon.com/textract/" target="_blank" rel="noopener noreferrer"&gt;Amazon Textract&lt;/a&gt; and &lt;a href="https://www.anthropic.com/claude" target="_blank" rel="noopener noreferrer"&gt;Anthropic Claude&lt;/a&gt; through &lt;a href="https://aws.amazon.com/bedrock/" target="_blank" rel="noopener noreferrer"&gt;Amazon Bedrock&lt;/a&gt; to extract key business terms and enrich metadata using &lt;a href="https://aws.amazon.com/sagemaker/catalog/" target="_blank" rel="noopener noreferrer"&gt;Amazon SageMaker Catalog&lt;/a&gt; to transform unstructured data into a governed, discoverable asset.&lt;/p&gt; 
&lt;p&gt;Solutions overviewYou will transform unstructured data into an interactive knowledge base through automated processing within the Amazon SageMaker AI environment. Here is how it works:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;You will set up an &lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/notebooks.html" target="_blank" rel="noopener noreferrer"&gt;Amazon SageMaker Unified Studio Data Notebook&lt;/a&gt; Jupyter-based workspace where you manage your entire processing pipeline, add metadata to unstructured documents like PDFs, photos, emails, or audio recordings stored in &lt;a href="https://aws.amazon.com/pm/serv-s3/" target="_blank" rel="noopener noreferrer"&gt;Amazon Simple Storage Service (Amazon S3)&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;You will add your files to the SageMaker Project.&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/textract/latest/dg/what-is.html" target="_blank" rel="noopener noreferrer"&gt;Amazon Textract&lt;/a&gt; extracts information and insights from text, removing manual transcription. This extracted content instantly populates your asset’s README.&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/bedrock/" target="_blank" rel="noopener noreferrer"&gt;Amazon Bedrock&lt;/a&gt; turns the text into business terms that provide SageMaker Catalog assets the correct business context to help with semantic search or business query search.&lt;/li&gt; 
 &lt;li&gt;You will use a publish method to publish the enriched data to the Amazon SageMaker Catalog, making it available to your organization.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89219" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/image-1-6.png" alt="" width="1468" height="788"&gt;&lt;/p&gt; 
&lt;p&gt;The architecture sets up a pipeline from processing raw documents to enabling end users interaction, with the &lt;a href="https://aws.amazon.com/sagemaker/catalog/" target="_blank" rel="noopener noreferrer"&gt;Amazon SageMaker Catalog&lt;/a&gt; serving as the central hub for sending and receiving data. Amazon SageMaker Catalog includes generative AI features that automatically develop and add business descriptions for structured data assets. This capability streamlines documentation processes and provides greater consistency across data assets. You can further enhance this solution to create summaries by also reading and incorporating &lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html" target="_blank" rel="noopener noreferrer"&gt;S3 metadata&lt;/a&gt;. This will add more context, such as object properties, access patterns, and storage characteristics, to the extracted document content, streamlining the process to find and catalog data.&lt;/p&gt; 
&lt;h2&gt;Prerequisites&lt;/h2&gt; 
&lt;p&gt;To implement the solution, you must complete the following prerequisites:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Create an&amp;nbsp;&lt;a href="https://aws.amazon.com/resources/create-account/" target="_blank" rel="noopener noreferrer"&gt;AWS account&lt;/a&gt; – Required to access all AWS services (Amazon SageMaker Catalog, Amazon S3, Amazon Textract, Amazon Bedrock) used in this solution.&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/adminguide/create-domain-sagemaker-unified-studio-quick.html" target="_blank" rel="noopener noreferrer"&gt;Create an Amazon SageMaker Unified Studio domain&lt;/a&gt;: This provides a collaborative environment for connecting your assets, users, and their projects.&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/getting-started-create-a-project.html" target="_blank" rel="noopener noreferrer"&gt;Create an SageMaker Project with all capabilities:&lt;/a&gt; Your collaborative workspace where you will upload documents, run processing notebooks, and manage permissions for your data enrichment pipeline. Team members added to this project gain immediate access to all shared resources. 
  &lt;ul&gt; 
   &lt;li&gt;Producer Project (project name: $(-your-project-name) use “&lt;em&gt;unstructured-producer-project&lt;/em&gt;”, project profile: All capabilities)&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Solution deployment&lt;/h2&gt; 
&lt;p&gt;Now let’s complete the following steps to deploy and verify the solution.&lt;/p&gt; 
&lt;h3&gt;Prepare source datasets&lt;/h3&gt; 
&lt;p&gt;In this section you will use the following sample datasets by downloading them to your local machine. We will upload these files into your SageMaker Project S3 bucket created in the prerequisite step.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;a href="https://aws-blogs-artifacts-public.s3.us-east-1.amazonaws.com/bdb-4720/input/ED_Distribution_Tooth_Disorder.png" target="_blank" rel="noopener noreferrer"&gt;ED_DistributionToothDisorder.png&lt;/a&gt;:&amp;nbsp;The dataset shows emergency department visits for tooth disorders in the US from 2020–2022, broken down by age group, gender, and race/ethnicity.&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://aws-blogs-artifacts-public.s3.us-east-1.amazonaws.com/bdb-4720/input/analysisDentalEDvsts.pdf" target="_blank" rel="noopener noreferrer"&gt;analysisDentalEDvsts.pdf&lt;/a&gt;: This report shows emergency department visits analysis for dental conditions across the United States between 2016–2019, showing that among non-traumatic dental visits.&lt;/li&gt; 
 &lt;li&gt;&amp;nbsp;&lt;a href="https://aws-blogs-artifacts-public.s3.us-east-1.amazonaws.com/BDB-5748/notebook/s3_document_processor_unstructured.ipynb" target="_blank" rel="noopener noreferrer"&gt;&amp;nbsp;s3_document_processor_unstructured.ipynb&lt;/a&gt; notebook (keep in local environment and will be used at a later stage)&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;With your sample datasets ready, let’s log in to SageMaker Unified Studio and upload them to your project.&lt;/p&gt; 
&lt;h3&gt;Log in to Amazon SageMaker Unified Studio as a data producer&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Log in to the SageMaker Unified Studio URL using your username and password. In the portal UI, select the producer project (unstructured-producer-project) that you created in the project selector (at the top center of the screen).&lt;br&gt; &lt;img loading="lazy" class="alignnone size-full wp-image-89220" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/image-2-9.png" alt="" width="1430" height="562"&gt;&lt;/li&gt; 
 &lt;li&gt;Under &lt;strong&gt;Data&lt;/strong&gt;, do the following: 
  &lt;ul&gt; 
   &lt;li&gt;Choose the default project bucket created &lt;strong&gt;amazon-sagemaker-12*********-us-west-2-51271642b525/dzd_*********/c3jl67qvxbic9c/&lt;/strong&gt;.&lt;/li&gt; 
   &lt;li&gt;Next, choose the three dots and upload the downloaded files (1&amp;amp;2) from the prepared dataset section.&lt;br&gt; &lt;img loading="lazy" class="alignnone size-full wp-image-89221" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/image-3-6.png" alt="" width="1247" height="477"&gt;&lt;/li&gt; 
   &lt;li&gt;After adding the files, choose &lt;strong&gt;Publish to Catalog&lt;/strong&gt; to publish your asset.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p style="padding-left: 40px"&gt;Your files are now in the catalog. Before we process them, your project needs permission to access the services. Let’s add those permissions.&lt;/p&gt; 
&lt;p style="padding-left: 40px"&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89222" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/image-4-6.png" alt="" width="1412" height="524"&gt;&lt;/p&gt; 
&lt;ol start="3"&gt; 
 &lt;li&gt;Add permissions to an IAM role for the Amazon SageMaker Project role. 
  &lt;ul&gt; 
   &lt;li&gt;Go to the &lt;strong&gt;Project overview&lt;/strong&gt; tab and find the Project role ARN. It can be found in the &lt;strong&gt;Project details&lt;/strong&gt; section.&lt;br&gt; &lt;img loading="lazy" class="alignnone size-full wp-image-89223" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/image-5-4.png" alt="" width="1418" height="826"&gt;&lt;/li&gt; 
   &lt;li&gt;Go to the AWS IAM service and choose &lt;strong&gt;Roles&lt;/strong&gt;. Search for the role as highlighted in the preceding image and add the following permissions. The following policies use full-access managed policies to keep things straightforward for this walkthrough. We don’t recommend this for production environments. Instead, we encourage you to take a moment to review each policy with your security team and scope them down to the&amp;nbsp;&lt;strong&gt;least-privilege permissions&lt;/strong&gt;&amp;nbsp;that your workload needs: 
    &lt;ul&gt; 
     &lt;li&gt;Add an &lt;a href="https://us-east-1.console.aws.amazon.com/iam/home?region=us-east-1#/policies/details/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonBedrockFullAccess" target="_blank" rel="noopener noreferrer"&gt;AmazonBedrockFullAccess&lt;/a&gt; managed policy.&lt;/li&gt; 
     &lt;li&gt;Add an &lt;a href="https://us-east-1.console.aws.amazon.com/iam/home?region=us-east-1#/policies/details/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonTextractFullAccess" target="_blank" rel="noopener noreferrer"&gt;AmazonTextractFullAccess&lt;/a&gt; managed policy.&lt;/li&gt; 
     &lt;li&gt;Add an &lt;a href="https://us-east-1.console.aws.amazon.com/iam/home?region=us-east-1#/policies/details/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonS3FullAccess?section=permissions" target="_blank" rel="noopener noreferrer"&gt;AmazonS3FullAccess&lt;/a&gt; managed policy.&lt;/li&gt; 
     &lt;li&gt;Add this inline policy to project policy 
      &lt;div class="hide-language"&gt; 
       &lt;pre&gt;&lt;code class="lang-code"&gt;{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "datazone:Search",
                "datazone:GetAsset",
                "datazone:CreateAssetRevision",
                "kms:Decrypt"
            ],
            "Resource": "*"
        }
    ]
}&lt;/code&gt;&lt;/pre&gt; 
      &lt;/div&gt; &lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;ul&gt; 
 &lt;li style="list-style-type: none"&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;With permissions configured, let’s set up the governance framework that will classify your documents. We will create glossary terms to tag sensitive and non-sensitive data.&lt;/p&gt; 
&lt;ol start="4"&gt; 
 &lt;li&gt;Add Glossary and Glossary terms. 
  &lt;ul&gt; 
   &lt;li&gt;Choose &lt;strong&gt;Glossaries&lt;/strong&gt; and &lt;strong&gt;CREATE GLOSSARY&lt;/strong&gt;.&lt;br&gt; &lt;img loading="lazy" class="alignnone size-full wp-image-89224" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/image-6-4.png" alt="" width="1432" height="669"&gt;&lt;/li&gt; 
   &lt;li&gt;Add the following:&lt;/li&gt; 
   &lt;li&gt;Name of the glossary and descriptions.&lt;/li&gt; 
   &lt;li&gt;Toggle on the Enable button as shown in the following screenshot.&lt;br&gt; &lt;img loading="lazy" class="alignnone size-full wp-image-89225" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/image-7-6.png" alt="" width="1253" height="1137"&gt;&lt;/li&gt; 
   &lt;li&gt;Create an appropriate glossary term. You will add this term to your business metadata.&lt;/li&gt; 
   &lt;li&gt;Navigate to the&amp;nbsp;&lt;strong&gt;Discover&lt;/strong&gt;&amp;nbsp;menu in the top navigation bar.&lt;/li&gt; 
   &lt;li&gt;Choose&amp;nbsp;&lt;strong&gt;Glossaries,&lt;/strong&gt;&amp;nbsp;and then select &lt;strong&gt;Create term.&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;Ensure that you’re creating the term under the Confidentiality glossary that you created in step 4.&lt;br&gt; &lt;img loading="lazy" class="alignnone size-full wp-image-89226" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/image-8-5.png" alt="" width="1363" height="439"&gt;&lt;/li&gt; 
   &lt;li&gt;Create two terms (sensitive and non-sensitive) and add a description. Make sure that&amp;nbsp;the &lt;strong&gt;Enabled&lt;/strong&gt;&amp;nbsp;toggle is on to enable the new term.&lt;br&gt; &lt;img loading="lazy" class="alignnone size-full wp-image-89227" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/30/image-9-3.png" alt="" width="966" height="510"&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Now that we have configured the necessary permissions and created our glossary terms, let’s proceed with building the business metadata.&lt;/p&gt; 
&lt;h3&gt;Build business metadata&lt;/h3&gt; 
&lt;p&gt;In this section, you will use Amazon Textract and Amazon Bedrock to automatically build and curate business metadata for your assets&amp;nbsp;using a SageMaker Unified Studio Notebook.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;From the &lt;strong&gt;Project Overview&lt;/strong&gt; page, access the &lt;strong&gt;Compute section&lt;/strong&gt; in the left menu. 
  &lt;ul&gt; 
   &lt;li&gt;Navigate to the &lt;strong&gt;Spaces&lt;/strong&gt; tab.&lt;/li&gt; 
   &lt;li&gt;Choose the default space created by your project(default-985-) to begin”.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89228" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/image-10-1.png" alt="" width="1369" height="487"&gt;&lt;/p&gt; 
&lt;ol start="2"&gt; 
 &lt;li&gt;Open the space details page by selecting the Name (default-****). 
  &lt;ul&gt; 
   &lt;li&gt;Under &lt;strong&gt;Actions&lt;/strong&gt;, Choose &lt;strong&gt;Open space&lt;/strong&gt; to be taken to the Data Notebook workspace (Jupyter based).&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89229" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/image-11-2.png" alt="" width="1427" height="444"&gt;&lt;/p&gt; 
&lt;ol start="3"&gt; 
 &lt;li&gt;After connected, upload the downloaded notebook from the prerequisite step in your JupyterLab interface by either dragging it into the File browser or using the upload icon.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89230" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/image-12-1.png" alt="" width="1509" height="528"&gt;&lt;/p&gt; 
&lt;p&gt;Before running the notebook, let’s understand what each cell does and how they work together to transform your documents into discoverable assets.&lt;/p&gt; 
&lt;p&gt;The notebook contains code for processing your documents. It begins by setting up AWS service connections using Boto3, the SDK for Python, importing necessary libraries, and initializing clients for Amazon S3, Amazon Textract, and Amazon Bedrock. The code configures an S3 bucket for processing medical documents.&lt;/p&gt; 
&lt;p&gt;Now, proceed to run through the individual cells:&lt;/p&gt; 
&lt;p&gt;This cell searches an S3 bucket for files with specific extensions (.pdf, .jpg, .jpeg, .png, .tiff), collects them into a list called ‘documents’, and prints the total count and names of found files. It uses the list_objects_v2 method to fetch the contents and filters them based on their file extensions.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89232" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/image-13-1.png" alt="" width="1193" height="400"&gt;&lt;/p&gt; 
&lt;p&gt;The documents extracted from the S3 bucket are processed using Amazon Textract. It loops through each document, starts an Amazon Textract job, monitors its progress, and when successful, extracts text from all pages. The extracted text is stored in a list along with its document identifier. The code handles pagination, errors, and includes delays between API calls to prevent throttling.&lt;br&gt; &lt;img loading="lazy" class="alignnone size-full wp-image-89233" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/image-14-2.png" alt="" width="1370" height="715"&gt;&lt;/p&gt; 
&lt;p&gt;Output [1] The following screenshot shows the output of a Jupyter notebook cell after you run the Amazon Textract API.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89234" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/image-15-1.png" alt="" width="1490" height="602"&gt;&lt;/p&gt; 
&lt;p&gt;This code takes all previously extracted document text, combines it into one string (2,002 characters total), and uses the Anthropic Claude 3 Sonnet model (available through Amazon Bedrock) to generate a concise summary. The code configures the AI model with specific parameters, sends the combined text for analysis, and returns a summarized version of all document content.&lt;br&gt; &lt;img loading="lazy" class="alignnone size-full wp-image-89236" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/image-16-1.png" alt="" width="1378" height="399"&gt;&lt;/p&gt; 
&lt;p&gt;Output [2] The following screenshot shows the proceeding output result.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89237" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/image-17-1.png" alt="" width="1499" height="376"&gt;&lt;/p&gt; 
&lt;p&gt;This code detects whether document text contains sensitive PII data (names, emails, addresses, financial details) and returns a Boolean true/false result.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89239" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/image-18-1.png" alt="" width="1191" height="228"&gt;&lt;/p&gt; 
&lt;p&gt;Finally, the code completes the document processing pipeline by classifying the asset based on sensitivity, updating its metadata with an AI-generated summary, and assigning the appropriate glossary term. The script retrieves existing asset details to preserve all metadata forms, updates the README field with the summary content, and creates a new revision. This record of the classification and documentation is stored in the data catalog, accessible alongside your source assets for ongoing governance.&lt;br&gt; &lt;img loading="lazy" class="alignnone size-full wp-image-89240" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/image-19-1.png" alt="" width="829" height="944"&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89241" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/image-20.png" alt="" width="658" height="873"&gt;&lt;/p&gt; 
&lt;p&gt;Output: The following screenshot shows the output result.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89242" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/image-21.png" alt="" width="1283" height="478"&gt;&lt;/p&gt; 
&lt;p&gt;After generating metadata with Amazon Textract and Amazon Bedrock, republish the data to make it discoverable to users. Note the README and the Glossary terms have already been added based on the previous script.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;To republish unstructured data with enriched metadata, go to your producer project and choose Re-publish asset.&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89243" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/image-22.png" alt="" width="1478" height="849"&gt;&lt;/p&gt; 
&lt;p&gt;To search for the asset that was published, choose one of the keywords from the README sections. For this example, we search using these keywords &lt;strong&gt;&lt;em&gt;high percent of ED visits.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Go to &lt;strong&gt;Home&lt;/strong&gt; in the search bar to enter the keyword. Then choose the asset as displayed in the following screenshot:&lt;br&gt; &lt;img loading="lazy" class="alignnone size-full wp-image-89254" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/image-23-1.png" alt="" width="1276" height="516"&gt;&lt;/p&gt; 
&lt;p&gt;As shown in the preceding image, the search results display the&amp;nbsp;&lt;strong&gt;asset name&lt;/strong&gt;&amp;nbsp;along with the&amp;nbsp;&lt;strong&gt;project it belongs to&lt;/strong&gt;. Select the asset to view its details, where you will find rich&amp;nbsp;&lt;strong&gt;business metadata, lineage information&lt;/strong&gt;, and more, as shown in the following screenshot.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-89245" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/image-24.png" alt="" width="1298" height="827"&gt;&lt;/p&gt; 
&lt;p&gt;With the asset published and metadata enriched, data assets are ready to be used.&lt;/p&gt; 
&lt;h3&gt;Clean up&lt;/h3&gt; 
&lt;p&gt;To avoid ongoing charges, make sure&amp;nbsp;&lt;em&gt;to&lt;/em&gt;&amp;nbsp;delete&amp;nbsp;the resources immediately after completing the tutorial:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Stop Studio Resources –&amp;nbsp;Close&amp;nbsp;all&amp;nbsp;running&amp;nbsp;notebooks – Stop&amp;nbsp;any&amp;nbsp;running&amp;nbsp;notebook instances – Shut down unused kernels. Running&amp;nbsp;instances continue&amp;nbsp;to&amp;nbsp;incur charges even&amp;nbsp;when&amp;nbsp;not actively used.&lt;/li&gt; 
 &lt;li&gt;Clean S3 Storage –&amp;nbsp;Delete&amp;nbsp;any&amp;nbsp;temporary files created during processing – Remove uploaded test documents if&amp;nbsp;no longer needed. While Amazon S3 costs&amp;nbsp;are&amp;nbsp;minimal,&amp;nbsp;large&amp;nbsp;volumes&amp;nbsp;of&amp;nbsp;unneeded data can accumulate charges.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;In this post we showed you how you can transform unstructured data into valuable business assets through seamless integration with AWS services. You can efficiently process documents using Amazon Textract for text extraction, harness the capabilities of Amazon Bedrock for intelligent term identification, and use Amazon SageMaker Catalog for metadata management—all within a secure, governed framework.&lt;/p&gt; 
&lt;h3&gt;Additional resources&lt;/h3&gt; 
&lt;p&gt;To continue your Amazon SageMaker AI journey, see the following resources:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li style="list-style-type: none"&gt; 
  &lt;ol&gt; 
   &lt;li style="list-style-type: none"&gt; 
    &lt;ul&gt; 
     &lt;li&gt;Explore the&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/what-is-sagemaker-unified-studio.html" target="_blank" rel="noopener noreferrer"&gt;Amazon SageMaker Developer Guide.&amp;nbsp;&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;Documentation – You can find complete setup guides in Amazon&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/sagemaker/latest/dg/unified-studio.html" target="_blank" rel="noopener noreferrer"&gt;SageMaker Unified Studio Documentation&lt;/a&gt;.&lt;/li&gt; 
     &lt;li&gt;Get started with these new integrations through the&amp;nbsp;&lt;a href="https://console.aws.amazon.com/sagemaker/unified-studio" target="_blank" rel="noopener noreferrer"&gt;Amazon s Unified Studio console&lt;/a&gt;.&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
  &lt;/ol&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;hr style="width: 80%"&gt; 
&lt;h2&gt;About the authors&lt;/h2&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="size-full wp-image-89246" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/nishchai-4.jpg" alt="Nishchai JM" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Nishchai JM&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/nishchai-jm/" target="_blank" rel="noopener"&gt;Nishchai&lt;/a&gt; is an Analytics and GenAI Specialist Solutions Architect at Amazon Web services. He specializes in building larger scale distributed applications and help customer to modernize their workload on Cloud. He thinks Data is new oil and spends most of his time in deriving insights out of the Data.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="size-full wp-image-89248" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/Picture19.png" alt="KiKi Nwangwu" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;KiKi Nwangwu&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="author LinkedIn" target="_blank" rel="noopener"&gt;KiKi&lt;/a&gt; is a specialist solutions architect at AWS. She specializes in helping customers architect, build, and modernize scalable data analytics and generative AI solutions. She enjoys travelling and exploring new cultures.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="size-full wp-image-89249" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/Narendra-Gupta.jpg" alt="Narendra Gupta" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Narendra Gupta&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/narendra-gupta-5862338/" target="_blank" rel="noopener"&gt;Narendra&lt;/a&gt; is a Specialist Solutions Architect at AWS, helping customers on their cloud journey with a focus on AWS analytics services. Outside of work, Narendra enjoys learning new technologies, watching movies, and visiting new places.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="alignnone size-full wp-image-89256" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/22/RAMESH-H-SINGH-PHONE-TOOL.png" alt="" width="100" height="134"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Ramesh Singh&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/ramesh-harisaran-singh/" target="_blank" rel="noopener"&gt;Ramesh Singh&lt;/a&gt; is a Senior Product Manager Technical (External Services) at AWS in Seattle, Washington, currently with the Amazon SageMaker team. He is passionate about building high-performance ML/AI and analytics products that help enterprise customers achieve their critical goals using cutting-edge technology.&lt;/p&gt; 
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Automated tag-based DAG permission management in Amazon MWAA</title>
		<link>https://aws.amazon.com/blogs/big-data/automated-tag-based-dag-permission-management-in-amazon-mwaa/</link>
					
		
		<dc:creator><![CDATA[Amey Ramakant Mhadgut]]></dc:creator>
		<pubDate>Tue, 31 Mar 2026 15:57:06 +0000</pubDate>
				<category><![CDATA[Amazon Managed Workflows for Apache Airflow (Amazon MWAA)]]></category>
		<category><![CDATA[Intermediate (200)]]></category>
		<category><![CDATA[Technical How-to]]></category>
		<guid isPermaLink="false">042b459efb995cfcd35345a5352ae78f4180ce1a</guid>

					<description>In this post, we show you how to use Apache Airflow tags to systematically manage DAG permissions, reducing operational burden while maintaining robust security controls that complement infrastructure-level security measures.</description>
										<content:encoded>&lt;p&gt;&lt;a href="https://aws.amazon.com/managed-workflows-for-apache-airflow/" target="_blank" rel="noopener noreferrer"&gt;Amazon Managed Workflows for Apache Airflow&lt;/a&gt; (Amazon MWAA) provides robust orchestration capabilities for data workflows, but managing DAG permissions at scale presents significant operational challenges. As organizations grow their workflow environments and teams, manually assigning and maintaining user permissions becomes a bottleneck that can impact both security and productivity.&lt;/p&gt; 
&lt;p&gt;Traditional approaches require administrators to manually configure role-based access control (RBAC) for each DAG, leading to:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Inconsistent permission assignments across teams&lt;/li&gt; 
 &lt;li&gt;Delayed access provisioning for new team members&lt;/li&gt; 
 &lt;li&gt;Increased risk of human error in permission management&lt;/li&gt; 
 &lt;li&gt;Significant operational overhead that doesn’t scale&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;There is another way of doing it by defining custom RBAC roles as mentioned in this &lt;a href="https://docs.aws.amazon.com/mwaa/latest/userguide/limit-access-to-dags.html" target="_blank" rel="noopener noreferrer"&gt;Amazon MWAA User Guide&lt;/a&gt;. However, it doesn’t use &lt;a href="https://airflow.apache.org/docs/apache-airflow/2.7.3/howto/add-dag-tags.html" target="_blank" rel="noopener noreferrer"&gt;Airflow tags&lt;/a&gt; to do so.&lt;/p&gt; 
&lt;p&gt;In this post, we show you how to use Apache Airflow tags to systematically manage DAG permissions, reducing operational burden while maintaining robust security controls that complement infrastructure-level security measures.&lt;/p&gt; 
&lt;h2&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;To implement this solution, you need:&lt;/p&gt; 
&lt;p&gt;AWS resources:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;An Amazon MWAA environment (version 2.7.2 or later, not supported in Airflow 3.0)&lt;/li&gt; 
 &lt;li&gt;IAM roles configured for Amazon MWAA access with appropriate trust relationships&lt;/li&gt; 
 &lt;li&gt;Amazon Simple Storage Service (Amazon S3) bucket for Amazon MWAA DAG storage with proper permissions&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Permissions:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;IAM permissions to create and modify Amazon MWAA web login tokens&lt;/li&gt; 
 &lt;li&gt;Amazon MWAA execution role with permissions to access the Apache Airflow metadata database&lt;/li&gt; 
 &lt;li&gt;Administrative access to configure Apache Airflow roles and permissions&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;&lt;strong&gt;Solution overview&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;The automated permission management system consists of four key components that work together to provide scalable, secure access control.The following diagram shows the workflow of how the solution works.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="size-full wp-image-89480 alignnone" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/24/BDB-5176-1.png" alt="Amazon Managed Workflows for Apache Airflow (MWAA) DAG Permission Management Workflow Diagram" width="981" height="737"&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;IAM integration layer&lt;/strong&gt; – AWS IAM roles map directly to Apache Airflow roles. Then, users authenticate through AWS IAM and are automatically assigned corresponding Airflow roles. This supports both individual user roles and group-based access patterns.&lt;br&gt; Note:&lt;p&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;IAM Based access control to Amazon MWAA works for Apache Airflow default roles. For custom roles, the Admin user can assign the custom role using the Apache Airflow UI as mentioned in the &lt;a href="https://repost.aws/knowledge-center/mwaa-secure-dag-access" target="_blank" rel="noopener noreferrer"&gt;Knowledge Center post&lt;/a&gt; and in the &lt;a href="https://docs.aws.amazon.com/mwaa/latest/userguide/access-policies.html&amp;quot; \l &amp;quot;web-ui-access" target="_blank" rel="noopener noreferrer"&gt;Amazon MWAA User Guide&lt;/a&gt;.&lt;/li&gt; 
   &lt;li&gt;If using other authenticators, the tag-based DAG permissions continue to work as stated in the &lt;a href="https://aws.amazon.com/blogs/big-data/automate-secure-access-to-amazon-mwaa-environments-using-existing-openid-connect-single-sign-on-authentication-and-authorization/" target="_blank" rel="noopener noreferrer"&gt;AWS Big Data Blog&lt;/a&gt; post.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Tag-based configuration&lt;/strong&gt; – Apache Airflow tags defined in DAGs are used to declare access requirements. It supports read-only, edit, and delete permissions.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Automated synchronization engine&lt;/strong&gt; – Scheduled DAG scans all active DAGs for permission tags based on CRON schedule. It then processes tags and updates Apache Airflow RBAC permissions accordingly. Then, it provides a configuration based to control the clean-up of existing permissions.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Role-based access control enforcement&lt;/strong&gt; – Apache Airflow RBAC enforces the configured permissions by storing on Apache Airflow role and permissions metadata tables. Users see only the DAGs that they have access to. They have granular control over read compared to edit permissions.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;&lt;strong&gt;Data flow&lt;/strong&gt;&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Amazon MWAA User assumes an IAM role to access the Amazon MWAA UI.&lt;/li&gt; 
 &lt;li&gt;DAG developer adds relevant tags to the DAG definition.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;manage_dag_permissions&lt;/code&gt; DAG deployed to the Amazon MWAA environment runs on a CRON schedule, for example, &lt;em&gt;daily.&lt;/em&gt;&lt;/li&gt; 
 &lt;li&gt;The DAG updates the respective role permissions to the DAG by updating the Apache Airflow metadata on the Apache Airflow DB.&lt;/li&gt; 
 &lt;li&gt;Users gain or lose access based on their assigned roles.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Our solution builds upon the existing IAM integration of Amazon MWAA, while extending functionality through custom automation:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Authentication and role mapping&lt;/strong&gt; – Users authenticate through AWS IAM roles that map directly to corresponding Airflow roles.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Automated user creation&lt;/strong&gt; – Upon first login, users are automatically created in the Apache Airflow metadata database with appropriate role assignments.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Tag-based permission control&lt;/strong&gt; – Each Apache Airflow role contains specific DAG permissions based on tags defined in the DAGs.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Automated synchronization&lt;/strong&gt; – A scheduled script maintains permissions as DAGs are added or modified.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;&lt;strong&gt;Step 1: Configure IAM to Airflow role mapping&lt;/strong&gt;&lt;/h3&gt; 
&lt;p&gt;First, establish the mapping between your IAM principals and Apache Airflow roles. To grant permission using the AWS Management Console, complete the following steps:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Sign in to your AWS account and open the &lt;a href="https://console.aws.amazon.com/iam/" target="_blank" rel="noopener noreferrer"&gt;IAM console&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;In the left navigation pane, choose &lt;strong&gt;Users&lt;/strong&gt;, then choose your Amazon MWAA IAM user from the users table.&lt;/li&gt; 
 &lt;li&gt;On the &lt;strong&gt;user details&lt;/strong&gt; page, under &lt;strong&gt;Summary&lt;/strong&gt;, choose the &lt;strong&gt;Permissions &lt;/strong&gt;tab, then choose &lt;strong&gt;Permissions policies&lt;/strong&gt; to expand the card and choose &lt;strong&gt;Add permissions&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;In the &lt;strong&gt;Grant permissions&lt;/strong&gt; section, choose &lt;strong&gt;Attach existing policies directly&lt;/strong&gt;, then choose &lt;strong&gt;Create policy&lt;/strong&gt; to create and attach your own custom permissions policy.&lt;/li&gt; 
 &lt;li&gt;On the &lt;strong&gt;Create policy&lt;/strong&gt; page, choose &lt;strong&gt;JSON&lt;/strong&gt;, then copy and paste the following JSON permissions policy in the policy editor. This policy grants web server access to the user with the default Public Apache Airflow role.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code class="lang-json"&gt;{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "airflow:CreateWebLoginToken",
      "Resource": "arn:aws:airflow:region:account-id:environment/your-environment-name"
    }
  ]
}&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;&lt;strong&gt;Step 2: Create the automated permission management DAG&lt;/strong&gt;&lt;/h3&gt; 
&lt;p&gt;Now, create a DAG that will automatically manage permissions based on tags.&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-python"&gt;from airflow import DAG, settings
from airflow.operators.python import PythonOperator
from sqlalchemy import text
import pendulum
import logging

dag_id = "manage_dag_permissions"

class Constants:
    """
    Constants class to hold constant values used throughout the code.
    """
    AB_VIEW_MENU = "ab_view_menu"
    AB_PERMISSION = "ab_permission"
    AB_ROLE = "ab_role"
    AB_PERMISSION_VIEW = "ab_permission_view"
    AB_PERMISSION_VIEW_ROLE = "ab_permission_view_role"
    DAG_TAG = "dag_tag"

    CAN_READ = "can_read"
    CAN_EDIT = "can_edit"
    CAN_DELETE = "can_delete"


def _execute_query(sql_text, params=None, fetch=True):
    """
    Execute a parameterized SQL query against the Airflow metadata DB.
    All queries use SQLAlchemy text() with bind parameters to prevent SQL injection.

    Parameters:
        sql_text: SQL string with :named bind parameters
        params: dict of parameter values
        fetch: If True, return list of first-column values; if False, commit and return None
    Returns:
        List of values (first column) if fetch=True, else None
    Raises:
        Re-raises any exception after rollback and logging
    """
    session = settings.Session()
    try:
        stmt = text(sql_text)
        if fetch:
            result = session.execute(stmt, params or {}).fetchall()
            return [row[0] for row in result]
        else:
            session.execute(stmt, params or {})
            session.commit()
            return None
    except Exception as e:
        session.rollback()
        logging.error(f"DB query error (fetch={fetch}): {type(e).__name__}: {e}")
        raise
    finally:
        session.close()

def fetch_airflow_role_id(role_name):
    """
    Fetch role id of a given role name using parameterized query.
    """
    result = _execute_query(
        "SELECT id FROM ab_role WHERE name = :role_name",
        {"role_name": role_name},
    )
    if not result:
        raise ValueError(f"Airflow role not found: {role_name}")
    logging.info("Fetched role ID successfully")
    return result[0]

def fetch_airflow_permission_id(permission_name):
    """
    Fetch permission id of a given permission using parameterized query.
    """
    result = _execute_query(
        "SELECT id FROM ab_permission WHERE name = :perm_name",
        {"perm_name": permission_name},
    )
    if not result:
        raise ValueError(f"Airflow permission not found: {permission_name}")
    logging.info("Fetched permission ID successfully")
    return result[0]

def fetch_airflow_menu_object_ids(dag_names):
    """
    Fetch view_menu IDs for a list of DAG resource names.
    Uses parameterized IN-clause via individual bind params.

    Parameters:
        dag_names: list of DAG resource names (e.g. ['DAG:my_dag1', 'DAG:my_dag2'])
    Returns:
        list of view_menu IDs
    """
    if not dag_names:
        return []
    # Build parameterized IN clause: :p0, :p1, :p2, ...
    param_names = [f":p{i}" for i in range(len(dag_names))]
    params = {f"p{i}": name for i, name in enumerate(dag_names)}
    in_clause = ", ".join(param_names)
    result = _execute_query(
        f"SELECT id FROM ab_view_menu WHERE name IN ({in_clause})",
        params,
    )
    logging.info(f"Fetched {len(result)} view menu IDs")
    return result

def fetch_perms_obj_association_ids(perm_id, view_menu_ids):
    """
    Fetch permission_view IDs for a permission and list of view_menu IDs.
    Uses parameterized query.
    """
    if not view_menu_ids:
        return []
    param_names = [f":vm{i}" for i in range(len(view_menu_ids))]
    params = {f"vm{i}": vm_id for i, vm_id in enumerate(view_menu_ids)}
    params["perm_id"] = perm_id
    in_clause = ", ".join(param_names)
    result = _execute_query(
        f"SELECT id FROM ab_permission_view WHERE permission_id = :perm_id AND view_menu_id IN ({in_clause})",
        params,
    )
    logging.info(f"Fetched {len(result)} permission-view association IDs")
    return result

def fetch_dag_ids_by_tag(tag_name):
    """
    Fetch DAG IDs with a given tag name using parameterized query.
    """
    result = _execute_query(
        "SELECT DISTINCT dag_id FROM dag_tag WHERE name = :tag_name",
        {"tag_name": tag_name},
    )
    logging.info(f"Fetched {len(result)} DAG IDs for tag")
    return result

def associate_permission_to_object(perm_id, view_menu_ids):
    """
    Associate permission to view_menu objects (DAGs) using parameterized INSERT.
    """
    session = settings.Session()
    try:
        for vm_id in view_menu_ids:
            session.execute(
                text(
                    "INSERT INTO ab_permission_view (permission_id, view_menu_id) "
                    "VALUES (:perm_id, :vm_id) "
                    "ON CONFLICT (permission_id, view_menu_id) DO NOTHING"
                ),
                {"perm_id": perm_id, "vm_id": vm_id},
            )
        session.commit()
        logging.info(f"Associated permission to {len(view_menu_ids)} view menus")
    except Exception as e:
        session.rollback()
        logging.error(f"Error associating permission to objects: {type(e).__name__}: {e}")
        raise
    finally:
        session.close()

def associate_permission_to_role(permission_view_ids, role_id):
    """
    Associate permission_view entries to a role using parameterized INSERT.
    """
    session = settings.Session()
    try:
        for pv_id in permission_view_ids:
            session.execute(
                text(
                    "INSERT INTO ab_permission_view_role (permission_view_id, role_id) "
                    "VALUES (:pv_id, :role_id) "
                    "ON CONFLICT (permission_view_id, role_id) DO NOTHING"
                ),
                {"pv_id": pv_id, "role_id": role_id},
            )
        session.commit()
        logging.info(f"Associated {len(permission_view_ids)} permissions to role")
    except Exception as e:
        session.rollback()
        logging.error(f"Error associating permissions to role: {type(e).__name__}: {e}")
        raise
    finally:
        session.close()

def validate_if_permission_granted(permission_view_ids, role_id):
    """
    Validate if given permissions are associated to given role using parameterized query.
    """
    if not permission_view_ids:
        return []
    param_names = [f":pv{i}" for i in range(len(permission_view_ids))]
    params = {f"pv{i}": pv_id for i, pv_id in enumerate(permission_view_ids)}
    params["role_id"] = role_id
    in_clause = ", ".join(param_names)
    result = _execute_query(
        f"SELECT id FROM ab_permission_view_role "
        f"WHERE permission_view_id IN ({in_clause}) AND role_id = :role_id",
        params,
    )
    logging.info(f"Validated {len(result)} permission grants")
    return result

def clean_up_existing_dag_permissions_for_role(role_id):
    """
    Clean up existing DAG permissions for a given role using parameterized query.
    Note: this creates a brief window where the role has no DAG permissions.
    """
    _execute_query(
        "DELETE FROM ab_permission_view_role WHERE id IN ("
        "  SELECT pvr.id"
        "  FROM ab_permission_view_role pvr"
        "  INNER JOIN ab_permission_view pv ON pvr.permission_view_id = pv.id"
        "  INNER JOIN ab_view_menu vm ON pv.view_menu_id = vm.id"
        "  WHERE pvr.role_id = :role_id AND vm.name LIKE :dag_prefix"
        ")",
        {"role_id": role_id, "dag_prefix": "DAG:%"},
        fetch=False,
    )
    logging.info("Cleaned up existing DAG permissions for role")

def sync_permission(config_data):
    """
    Sync permissions based on the config.

    Parameters:
        config_data: dict with keys:
            - airflow_role_name: name of the custom Airflow role
            - managed_dags: list of DAG IDs to grant full management permissions on
              (can_read, can_edit, can_delete)
            - do_cleanup: if True, remove all existing DAG:* permissions first
    """
    # Get the role ID for role name
    role_id = fetch_airflow_role_id(config_data["airflow_role_name"])

    # Clean up existing DAG level permissions if requested
    if config_data.get("do_cleanup", False):
        clean_up_existing_dag_permissions_for_role(role_id)

    managed_dags = config_data.get("managed_dags", [])
    if not managed_dags:
        logging.info("No managed DAGs found, skipping permission sync")
        return

    # Determine which permissions to grant (default: can_read only)
    permissions = config_data.get("permissions", [Constants.CAN_READ])

    # Build DAG resource names (e.g. ["DAG:my_dag1", "DAG:my_dag2"])
    dag_resource_names = [f"DAG:{dag.strip()}" for dag in managed_dags]

    # Get IDs for DAG view_menu objects
    vm_ids = fetch_airflow_menu_object_ids(dag_resource_names)
    if not vm_ids:
        logging.info("No view_menu entries found for managed DAGs")
        return

    # Grant the configured permissions on each managed DAG
    all_perm_view_ids = []
    for perm_name in permissions:
        perm_id = fetch_airflow_permission_id(perm_name)
        associate_permission_to_object(perm_id, vm_ids)
        all_perm_view_ids += fetch_perms_obj_association_ids(perm_id, vm_ids)

    # Associate permission_view entries with the role and validate
    if all_perm_view_ids and role_id:
        associate_permission_to_role(all_perm_view_ids, role_id)
        validate_if_permission_granted(all_perm_view_ids, role_id)

def sync_permissions_with_tags(role_mappings):
    """
    For each role mapping, fetch DAG IDs by tag and sync permissions.
    """
    for role_map in role_mappings:
        username = list(role_map.keys())[0]
        airflow_role = role_map[username]["airflow_role"]
        edit_tag_name = role_map[username]["airflow_edit_tag"]

        config_data = {
            "airflow_role_name": airflow_role,
            "managed_dags": fetch_dag_ids_by_tag(edit_tag_name),
            "permissions": role_map[username].get("permissions", [Constants.CAN_READ]),
            "do_cleanup": role_map[username].get("do_cleanup", True),
        }
        logging.info(f"Syncing permissions for airflow role")
        sync_permission(config_data)
        logging.info("Completed permission sync for role")

"""
    Add new roles and permissions here.
    Format:
    {
       "&amp;lt;role_key&amp;gt;": {
            "airflow_role": &amp;lt;Custom Airflow role name to grant permissions to&amp;gt;,
            "airflow_edit_tag": &amp;lt;Airflow Tag Name - DAGs with this tag will be managed&amp;gt;,
            "permissions": &amp;lt;List of permissions to grant on each tagged DAG.
                Options: "can_read", "can_edit", "can_delete"
                Default: ["can_read"] if omitted&amp;gt;,
            "do_cleanup": &amp;lt;Set to True (recommended) to clean up existing DAG permissions&amp;gt;
        }
    },

    IMPORTANT - ROLE SETUP:
    When creating a new custom role (e.g. "analytics_reporting", "marketing_analyst")
    in the Airflow UI (Security &amp;gt; List Roles), you MUST copy the Viewer role's
    permissions into the new role. The Viewer permissions provide base UI access
    (browse DAGs, view logs, menu access, etc.). --or-- Assign the viewer role as well.
    Without them, users assigned to
    the custom role will not be able to log in to the Airflow UI.

    This DAG manages DAG-level permissions on DAG:xxx resources.
    Which permissions are granted is controlled by the "permissions" list
    in each config entry (options: can_read, can_edit, can_delete).
    It does NOT manage base UI permissions — those must be set up manually
    when creating the role.

    Steps to create a new custom role:
    1. Go to Security &amp;gt; List Roles &amp;gt; + (Add)
    2. Name it to match the "airflow_role" value in the config below
    3. Copy all permissions from the "Viewer" role into the new role
    4. Save — this DAG will then automatically add DAG-specific permissions
       (as configured in the "permissions" list) for each tagged DAG
"""
role_mappings = [
    {
        "analytics_reporting": {
            "airflow_role": "analytics_reporting",
            "airflow_edit_tag": "analytics_reporting_edit",
            "permissions": ["can_read", "can_edit", "can_delete"],
            "do_cleanup": True,
        }
    },
    {
        "marketing_analyst": {
            "airflow_role": "marketing_analyst",
            "airflow_edit_tag": "marketing_analyst_edit",
            "permissions": ["can_read", "can_edit", "can_delete"],
            "do_cleanup": True,
        },
    },
]

with DAG(
    dag_id=dag_id,
    schedule="*/15 * * * *",
    catchup=False,
    start_date=pendulum.datetime(2026, 1, 1, tz="UTC"),
) as dag:
    sync_dag_permissions_task = PythonOperator(
        task_id="sync_dag_permissions",
        python_callable=sync_permissions_with_tags,
        op_kwargs={"role_mappings": role_mappings},
    )
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Step 3: Tag your DAGs for access control&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Add appropriate tags to your DAGs to specify which roles should have access. Tags are used to define which roles have access to tagged DAGs.&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-python"&gt;# Example DAG for analytics_reporting
with DAG(
    "analytics_reporting_dag",
    description="Daily analytics reporting pipeline",
    schedule_interval="@daily",
    start_date=pendulum.datetime(2023, 1, 1, tz="UTC"),
    catchup=False,
    tags=["reporting", "analytics", "analytics_reporting_edit"]
) as dag:
    # DAG tasks here
    pass
    
    
# Example DAG for marketing_analyst
with DAG(
    "marketing_analyst_dag",
    description="Daily marketing lead analysis pipeline",
    schedule_interval="@daily",
    start_date=pendulum.datetime(2023, 1, 1, tz="UTC"),
    catchup=False,
    tags=["marketing", "analytics", "marketing_analyst_edit"]
) as dag:
    # DAG tasks here
    pass&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;In this example:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;The &lt;code&gt;analytics_reporting&lt;/code&gt; custom role will have read, edit, and delete access to the DAG &lt;code&gt;analytics_reporting_dag&lt;/code&gt; (and other DAGs tagged with &lt;code&gt;analytics_reporting_edit&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;The &lt;code&gt;marketing_analyst&lt;/code&gt; custom role will have read, edit, and delete access to the DAG &lt;code&gt;marketing_analyst_dag&lt;/code&gt; (and other DAGs tagged with &lt;code&gt;marketing_analyst_edit&lt;/code&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The exact permissions granted (&lt;code&gt;can_read&lt;/code&gt;, &lt;code&gt;can_edit&lt;/code&gt;, &lt;code&gt;can_delete&lt;/code&gt;) are configurable per role in the &lt;code&gt;role_mappings&lt;/code&gt;&amp;nbsp;config inside the permission management DAG:&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-python"&gt;role_mappings = [
    {
        "analytics_reporting": {
            "airflow_role": "analytics_reporting",
            "airflow_edit_tag": "analytics_reporting_edit",
            "permissions": ["can_read", "can_edit", "can_delete"],
            "do_cleanup": True,
        }
    },
    {
        "marketing_analyst": {
            "airflow_role": "marketing_analyst",
            "airflow_edit_tag": "marketing_analyst_edit",
            "permissions": ["can_read", "can_edit", "can_delete"],
            "do_cleanup": True,
        },
    },
]&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Note: Before this DAG can manage permissions for a custom role, the role must be created manually in the Apache Airflow UI (Security &amp;gt; List Roles) with the Viewer role’s permissions copied in. See Step 2 for details.&lt;/p&gt; 
&lt;h3&gt;&lt;strong&gt;Step 4: Deploy and test&lt;/strong&gt;&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Upload both the permission management DAG and your tagged DAGs to your Amazon MWAA environment’s S3 bucket.&lt;/li&gt; 
 &lt;li&gt;Wait for Amazon MWAA to detect and process the new DAGs.&lt;/li&gt; 
 &lt;li&gt;Verify that the permission management DAG runs successfully.&lt;/li&gt; 
 &lt;li&gt;Test access with different user roles to confirm proper permission enforcement.&lt;/li&gt; 
 &lt;li&gt;Users can also &lt;a href="https://aws.amazon.com/blogs/opensource/deploying-to-amazon-managed-workflows-for-apache-airflow-with-ci-cd-tools/" target="_blank" rel="noopener noreferrer"&gt;integrate this with their CI/CD processes&lt;/a&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;&lt;strong&gt;Troubleshooting&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;In this section, we cover some common issues and how to troubleshoot them.&lt;/p&gt; 
&lt;h3&gt;&lt;strong&gt;Permission sync failures&lt;/strong&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: Permission sync DAG fails with database errors.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Cause&lt;/strong&gt;: Insufficient permissions on MWAA execution role.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Ensure that the execution role has &lt;code&gt;airflow:CreateWebLoginToken&lt;/code&gt; permission and database access.&lt;/p&gt; 
&lt;h3&gt;&lt;strong&gt;Tags not being processed&lt;/strong&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: DAG tags are present but permissions aren’t updated.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Check that DAG is active and parsed successfully – Review permission sync DAG logs for processing errors.&lt;/p&gt; 
&lt;h3&gt;&lt;strong&gt;Users cannot access expected DAGs&lt;/strong&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: Users with correct IAM roles cannot see DAGs&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Confirm that IAM to Apache Airflow role mapping is correct. Verify that the permission sync DAG has run successfully. Check Amazon CloudWatch Logs for permission assignment errors.&lt;/p&gt; 
&lt;h3&gt;&lt;strong&gt;Performance issues&lt;/strong&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: Permission sync takes too long or times out.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Reduce sync frequency for large environments. Consider batching permission updates. Monitor DAG execution time and optimize accordingly.&lt;/p&gt; 
&lt;h3&gt;&lt;strong&gt;Debugging steps&lt;/strong&gt;&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Check Amazon MWAA environment health and connectivity&lt;/li&gt; 
 &lt;li&gt;Review permission sync DAG execution logs&lt;/li&gt; 
 &lt;li&gt;Verify IAM role configurations and trust relationships&lt;/li&gt; 
 &lt;li&gt;Test with a single DAG to isolate issues&lt;/li&gt; 
 &lt;li&gt;Monitor CloudWatch Logs for detailed error messages&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;&lt;strong&gt;Benefits and considerations&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;Automated permission management offers you significant operational advantages while enhancing your security. You will benefit from reduced administrative overhead as manual permission assignments are removed, so you can scale seamlessly without additional burden. Your security improves through consistent application of least-privilege principles and reduced human error. You will enhance your developer experience with automatic access provisioning that shortens onboarding time, while your system supports environments with over 500 DAGs without performance degradation.&lt;/p&gt; 
&lt;p&gt;When you implement these systems, you must adhere to key security practices. You should apply the principle of least privilege, validate tags to make sure that you’re only processing authorized tags, and establish comprehensive audit mechanisms including CloudTrail logging. Your access control measures should restrict permission management functions to administrators while you utilize appropriate role separation for different user personas.&lt;/p&gt; 
&lt;p&gt;You will need to consider several technical limitations during your implementation. IAM-based access control to Amazon MWAA works only with Apache Airflow default roles, not custom ones, though your tag-based permissions function with alternative authenticators. Permission changes propagate based on DAG schedules, potentially causing delays. You should establish approval processes for your production changes, maintain version control for permissions, and document your rollback procedures to ensure your system’s resilience and security.&lt;/p&gt; 
&lt;h2&gt;&lt;strong&gt;Clean up&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;Clean up resources after your experimentation:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/cli/latest/reference/mwaa/delete-environment.html" target="_blank" rel="noopener noreferrer"&gt;Delete the Amazon MWAA environments&lt;/a&gt; using the console or AWS CLI.&lt;/li&gt; 
 &lt;li&gt;Update the IAM role policy or delete the IAM role if not needed.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;In this post, you learned how to automate DAG permission management in Amazon MWAA using Apache Airflow’s tagging system. You saw how to implement tag-based access control that scales efficiently, reduces manual errors, and maintains least-privilege security principles across hundreds of DAGs. You also explored the key security practices and technical considerations that you need to keep in mind during implementation.&lt;/p&gt; 
&lt;p&gt;Try out this solution in your Amazon MWAA environment to streamline your permission management. Start by implementing the tagging system in a development environment, then gradually roll it out to production as your team becomes comfortable with the approach.&lt;/p&gt; 
&lt;hr&gt; 
&lt;h2&gt;About the authors&lt;/h2&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="size-full wp-image-89483 alignleft" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/24/BDB-5176-2-1.jpeg" alt="Amey Ramakant Mhadgut" width="100" height="133"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Amey Ramakant Mhadgut&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/amey-m"&gt;&lt;strong&gt;Amey Ramakant Mhadgut&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;is a Software Engineer at Audible on the Data Experience team building Data and AI applications at enterprise scale. He specializes in GenAI, agentic systems, RAG and big data architectures. He is passionate about solving complex architectural challenges and helping teams build innovative solutions across Streaming Media &amp;amp; Entertainment industries. Outside of work, he enjoys running, swimming, and traveling.&lt;/p&gt; 
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="size-full wp-image-89484 alignleft" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/24/BDB-5176-3-1.jpeg" alt="" width="100" height="133"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Sarat Chandra Vysyaraju&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/saratvysyaraju"&gt;&lt;strong&gt;Sarat Chandra Vysyaraju&lt;/strong&gt;&lt;/a&gt; is a Software Development Manager at Audible, where he leads the Data Experience team. He focuses on empowering data customers through high-performance platforms, governed enterprise datasets, and centralized intelligence. He is passionate about data architecture, applied AI, and serverless technologies. Outside of work, he is a documentary enthusiast who enjoys learning random facts, cooking diverse cuisines, and exploring new places.&lt;/p&gt; 
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Secure multi-warehouse Amazon Redshift access behind a Network Load Balancer using Microsoft Entra ID</title>
		<link>https://aws.amazon.com/blogs/big-data/secure-multi-warehouse-amazon-redshift-access-behind-a-network-load-balancer-using-microsoft-entra-id/</link>
					
		
		<dc:creator><![CDATA[Raghu Kuppala]]></dc:creator>
		<pubDate>Mon, 30 Mar 2026 17:46:40 +0000</pubDate>
				<category><![CDATA[Amazon Redshift]]></category>
		<category><![CDATA[Amazon Route 53]]></category>
		<category><![CDATA[AWS Certificate Manager]]></category>
		<category><![CDATA[Elastic Load Balancing]]></category>
		<category><![CDATA[Technical How-to]]></category>
		<guid isPermaLink="false">501aadb249276991ad24eacf2f01beec61a37be3</guid>

					<description>In this post, we show you how to configure a native identity provider (IdP) federation for Amazon Redshift Serverless using Network Load Balancer. You will learn how to enable secure connections from tools like DBeaver and Power BI while maintaining your enterprise security standards.</description>
										<content:encoded>&lt;p&gt;As data analytics workloads scale, organizations face two challenges. First, they must deliver high-performance analytics at massive scale while maintaining secure access across diverse tools. Second, they must manage high-concurrency workloads while integrating with existing identity management systems.&lt;/p&gt; 
&lt;p&gt;You can address these challenges by using &lt;a href="https://aws.amazon.com/redshift/redshift-serverless/" target="_blank" rel="noopener noreferrer"&gt;Amazon Redshift Serverless&lt;/a&gt; endpoints behind an &lt;a href="https://aws.amazon.com/elasticloadbalancing/network-load-balancer/" target="_blank" rel="noopener noreferrer"&gt;AWS Network Load Balancer&lt;/a&gt; with Microsoft Entra ID federation. This architecture can authenticate while helping to streamline identity management across your data environment. Amazon Redshift Serverless provides petabyte-scale analytics with auto scaling capabilities, &lt;a href="https://aws.amazon.com/blogs/big-data/scale-amazon-redshift-to-meet-high-throughput-query-requirements/" target="_blank" rel="noopener noreferrer"&gt;enabling high-concurrency workloads&lt;/a&gt; while streamlining user authentication and authorization.&lt;/p&gt; 
&lt;p&gt;In this post, we show you how to configure a native identity provider (IdP) federation for Amazon Redshift Serverless using Network Load Balancer. You will learn how to enable secure connections from tools like &lt;a href="https://dbeaver.io/" target="_blank" rel="noopener noreferrer"&gt;DBeaver&lt;/a&gt; and &lt;a href="https://www.microsoft.com/en-us/power-platform/products/power-bi" target="_blank" rel="noopener noreferrer"&gt;Power BI&lt;/a&gt; while maintaining your enterprise security standards.&lt;/p&gt; 
&lt;h2&gt;Solution overview&lt;/h2&gt; 
&lt;p&gt;The following diagram shows the architecture.&lt;/p&gt; 
&lt;div id="attachment_89188" style="width: 916px" class="wp-caption alignnone"&gt;
 &lt;img aria-describedby="caption-attachment-89188" loading="lazy" class="wp-image-89188 size-full" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-1.png" alt="Figure 1: Sample architecture diagram" width="906" height="667"&gt;
 &lt;p id="caption-attachment-89188" class="wp-caption-text"&gt;Figure 1: Sample architecture diagram&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;&lt;strong&gt;In this architecture:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;A central Amazon Redshift ETL data warehouse shares data to multiple Amazon Redshift Serverless workgroups using Amazon Redshift data sharing.&lt;/li&gt; 
 &lt;li&gt;Each workgroup has a dedicated managed Amazon Virtual Private Cloud (Amazon VPC) endpoint.&lt;/li&gt; 
 &lt;li&gt;A Network Load Balancer sits in front of all VPC endpoints, providing a single connection point.&lt;/li&gt; 
 &lt;li&gt;Users connect from DBeaver or Power BI through the Network Load Balancer and authenticate using their Microsoft Entra ID credentials.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;This setup works whether you’re validating the concept with a single workgroup today or planning to scale to multiple workgroups in the future.&lt;/p&gt; 
&lt;h2&gt;Prerequisites&lt;/h2&gt; 
&lt;p&gt;Before you begin, make sure that you have completed these prerequisites.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/redshift/latest/gsg/new-user-serverless.html" target="_blank" rel="noopener noreferrer"&gt;Create Amazon Redshift Serverless endpoints&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/redshift/latest/dg/datashare-creation.html" target="_blank" rel="noopener noreferrer"&gt;Set up datashare from producer to Amazon Redshift Serverless endpoints&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-cross-vpc-console-grantee.html" target="_blank" rel="noopener noreferrer"&gt;Create Amazon Redshift-managed VPC endpoints&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html" target="_blank" rel="noopener noreferrer"&gt;Create a Network Load Balancer&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register.html" target="_blank" rel="noopener noreferrer"&gt;Configure a domain name&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/big-data/integrate-amazon-redshift-native-idp-federation-with-microsoft-azure-ad-using-a-sql-client/" target="_blank" rel="noopener noreferrer"&gt;Set up Amazon Redshift native IdP federation with Microsoft Entra ID&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Gather the following from your registered application in Microsoft Entra ID: 
  &lt;ol type="a"&gt; 
   &lt;li&gt;Scope (API-Scope)&lt;/li&gt; 
   &lt;li&gt;Azure Client ID (AppID from App Registration Details)&lt;/li&gt; 
   &lt;li&gt;IdP Tenant (Tenant ID from App Registration Details)&lt;/li&gt; 
  &lt;/ol&gt; &lt;/li&gt; 
 &lt;li&gt;Download and install the latest Amazon Redshift &lt;a href="https://docs.aws.amazon.com/redshift/latest/mgmt/jdbc20-download-driver.html" target="_blank" rel="noopener noreferrer"&gt;JDBC&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/redshift/latest/mgmt/odbc-driver-windows-how-to-install.html" target="_blank" rel="noopener noreferrer"&gt;ODBC&lt;/a&gt; drivers.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;This solution uses the following AWS services.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/redshift/redshift-serverless/" target="_blank" rel="noopener noreferrer"&gt;Amazon Redshift Serverless&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/route53/" target="_blank" rel="noopener noreferrer"&gt;Amazon Route 53&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/elasticloadbalancing/network-load-balancer/" target="_blank" rel="noopener noreferrer"&gt;Network Load Balancer&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/certificate-manager/" target="_blank" rel="noopener noreferrer"&gt;AWS Certificate Manager (ACM)&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Implementation steps&lt;/h2&gt; 
&lt;p&gt;This section covers configuring the Network Load Balancer, setting up an ACM certificate, creating custom domain names in Amazon Redshift, configuring DNS records in Amazon Route 53, and connecting your JDBC and ODBC clients using Microsoft Entra ID authentication.&lt;/p&gt; 
&lt;h3&gt;1. Configure the Network Load Balancer&lt;/h3&gt; 
&lt;p&gt;First, collect the private IP addresses for your Amazon Redshift-managed VPC endpoints:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Open the Amazon Redshift Serverless console.&lt;/li&gt; 
 &lt;li&gt;Choose your workgroup.&lt;/li&gt; 
 &lt;li&gt;Note the private IP address of your Redshift-managed VPC endpoint.&lt;/li&gt; 
 &lt;li&gt;Repeat for each Amazon Redshift Serverless endpoint that you want to add to the Network Load Balancer. &lt;p&gt;&lt;/p&gt;
  &lt;div id="attachment_89186" style="width: 1164px" class="wp-caption alignnone"&gt;
   &lt;img aria-describedby="caption-attachment-89186" loading="lazy" class="wp-image-89186 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-3.png" alt="Figure 2: Amazon Redshift managed VPC endpoint" width="1154" height="512"&gt;
   &lt;p id="caption-attachment-89186" class="wp-caption-text"&gt;Figure 2: Amazon Redshift managed VPC endpoint&lt;/p&gt;
  &lt;/div&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Next, create a target group for your endpoints:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Open the Amazon Elastic Compute Cloud (Amazon EC2) console.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Target Groups.&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Create target group.&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;Configure the target group: 
  &lt;ul&gt; 
   &lt;li&gt;For &lt;strong&gt;Target type&lt;/strong&gt;, choose &lt;strong&gt;IP addresses.&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;For &lt;strong&gt;Target group name&lt;/strong&gt;, enter rs-multicluster-tg.&lt;/li&gt; 
   &lt;li&gt;For &lt;strong&gt;Protocol&lt;/strong&gt;, choose &lt;strong&gt;TCP.&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;For &lt;strong&gt;Port&lt;/strong&gt;, enter 5439 (Note: You can find your specific port number in the Redshift endpoint connection details. If you haven’t modified it, use the default port 5439.).&lt;/li&gt; 
   &lt;li&gt;For &lt;strong&gt;VPC&lt;/strong&gt;, select your VPC.&lt;/li&gt; 
   &lt;li&gt;Choose &lt;strong&gt;Next.&lt;/strong&gt;&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;div id="attachment_89185" style="width: 1877px" class="wp-caption alignnone"&gt;
   &lt;img aria-describedby="caption-attachment-89185" loading="lazy" class="wp-image-89185 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-4.png" alt="Figure 3: create target group in NLB" width="1867" height="282"&gt;
   &lt;p id="caption-attachment-89185" class="wp-caption-text"&gt;Figure 3: create target group in NLB&lt;/p&gt;
  &lt;/div&gt; &lt;p&gt;&lt;/p&gt;
  &lt;div id="attachment_89182" style="width: 1377px" class="wp-caption alignnone"&gt;
   &lt;img aria-describedby="caption-attachment-89182" loading="lazy" class="wp-image-89182 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-7.png" alt="Figure 4: NLB target group creation" width="1367" height="941"&gt;
   &lt;p id="caption-attachment-89182" class="wp-caption-text"&gt;Figure 4: NLB target group creation&lt;/p&gt;
  &lt;/div&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Add a listener to your Network Load Balancer:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;In the EC2 console, choose &lt;strong&gt;Load Balancers.&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;Select your Network Load Balancer.&lt;/li&gt; 
 &lt;li&gt;In the &lt;strong&gt;Listeners&lt;/strong&gt; tab, choose &lt;strong&gt;Add listener.&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;Configure the listener: 
  &lt;ul&gt; 
   &lt;li&gt;For &lt;strong&gt;Protocol&lt;/strong&gt;, choose &lt;strong&gt;TCP.&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;For &lt;strong&gt;Port&lt;/strong&gt;, enter 5439.&lt;/li&gt; 
   &lt;li&gt;For &lt;strong&gt;Default action&lt;/strong&gt;, choose &lt;code&gt;rs-multicluster-tg&lt;/code&gt;.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Add listener.&lt;/strong&gt; &lt;p&gt;&lt;/p&gt;
  &lt;div id="attachment_89189" style="width: 1684px" class="wp-caption alignnone"&gt;
   &lt;img aria-describedby="caption-attachment-89189" loading="lazy" class="wp-image-89189 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-8-1.png" alt="Figure 5: NLB listener properties." width="1674" height="680"&gt;
   &lt;p id="caption-attachment-89189" class="wp-caption-text"&gt;Figure 5: NLB listener properties.&lt;/p&gt;
  &lt;/div&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;2. Configure AWS Certificate Manager (ACM)&lt;/h3&gt; 
&lt;p&gt;For this example, we use &lt;code&gt;myexampledomain.com&lt;/code&gt; as a custom domain. Replace it with your own domain name before you begin.Follow these steps to request and configure your certificate:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Request a certificate in AWS Certificate Manager (ACM): 
  &lt;ul&gt; 
   &lt;li&gt;Open the AWS Certificate Manager console.&lt;/li&gt; 
   &lt;li&gt;Choose &lt;strong&gt;Request Certificate.&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;Choose &lt;strong&gt;Request Public certificate.&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;Choose &lt;strong&gt;Next.&lt;/strong&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Configure the certificate: 
  &lt;ul&gt; 
   &lt;li&gt;Add two domain names: 
    &lt;ul&gt; 
     &lt;li&gt;Network Load Balancer CNAME: &lt;code&gt;dev-redshift.myexampledomain.com&lt;/code&gt;&lt;/li&gt; 
     &lt;li&gt;Wildcard domain: &lt;code&gt;*.redshift.myexampledomain.com&lt;/code&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;For &lt;strong&gt;Validation method&lt;/strong&gt;, choose &lt;strong&gt;DNS validation.&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;Choose &lt;strong&gt;Request.&lt;/strong&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;p&gt;For enhanced security, we recommend adding individual Amazon Redshift Serverless CNAMEs instead of using wildcards (*). This example uses DNS validation in AWS Certificate Manager, which requires creating CNAME records to prove domain control.&lt;/p&gt; &lt;p&gt;&lt;/p&gt;
  &lt;div id="attachment_89181" style="width: 1760px" class="wp-caption alignnone"&gt;
   &lt;img aria-describedby="caption-attachment-89181" loading="lazy" class="wp-image-89181 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-9.png" alt="Figure 6: AWS Certificate Manager (ACM) certificate creation" width="1750" height="963"&gt;
   &lt;p id="caption-attachment-89181" class="wp-caption-text"&gt;Figure 6: AWS Certificate Manager (ACM) certificate creation&lt;/p&gt;
  &lt;/div&gt;&lt;/li&gt; 
 &lt;li&gt;Validate the certificate: 
  &lt;ul&gt; 
   &lt;li&gt;Your AWS Certificate Manager (ACM) certificate initially shows a ‘Pending validation’ status.&lt;/li&gt; 
   &lt;li&gt;Wait for the status to change to ‘Issued’ before proceeding.&lt;/li&gt; 
   &lt;li&gt;You must have an ‘Issued’ status before creating Amazon Redshift custom domain names.&lt;/li&gt; 
  &lt;/ul&gt; &lt;p&gt;&lt;/p&gt;
  &lt;div id="attachment_89178" style="width: 1596px" class="wp-caption alignnone"&gt;
   &lt;img aria-describedby="caption-attachment-89178" loading="lazy" class="wp-image-89178 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-12.png" alt="Figure 7: Sample issued AWS Certificate Manager (ACM) certificate" width="1586" height="280"&gt;
   &lt;p id="caption-attachment-89178" class="wp-caption-text"&gt;Figure 7: Sample issued AWS Certificate Manager (ACM) certificate&lt;/p&gt;
  &lt;/div&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;3. Configure Amazon Redshift custom domain names&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Create a custom domain name: 
  &lt;ul&gt; 
   &lt;li&gt;Open the Amazon Redshift Serverless console.&lt;/li&gt; 
   &lt;li&gt;Select your workgroup.&lt;/li&gt; 
   &lt;li&gt;From &lt;strong&gt;Actions&lt;/strong&gt;, choose &lt;strong&gt;Create custom domain name.&lt;/strong&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;p&gt;&lt;/p&gt;
  &lt;div id="attachment_89176" style="width: 371px" class="wp-caption alignnone"&gt;
   &lt;img aria-describedby="caption-attachment-89176" loading="lazy" class="wp-image-89176 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-14.jpg" alt="Figure 8: Amazon Redshift custom domain name creation" width="361" height="285"&gt;
   &lt;p id="caption-attachment-89176" class="wp-caption-text"&gt;Figure 8: Amazon Redshift custom domain name creation&lt;/p&gt;
  &lt;/div&gt;&lt;/li&gt; 
 &lt;li&gt;Configure the domain settings: 
  &lt;ul&gt; 
   &lt;li&gt;For &lt;strong&gt;Custom domain name&lt;/strong&gt;, enter &lt;code&gt;cluster-02.redshift.myexampledomain.com&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;For &lt;strong&gt;ACM certificate&lt;/strong&gt;, select the certificate you created for &lt;code&gt;dev-redshift.myexampledomain.com&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;Choose &lt;strong&gt;Create&lt;/strong&gt;.&lt;/li&gt; 
  &lt;/ul&gt; &lt;p&gt;&lt;/p&gt;
  &lt;div id="attachment_89175" style="width: 816px" class="wp-caption alignnone"&gt;
   &lt;img aria-describedby="caption-attachment-89175" loading="lazy" class="wp-image-89175 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-15.png" alt="Figure 9: Amazon Redshift custom domain name creation" width="806" height="393"&gt;
   &lt;p id="caption-attachment-89175" class="wp-caption-text"&gt;Figure 9: Amazon Redshift custom domain name creation&lt;/p&gt;
  &lt;/div&gt;&lt;/li&gt; 
 &lt;li&gt;Verify that the custom domain name appears in your workgroup. &lt;p&gt;&lt;/p&gt;
  &lt;div id="attachment_89174" style="width: 1353px" class="wp-caption alignnone"&gt;
   &lt;img aria-describedby="caption-attachment-89174" loading="lazy" class="wp-image-89174 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-16.png" alt="Figure 10: Amazon Redshift custom domain name" width="1343" height="574"&gt;
   &lt;p id="caption-attachment-89174" class="wp-caption-text"&gt;Figure 10: Amazon Redshift custom domain name&lt;/p&gt;
  &lt;/div&gt;&lt;/li&gt; 
 &lt;li&gt;Repeat steps 1–3 for each remaining Amazon Redshift Serverless endpoint that you want to add to the Network Load Balancer. Use a unique custom domain name for each endpoint (for example, &lt;code&gt;cluster-03.redshift.myexampledomain.com&lt;/code&gt;, &lt;code&gt;cluster-04.redshift.myexampledomain.com&lt;/code&gt;) and select the same ACM certificate that you created earlier.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;4. Configure Amazon Route 53&lt;/h3&gt; 
&lt;p&gt;Amazon Route 53 maps your custom domain name to the correct Amazon Redshift endpoint, making it reachable by name rather than a system-generated address. Without it, clients have no way to resolve your custom domain and AWS Certificate Manager can’t verify domain ownership to enable secure connections.First, create a CNAME record for your Network Load Balancer:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Get the Network Load Balancer DNS name: 
  &lt;ul&gt; 
   &lt;li&gt;Open the Amazon EC2 console.&lt;/li&gt; 
   &lt;li&gt;Choose &lt;strong&gt;Load Balancers.&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;Select your Network Load Balancer.&lt;/li&gt; 
   &lt;li&gt;Copy the DNS name.&lt;/li&gt; 
  &lt;/ul&gt; &lt;p&gt;&lt;/p&gt;
  &lt;div id="attachment_89173" style="width: 1616px" class="wp-caption alignnone"&gt;
   &lt;img aria-describedby="caption-attachment-89173" loading="lazy" class="wp-image-89173 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-17.png" alt="Figure 11: NLB DNS name" width="1606" height="416"&gt;
   &lt;p id="caption-attachment-89173" class="wp-caption-text"&gt;Figure 11: NLB DNS name&lt;/p&gt;
  &lt;/div&gt;&lt;/li&gt; 
 &lt;li&gt;Create Route 53 records: 
  &lt;ul&gt; 
   &lt;li&gt;Open the Amazon Route 53 console.&lt;/li&gt; 
   &lt;li&gt;Choose &lt;strong&gt;Hosted Zones.&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;Select &lt;code&gt;myexampledomain.com&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;Choose &lt;strong&gt;Create record.&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;Configure the record: 
    &lt;ul&gt; 
     &lt;li&gt;For &lt;strong&gt;Record name&lt;/strong&gt;, enter &lt;code&gt;dev-redshift.myexampledomain.com&lt;/code&gt;.&lt;/li&gt; 
     &lt;li&gt;For &lt;strong&gt;Record type&lt;/strong&gt;, choose &lt;strong&gt;A – Routes traffic to an IPv4 address and some AWS resources.&lt;/strong&gt;&lt;/li&gt; 
     &lt;li&gt;For &lt;strong&gt;Alias&lt;/strong&gt;, choose &lt;strong&gt;Yes.&lt;/strong&gt;&lt;/li&gt; 
     &lt;li&gt;For &lt;strong&gt;Route traffic to&lt;/strong&gt;, choose &lt;strong&gt;Alias to Network Load Balancer.&lt;/strong&gt;&lt;/li&gt; 
     &lt;li&gt;Select your AWS Region and Network Load Balancer DNS name.&lt;/li&gt; 
     &lt;li&gt;For &lt;strong&gt;Routing policy&lt;/strong&gt;, choose &lt;strong&gt;Simple routing.&lt;/strong&gt;&lt;/li&gt; 
     &lt;li&gt;Choose &lt;strong&gt;Create records.&lt;/strong&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;div id="attachment_89171" style="width: 1477px" class="wp-caption alignnone"&gt;
   &lt;img aria-describedby="caption-attachment-89171" loading="lazy" class="wp-image-89171 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-19.png" alt="Figure 12: NLB - A record in route 53" width="1467" height="631"&gt;
   &lt;p id="caption-attachment-89171" class="wp-caption-text"&gt;Figure 12: NLB – A record in route 53&lt;/p&gt;
  &lt;/div&gt; &lt;p&gt;&lt;/p&gt;
  &lt;div id="attachment_89168" style="width: 437px" class="wp-caption alignnone"&gt;
   &lt;img aria-describedby="caption-attachment-89168" loading="lazy" class="wp-image-89168 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-22.png" alt="Figure 13: NLB - A record in Route 53" width="427" height="495"&gt;
   &lt;p id="caption-attachment-89168" class="wp-caption-text"&gt;Figure 13: NLB – A record in Route 53&lt;/p&gt;
  &lt;/div&gt;&lt;/li&gt; 
 &lt;li&gt;Create the AWS Certificate Manager (ACM) validation CNAME: 
  &lt;ul&gt; 
   &lt;li&gt;Open AWS Certificate Manager.&lt;/li&gt; 
   &lt;li&gt;Select your certificate for &lt;code&gt;dev-redshift.myexampledomain.com&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;Copy the CNAME name and CNAME value.&lt;/li&gt; 
   &lt;li&gt;Return to Route 53.&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Create a CNAME&lt;/strong&gt; record in your &lt;code&gt;myexampledomain.com&lt;/code&gt; hosted zone using the values from AWS Certificate Manager (ACM).&lt;/li&gt; 
   &lt;li&gt;Choose &lt;strong&gt;Create records.&lt;/strong&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;p&gt;&lt;/p&gt;
  &lt;div id="attachment_89167" style="width: 1066px" class="wp-caption alignnone"&gt;
   &lt;img aria-describedby="caption-attachment-89167" loading="lazy" class="wp-image-89167 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-23.png" alt="Figure 14: NLB – CNAME record in Route 53" width="1056" height="417"&gt;
   &lt;p id="caption-attachment-89167" class="wp-caption-text"&gt;Figure 14: NLB – CNAME record in Route 53&lt;/p&gt;
  &lt;/div&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;5. Configure Amazon Redshift JDBC and ODBC drivers with native IdP&lt;/h3&gt; 
&lt;p&gt;The JDBC and ODBC driver configuration connects your client applications to Amazon Redshift through the Network Load Balancer using your Microsoft Entra ID credentials for authentication. Configuring both drivers allows any tool, whether DBeaver using JDBC or Power BI using ODBC, to authenticate through the same identity provider and reach the correct Amazon Redshift endpoint through a single connection point.&lt;/p&gt; 
&lt;h4&gt;JDBC driver setup in DBeaver&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;Create a new Amazon Redshift connection: 
  &lt;ul&gt; 
   &lt;li&gt;Host: &lt;code&gt;dev-redshift.myexampledomain.com&lt;/code&gt; (NLB CNAME).&lt;/li&gt; 
   &lt;li&gt;Database: &lt;code&gt;dev&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;Authentication: &lt;strong&gt;Database Native.&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;Username: &lt;code&gt;login id for a user account&lt;/code&gt;.&lt;/li&gt; 
  &lt;/ul&gt; &lt;p&gt;&lt;/p&gt;
  &lt;div id="attachment_89164" style="width: 1516px" class="wp-caption alignnone"&gt;
   &lt;img aria-describedby="caption-attachment-89164" loading="lazy" class="wp-image-89164 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-26.jpg" alt="Figure 15: Amazon Redshift JDBC driver setup" width="1506" height="752"&gt;
   &lt;p id="caption-attachment-89164" class="wp-caption-text"&gt;Figure 15: Amazon Redshift JDBC driver setup&lt;/p&gt;
  &lt;/div&gt;&lt;/li&gt; 
 &lt;li&gt;Configure driver properties: 
  &lt;ul&gt; 
   &lt;li&gt;plugin_name: &lt;code&gt;com.amazon.redshift.plugin.BrowserAzureOAuth2CredentialsProvider&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;sslmode: &lt;code&gt;verify-ca&lt;/code&gt;.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Add user driver properties: 
  &lt;ul&gt; 
   &lt;li&gt;client_id: [Your Microsoft Entra ID application client ID].&lt;/li&gt; 
   &lt;li&gt;idp_tenant: [Your Microsoft Entra ID tenant].&lt;/li&gt; 
   &lt;li&gt;listen_port: &lt;code&gt;7890&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;loginTimeout: &lt;code&gt;60&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;scope: [Your Microsoft Entra ID application scope].&lt;/li&gt; 
  &lt;/ul&gt; &lt;p&gt;&lt;/p&gt;
  &lt;div id="attachment_89163" style="width: 980px" class="wp-caption alignnone"&gt;
   &lt;img aria-describedby="caption-attachment-89163" loading="lazy" class="wp-image-89163 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-27.png" alt="Figure 16: Amazon Redshift JDBC driver user properties" width="970" height="587"&gt;
   &lt;p id="caption-attachment-89163" class="wp-caption-text"&gt;Figure 16: Amazon Redshift JDBC driver user properties&lt;/p&gt;
  &lt;/div&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h4&gt;ODBC driver setup&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;Configure the system DSN: 
  &lt;ul&gt; 
   &lt;li&gt;Open ODBC Data Source Administrator (64-bit).&lt;/li&gt; 
   &lt;li&gt;Choose &lt;strong&gt;System DSN.&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;Choose &lt;strong&gt;Add.&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;Select &lt;strong&gt;Amazon Redshift ODBC Driver (x64) 2.01.04.00.&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;Choose &lt;strong&gt;Finish.&lt;br&gt; &lt;/strong&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Configure connection settings: 
  &lt;ul&gt; 
   &lt;li&gt;Data Source Name: &lt;code&gt;dev-redshift&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;Server: &lt;code&gt;dev-redshift.myexampledomain.com&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;Port: &lt;code&gt;5439&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;Database: &lt;code&gt;dev&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;Auth type: &lt;strong&gt;Identity Provider: Browser Azure AD OAUTH2.&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;Scope: [Your Microsoft Entra ID application scope].&lt;/li&gt; 
   &lt;li&gt;Azure Client ID: [Your Microsoft Entra ID application client ID].&lt;/li&gt; 
   &lt;li&gt;IdP Tenant: [Your Microsoft Entra ID application tenant].&lt;/li&gt; 
  &lt;/ul&gt; &lt;p&gt;&lt;/p&gt;
  &lt;div id="attachment_89161" style="width: 455px" class="wp-caption alignnone"&gt;
   &lt;img aria-describedby="caption-attachment-89161" loading="lazy" class="wp-image-89161 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-29.png" alt="Figure 17: Amazon Redshift ODBC driver properties" width="445" height="696"&gt;
   &lt;p id="caption-attachment-89161" class="wp-caption-text"&gt;Figure 17: Amazon Redshift ODBC driver properties&lt;/p&gt;
  &lt;/div&gt;&lt;/li&gt; 
 &lt;li&gt;Configure SSL settings: 
  &lt;ul&gt; 
   &lt;li&gt;SSL Mode: &lt;code&gt;verify-ca&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;Choose &lt;strong&gt;Save.&lt;/strong&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;p&gt;&lt;/p&gt;
  &lt;div id="attachment_89158" style="width: 362px" class="wp-caption alignnone"&gt;
   &lt;img aria-describedby="caption-attachment-89158" loading="lazy" class="wp-image-89158 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-32.jpg" alt="Figure 18: Amazon Redshift ODBC driver properties" width="352" height="204"&gt;
   &lt;p id="caption-attachment-89158" class="wp-caption-text"&gt;Figure 18: Amazon Redshift ODBC driver properties&lt;/p&gt;
  &lt;/div&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;6. Validate connectivity&lt;/h3&gt; 
&lt;h4&gt;Test DBeaver connection&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;After configuring the JDBC driver properties, choose &lt;strong&gt;Test Connection.&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;Authenticate through the Microsoft login in your browser.&lt;/li&gt; 
 &lt;li&gt;Verify that you receive a success message.&lt;/li&gt; 
 &lt;li&gt;Confirm successful connection using Native IdP through the Network Load Balancer.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;div id="attachment_89190" style="width: 453px" class="wp-caption alignnone"&gt;
 &lt;img aria-describedby="caption-attachment-89190" loading="lazy" class="wp-image-89190 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-52.png" alt="Figure 19: Microsoft Entra id authentication" width="443" height="198"&gt;
 &lt;p id="caption-attachment-89190" class="wp-caption-text"&gt;Figure 19: Microsoft Entra id authentication&lt;/p&gt;
&lt;/div&gt; 
&lt;div id="attachment_89155" style="width: 1049px" class="wp-caption alignnone"&gt;
 &lt;img aria-describedby="caption-attachment-89155" loading="lazy" class="wp-image-89155 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-35.png" alt="Figure 20: Successful Microsoft Entra id authentication" width="1039" height="101"&gt;
 &lt;p id="caption-attachment-89155" class="wp-caption-text"&gt;Figure 20: Successful Microsoft Entra id authentication&lt;/p&gt;
&lt;/div&gt; 
&lt;div id="attachment_89152" style="width: 722px" class="wp-caption alignnone"&gt;
 &lt;img aria-describedby="caption-attachment-89152" loading="lazy" class="wp-image-89152 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-38.jpg" alt="Figure 21: Successful Amazon Redshift authentication" width="712" height="403"&gt;
 &lt;p id="caption-attachment-89152" class="wp-caption-text"&gt;Figure 21: Successful Amazon Redshift authentication&lt;/p&gt;
&lt;/div&gt; 
&lt;h4&gt;Test power BI desktop connection&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;Launch Power BI Desktop: 
  &lt;ul&gt; 
   &lt;li&gt;Choose &lt;strong&gt;Get data.&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;Choose &lt;strong&gt;More.&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;Under &lt;strong&gt;Other&lt;/strong&gt;, select &lt;strong&gt;ODBC.&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;Choose &lt;strong&gt;Connect.&lt;/strong&gt;&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;div id="attachment_89151" style="width: 486px" class="wp-caption alignnone"&gt;
   &lt;img aria-describedby="caption-attachment-89151" loading="lazy" class="wp-image-89151 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-39.png" alt="Figure 22: Power BI desktop connectivity using Amazon Redshift ODBC&amp;nbsp;driver" width="476" height="605"&gt;
   &lt;p id="caption-attachment-89151" class="wp-caption-text"&gt;Figure 22: Power BI desktop connectivity using Amazon Redshift ODBC&amp;nbsp;driver&lt;/p&gt;
  &lt;/div&gt; &lt;p&gt;&lt;/p&gt;
  &lt;div id="attachment_89148" style="width: 1016px" class="wp-caption alignnone"&gt;
   &lt;img aria-describedby="caption-attachment-89148" loading="lazy" class="wp-image-89148 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-42.jpg" alt="Figure 23: Power BI desktop connectivity using Amazon Redshift ODBC&amp;nbsp;driver" width="1006" height="683"&gt;
   &lt;p id="caption-attachment-89148" class="wp-caption-text"&gt;Figure 23: Power BI desktop connectivity using Amazon Redshift ODBC&amp;nbsp;driver&lt;/p&gt;
  &lt;/div&gt;&lt;/li&gt; 
 &lt;li&gt;Configure the connection: 
  &lt;ul&gt; 
   &lt;li&gt;Select &lt;code&gt;dev-redshift&lt;/code&gt; from the Data source name.&lt;/li&gt; 
   &lt;li&gt;Choose &lt;strong&gt;OK.&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;Complete Microsoft Entra ID authentication in your browser.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;div id="attachment_89146" style="width: 964px" class="wp-caption alignnone"&gt;
   &lt;img aria-describedby="caption-attachment-89146" loading="lazy" class="wp-image-89146 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-44.png" alt="Figure 24: Power bi desktop connectivity using Amazon Redshift odbc driver" width="954" height="426"&gt;
   &lt;p id="caption-attachment-89146" class="wp-caption-text"&gt;Figure 24: Power bi desktop connectivity using Amazon Redshift odbc driver&lt;/p&gt;
  &lt;/div&gt; &lt;p&gt;&lt;/p&gt;
  &lt;div id="attachment_89145" style="width: 1043px" class="wp-caption alignnone"&gt;
   &lt;img aria-describedby="caption-attachment-89145" loading="lazy" class="wp-image-89145 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-45.png" alt="Figure 25: Successful Microsoft Entra id authentication" width="1033" height="165"&gt;
   &lt;p id="caption-attachment-89145" class="wp-caption-text"&gt;Figure 25: Successful Microsoft Entra id authentication&lt;/p&gt;
  &lt;/div&gt;&lt;/li&gt; 
 &lt;li&gt;Test the connection: 
  &lt;ul&gt; 
   &lt;li&gt;From Navigator, choose schema &lt;code&gt;tpcds&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;Select &lt;code&gt;date_dim&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;Choose &lt;strong&gt;Load.&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;Verify that you can analyze your Amazon Redshift data in Power BI Desktop.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;div id="attachment_89142" style="width: 889px" class="wp-caption alignnone"&gt;
   &lt;img aria-describedby="caption-attachment-89142" loading="lazy" class="wp-image-89142 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-48.jpg" alt="Figure26: Power BI desktop connected to Amazon Redshift and schema browsing" width="879" height="696"&gt;
   &lt;p id="caption-attachment-89142" class="wp-caption-text"&gt;Figure26: Power BI desktop connected to Amazon Redshift and schema browsing&lt;/p&gt;
  &lt;/div&gt; &lt;p&gt;&lt;/p&gt;
  &lt;div id="attachment_89140" style="width: 1284px" class="wp-caption alignnone"&gt;
   &lt;img aria-describedby="caption-attachment-89140" loading="lazy" class="wp-image-89140 size-full" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/BDB-5677-image-50.jpg" alt="Figure 27: Power BI desktop fetching data from date_dim table" width="1274" height="552"&gt;
   &lt;p id="caption-attachment-89140" class="wp-caption-text"&gt;Figure 27: Power BI desktop fetching data from date_dim table&lt;/p&gt;
  &lt;/div&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Cleaning up&lt;/h2&gt; 
&lt;p&gt;To avoid ongoing charges, delete the following resources:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Delete the Amazon Redshift data warehouses (&lt;a href="https://docs.aws.amazon.com/redshift/latest/mgmt/rs-mgmt-shutdown-delete-cluster.html" target="_blank" rel="noopener noreferrer"&gt;provisioned cluster&lt;/a&gt; or serverless &lt;a href="https://docs.aws.amazon.com/redshift/latest/mgmt/serverless_delete-workgroup.html" target="_blank" rel="noopener noreferrer"&gt;workgroup&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-console-namespace-delete.html" target="_blank" rel="noopener noreferrer"&gt;namespace&lt;/a&gt;) and the VPC endpoints that you created.&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-delete.html" target="_blank" rel="noopener noreferrer"&gt;Delete the certificate that you created in AWS Certificate Manager (ACM)&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-delete.html" target="_blank" rel="noopener noreferrer"&gt;Delete the Network Load Balancer&lt;/a&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;In this post, we showed you how to integrate Amazon Redshift Serverless with Microsoft Entra ID using an AWS Network Load Balancer as a single connection endpoint across multiple workgroups. As your data analytics use cases grow, you can continue to scale horizontally by adding new workgroups behind the same Network Load Balancer without changing your users’ connection settings or authentication experience.&lt;/p&gt; 
&lt;p&gt;For more information about extending and scaling this solution, see the following resources:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;AWS Blogs&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/big-data/integrate-amazon-redshift-native-idp-federation-with-microsoft-azure-ad-using-a-sql-client/" target="_blank" rel="noopener noreferrer"&gt;Integrate Amazon Redshift native IdP federation with Microsoft Azure AD using a SQL clien&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/big-data/achieve-peak-performance-and-boost-scalability-using-multiple-amazon-redshift-serverless-workgroups-and-network-load-balancer/" target="_blank" rel="noopener noreferrer"&gt;Achieve peak performance and boost scalability using multiple Amazon Redshift serverless workgroups and Network Load Balancer&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/big-data/integrate-amazon-redshift-native-idp-federation-with-microsoft-azure-ad-and-power-bi/" target="_blank" rel="noopener noreferrer"&gt;Integrate Amazon Redshift native IdP federation with Microsoft Azure AD and Power BI&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/big-data/use-custom-domain-names-with-amazon-redshift/" target="_blank" rel="noopener noreferrer"&gt;Use custom domain names with Amazon Redshift&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p style="clear: both"&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;h2&gt;About the authors&lt;/h2&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-29797" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/17/BD5701a2.png" alt="Raghu Kuppala" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Raghu Kuppala&lt;/h3&gt; 
  &lt;p&gt;&lt;a target="_blank" href="https://www.linkedin.com/in/raghu-kuppala-a056a78b/" rel="noopener"&gt;Raghu&lt;/a&gt; is an Analytics Specialist Solutions Architect experienced working in the databases, data warehousing, and analytics space. Outside of work, he enjoys trying different cuisines and spending time with his family and friends.&lt;/p&gt;
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-29797" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2024/07/24/raza_new_new_new.jpg" alt="Raza Hafeez" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Raza Hafeez&lt;/h3&gt; 
  &lt;p&gt;&lt;a target="_blank" href="https://www.linkedin.com/in/raza-hafeez/" rel="noopener"&gt;Raza&lt;/a&gt; is a Senior Product Manager at Amazon Redshift. He has over 13 years of professional experience building and optimizing enterprise data warehouses and is passionate about enabling customers to realize the power of their data. He specializes in migrating enterprise data warehouses to AWS Modern Data Architecture.&lt;/p&gt;
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-29797" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2022/01/28/hspatel.png" alt="Harshida Patel" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Harshida Patel&lt;/h3&gt; 
  &lt;p&gt;&lt;a target="_blank" href="https://www.linkedin.com/in/harshida-patel-8050292/" rel="noopener"&gt;Harshida&lt;/a&gt; is a Analytics Specialist Principal Solutions Architect, with AWS.&lt;/p&gt;
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-29797" src="https://pages.awscloud.com/rs/112-TZM-766/images/jcchinyo.jpg" alt="Justin Chin-You" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Justin Chin-You&lt;/h3&gt; 
  &lt;p&gt;&lt;a target="_blank" href="https://www.linkedin.com/in/justinchinyou/" rel="noopener"&gt;Justin&lt;/a&gt; is a Solutions Architect at AWS, working with Financial Services organizations. He is helping these organizations identify the right cloud transformation strategy based on industry trends and their organizational priorities.&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Securely connect Kafka client applications to your Amazon MSK Serverless cluster from different VPCs and AWS accounts</title>
		<link>https://aws.amazon.com/blogs/big-data/securely-connect-kafka-client-applications-to-your-amazon-msk-serverless-cluster-from-different-vpcs-and-aws-accounts/</link>
					
		
		<dc:creator><![CDATA[Subham Rakshit]]></dc:creator>
		<pubDate>Mon, 30 Mar 2026 17:44:56 +0000</pubDate>
				<category><![CDATA[Amazon Managed Streaming for Apache Kafka (Amazon MSK)]]></category>
		<category><![CDATA[Expert (400)]]></category>
		<category><![CDATA[Technical How-to]]></category>
		<guid isPermaLink="false">d1d353d5c9f067d6199f2a3a71b3b008b8ccab31</guid>

					<description>In this post, we show you how Kafka clients can use Zilla Plus to securely access your MSK Serverless clusters through Identity and Access Management (IAM) authentication over PrivateLink, from as many different AWS accounts or VPCs as needed. We also show you how the solution provides a way to support a custom domain name for your MSK Serverless cluster.</description>
										<content:encoded>&lt;p&gt;&lt;a href="https://aws.amazon.com/msk/features/msk-serverless/" target="_blank" rel="noopener noreferrer"&gt;Amazon MSK Serverless&lt;/a&gt; is a cluster type for &lt;a href="https://aws.amazon.com/msk/" target="_blank" rel="noopener noreferrer"&gt;Amazon MSK&lt;/a&gt; that you can use to run Apache Kafka without having to manage and scale cluster capacity. It automatically provisions and scales capacity while managing the partitions in your topics, so you can stream data without thinking about right-sizing or scaling clusters. MSK Serverless is fully compatible with Apache Kafka, so you can use any compatible client applications to produce and consume data.&lt;/p&gt; 
&lt;p&gt;MSK Serverless uses &lt;a href="https://aws.amazon.com/privatelink/" target="_blank" rel="noopener noreferrer"&gt;AWS PrivateLink&lt;/a&gt; to provide private connectivity up to five virtual private clouds (VPCs) within the same &lt;a href="https://aws.amazon.com/account/" target="_blank" rel="noopener noreferrer"&gt;AWS account&lt;/a&gt;. However, if you need cross-VPC connectivity beyond five VPCs or cross-account connectivity, you typically need &lt;a href="https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html" target="_blank" rel="noopener noreferrer"&gt;VPC peering&lt;/a&gt; or &lt;a href="https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html" target="_blank" rel="noopener noreferrer"&gt;AWS Transit Gateway&lt;/a&gt;, as explained in &lt;a href="https://aws.amazon.com/blogs/big-data/secure-connectivity-patterns-for-amazon-msk-serverless-cross-account-access/" target="_blank" rel="noopener noreferrer"&gt;Secure connectivity patterns for Amazon MSK Serverless cross-account access&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;a href="https://www.aklivity.io/solutions/aws-msk-public-access" target="_blank" rel="noopener noreferrer"&gt;Aklivity Zilla Plus for Amazon MSK&lt;/a&gt; is a stateless Kafka-native edge proxy that enables authorized Kafka clients deployed across VPCs (even cross-account) to securely connect, publish messages, and subscribe to topics in your MSK Serverless cluster using a custom domain name.&lt;/p&gt; 
&lt;p&gt;For more details on supporting SASL/SCRAM authentication with a custom domain, see &lt;a href="https://aws.amazon.com/blogs/big-data/configure-a-custom-domain-name-for-your-amazon-msk-cluster/" target="_blank" rel="noopener noreferrer"&gt;Configure a custom domain name for your Amazon MSK cluster&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;In this post, we show you how Kafka clients can use Zilla Plus to securely access your MSK Serverless clusters through &lt;a href="http://aws.amazon.com/iam/" target="_blank" rel="noopener noreferrer"&gt;Identity and Access Management (IAM)&lt;/a&gt; authentication over PrivateLink, from as many different AWS accounts or VPCs as needed. We also show you how the solution provides a way to support a custom domain name for your MSK Serverless cluster.&lt;/p&gt; 
&lt;h2&gt;Secure private access to one MSK Serverless cluster&lt;/h2&gt; 
&lt;p&gt;&lt;a href="https://aws.amazon.com/elasticloadbalancing/network-load-balancer/" target="_blank" rel="noopener noreferrer"&gt;Network Load Balancers (NLBs)&lt;/a&gt; provide a convenient way to define remote connectivity to MSK Serverless clusters from other VPCs. In the following architecture diagram, Zilla Plus is deployed in an auto scaling group, reachable as a target group behind an NLB. Zilla Plus connects to an MSK Serverless cluster through the (rightmost) VPC endpoint associated directly with the MSK Serverless cluster. Zilla Plus is configured to use an &lt;a href="https://aws.amazon.com/certificate-manager/" target="_blank" rel="noopener noreferrer"&gt;AWS Certificate Manager (ACM)&lt;/a&gt; wildcard certificate for your custom domain. By creating a Zilla Plus VPC Endpoint Service, you make the MSK Serverless cluster reachable from other VPCs through Zilla Plus.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" style="margin:10px 0px 10px 0px;border: 1px solid #cccccc" class="size-full wp-image-89097 aligncenter" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/19/image-1-4.png" alt="" width="1212" height="471"&gt;&lt;/p&gt; 
&lt;p&gt;As shown in the preceding figure, the client VPC has minimal configuration, consisting of a Zilla Plus VPC endpoint to reach the Zilla Plus VPC Endpoint Service, and an &lt;a href="https://aws.amazon.com/route53/" target="_blank" rel="noopener noreferrer"&gt;Amazon Route 53&lt;/a&gt; local zone mapping your custom domain name to the Zilla Plus VPC endpoint.&lt;/p&gt; 
&lt;h3&gt;How the custom domain works across VPCs for MSK Serverless&lt;/h3&gt; 
&lt;p&gt;When an MSK Serverless cluster is created, it is associated with a bootstrap broker address like this:&lt;code&gt;boot-xxxxxxxx.yy.kafka-serverless.region.amazonaws.com:9098&lt;/code&gt;. However, this address is only resolvable within the originating VPC.&lt;/p&gt; 
&lt;p&gt;To access the cluster from another VPC or account, Kafka clients connect to a custom domain exposed by Zilla Plus, such as &lt;code&gt;boot.my.custom.domain:9098&lt;/code&gt;. The Route 53 DNS in the client VPC maps this custom domain to a VPC endpoint (NLB), while the NLB forwards traffic to Zilla Plus, which presents the appropriate ACM wildcard certificate. When a Kafka client needs to bootstrap connectivity to a Kafka cluster (such as an MSK Serverless cluster), the client must follow a two-step discovery process to learn the specific addresses of the brokers in the cluster, so it can then connect to each broker directly as needed.&lt;/p&gt; 
&lt;p&gt;For example, if the client needs to produce messages to a specific Kafka topic such as &lt;code&gt;my-messages&lt;/code&gt;, then the client first uses a bootstrap server address to connect to any broker in the Kafka cluster, requesting topic metadata that includes the address of each broker responsible for storage of messages in the &lt;code&gt;my-messages&lt;/code&gt; topic. In the second step, the client connects directly to the corresponding brokers for the &lt;code&gt;my-messages&lt;/code&gt; topic to produce messages. The sequence of connection flow between Kafka client and broker is shown below.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" style="margin:10px 0px 10px 0px;border: 1px solid #cccccc" class="size-full wp-image-89098 aligncenter" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/19/image-2-8.png" alt="" width="958" height="314"&gt;&lt;/p&gt; 
&lt;p&gt;When the Kafka client connection for the custom domain bootstrap server arrives at the Zilla Plus VPC NLB, it’s routed to any of the Zilla Plus instances in the target group. Zilla Plus presents the wildcard TLS certificate for the custom domain and completes the TLS handshake before establishing connectivity to the MSK Serverless bootstrap server. Kafka protocol requests flow from the client through Zilla Plus to the MSK Serverless bootstrap server. When the metadata request is made by the Kafka client, Zilla Plus intercepts the metadata response and rewrites the discovered broker addresses advertised to the client, mapping them to the custom domain. &lt;/p&gt; 
&lt;p&gt;When the Kafka client connections for each individual broker address arrive at Zilla Plus, the broker-specific custom domain address is mapped to the broker-specific MSK Serverless address so that the client connects to the requested broker in the cluster. Even though the MSK Serverless cluster can have any number of advertised broker addresses, the number of instances in the Zilla Plus target group isn’t required to match. Each Zilla Plus instance can relay broker-specific custom domain connectivity for any broker in the MSK Serverless cluster. Because no configuration changes are required at the MSK Serverless cluster to enable the Zilla Plus custom domain mapping, there’s no impact on other Kafka clients already connecting directly to the MSK Serverless cluster using the AWS-generated bootstrap server.&lt;/p&gt; 
&lt;p&gt;Follow the guided steps in the &lt;a href="https://docs.aklivity.io/zilla/latest/deployment/zilla-plus-in-production/secure-private-access/#deploy-with-cdk" target="_blank" rel="noopener noreferrer"&gt;Aklivity Zilla Plus&lt;/a&gt; documentation to deploy this solution using the &lt;a href="https://aws.amazon.com/cdk/" target="_blank" rel="noopener noreferrer"&gt;AWS Cloud Development Kit (AWS CDK)&lt;/a&gt;. This automates the setup for you, including the client VPC configuration to create the VPC endpoint and Route 53 DNS entries.&lt;/p&gt; 
&lt;p&gt;After the secure private access and secure private access client scenarios have been deployed successfully, you can verify remote access to the MSK Serverless cluster from any Kafka client using your custom domain bootstrap server.&lt;/p&gt; 
&lt;h2&gt;Secure private access to multiple MSK Serverless clusters&lt;/h2&gt; 
&lt;p&gt;When a Kafka client needs to bootstrap to multiple different custom domain MSK Serverless clusters, the approach described previously keeps the client VPC configuration relatively straightforward.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" style="margin:10px 0px 10px 0px;border: 1px solid #cccccc" class="size-full wp-image-89099 aligncenter" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/19/image-3-5.png" alt="" width="1037" height="1040"&gt;&lt;/p&gt; 
&lt;p&gt;As shown in the preceding figure, each custom domain has a single Route53-hosted zone wildcard DNS record aliased to the corresponding local VPC endpoint for the corresponding remote MSK Serverless cluster. When the Kafka client performs bootstrap, local DNS resolution for the custom domain bootstrap server hostname routes connectivity to the correct VPC endpoint and the TLS certificate presented validates trust for the custom domain hostname too. Connectivity to individual broker addresses in the same custom domain are routed and trusted in the same way.&lt;/p&gt; 
&lt;h2&gt;Secure private to MSK Serverless clusters through AWS Client VPN&lt;/h2&gt; 
&lt;p&gt;When on-premises Kafka clients need to access an MSK Serverless cluster, the client VPC can be associated with an AWS Client VPN endpoint to connect through AWS Client VPN, as shown in the following figure.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" style="margin:10px 0px 10px 0px;border: 1px solid #cccccc" class="size-full wp-image-89100 aligncenter" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/19/image-4-2.png" alt="" width="1344" height="431"&gt;&lt;/p&gt; 
&lt;p&gt;By configuring the AWS Client VPN endpoint to use the client VPC DNS server, the AWS Client VPN connections will automatically resolve the custom domain bootstrap server hostname and connect through Zilla Plus to MSK Serverless.&lt;/p&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;You can use Amazon MSK Serverless clusters to run Apache Kafka without having to manage and scale cluster capacity. With Zilla Plus for Amazon MSK, you can access one or more of your Amazon MSK Serverless clusters from one or more remote client VPCs using a custom domain for each MSK Serverless cluster. The remote client VPCs can also belong to different AWS accounts, while still enforcing fine-grained &lt;a href="https://aws.amazon.com/iam" target="_blank" rel="noopener noreferrer"&gt;AWS Identity and Access Management (IAM)&lt;/a&gt; authorization for topics and consumer groups. On-premises clients can also use this approach to connect to an MSK Serverless cluster through AWS Client VPN from a different AWS account.&lt;/p&gt; 
&lt;p&gt;Zilla Plus requires no configuration changes to your MSK Serverless cluster, so adding a custom domain for remote Kafka clients has no impact on existing Kafka clients—including MSK Connect, MSK Replicator, or other MSK Integrations—that connect directly to your MSK Serverless cluster.&lt;/p&gt; 
&lt;p&gt;Learn more about &lt;a href="https://aws.amazon.com/marketplace/pp/prodview-jshnzslazfm44" target="_blank" rel="noopener noreferrer"&gt;Zilla Plus for Amazon MSK&lt;/a&gt; on AWS Marketplace and the &lt;a href="https://docs.aklivity.io/zilla/latest/deployment/zilla-plus-in-production/secure-private-access/" target="_blank" rel="noopener noreferrer"&gt;Aklivity Zilla Plus&lt;/a&gt; documentation.&lt;/p&gt; 
&lt;hr style="width: 80%"&gt; 
&lt;h2&gt;About the authors&lt;/h2&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-29797" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2025/06/07/rakssubh_v2-1.jpg" alt="Subham Rakshit" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Subham Rakshit&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/subhamrakshit/" target="_blank" rel="noopener noreferrer"&gt;Subham&lt;/a&gt; is a Senior Streaming Solutions Architect for Analytics at AWS based in the UK. He works with customers to design and build streaming architectures so they can get value from analyzing their streaming data. His two little daughters keep him occupied most of the time outside work, and he loves solving jigsaw puzzles with them.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-29797" style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/19/image-6.jpeg" alt="John Fallows" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;John Fallows&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/johnfallows/" target="_blank" rel="noopener noreferrer"&gt;John&lt;/a&gt; is the Chief Technical Officer at Aklivity based in California, USA. He is a regular contributor to the Zilla open-source project, connecting web, mobile and IoT applications to Apache Kafka to help developers fully unlock the power of their event-driven architectures.&lt;/p&gt; 
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Build AWS Glue Data Quality pipeline using Terraform</title>
		<link>https://aws.amazon.com/blogs/big-data/build-aws-glue-data-quality-pipeline-using-terraform/</link>
					
		
		<dc:creator><![CDATA[Viquar Khan]]></dc:creator>
		<pubDate>Thu, 26 Mar 2026 15:35:21 +0000</pubDate>
				<category><![CDATA[Advanced (300)]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[AWS Glue]]></category>
		<category><![CDATA[Technical How-to]]></category>
		<category><![CDATA[AWS Glue Data Quality]]></category>
		<category><![CDATA[Terraform]]></category>
		<guid isPermaLink="false">ebbfc3a31bc8b41f55b9662bbbca95616b3e9061</guid>

					<description>AWS Glue Data Quality is a feature of AWS Glue that helps maintain trust in your data and support better decision-making and analytics across your organization. You can use Terraform to deploy AWS Glue Data Quality pipelines. Using Terraform to deploy AWS Glue Data Quality pipeline enables IaC best practices to ensure consistent, version controlled and repeatable deployments across multiple environments, while fostering collaboration and reducing errors due to manual configuration. In this post, we explore two complementary methods for implementing AWS Glue Data Quality using Terraform.</description>
										<content:encoded>&lt;p&gt;&lt;a href="https://aws.amazon.com/glue/features/data-quality/" target="_blank" rel="noopener noreferrer"&gt;AWS Glue Data Quality&lt;/a&gt; is a feature of &lt;a href="https://aws.amazon.com/glue/" target="_blank" rel="noopener noreferrer"&gt;AWS Glue&lt;/a&gt; that helps maintain trust in your data and support better decision-making and analytics across your organization. It allows users to define, monitor, and enforce data quality rules across their data lakes and data pipelines. With AWS Glue Data Quality, you can automatically detect anomalies, validate data against predefined rules, and generate quality scores for your datasets. This feature provides flexibility in how you validate your data – you can incorporate quality checks into your ETL processes for transformation-time validation, or validate data directly against cataloged tables for ongoing data lake monitoring. By leveraging machine learning, it can also suggest data quality rules based on your data patterns.&lt;/p&gt; 
&lt;p&gt;You can use &lt;a href="https://developer.hashicorp.com/terraform" target="_blank" rel="noopener noreferrer"&gt;Terraform&lt;/a&gt;, an open source Infrastructure as Code (IaC) tool developed by &lt;a href="https://www.hashicorp.com/en" target="_blank" rel="noopener noreferrer"&gt;HashiCorp&lt;/a&gt;, to deploy AWS Glue Data Quality pipelines.&lt;/p&gt; 
&lt;p&gt;It allows developers and operations teams to define, provision, and manage cloud infrastructure using a declarative language. With Terraform, you can version, share, and reuse your infrastructure code across multiple cloud providers and services. Its powerful state management and planning capabilities enable teams to collaborate efficiently and maintain consistent infrastructure across different environments.&lt;/p&gt; 
&lt;p&gt;Using Terraform to deploy AWS Glue Data Quality pipeline enables IaC best practices to ensure consistent, version controlled and repeatable deployments across multiple environments, while fostering collaboration and reducing errors due to manual configuration.&lt;/p&gt; 
&lt;p&gt;In this post, we explore two complementary methods for implementing AWS Glue Data Quality using Terraform:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;ETL-based Data Quality&lt;/strong&gt; – Validates data during ETL (Extract, Transform, Load) job execution, generating detailed quality metrics and row-level validation outputs&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Catalog-based Data Quality&lt;/strong&gt; – Validates data directly against Glue Data Catalog tables without requiring ETL execution, ideal for monitoring data at rest&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Solution overview&lt;/h2&gt; 
&lt;p&gt;This post demonstrates how to implement AWS Glue Data Quality pipelines using Terraform using two complementary approaches mentioned above to ensure comprehensive data quality across your data lake.&lt;/p&gt; 
&lt;p&gt;We’ll use the &lt;a href="https://www.nyc.gov/site/tlc/about/tlc-trip-record-data.page" target="_blank" rel="noopener noreferrer"&gt;NYC yellow taxi trip data&lt;/a&gt;, a real-world public dataset, to illustrate data quality validation and monitoring capabilities. The pipeline ingests parquet-formatted taxi trip data from &lt;a href="http://aws.amazon.com/s3" target="_blank" rel="noopener noreferrer"&gt;Amazon Simple Storage Service&lt;/a&gt; (Amazon S3) and applies comprehensive data quality rules that validate data completeness, accuracy, and consistency across various trip attributes.&lt;/p&gt; 
&lt;h3&gt;&lt;strong&gt;Method 1: ETL-based Data Quality&lt;/strong&gt;&lt;/h3&gt; 
&lt;p&gt;ETL-based Data Quality validates data during Extract, Transform, Load (ETL) job execution. This approach is ideal for:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Validating data as it moves through transformation pipelines&lt;/li&gt; 
 &lt;li&gt;Applying quality checks during data processing workflows&lt;/li&gt; 
 &lt;li&gt;Generating row-level validation outputs alongside transformed data&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The pipeline generates two key outputs:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Data Quality Results&lt;/strong&gt; – Detailed quality metrics and rule evaluation outcomes stored in the dqresults/ folder, providing insights into data quality trends and anomalies&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Row-Level Validation&lt;/strong&gt; – Individual records with their corresponding quality check results written to the processed/ folder, enabling granular analysis of data quality issues&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;&lt;strong&gt;Method 2: Catalog-based Data Quality&lt;/strong&gt;&lt;/h3&gt; 
&lt;p&gt;Catalog-based Data Quality validates data quality rules directly against AWS Glue Data Catalog tables without requiring ETL job execution. This approach is ideal for:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Validating data at rest in the data lake&lt;/li&gt; 
 &lt;li&gt;Running scheduled data quality checks independent of ETL pipelines&lt;/li&gt; 
 &lt;li&gt;Monitoring data quality across multiple tables in a database&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;&lt;strong&gt;Architecture overview&lt;/strong&gt;&lt;/h3&gt; 
&lt;p&gt;The following diagram illustrates how both approaches work together to provide comprehensive data quality validation:&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone wp-image-88923 size-full" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/14/bdb-4395-image-1.png" alt="" width="761" height="318"&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Source data stored in Amazon S3 (Yellow Taxi Data)&lt;/li&gt; 
 &lt;li&gt;AWS Glue ETL processes data with quality checks&lt;/li&gt; 
 &lt;li&gt;ETL validation results are stored in S3&lt;/li&gt; 
 &lt;li&gt;AWS Glue Crawler discovers schema&lt;/li&gt; 
 &lt;li&gt;Metadata is stored in AWS Glue Catalog&lt;/li&gt; 
 &lt;li&gt;AWS Glue Data Quality validates catalog tables&lt;/li&gt; 
 &lt;li&gt;Catalog validation results are stored in S3&lt;/li&gt; 
 &lt;li&gt;Amazon CloudWatch monitors all operations&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;By using AWS Glue’s serverless ETL capabilities and Terraform’s infrastructure-as-code approach, this solution provides a scalable, maintainable, and automated framework for ensuring data quality in your analytics pipeline.&lt;/p&gt; 
&lt;h2&gt;Prerequisites:&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;An AWS account with &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html#getting-started-install-instructions" target="_blank" rel="noopener noreferrer"&gt;AWS CLI&lt;/a&gt; installed and configured&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://www.terraform.io/downloads" target="_blank" rel="noopener noreferrer"&gt;HashiCorp Terraform &lt;/a&gt;installed and configured&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Solution Implementation&lt;/h2&gt; 
&lt;p&gt;Complete the following steps to build AWS Glue Data Quality pipeline using Terraform:&lt;/p&gt; 
&lt;h3&gt;Clone the Repository&lt;/h3&gt; 
&lt;p&gt;This post includes a GitHub &lt;a href="https://github.com/aws-samples/sample-build-aws-glue-data-quality-pipeline-using-terraform.git" target="_blank" rel="noopener noreferrer"&gt;repository&lt;/a&gt; that generates the following resources when deployed. To clone the repository, run the following command in your terminal:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-code"&gt;git clone https://github.com/aws-samples/sample-build-aws-glue-data-quality-pipeline-using-terraform.git
cd sample-build-aws-glue-data-quality-pipeline-using-terraform&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;strong&gt;Core Infrastructure:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Amazon S3 bucket:&amp;nbsp;&lt;code&gt;glue-data-quality-{AWS AccountID}-{env}&lt;/code&gt;&amp;nbsp;with AES256 encryption&lt;/li&gt; 
 &lt;li&gt;Sample NYC taxi dataset (&lt;code&gt;sample-data.parquet&lt;/code&gt;) automatically uploaded to the&amp;nbsp;&lt;code&gt;data/&lt;/code&gt;&amp;nbsp;folder&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/iam/" target="_blank" rel="noopener noreferrer"&gt;AWS Identity and Access Management&lt;/a&gt; (IAM) role:&amp;nbsp;&lt;code&gt;aws-glue-data-quality-role-{env}&lt;/code&gt;&amp;nbsp;with Glue execution permissions and S3 read/write access&lt;/li&gt; 
 &lt;li&gt;CloudWatch dashboard:&amp;nbsp;&lt;code&gt;glue-data-quality-{env}&lt;/code&gt;&amp;nbsp;for monitoring job execution and data quality metrics&lt;/li&gt; 
 &lt;li&gt;CloudWatch Log Groups for job logging with configurable retention&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;ETL-Based Data Quality Resources:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;AWS Glue ETL job:&amp;nbsp;&lt;code&gt;data-quality-pipeline&lt;/code&gt;&amp;nbsp;with 8 comprehensive validation rules&lt;/li&gt; 
 &lt;li&gt;Python script:&amp;nbsp;&lt;code&gt;GlueDataQualityDynamicRules.py&lt;/code&gt;&amp;nbsp;stored in&amp;nbsp;&lt;code&gt;glue-scripts/&lt;/code&gt;&amp;nbsp;folder&lt;/li&gt; 
 &lt;li&gt;Results storage in&amp;nbsp;&lt;code&gt;dqresults/&lt;/code&gt;&amp;nbsp;folder with detailed rule outcomes&lt;/li&gt; 
 &lt;li&gt;Row-level validation outputs in&amp;nbsp;&lt;code&gt;processed/&lt;/code&gt;&amp;nbsp;folder&lt;/li&gt; 
 &lt;li&gt;Optional scheduled triggers for automated execution&lt;/li&gt; 
 &lt;li&gt;CloudWatch alarm:&amp;nbsp;&lt;code&gt;etl-glue-data-quality-failure-{env}&lt;/code&gt;&amp;nbsp;for monitoring job failures&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Catalog-Based Data Quality Resources (Optional – when&amp;nbsp;catalog_dq_enabled = true):&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Glue Database:&amp;nbsp;&lt;code&gt;{catalog_database_name}&lt;/code&gt;&amp;nbsp;for catalog table management&lt;/li&gt; 
 &lt;li&gt;Glue Crawler:&amp;nbsp;&lt;code&gt;{job_name}-catalog-crawler&lt;/code&gt;&amp;nbsp;for automatic schema discovery from S3 data&lt;/li&gt; 
 &lt;li&gt;Crawler schedule trigger for automated execution (default: daily at 4 AM)&lt;/li&gt; 
 &lt;li&gt;Glue Catalog Tables automatically discovered and created by the crawler&lt;/li&gt; 
 &lt;li&gt;Catalog Data Quality job:&amp;nbsp;&lt;code&gt;{job_name}-catalog&lt;/code&gt;&amp;nbsp;with 7 catalog-specific validation rules&lt;/li&gt; 
 &lt;li&gt;Python script:&amp;nbsp;&lt;code&gt;CatalogDataQuality.py&lt;/code&gt;&amp;nbsp;for catalog validation&lt;/li&gt; 
 &lt;li&gt;Results storage in&amp;nbsp;&lt;code&gt;catalog-dq-results/&lt;/code&gt;&amp;nbsp;folder partitioned by table name&lt;/li&gt; 
 &lt;li&gt;Catalog DQ schedule trigger for automated validation (default: daily at 6 AM)&lt;/li&gt; 
 &lt;li&gt;CloudWatch alarm:&amp;nbsp;&lt;code&gt;catalog-glue-data-quality-failure-{env}&lt;/code&gt;&amp;nbsp;for monitoring catalog job failures&lt;/li&gt; 
 &lt;li&gt;Enhanced CloudWatch dashboard widgets for crawler status and catalog metrics&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Review the Glue Data Quality Job Script&lt;/h3&gt; 
&lt;p&gt;Review the Glue Data Quality job script &lt;code&gt;GlueDataQualityDynamicRules.py&lt;/code&gt; located in the folder &lt;code&gt;scripts&lt;/code&gt;, which has the following rules:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-code"&gt;Rules = [
    CustomSql "select vendorid from primary where passenger_count &amp;gt; 0" with threshold &amp;gt; 0.9,
    Mean "trip_distance" &amp;lt; 150,
    Sum "total_amount" between 1000 and 100000,
    RowCount between 1000 and 1000000,
    Completeness "fare_amount" &amp;gt; 0.9,
    DistinctValuesCount "ratecodeid" between 3 and 10,
    DistinctValuesCount "pulocationid" &amp;gt; 100,
    ColumnCount = 19
]&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;Brief explanation of rules for NY Taxi data is as follows:&lt;/p&gt; 
&lt;table class="styled-table" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Rule Type&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;Condition&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;CustomSql&lt;/td&gt; 
   &lt;td&gt;“select vendorid from primary where passenger_count &amp;gt; 0”&amp;nbsp;with threshold &amp;gt; 0.9&lt;/td&gt; 
   &lt;td&gt;Checks if at least 90% of rides have at least one passenger&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Mean&lt;/td&gt; 
   &lt;td&gt;“trip_distance” &amp;lt; 150&lt;/td&gt; 
   &lt;td&gt;Ensures the average trip distance is less than 150 miles&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Sum&lt;/td&gt; 
   &lt;td&gt;“total_amount” between 1000 and 100000&lt;/td&gt; 
   &lt;td&gt;Verifies that total revenue from all trips falls within this range&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RowCount&lt;/td&gt; 
   &lt;td&gt;between 1000 and 1000000&lt;/td&gt; 
   &lt;td&gt;Checks if the dataset has between 1,000 and 1 million records&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Completeness&lt;/td&gt; 
   &lt;td&gt;“fare_amount” &amp;gt; 0.9&lt;/td&gt; 
   &lt;td&gt;Ensures over 90% of records have a fare amount&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;DistinctValuesCount&lt;/td&gt; 
   &lt;td&gt;“ratecodeid” between 3 and 10&lt;/td&gt; 
   &lt;td&gt;Verifies rate codes fall between 3-10 unique values&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;DistinctValuesCount&lt;/td&gt; 
   &lt;td&gt;“pulocationid” &amp;gt; 100&lt;/td&gt; 
   &lt;td&gt;Checks if there are over 100 unique pickup locations&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;ColumnCount&lt;/td&gt; 
   &lt;td&gt;19&lt;/td&gt; 
   &lt;td&gt;Validates that dataset has exactly 19 columns&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;These rules together ensure data quality by validating volume, completeness, reasonable values and proper structure of the taxi trip data.&lt;/p&gt; 
&lt;h3&gt;Configure Terraform Variables&lt;/h3&gt; 
&lt;p&gt;Before deploying the infrastructure, configure your Terraform variables in the &lt;code&gt;terraform.tfvars&lt;/code&gt; file located in the &lt;code&gt;examples&lt;/code&gt; directory. This configuration determines which features will be deployed – ETL-based Data Quality only, or both ETL-based and Catalog-based Data Quality.&lt;/p&gt; 
&lt;h3&gt;&lt;strong&gt;Basic Configuration&lt;/strong&gt;&lt;/h3&gt; 
&lt;p&gt;The solution uses default values for most settings, but you can customize the following in your &lt;code&gt;terraform.tfvars&lt;/code&gt; file:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;AWS Region&lt;/strong&gt; – The AWS region where resources will be deployed&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Environment&lt;/strong&gt; – Environment identifier (such as, “dev”, “prod”) used in resource naming&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Job Name&lt;/strong&gt; – Name for the Glue job (default: &lt;code&gt;data-quality-pipeline&lt;/code&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;&lt;strong&gt;Enable Catalog-Based Data Quality&lt;/strong&gt;&lt;/h3&gt; 
&lt;p&gt;By default, the solution deploys only ETL-based Data Quality. To enable Catalog-based Data Quality validation, add the following configuration to your &lt;code&gt;terraform.tfvars&lt;/code&gt; file:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;# Enable Catalog-based Data Quality
catalog_dq_enabled = true

# Glue Database name for catalog tables
catalog_database_name = "taxi_data_catalog"

# S3 paths containing parquet data for catalog table creation
s3_data_paths = ["data/"]

# Optional: Specific table names to validate (empty = all tables in database)
catalog_table_names = []

# Data quality rules for catalog validation
catalog_dq_rules = &amp;lt;&amp;lt;EOF
Rules = [
  RowCount &amp;gt; 0,
  Completeness "vendorid" &amp;gt; 0.9,
  Completeness "passenger_count" &amp;gt; 0.95,
  Mean "trip_distance" &amp;lt; 150,
  ColumnCount &amp;gt; 5
]
EOF

# Enable scheduled execution for catalog data quality
catalog_enable_schedule = false
catalog_schedule_expression = "cron(0 6 * * ? *)"

# Crawler schedule for automatic table discovery
catalog_crawler_schedule = "cron(0 4 * * ? *)"&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;strong&gt;Configuration Notes:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;catalog_dq_enabled&lt;/strong&gt; – Set to true to enable Catalog-based validation alongside ETL-based validation,which will deploy both ETL and Catalog validation&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;catalog_database_name&lt;/strong&gt; – Name of the Glue database that will be created for catalog tables&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;s3_data_paths&lt;/strong&gt; – S3 folders containing parquet data that the Glue Crawler will discover&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;catalog_table_names&lt;/strong&gt; – Leave empty to validate all tables, or specify specific table names&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;catalog_dq_rules&lt;/strong&gt; – Define validation rules specific to catalog tables (can differ from ETL rules)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;catalog_enable_schedule&lt;/strong&gt; – Set to true to enable automatic scheduled execution&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Schedule expressions&lt;/strong&gt; – Use cron format for automated execution (crawler runs before DQ job)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Once you’ve configured your variables, save the &lt;code&gt;terraform.tfvars&lt;/code&gt; file and proceed to the next step.&lt;/p&gt; 
&lt;h3&gt;Set Up AWS CLI Authentication&lt;/h3&gt; 
&lt;p&gt;Before you can interact with AWS services using the command line, you need to set up and authenticate the AWS CLI. This section guides you through the process of configuring your AWS CLI and verifying your authentication. Follow these steps to ensure you have the necessary permissions to access AWS resources.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Open your terminal or command prompt.&lt;/li&gt; 
 &lt;li&gt;Set up authentication in the AWS CLI. You need administrator permissions to set up this environment. 
  &lt;div class="hide-language"&gt; 
   &lt;pre&gt;&lt;code class="lang-bash"&gt;aws configure&lt;/code&gt;&lt;/pre&gt; 
  &lt;/div&gt; &lt;/li&gt; 
 &lt;li&gt;To test if your AWS CLI is working and you’re authenticated, run the following command: 
  &lt;div class="hide-language"&gt; 
   &lt;pre&gt;&lt;code class="lang-bash"&gt;aws sts get-caller-identity --output json&lt;/code&gt;&lt;/pre&gt; 
  &lt;/div&gt; &lt;p&gt;The output should look similar to the following:&lt;/p&gt; 
  &lt;div class="hide-language"&gt; 
   &lt;pre&gt;&lt;code class="lang-python"&gt;{
   "UserId": "UUID123123:your_user",
  "Account": "111122223333",
"Arn": "arn:aws:sts::111122223333:assumed-role/some-role/your_user"
 }&lt;/code&gt;&lt;/pre&gt; 
  &lt;/div&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Deploy with Terraform&lt;/h3&gt; 
&lt;p&gt;Follow these steps to deploy your infrastructure using Terraform. This process will initialize your working directory, review planned changes, and apply your infrastructure configuration to AWS.&lt;/p&gt; 
&lt;p&gt;To deploy with Terraform, navigate to the &lt;code&gt;examples&lt;/code&gt; folder by running the following command in your CLI from inside the repository&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;cd .\examples&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;Run the following bash commands:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;terraform init
 &lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;Initializes a Terraform working directory, downloads required provider plugins, and sets up the backend for storing state.&lt;/p&gt; 
&lt;p&gt;On success you will receive output &lt;code&gt;Terraform has been successfully initialized!&lt;/code&gt;&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;terraform plan
 &lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;Creates an execution plan, shows what changes Terraform will make to your infrastructure. This command doesn’t make any changes.&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;terraform apply
 &lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;Deploys infrastructure and code to the AWS Account. By default, it asks for confirmation before making any changes. Use ‘terraform apply -auto-approve’ to skip the confirmation step.&lt;/p&gt; 
&lt;p&gt;When prompted with ‘Do you want to perform these actions?’, type ‘yes’ and press Enter to confirm and allow Terraform to execute the described actions.&lt;/p&gt; 
&lt;p&gt;Upon successful execution, the system will display ‘Apply complete!’ message.&lt;/p&gt; 
&lt;h3&gt;Run the AWS Glue Data Quality Pipeline&lt;/h3&gt; 
&lt;p&gt;After deploying the infrastructure with Terraform, you can validate data quality using two methods – ETL-based and Catalog-based. Each method serves different use cases and can be run independently or together.&lt;/p&gt; 
&lt;h3&gt;&lt;strong&gt;Method 1: Run the ETL-Based Data Quality Job&lt;/strong&gt;&lt;/h3&gt; 
&lt;p&gt;ETL-based data quality validates data during the transformation process, making it ideal for catching issues early in your data pipeline.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Steps to execute:&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Navigate to the AWS Glue Console and select &lt;strong&gt;ETL Jobs&lt;/strong&gt; from the left navigation panel&lt;/li&gt; 
 &lt;li&gt;Locate and select the job named &lt;code&gt;data-quality-pipeline&lt;/code&gt;&lt;br&gt; &lt;img loading="lazy" class="alignnone wp-image-88924 size-full" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/14/bdb-4395-image-2.png" alt="" width="2927" height="553"&gt;&lt;/li&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Run&lt;/strong&gt; to start the job execution&lt;br&gt; &lt;img loading="lazy" class="alignnone wp-image-88925 size-full" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/14/bdb-4395-image-3.png" alt="" width="1896" height="290"&gt;&lt;/li&gt; 
 &lt;li&gt;Monitor the job status – it typically completes in 2-3 minutes&lt;/li&gt; 
 &lt;li&gt;Review the results: 
  &lt;ul&gt; 
   &lt;li&gt;Once completed, click on the Data Quality tab to review the validation results. &lt;p&gt; The following screenshot shows the results.&lt;br&gt; &lt;img loading="lazy" class="alignnone wp-image-88926 size-full" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/14/bdb-4395-image-4.png" alt="" width="3023" height="1079"&gt;&lt;/p&gt;&lt;/li&gt; 
   &lt;li&gt;Understanding AWS Glue Data Quality Results: NYC Taxi Data Example. &lt;p&gt; &lt;strong&gt;Rule Results Summary&lt;/strong&gt;&lt;/p&gt; 
    &lt;ul&gt; 
     &lt;li&gt;We had 8 total rules&lt;/li&gt; 
     &lt;li&gt;7 rules passed&lt;/li&gt; 
     &lt;li&gt;1 rule failed&lt;/li&gt; 
    &lt;/ul&gt; 
    &lt;table class="styled-table" border="1px" cellpadding="10px"&gt; 
     &lt;tbody&gt; 
      &lt;tr&gt; 
       &lt;td&gt;&lt;strong&gt;Rule&lt;/strong&gt;&lt;/td&gt; 
       &lt;td&gt;&lt;strong&gt;Rule Condition&lt;/strong&gt;&lt;/td&gt; 
       &lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt; 
       &lt;td&gt;&lt;strong&gt;Pass/Fail Reason&lt;/strong&gt;&lt;/td&gt; 
      &lt;/tr&gt; 
      &lt;tr&gt; 
       &lt;td&gt;Passenger Count Check&lt;/td&gt; 
       &lt;td&gt;At least 90% of rides should have at least one passenger&lt;/td&gt; 
       &lt;td&gt;Passed&lt;/td&gt; 
       &lt;td&gt;95% of rides had passengers, exceeding 90% threshold&lt;/td&gt; 
      &lt;/tr&gt; 
      &lt;tr&gt; 
       &lt;td&gt;Trip Distance&lt;/td&gt; 
       &lt;td&gt;Average trip &amp;lt; 150 miles&lt;/td&gt; 
       &lt;td&gt;Passed&lt;/td&gt; 
       &lt;td&gt;Average was 5.94 miles, well below 150-mile limit&lt;/td&gt; 
      &lt;/tr&gt; 
      &lt;tr&gt; 
       &lt;td&gt;Row Count&lt;/td&gt; 
       &lt;td&gt;Between 1,000 and 1,000,000 records&lt;/td&gt; 
       &lt;td&gt;Passed&lt;/td&gt; 
       &lt;td&gt;63,441 records fell within required range&lt;/td&gt; 
      &lt;/tr&gt; 
      &lt;tr&gt; 
       &lt;td&gt;Fare Amount Completeness&lt;/td&gt; 
       &lt;td&gt;90% of records should have fare amounts&lt;/td&gt; 
       &lt;td&gt;Passed&lt;/td&gt; 
       &lt;td&gt;100% completeness exceeded 90% requirement&lt;/td&gt; 
      &lt;/tr&gt; 
      &lt;tr&gt; 
       &lt;td&gt;Rate Code Variety&lt;/td&gt; 
       &lt;td&gt;Between 3-10 different rate codes&lt;/td&gt; 
       &lt;td&gt;Passed&lt;/td&gt; 
       &lt;td&gt;7 unique codes fell within acceptable range&lt;/td&gt; 
      &lt;/tr&gt; 
      &lt;tr&gt; 
       &lt;td&gt;Pickup Locations&lt;/td&gt; 
       &lt;td&gt;More than 100 different pickup locations&lt;/td&gt; 
       &lt;td&gt;Passed&lt;/td&gt; 
       &lt;td&gt;205 locations exceeded minimum requirement&lt;/td&gt; 
      &lt;/tr&gt; 
      &lt;tr&gt; 
       &lt;td&gt;Column Count&lt;/td&gt; 
       &lt;td&gt;Exactly 19 columns&lt;/td&gt; 
       &lt;td&gt;Passed&lt;/td&gt; 
       &lt;td&gt;Exact match at 19 columns&lt;/td&gt; 
      &lt;/tr&gt; 
      &lt;tr&gt; 
       &lt;td&gt;Total Amount Range&lt;/td&gt; 
       &lt;td&gt;Sum of all fares between $1,000 and $100,000&lt;/td&gt; 
       &lt;td&gt;Failed&lt;/td&gt; 
       &lt;td&gt;Total of $130,638.29 exceeded maximum limit&lt;/td&gt; 
      &lt;/tr&gt; 
     &lt;/tbody&gt; 
    &lt;/table&gt; &lt;/li&gt; 
   &lt;li&gt;Check the S3 bucket for detailed outputs: 
    &lt;ul&gt; 
     &lt;li&gt;Data Quality metrics: &lt;code&gt;s3://glue-data-quality-{AccountID}-{env}/dqresults/&lt;/code&gt;&lt;/li&gt; 
     &lt;li&gt;Row-level validation: &lt;code&gt;s3://glue-data-quality-{AccountID}-{env}/processed/&lt;/code&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;The job processes the NYC taxi data and applies all 8 validation rules during the ETL execution. You’ll see a quality score along with detailed metrics for each rule.&lt;/p&gt; 
&lt;h3&gt;&lt;strong&gt;Method 2: Run the Catalog-Based Data Quality Pipeline&lt;/strong&gt;&lt;/h3&gt; 
&lt;p&gt;Catalog-based data quality validates data at rest in your data lake, independent of ETL processing. This method requires the Glue Crawler to first discover and catalog your data.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Run the Glue Crawler (first-time setup or when schema changes): 
  &lt;ul&gt; 
   &lt;li&gt;Navigate to AWS Glue Console and select &lt;strong&gt;Crawlers&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;Locate &lt;code&gt;data-quality-pipeline-catalog-crawler&lt;/code&gt;&lt;br&gt; &lt;img loading="lazy" class="alignnone wp-image-88927 size-full" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/14/bdb-4395-image-5.png" alt="" width="1641" height="535"&gt;&lt;/li&gt; 
   &lt;li&gt;Select &lt;code&gt;data-quality-pipeline-catalog-crawler&lt;/code&gt; checkbox and click &lt;strong&gt;Run&lt;/strong&gt; and wait for completion (1-2 minutes)&lt;/li&gt; 
   &lt;li&gt;Verify the table was created in your Glue database&lt;br&gt; &lt;img loading="lazy" class="alignnone wp-image-88928 size-full" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/14/bdb-4395-image-6.png" alt="" width="1653" height="238"&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Run the Catalog Data Quality Job: 
  &lt;ul&gt; 
   &lt;li&gt;Navigate to the AWS Glue Console and select &lt;strong&gt;ETL Jobs&lt;/strong&gt; from the left navigation panel&lt;/li&gt; 
   &lt;li&gt;Select the job named &lt;code&gt;data-quality-pipeline-catalog&lt;/code&gt;&lt;br&gt; &lt;img loading="lazy" class="alignnone wp-image-88929 size-full" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/14/bdb-4395-image-7.png" alt="" width="1863" height="276"&gt;&lt;/li&gt; 
   &lt;li&gt;Click &lt;strong&gt;Run job&lt;/strong&gt; to execute the validation&lt;/li&gt; 
   &lt;li&gt;Monitor the job status until completion&lt;/li&gt; 
  &lt;/ul&gt; &lt;p&gt;&lt;img loading="lazy" class="alignnone wp-image-88930 size-full" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/14/bdb-4395-image-8.png" alt="" width="1554" height="320"&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;Review the results: 
  &lt;ul&gt; 
   &lt;li&gt;Once completed, click on the &lt;strong&gt;Data Quality&lt;/strong&gt; tab to review the validation results. &lt;p&gt; The following screenshot shows the results.&lt;br&gt; &lt;img loading="lazy" class="alignnone wp-image-88931 size-full" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/14/bdb-4395-image-9.png" alt="" width="1612" height="617"&gt;&lt;/p&gt; &lt;p&gt; &lt;strong&gt;Rule Results Summary&lt;/strong&gt;&lt;/p&gt; 
    &lt;ul&gt; 
     &lt;li&gt;We had 7 total rules&lt;/li&gt; 
     &lt;li&gt;6 rules passed&lt;/li&gt; 
     &lt;li&gt;1 rule failed&lt;/li&gt; 
    &lt;/ul&gt; 
    &lt;table class="styled-table" border="1px" cellpadding="10px"&gt; 
     &lt;tbody&gt; 
      &lt;tr&gt; 
       &lt;td&gt;&lt;strong&gt;Rule&lt;/strong&gt;&lt;/td&gt; 
       &lt;td&gt;&lt;strong&gt;Rule Condition&lt;/strong&gt;&lt;/td&gt; 
       &lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt; 
       &lt;td&gt;&lt;strong&gt;Pass/Fail Reason&lt;/strong&gt;&lt;/td&gt; 
      &lt;/tr&gt; 
      &lt;tr&gt; 
       &lt;td&gt;Row Count&lt;/td&gt; 
       &lt;td&gt;Row count should be greater than zero&lt;/td&gt; 
       &lt;td&gt;Passed&lt;/td&gt; 
       &lt;td&gt;63441 rows present in the source data file&lt;/td&gt; 
      &lt;/tr&gt; 
      &lt;tr&gt; 
       &lt;td&gt;Completeness “vendorid”&lt;/td&gt; 
       &lt;td&gt;90% of records should have vendorid&lt;/td&gt; 
       &lt;td&gt;Passed&lt;/td&gt; 
       &lt;td&gt;100% completeness exceeded 90% requirement&lt;/td&gt; 
      &lt;/tr&gt; 
      &lt;tr&gt; 
       &lt;td&gt;Completeness “passenger_count”&lt;/td&gt; 
       &lt;td&gt;95% of records should have vendorid&lt;/td&gt; 
       &lt;td&gt;Passed&lt;/td&gt; 
       &lt;td&gt;96% completeness exceeded 95% requirement&lt;/td&gt; 
      &lt;/tr&gt; 
      &lt;tr&gt; 
       &lt;td&gt;Mean “trip_distance”&lt;/td&gt; 
       &lt;td&gt;Mean “trip_distance” &amp;lt; 150&lt;/td&gt; 
       &lt;td&gt;Passed&lt;/td&gt; 
       &lt;td&gt;trip_distance.Mean: 5.94 which is less than threshold 150&lt;/td&gt; 
      &lt;/tr&gt; 
      &lt;tr&gt; 
       &lt;td&gt;Sum “total_amount”&lt;/td&gt; 
       &lt;td&gt;Sum “total_amount” between 1000 and 100000&lt;/td&gt; 
       &lt;td&gt;Failed&lt;/td&gt; 
       &lt;td&gt;total_amount.Sum: 1330638.29 which does not satisfy condition&lt;/td&gt; 
      &lt;/tr&gt; 
      &lt;tr&gt; 
       &lt;td&gt;&lt;/td&gt; 
       &lt;td&gt;&lt;/td&gt; 
       &lt;td&gt;&lt;/td&gt; 
       &lt;td&gt;&lt;/td&gt; 
      &lt;/tr&gt; 
      &lt;tr&gt; 
       &lt;td&gt;Distinct vale count “ratecodeid”&lt;/td&gt; 
       &lt;td&gt;DistinctValuesCount “ratecodeid” between 3 and 10&lt;/td&gt; 
       &lt;td&gt;Passed&lt;/td&gt; 
       &lt;td&gt;ratecodeid.DistinctValuesCount: 7, satisfies condition&lt;/td&gt; 
      &lt;/tr&gt; 
      &lt;tr&gt; 
       &lt;td&gt;Column Count&lt;/td&gt; 
       &lt;td&gt;Greater than 5 columns&lt;/td&gt; 
       &lt;td&gt;Passed&lt;/td&gt; 
       &lt;td&gt;ColumnCount: 19, satisfies condition&lt;/td&gt; 
      &lt;/tr&gt; 
     &lt;/tbody&gt; 
    &lt;/table&gt; &lt;/li&gt; 
   &lt;li&gt;Check the S3 bucket for detailed outputs &lt;code&gt;s3://glue-data-quality-{AccountID}-{env}/catalog-dq-results/&lt;/code&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Catalog vs ETL Data Quality Comparison&lt;/h3&gt; 
&lt;table class="styled-table" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Feature&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;ETL Data Quality&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;Catalog Data Quality&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Execution Context&lt;/td&gt; 
   &lt;td&gt;Validates data during ETL job processing&lt;/td&gt; 
   &lt;td&gt;Validates data against catalog tables at rest&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Data Source&lt;/td&gt; 
   &lt;td&gt;Reads directly from S3 files (parquet format)&lt;/td&gt; 
   &lt;td&gt;Queries Glue Data Catalog tables&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Results Location&lt;/td&gt; 
   &lt;td&gt;s3://…/dqresults/&lt;/td&gt; 
   &lt;td&gt;s3://…/catalog-dq-results/&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Primary Use Case&lt;/td&gt; 
   &lt;td&gt;Validate data quality during transformation pipelines&lt;/td&gt; 
   &lt;td&gt;Monitor data lake quality independent of ETL workflows&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Execution Trigger&lt;/td&gt; 
   &lt;td&gt;Runs as part of Glue ETL job execution&lt;/td&gt; 
   &lt;td&gt;Runs independently as scheduled Data Quality job&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Scheduling&lt;/td&gt; 
   &lt;td&gt;Configured via Glue job schedule or on-demand&lt;/td&gt; 
   &lt;td&gt;Configured via Data Quality job schedule or on-demand&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Table Discovery&lt;/td&gt; 
   &lt;td&gt;Manual – requires explicit S3 path configuration&lt;/td&gt; 
   &lt;td&gt;Automatic – Glue Crawler discovers schema and creates tables&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Schema Management&lt;/td&gt; 
   &lt;td&gt;Defined in ETL job script&lt;/td&gt; 
   &lt;td&gt;Managed by Glue Data Catalog&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Output Format&lt;/td&gt; 
   &lt;td&gt;Data Quality metrics + row-level validation outputs&lt;/td&gt; 
   &lt;td&gt;Data Quality metrics only&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Best For&lt;/td&gt; 
   &lt;td&gt;Catching issues early in data pipelines&lt;/td&gt; 
   &lt;td&gt;Ongoing monitoring of data at rest in data lakes&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Dependencies&lt;/td&gt; 
   &lt;td&gt;Requires ETL job execution&lt;/td&gt; 
   &lt;td&gt;Requires Glue Crawler to run first&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;CloudWatch Integration&lt;/td&gt; 
   &lt;td&gt;Job-level metrics and logs&lt;/td&gt; 
   &lt;td&gt;Data Quality-specific metrics and logs&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Monitoring and Troubleshooting&lt;/h3&gt; 
&lt;p&gt;Both data quality methods automatically send metrics and logs to Amazon CloudWatch. You can set up alarms to notify you when quality scores drop below acceptable thresholds.&lt;/p&gt; 
&lt;h2&gt;Clean up&lt;/h2&gt; 
&lt;p&gt;To avoid incurring unnecessary AWS charges, make sure to delete all resources created during this tutorial. Ensure you have backed up any important data before running these commands, as this will permanently delete the resources and their associated data. To destroy all resources created as part of this blog, run following command in your terminal:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;terraform destroy&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;In this blog post, we demonstrated how to build and deploy a scalable data quality pipeline using AWS Glue Data Quality and Terraform. The solution implements two validation methods:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;ETL-based Data Quality&lt;/strong&gt; – Integrated validation during ETL job execution for transformation pipeline quality assurance&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Catalog-based Data Quality&lt;/strong&gt; – Independent validation against Glue Data Catalog tables for data lake quality monitoring&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;By implementing data quality checks on NYC taxi trip data, we showed how organizations can automate their data validation processes and maintain data integrity at scale. The combination of AWS Glue’s serverless architecture and Terraform’s infrastructure-as-code capabilities provides a powerful framework for implementing reproducible, version-controlled data quality solutions. This approach not only helps teams catch data issues early but also enables them to maintain consistent data quality standards across different environments. Whether you’re dealing with small datasets or processing massive amounts of data, this solution can be adapted to meet your organization’s specific data quality requirements. As data quality continues to be a crucial aspect of successful data initiatives, implementing automated quality checks using AWS Glue Data Quality and Terraform sets a strong foundation for reliable data analytics and decision-making.&lt;/p&gt; 
&lt;p&gt;To learn more about AWS Glue Data Quality, refer to the following:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/glue/latest/dg/data-quality-gs-studio.html" target="_blank" rel="noopener noreferrer"&gt;Evaluating data quality with AWS Glue Studio&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/glue/latest/dg/glue-data-quality.html" target="_blank" rel="noopener noreferrer"&gt;AWS Glue Data Quality&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-data-quality-api.html" target="_blank" rel="noopener noreferrer"&gt;Data Quality API&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p style="clear:both"&gt;&lt;/p&gt; 
&lt;hr style="width: 80%"&gt; 
&lt;h2&gt;About the authors&lt;/h2&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-29797" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/26/BDB-4395a1.jpg" alt="Viquar Khan" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Viquar Khan&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/vaquar-khan-b695577/" target="_blank" rel="noopener"&gt;Viquar&lt;/a&gt; is a Senior Data Architect at AWS who transforms complex data challenges into scalable, production-ready solutions. With 22+ years of expertise spanning data engineering, AI/ML, and Generative AI, he is a published author, open-source contributor, and passionate about pushing the boundaries of what’s possible with data.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-29797" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/24/BDB-4395a2.jpg" alt="Mahammadali Saheb" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Mahammadali Saheb&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/mahammadali-s-26834a30/" target="_blank" rel="noopener"&gt;Mahammadali&lt;/a&gt; is a Senior Delivery Consultant at AWS Professional Services, specializing in Data Analytics and AI. He is passionate about helping customers drive business outcome via data analytics and AI solutions on AWS Cloud.&lt;/p&gt; 
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Automating data classification in Amazon SageMaker Catalog using an AI agent</title>
		<link>https://aws.amazon.com/blogs/big-data/automating-data-classification-in-amazon-sagemaker-catalog-using-an-ai-agent/</link>
					
		
		<dc:creator><![CDATA[Ramesh H Singh]]></dc:creator>
		<pubDate>Tue, 24 Mar 2026 21:44:32 +0000</pubDate>
				<category><![CDATA[Advanced (300)]]></category>
		<category><![CDATA[Amazon SageMaker Data & AI Governance]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[Technical How-to]]></category>
		<guid isPermaLink="false">40100823607ffd9db6a33f2cd408ac698b9b4b10</guid>

					<description>If you’re struggling with manual data classification in your organization, the new Amazon SageMaker Catalog AI agent can automate this process for you. Most large organizations face challenges with the manual tagging of data assets, which doesn’t scale and is unreliable. In some cases, business terms aren’t applied consistently across teams. Different groups name and tag data assets based on local conventions. This creates a fragmented catalog where discovery becomes unreliable and governance teams spend more time normalizing metadata than governing. In this post, we show you how to implement this automated classification to help reduce the manual tagging effort and improve metadata consistency across your organization.</description>
										<content:encoded>&lt;p&gt;If you’re struggling with manual data classification in your organization, the new &lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/autodoc.html" target="_blank" rel="noopener noreferrer"&gt;Amazon SageMaker Catalog AI agent&lt;/a&gt; can automate this process for you. Most large organizations face challenges with the manual tagging of data assets, which doesn’t scale and is unreliable. In some cases, business terms aren’t applied consistently across teams. Different groups name and tag data assets based on local conventions. This creates a fragmented catalog where discovery becomes unreliable and governance teams spend more time normalizing metadata than governing.&lt;/p&gt; 
&lt;p&gt;In this post, we show you how to implement this automated classification to help reduce the manual tagging effort and improve metadata consistency across your organization.&lt;/p&gt; 
&lt;p&gt;Amazon SageMaker Catalog provides automated data classification that suggests business glossary terms during data publishing. This helps to reduce the manual tagging effort and improve metadata consistency across organizations. This capability analyzes table metadata and schema information using &lt;a href="https://aws.amazon.com/bedrock/" target="_blank" rel="noopener noreferrer"&gt;Amazon Bedrock&lt;/a&gt; language models to recommend relevant terms from organizational business glossaries. Data producers receive AI-generated suggestions for business terms defined within their glossaries. These suggestions include both functional terms and sensitive data classifications such as PII and PHI, making it straightforward to tag their datasets with standardized vocabulary. Producers can accept or modify these suggestions before publishing, facilitating consistent terminology across data assets and improving data discoverability for business users.&lt;/p&gt; 
&lt;h2&gt;The problem with manual classification&lt;/h2&gt; 
&lt;p&gt;Manual tagging doesn’t scale effectively. Data producers interpret business terms differently, especially across domains. Critical labels like PII and PHI get missed&amp;nbsp;because the publishing workflow is already complex. After assets enter the catalog with inconsistent terminology, search functionality and access controls quickly degrade.The solution isn’t only better training—it’s making the classification process&amp;nbsp;predictable and consistent.&lt;/p&gt; 
&lt;h2&gt;How automated classification works&lt;/h2&gt; 
&lt;p&gt;The capability runs directly inside the publish workflow:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;The catalog looks at the table’s structure—column names, types, whatever metadata exists.&lt;/li&gt; 
 &lt;li&gt;That structure is sent to an Amazon Bedrock model that matches patterns against the organization’s glossary.&lt;/li&gt; 
 &lt;li&gt;Producers receive a set of suggestions from the defined business glossary terms for classification that might include both functional and sensitive-data glossary terms.&lt;/li&gt; 
 &lt;li&gt;They accept or adjust the suggestions before publishing.&lt;/li&gt; 
 &lt;li&gt;The final list is written into the asset’s metadata using the controlled vocabulary.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;The model evaluates column names, data types, schema patterns, and existing metadata. It maps those signals to the terms defined in the organization’s glossary. The suggestions are generated inline during publishing, with no separate Extract, Transform and Load (ETL) or batch processes to maintain. The accepted terms become part of the asset’s metadata and flow into downstream catalog operations immediately.&lt;/p&gt; 
&lt;h3&gt;Under the hood: intelligent agent-based classification&lt;/h3&gt; 
&lt;p&gt;Automated business glossary assignment goes beyond simple metadata&amp;nbsp;lookups using a reasoning-driven approach. The AI agent functions like a virtual data steward, following human-like reasoning patterns such as:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Reviews asset details and context&lt;/li&gt; 
 &lt;li&gt;Searches the catalog for relevant terms&lt;/li&gt; 
 &lt;li&gt;Evaluates whether results make sense&lt;/li&gt; 
 &lt;li&gt;Refines strategy if initial searches don’t surface appropriate terms&lt;/li&gt; 
 &lt;li&gt;Learns from each step to improve recommendations&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Key approaches:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Reasoning over static queries&lt;/strong&gt; –&amp;nbsp;The agent interprets asset attributes and context rather than treating metadata as a fixed index, generating dynamic search intents instead of relying on predefined queries.&lt;br&gt; &lt;strong&gt;Iterative adaptive search&lt;/strong&gt; –&amp;nbsp;When initial results are weak, the agent automatically adjusts queries—broadening,&amp;nbsp;narrowing, or shifting terms through a feedback loop that helps improve discovery quality.&lt;br&gt; &lt;strong&gt;Structured semantic search&lt;/strong&gt; –&amp;nbsp;The agent performs semantic querying across entity types, applies filtering and relevance scoring, and conducts multi-directional exploration until strong matches are found.&lt;/p&gt; 
&lt;p&gt;This allows the agent to explore multiple directions until strong matches are found, improving recall and precision over static methods like direct vector search when asset metadata is incomplete or ambiguous.&lt;/p&gt; 
&lt;h2&gt;Things to keep in mind&lt;/h2&gt; 
&lt;p&gt;This feature is only as strong as the glossary it sits on top of. If the glossary is incomplete or inconsistent, the suggestions reflect that. Producers should still review each recommendation, especially for regulatory labels. Governance teams should monitor how often suggestions are accepted or overridden to understand model accuracy and glossary gaps.&lt;/p&gt; 
&lt;h2&gt;Prerequisites&lt;/h2&gt; 
&lt;p&gt;To follow along, you must have an &lt;a href="https://aws.amazon.com/sagemaker/unified-studio/" target="_blank" rel="noopener noreferrer"&gt;Amazon SageMaker Unified Studio&lt;/a&gt; domain set up with a domain owner or domain unit owner permissions. You must have a project that you can use to publish assets. For instructions on setting up a new domain, refer to the SageMaker Unified Studio &lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/getting-started.html" target="_blank" rel="noopener noreferrer"&gt;Getting started&lt;/a&gt; guide. We will also use Amazon Redshift to catalog data. If you are not familiar, read &lt;a href="https://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html" target="_blank" rel="noopener noreferrer"&gt;Learn Amazon Redshift concepts&lt;/a&gt; to learn more.&lt;/p&gt; 
&lt;h3&gt;Step 1: Define business glossary and&amp;nbsp;terms&lt;/h3&gt; 
&lt;p&gt;AI&amp;nbsp;recommendations suggest terms only from glossaries and definitions already present in the system. As a first step we create high-quality, well-described glossary entries so the AI can return accurate and meaningful suggestions.&lt;/p&gt; 
&lt;p&gt;We create the following business glossaries in our domain. For information about how to create a business glossary, see &lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/create-maintain-business-glossary.html" target="_blank" rel="noopener noreferrer"&gt;Create a business glossary in Amazon SageMaker Unified Studio&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Domain: Terms –&amp;nbsp;&lt;code&gt;Customer Profile&lt;/code&gt;, &lt;code&gt;Policy&lt;/code&gt;, &lt;code&gt;Order&lt;/code&gt;, &lt;code&gt;Invoice&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;The following is the view of ‘Domain’ business glossary with all terms added. &lt;/p&gt; 
&lt;p&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5650-1.jpg"&gt;&lt;/p&gt; 
&lt;p&gt;Data sensitivity: Terms –&amp;nbsp;&lt;code&gt;PII&lt;/code&gt;, &lt;code&gt;PHI&lt;/code&gt;, &lt;code&gt;Confidential&lt;/code&gt;, &lt;code&gt;Internal&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;The following is the view of ‘Data sensitivity’ business glossary with all terms added.&lt;/p&gt; 
&lt;p&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5650-2.jpg"&gt;&lt;/p&gt; 
&lt;p&gt;Business Unit: Terms –&amp;nbsp;&lt;code&gt;KYC&lt;/code&gt;, &lt;code&gt;Credit Risk&lt;/code&gt;, &lt;code&gt;Marketing Analytics&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;The following is the view of ‘Business Unit’ business glossary with all terms added.&lt;/p&gt; 
&lt;p&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5650-3.jpg"&gt;&lt;/p&gt; 
&lt;p&gt;We recommend that you use glossary descriptions to make terms unambiguous. Ambiguous or overlapping definitions confuse AI models and humans equally.&lt;/p&gt; 
&lt;h3&gt;Step 2: Create data assets&lt;/h3&gt; 
&lt;p&gt;Create the following table in Amazon Redshift. For information about how to bring Amazon Redshift data to Amazon SageMaker Catalog, see &lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/compute-redshift.html" target="_blank" rel="noopener noreferrer"&gt;Amazon Redshift compute connections in Amazon SageMaker Unified Studio&lt;/a&gt;.&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-sql"&gt;CREATE TABLE &amp;nbsp;dev.public.customer_analytics_data (
&amp;nbsp;&amp;nbsp; &amp;nbsp;customer_id VARCHAR(50) NOT NULL,
&amp;nbsp;&amp;nbsp; &amp;nbsp;customer_full_name VARCHAR(200),
&amp;nbsp;&amp;nbsp; &amp;nbsp;customer_email VARCHAR(255),
&amp;nbsp;&amp;nbsp; &amp;nbsp;customer_phone VARCHAR(20),
&amp;nbsp;&amp;nbsp; &amp;nbsp;customer_dob DATE,
&amp;nbsp;&amp;nbsp; &amp;nbsp;customer_tax_id VARCHAR(256),
&amp;nbsp;&amp;nbsp; &amp;nbsp;policy_id VARCHAR(50),
&amp;nbsp;&amp;nbsp; &amp;nbsp;policy_type VARCHAR(100),
&amp;nbsp;&amp;nbsp; &amp;nbsp;policy_start_date DATE,
&amp;nbsp;&amp;nbsp; &amp;nbsp;policy_end_date DATE,
&amp;nbsp;&amp;nbsp; &amp;nbsp;policy_coverage_amount DECIMAL(18,2),
&amp;nbsp;&amp;nbsp; &amp;nbsp;order_id VARCHAR(50),
&amp;nbsp;&amp;nbsp; &amp;nbsp;order_date TIMESTAMP,
&amp;nbsp;&amp;nbsp; &amp;nbsp;order_status VARCHAR(50),
&amp;nbsp;&amp;nbsp; &amp;nbsp;order_total DECIMAL(18,2),
&amp;nbsp;&amp;nbsp; &amp;nbsp;invoice_id VARCHAR(50),
&amp;nbsp;&amp;nbsp; &amp;nbsp;invoice_date DATE,
&amp;nbsp;&amp;nbsp; &amp;nbsp;invoice_amount DECIMAL(18,2),
&amp;nbsp;&amp;nbsp; &amp;nbsp;invoice_payment_status VARCHAR(50),
&amp;nbsp;&amp;nbsp; &amp;nbsp;customer_profile_created_timestamp TIMESTAMP DEFAULT GETDATE(),
&amp;nbsp;&amp;nbsp; &amp;nbsp;customer_profile_updated_timestamp TIMESTAMP DEFAULT GETDATE(),

&amp;nbsp;&amp;nbsp; &amp;nbsp;PRIMARY KEY (customer_id, order_id)
)
DISTSTYLE KEY
DISTKEY (customer_id)
SORTKEY (customer_id, order_date);&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;Once the Redshift is onboarded with above steps, navigate to Project catalog from left navigation menu and choose Data sources. Run the Data Source to add the table to Project inventory assets.&lt;/p&gt; 
&lt;p&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5650-4.jpg"&gt;&lt;/p&gt; 
&lt;p&gt;‘customer_analytics_data’ should be Project Assets inventory.&lt;/p&gt; 
&lt;p&gt;Verify navigating to ‘Project catalog’ menu on the left and choose ‘Assets’.&lt;/p&gt; 
&lt;p&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5650-5.jpg"&gt;&lt;/p&gt; 
&lt;h3&gt;Step 3: Generate classification recommendations&lt;/h3&gt; 
&lt;p&gt;To automatically generate terms, select &lt;strong&gt;GENERATE TERMS&lt;/strong&gt; in ‘GLOSSARY TERMS’ section of the asset.&lt;/p&gt; 
&lt;p&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5650-6.jpg"&gt;&lt;/p&gt; 
&lt;p&gt;AI recommendations for glossary terms automatically analyze asset metadata and context to determine the most relevant business glossary terms for each asset and its columns. Instead of relying on manual tagging or static rules, it reasons about the data and performs iterative searches across what already exists in the environment to identify the most relevant glossary term concepts.&lt;/p&gt; 
&lt;p&gt;After recommendations are generated, review the terms both at table and column level. Table level suggested terms can be viewed as shown in the following image:&lt;/p&gt; 
&lt;p&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5650-7.jpg"&gt;&lt;/p&gt; 
&lt;p&gt;Select the &lt;strong&gt;SCHEMA&lt;/strong&gt; tab to review column level tags as shown in the following image:&lt;/p&gt; 
&lt;p&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5650-8.jpg"&gt;&lt;/p&gt; 
&lt;p&gt;Review and accept individually by selecting the AI icon shown in below image.&lt;/p&gt; 
&lt;p&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5650-9.jpg"&gt;&lt;/p&gt; 
&lt;p&gt;In this case, we select &lt;strong&gt;ACCEPT ALL&lt;/strong&gt; and then select &lt;strong&gt;PUBLISH ASSET as shown below&lt;/strong&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5650-10.jpg"&gt;&lt;/p&gt; 
&lt;p&gt;The tags are now added to the asset and columns without manual search and addition. Select &lt;strong&gt;PUBLISH ASSET&lt;/strong&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5650-11.jpg"&gt;&lt;/p&gt; 
&lt;p&gt;The asset is now published to the catalog as shown in the following image in the upper left corner.&lt;/p&gt; 
&lt;p&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5650-12.jpg"&gt;&lt;/p&gt; 
&lt;h3&gt;Step 4: Improve data discovery&lt;/h3&gt; 
&lt;p&gt;Users can now experience enhanced search results and find assets in the catalog based on the associated terms.&lt;/p&gt; 
&lt;p&gt;Browse by TermsUsers can now explore the catalog and filter by terms as shown in left navigation “APPLY FILTER” section&lt;/p&gt; 
&lt;p&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5650-13.jpg"&gt;&lt;/p&gt; 
&lt;p&gt;Search and FilterUsers can also search assets by glossary terms as shown below:&lt;/p&gt; 
&lt;p&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5650-14.jpg"&gt;&lt;/p&gt; 
&lt;h2&gt;Cleanup&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;To delete SageMaker domain, follow instructions at &lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/adminguide/delete-domain.html" target="_blank" rel="noopener noreferrer"&gt;Delete domains&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;To delete your Redshift cluster follow steps at &lt;a href="https://docs.aws.amazon.com/redshift/latest/mgmt/rs-mgmt-shutdown-delete-cluster.html" target="_blank" rel="noopener noreferrer"&gt;Shutting down and deleting a cluster&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;By standardizing terminology at publication, organizations can reduce metadata drift and improve discovery reliability. The feature integrates with existing workflows,&amp;nbsp;requiring minimal process changes while helping deliver immediate catalog consistency improvements.&lt;/p&gt; 
&lt;p&gt;By tagging data at publication rather than correcting it later, data teams can spend less time fixing metadata and more time using it. For more information on SageMaker capabilities, see the Amazon SageMaker Catalog&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/autodoc.html" target="_blank" rel="noopener noreferrer"&gt;User Guide.&lt;/a&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;h2&gt;About the authors&lt;/h2&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-29797" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5650-15.png" alt="Ramesh Singh" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Ramesh Singh&lt;/h3&gt; 
  &lt;p&gt;&lt;a target="_blank" href="http://www.linkedin.com/in/ramesh-harisaran-singh" rel="noopener"&gt;Ramesh&lt;/a&gt; is a Senior Product Manager Technical (External Services) at AWS in Seattle, Washington, currently with the Amazon SageMaker team. He is passionate about building high-performance ML/AI and analytics products that help enterprise customers achieve their critical goals using cutting-edge technology.&lt;/p&gt;
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-29797" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5650-16.png" alt="Pradeep Misra" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Pradeep Misra&lt;/h3&gt; 
  &lt;p&gt;&lt;a target="_blank" href="https://www.linkedin.com/in/pradeep-m-326258a/" rel="noopener"&gt;Pradeep&lt;/a&gt; is a Principal Analytics and Applied AI leader at AWS. He is passionate about solving customer challenges using data, analytics, and AI/ML. Outside of work, he likes exploring new places, trying new cuisines, and playing badminton with his family. He also likes doing science experiments, building LEGOs, and watching movies with his daughters.&lt;/p&gt;
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-29797" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5650-17.png" alt="Mohit Dawar" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Mohit Dawar&lt;/h3&gt; 
  &lt;p&gt;&lt;a target="_blank" href="https://www.linkedin.com/in/mohit-dawar-aa727a112/" rel="noopener"&gt;Mohit&lt;/a&gt; is a Senior Software Engineer at Amazon Web Services (AWS) working on Amazon DataZone. Over the past 3 years, he has led efforts around the core metadata catalog, generative AI–powered metadata curation, and lineage visualization. He enjoys working on large-scale distributed systems, experimenting with AI to improve user experience, and building tools that make data governance feel effortless.&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Designing centralized and distributed network connectivity patterns for Amazon OpenSearch Serverless – Part 2</title>
		<link>https://aws.amazon.com/blogs/big-data/designing-centralized-and-distributed-network-connectivity-patterns-for-amazon-opensearch-serverless-part-2/</link>
					
		
		<dc:creator><![CDATA[Ankush Goyal]]></dc:creator>
		<pubDate>Tue, 24 Mar 2026 21:42:53 +0000</pubDate>
				<category><![CDATA[Amazon OpenSearch Service]]></category>
		<category><![CDATA[Amazon Route 53]]></category>
		<category><![CDATA[Amazon VPC]]></category>
		<category><![CDATA[AWS Direct Connect]]></category>
		<category><![CDATA[AWS Site-to-Site VPN]]></category>
		<category><![CDATA[AWS Transit Gateway]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Expert (400)]]></category>
		<guid isPermaLink="false">d52deb2e0cf9a9d7e6395d6688f59186d18059a5</guid>

					<description>(Continued from Part 1) In this post, we show how you can give on-premises clients and spoke account resources private access to OpenSearch Serverless collections distributed across multiple business unit accounts.</description>
										<content:encoded>&lt;p&gt;This post is Part 2 of our two-part series on hybrid multi-account access patterns for &lt;a href="https://aws.amazon.com/opensearch-service/features/serverless/" target="_blank" rel="noopener noreferrer"&gt;Amazon OpenSearch Serverless&lt;/a&gt;. In &lt;a href="https://aws.amazon.com/blogs/big-data/designing-centralized-and-distributed-network-connectivity-patterns-for-amazon-opensearch-serverless-part-1/" target="_blank" rel="noopener noreferrer"&gt;Part 1&lt;/a&gt;, we explored a centralized architecture where a single account hosts multiple OpenSearch Serverless collections and a shared VPC endpoint. This approach works well when a single business unit or team manages collections on behalf of the organization.&lt;/p&gt; 
&lt;p&gt;However, many enterprises have multiple business units that need independent ownership of their OpenSearch Serverless infrastructure. When each business unit wants to manage their own collections, security policies, and VPC endpoints within their own AWS accounts, the centralized model from &lt;a href="https://aws.amazon.com/blogs/big-data/designing-centralized-and-distributed-network-connectivity-patterns-for-amazon-opensearch-serverless-part-1/" target="_blank" rel="noopener noreferrer"&gt;Part 1&lt;/a&gt; no longer fits.&lt;/p&gt; 
&lt;p&gt;In this post, we address this multi-business unit scenario by introducing a pattern where the central networking account manages a custom private hosted zone (PHZ) with CNAME records pointing to each business unit’s VPC endpoint. This approach maintains centralized DNS management and connectivity while giving each business unit full autonomy over their collections and infrastructure.&lt;/p&gt; 
&lt;h2&gt;The challenge with multiple business units&lt;/h2&gt; 
&lt;p&gt;When multiple business units independently manage their own OpenSearch Serverless collections in separate AWS accounts, each account has its own VPC endpoint with its own private hosted zones. These private hosted zones only work within their respective VPCs, creating DNS fragmentation across the organization. Consumers in spoke accounts and on-premises environments can’t resolve collection endpoints in other accounts without additional DNS configuration.&lt;/p&gt; 
&lt;p&gt;Managing individual PHZ associations for each consumer VPC doesn’t scale, and asking each business unit to coordinate DNS with every consumer creates operational overhead. You need a network architecture that gives each team autonomy while keeping DNS management and connectivity centralized.&lt;/p&gt; 
&lt;h2&gt;Solution overview&lt;/h2&gt; 
&lt;p&gt;This architecture solves the problem by centralizing DNS management in the networking account while leaving collection and VPC endpoint ownership with each business unit. The networking account maintains a custom PHZ with CNAME records that map each collection endpoint to the regional DNS name of its corresponding VPC endpoint. This custom PHZ is associated with a &lt;a href="https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/profiles.html" target="_blank" rel="noopener noreferrer"&gt;Route 53 Profile&lt;/a&gt; and shared through &lt;a href="https://docs.aws.amazon.com/ram/latest/userguide/what-is.html" target="_blank" rel="noopener noreferrer"&gt;AWS Resource Access Manager (AWS RAM)&lt;/a&gt; to spoke accounts. On-premises DNS resolution flows through the &lt;a href="https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver.html" target="_blank" rel="noopener noreferrer"&gt;Route 53 Resolver&lt;/a&gt; inbound endpoint in the central networking VPC, which uses the same custom PHZ.&lt;/p&gt; 
&lt;p&gt;We cover two complementary patterns: Pattern 1 for on-premises access to collections across multiple business unit accounts, and Pattern 2 for spoke account access to those same collections. Both patterns rely on the centralized custom PHZ managed by your networking team.&lt;/p&gt; 
&lt;h2&gt;Pattern 1: On-premises access to OpenSearch Serverless collections across multiple business unit accounts&lt;/h2&gt; 
&lt;p&gt;With this pattern, your on-premises clients can privately access OpenSearch Serverless collections hosted across multiple business unit accounts, each with its own VPC endpoint. The following diagram illustrates this multi-business-unit architecture. It shows how on-premises DNS queries are resolved through the custom PHZ in the central networking account and routed to the correct business unit’s VPC endpoint through AWS PrivateLink.&lt;/p&gt; 
&lt;p&gt;&lt;a href="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/19/bdb-5780-part2-1.png" target="_blank" rel="noopener noreferrer"&gt;&lt;img style="margin:10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/19/bdb-5780-part2-1.png"&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;(A)&lt;/strong&gt; The Route 53 Profiles are created in the central networking account and shared through AWS Resource Access Manager (AWS RAM) with the central OpenSearch Serverless account.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;(B) &lt;/strong&gt;The central networking account has a custom PHZ with domain &lt;code&gt;us-east-1.aoss.amazonaws.com&lt;/code&gt; and associated with central networking account VPC and with Route 53 Profiles.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;(C)&lt;/strong&gt; This PHZ contains CNAME records pointing to each business unit’s VPC endpoints.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;(D)&lt;/strong&gt; Each business unit account has Private DNS enabled on its VPC endpoint.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;(E)&lt;/strong&gt; This automatically creates the following PHZs during VPC endpoint creation and associates them with the business unit’s VPC, so DNS resolution works locally within that VPC without depending on the Route 53 Profiles.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;us-east-1.aoss.amazonaws.com&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;us-east-1.opensearch.amazonaws.com&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;us-east-1.aoss-fips.amazonaws.com&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;privatelink.c0X.sgw.iad.prod.aoss.searchservices.aws.dev&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;DNS resolution flow&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Your on-premises client initiates a request to &lt;code&gt;bu-1-collection-id-1.us-east-1.aoss.amazonaws.com&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;The on-premises DNS resolver has a conditional forwarder for &lt;code&gt;us-east-1.aoss.amazonaws.com&lt;/code&gt; and forwards the query over &lt;a href="https://aws.amazon.com/directconnect/" target="_blank" rel="noopener noreferrer"&gt;AWS Direct Connect&lt;/a&gt; or &lt;a href="https://aws.amazon.com/vpn/site-to-site-vpn/" target="_blank" rel="noopener noreferrer"&gt;AWS Site-to-Site VPN&lt;/a&gt; to the Route 53 Resolver inbound endpoint IPs in the central networking VPC.&lt;/li&gt; 
 &lt;li&gt;The inbound Resolver endpoint passes the query to the Route 53 VPC Resolver in the central networking VPC.&lt;/li&gt; 
 &lt;li&gt;The VPC Resolver finds the custom PHZ (&lt;code&gt;bu-1-collection-id-1.us-east-1.aoss.amazonaws.com&lt;/code&gt;) associated with the central networking VPC. The CNAME record for &lt;code&gt;bu-1-collection-id-1.us-east-1.aoss.amazonaws.com&lt;/code&gt; resolves to the regional DNS name of BU1’s VPC endpoint (for example, &lt;code&gt;vpce-1234567890abcdefghi.a2oselk.vpce-svc-0c3ebf9a1a3ad247b.us-east-1.vpce.amazonaws.com&lt;/code&gt;).&lt;/li&gt; 
 &lt;li&gt;The VPC Resolver then resolves the VPC endpoint regional DNS name to its elastic network interfaces (ENIs) private IP addresses.&lt;/li&gt; 
 &lt;li&gt;The traffic reaches BU1’s VPC endpoint elastic network interfaces (ENIs) through private network connectivity because the on-premises client connects over AWS Direct Connect or AWS Site-to-Site VPN through &lt;a href="https://aws.amazon.com/transit-gateway/" target="_blank" rel="noopener noreferrer"&gt;AWS Transit Gateway&lt;/a&gt; or &lt;a href="https://aws.amazon.com/cloud-wan/" target="_blank" rel="noopener noreferrer"&gt;AWS Cloud WAN&lt;/a&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Data flow&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Your on-premises client sends an HTTPS request to the resolved IP address with the TLS Server Name Indication (SNI) header set to &lt;code&gt;bu-1-collection-id-1.us-east-1.aoss.amazonaws.com&lt;/code&gt;, over AWS Direct Connect or AWS Site-to-Site VPN through AWS Transit Gateway or AWS Cloud WAN.&lt;/li&gt; 
 &lt;li&gt;Traffic reaches the VPC endpoint ENIs in BU1’s OpenSearch Serverless VPC.&lt;/li&gt; 
 &lt;li&gt;The VPC endpoint forwards the request to the OpenSearch Serverless service, which inspects the hostname and routes to BU1 Collection 1.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;To access a collection in BU2, your client follows the same flow using &lt;code&gt;bu-2-collection-id-1.us-east-1.aoss.amazonaws.com&lt;/code&gt;. The custom PHZ contains a separate CNAME record pointing to BU2’s VPC endpoint, and the OpenSearch Serverless service routes to the correct collection based on the hostname.&lt;/p&gt; 
&lt;h2&gt;Pattern 2: Spoke account access to OpenSearch Serverless collections across multiple business unit accounts&lt;/h2&gt; 
&lt;p&gt;While Pattern 1 addresses on-premises access, you might also need to provide access from compute resources and distributed applications in spoke accounts to OpenSearch Serverless collections across multiple business unit accounts. With this pattern, compute resources in spoke account VPCs can privately access OpenSearch Serverless collections across multiple business unit accounts through the centralized private hosted zone (PHZ) in the networking account.&lt;/p&gt; 
&lt;p&gt;In the following example, we use an &lt;a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html" target="_blank" rel="noopener noreferrer"&gt;Amazon Elastic Compute Cloud (Amazon EC2)&lt;/a&gt; instance as a compute resource to illustrate the pattern. However, the same approach applies to any compute resource within the spoke VPC. The following diagram illustrates this multi-business-unit, multi-spoke architecture, showing how spoke VPCs resolve DNS through the shared Route 53 Profile and custom PHZ, then route traffic to the correct business unit’s OpenSearch Serverless collections through AWS PrivateLink.&lt;/p&gt; 
&lt;p&gt;&lt;a href="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/19/bdb-5780-part2-2.png" target="_blank" rel="noopener noreferrer"&gt;&lt;img style="margin:10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/19/bdb-5780-part2-2.png"&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;(A)&lt;/strong&gt; The Route 53 Profiles, created in the central networking account, are shared through AWS RAM with all spoke accounts and with the central OpenSearch Serverless account.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;(B) &lt;/strong&gt;The central networking account has a custom PHZ with domain us-east-1.aoss.amazonaws.com and associated with central networking account VPC and with Route 53 Profiles.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;(C)&lt;/strong&gt; This PHZ contains CNAME records pointing to each business unit’s VPC endpoints.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;(D)&lt;/strong&gt; Each business unit account has Private DNS enabled on its VPC endpoint.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;(E)&lt;/strong&gt; This automatically creates the following PHZs during VPC endpoint creation and associates them with the business unit’s VPC, so DNS resolution works locally within that VPC without depending on the Route 53 Profiles.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;us-east-1.aoss.amazonaws.com&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;us-east-1.opensearch.amazonaws.com&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;us-east-1.aoss-fips.amazonaws.com&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;privatelink.c0X.sgw.iad.prod.aoss.searchservices.aws.dev&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;DNS resolution flow&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;An Amazon EC2 instance in BU1 Spoke VPC 1 initiates a request to &lt;code&gt;bu-1-collection-id-1.us-east-1.aoss.amazonaws.com&lt;/code&gt; and sends a DNS query to the Route 53 VPC Resolver.&lt;/li&gt; 
 &lt;li&gt;The VPC Resolver finds the Route 53 Profiles associated with the spoke VPC.&lt;/li&gt; 
 &lt;li&gt;The Profiles reference the custom PHZ (&lt;code&gt;us-east-1.aoss.amazonaws.com&lt;/code&gt;) managed in the central networking account. The CNAME record for &lt;code&gt;bu-1-collection-id-1.us-east-1.aoss.amazonaws.com&lt;/code&gt; resolves to the regional DNS name of BU1’s VPC endpoint.&lt;/li&gt; 
 &lt;li&gt;The VPC Resolver then resolves the VPC endpoint regional DNS name to its elastic network interfaces (ENIs) private IP addresses.&lt;/li&gt; 
 &lt;li&gt;Traffic reaches the VPC endpoint ENIs through private network connectivity because the spoke VPC connects to BU1’s VPC through AWS Transit Gateway or AWS Cloud WAN.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Data flow&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Your Amazon EC2 instance sends an HTTPS request to the resolved IP address with the TLS SNI header set to &lt;code&gt;bu-1-collection-id-1.us-east-1.aoss.amazonaws.com&lt;/code&gt;, routed through AWS Transit Gateway or AWS Cloud WAN to BU1’s OpenSearch Serverless VPC.&lt;/li&gt; 
 &lt;li&gt;The request arrives at the VPC endpoint ENIs in BU1’s OpenSearch Serverless VPC.&lt;/li&gt; 
 &lt;li&gt;The VPC endpoint forwards the request to the OpenSearch Serverless service, which inspects the hostname and routes to BU1 Collection 1.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;To access a collection in BU2, the same flow applies using &lt;code&gt;bu-2-collection-id-1.us-east-1.aoss.amazonaws.com&lt;/code&gt;. The custom PHZ resolves to BU2’s VPC endpoint, and routes traffic through the transit gateway to BU2’s VPC. The same applies to resources in other spoke accounts with the Route 53 Profiles associated.&lt;/p&gt; 
&lt;h3&gt;Custom PHZ record structure&lt;/h3&gt; 
&lt;p&gt;The custom PHZ in the central networking account uses the &lt;code&gt;domain us-east-1.aoss.amazonaws.com&lt;/code&gt; and contains CNAME records that map each collection endpoint to the regional DNS name of its corresponding VPC endpoint. Note that collections within the same business unit account share the same VPC endpoint, so their CNAME records point to the same regional DNS name. Collections in different business unit accounts point to different VPC endpoints.&lt;/p&gt; 
&lt;h3&gt;Custom PHZ management&lt;/h3&gt; 
&lt;p&gt;Unlike &lt;a href="https://aws.amazon.com/blogs/big-data/designing-centralized-and-distributed-network-connectivity-patterns-for-amazon-opensearch-serverless-part-1/" target="_blank" rel="noopener noreferrer"&gt;Part 1&lt;/a&gt;, where the auto-created PHZs from the VPC endpoint handle DNS resolution, this pattern requires your networking team to manually maintain the custom PHZ. When a business unit adds a new collection, the networking team must add a corresponding CNAME record to the custom PHZ.&lt;/p&gt; 
&lt;h2&gt;Cost considerations&lt;/h2&gt; 
&lt;p&gt;The architecture patterns described in this post use several AWS services that can contribute to your overall costs, including Amazon Route 53 (hosted zones, DNS queries, and Resolver endpoints), and Route 53 Profiles. We recommend reviewing the official AWS pricing pages for the most current rates:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/route53/pricing/" target="_blank" rel="noopener noreferrer"&gt;Amazon Route 53 Pricing&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/privatelink/pricing/" target="_blank" rel="noopener noreferrer"&gt;AWS PrivateLink Pricing&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For a full cost estimate tailored to your workload, use the &lt;a href="https://calculator.aws/" target="_blank" rel="noopener noreferrer"&gt;AWS Pricing Calculator&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;In this post, we showed how you can give on-premises clients and spoke account resources private access to OpenSearch Serverless collections distributed across multiple business unit accounts. By centralizing DNS management through a custom PHZ in the networking account and sharing it through Route 53 Profiles, you avoid coordinating PHZ associations across accounts while giving each business unit full ownership of their collections and VPC endpoints.&lt;/p&gt; 
&lt;p&gt;Combined with &lt;a href="https://aws.amazon.com/blogs/big-data/designing-centralized-and-distributed-network-connectivity-patterns-for-amazon-opensearch-serverless-part-1/" target="_blank" rel="noopener noreferrer"&gt;Part 1&lt;/a&gt;, you now have two architectural approaches for hybrid multi-account access to OpenSearch Serverless: a centralized model where one account owns all collections and a shared VPC endpoint, and a distributed model where multiple business units each manage their own collections and VPC endpoints. Choose the centralized model when a single team manages collections on behalf of the organization. Choose the distributed model when business units need independent ownership of their OpenSearch Serverless infrastructure.&lt;/p&gt; 
&lt;p&gt;For additional details, refer to the &lt;a href="https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-vpc.html" target="_blank" rel="noopener noreferrer"&gt;Amazon OpenSearch Serverless VPC endpoint documentation&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/profiles.html" target="_blank" rel="noopener noreferrer"&gt;Route 53 Profiles documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;hr style="width: 80%"&gt; 
&lt;h2&gt;About the authors&lt;/h2&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="size-full wp-image-29797" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/19/bdb-5780-goyalaws.jpg" alt="Ankush Goyal" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Ankush Goyal&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/goyalaws/" target="_blank" rel="noopener"&gt;Ankush&lt;/a&gt; is a Senior Technical Account Manager at AWS Enterprise Support, specializing in helping customers in the travel and hospitality industries optimize their cloud infrastructure. With over 20 years of IT experience, he focuses on leveraging AWS networking services to drive operational efficiency and cloud adoption. Ankush is passionate about delivering impactful solutions and enabling clients to streamline their cloud operations. &lt;/p&gt;
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="size-full wp-image-29797" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/19/bdb-5780-salmanah.jpg" alt="author name" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Salman Ahmed&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/salman-ahmed-aws/" target="_blank" rel="noopener"&gt;Salman&lt;/a&gt; is a Senior Technical Account Manager at AWS. He specializes in guiding customers through the design, implementation, and support of AWS solutions. Combining his networking expertise with a drive to explore new technologies, he helps organizations successfully navigate their cloud journey. Outside of work, he enjoys photography, traveling, and watching his favorite sports teams. &lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Designing centralized and distributed network connectivity patterns for Amazon OpenSearch Serverless – Part 1</title>
		<link>https://aws.amazon.com/blogs/big-data/designing-centralized-and-distributed-network-connectivity-patterns-for-amazon-opensearch-serverless-part-1/</link>
					
		
		<dc:creator><![CDATA[Ankush Goyal]]></dc:creator>
		<pubDate>Tue, 24 Mar 2026 21:42:17 +0000</pubDate>
				<category><![CDATA[Amazon OpenSearch Service]]></category>
		<category><![CDATA[Amazon Route 53]]></category>
		<category><![CDATA[Amazon VPC]]></category>
		<category><![CDATA[AWS Direct Connect]]></category>
		<category><![CDATA[AWS PrivateLink]]></category>
		<category><![CDATA[AWS Site-to-Site VPN]]></category>
		<category><![CDATA[AWS Transit Gateway]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Expert (400)]]></category>
		<guid isPermaLink="false">8869f33f1cc9a2d69109788a56d4f1cc68dbb778</guid>

					<description>In this post, we show how organizations can provide secure, private access to multiple Amazon OpenSearch Serverless collections from both on-premises environments and distributed AWS accounts using a single centralized interface VPC endpoint and Route 53 Profiles.</description>
										<content:encoded>&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html" target="_blank" rel="noopener noreferrer"&gt;Amazon OpenSearch Serverless&lt;/a&gt; is a fully managed, serverless option for &lt;a href="https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html" target="_blank" rel="noopener noreferrer"&gt;Amazon OpenSearch Service&lt;/a&gt; that removes the operational complexity of provisioning, configuring, and tuning OpenSearch clusters. When you run OpenSearch Serverless collections in a central account and need secure, private access from both on-premises environments and multiple AWS accounts, network architecture becomes critical. In this post, we explore two patterns to help you achieve this connectivity securely.&lt;/p&gt; 
&lt;h2&gt;Solution overview&lt;/h2&gt; 
&lt;p&gt;Working with customers implementing OpenSearch Serverless, we published blog posts addressing various network connectivity patterns to meet their evolving requirements:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;In &lt;a href="https://aws.amazon.com/blogs/big-data/network-connectivity-patterns-for-amazon-opensearch-serverless/" target="_blank" rel="noopener noreferrer"&gt;Network connectivity patterns for Amazon OpenSearch Serverless&lt;/a&gt;, we covered foundational patterns such as public access via internet gateway, private access through &lt;a href="https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-vpc.html" target="_blank" rel="noopener noreferrer"&gt;interface VPC endpoints&lt;/a&gt;, multi-VPC connectivity, and on-premises access using Route 53 VPC Resolver inbound endpoints.&lt;/li&gt; 
 &lt;li&gt;In &lt;a href="https://aws.amazon.com/blogs/big-data/designing-centralized-and-distributed-network-connectivity-patterns-for-amazon-opensearch-serverless/" target="_blank" rel="noopener noreferrer"&gt;Designing centralized and distributed network connectivity patterns for Amazon OpenSearch Serverless&lt;/a&gt;, we introduced two advanced multi-account patterns: a centralized interface VPC endpoint model using &lt;a href="https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/profiles.html" target="_blank" rel="noopener noreferrer"&gt;Amazon Route 53 Profiles&lt;/a&gt; and a distributed endpoint model with centralized DNS management through a self-managed private hosted zone (PHZ).&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;In this post, we build on those patterns to address an additional enterprise requirement. When you manage many OpenSearch Serverless collections centrally but need access from multiple accounts and on-premises, you face several key challenges:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Coordinating VPC endpoints across accounts:&lt;/strong&gt; managing endpoint provisioning and lifecycle across many consumer accounts adds operational overhead&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Managing DNS configurations for each consumer:&lt;/strong&gt; each new account or on-premises environment requires its own DNS setup, increasing complexity&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Separating networking responsibilities from application ownership:&lt;/strong&gt; without clear boundaries, networking and application teams become tightly coupled, slowing down both&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;This architecture solves these challenges with a clear separation of responsibilities. The central networking account shares Route 53 Profiles to manage DNS propagation across spoke accounts. The OpenSearch Serverless account owner maintains full control over their VPC endpoint and the associated private hosted zones (PHZs). Application owners retain autonomy over DNS configuration and collection management.&lt;/p&gt; 
&lt;p&gt;A single VPC endpoint handles multiple OpenSearch Serverless collections in an AWS Region, which reduces complexity and cost. Your networking team manages connectivity infrastructure while your application teams independently manage their OpenSearch Serverless collections, data access policies, and collection-specific DNS configurations. This gives you connectivity from on-premises networks (through &lt;a href="https://aws.amazon.com/directconnect/" target="_blank" rel="noopener noreferrer"&gt;AWS Direct Connect&lt;/a&gt; or &lt;a href="https://aws.amazon.com/vpn/site-to-site-vpn/" target="_blank" rel="noopener noreferrer"&gt;AWS Site-to-Site VPN&lt;/a&gt;) and from compute resources across multiple AWS accounts through a unified network path.&lt;/p&gt; 
&lt;p&gt;This separation means that your network administrators and application teams can work independently. The result is a governance model that scales with your organization. We cover two complementary patterns that together give you complete hybrid access coverage, Pattern 1 for on-premises access and Pattern 2 for multi-account access, both using centralized interface VPC endpoints and Route 53 Profiles.&lt;/p&gt; 
&lt;p&gt;Before proceeding, you should be familiar with &lt;a href="https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-vpc.html" target="_blank" rel="noopener noreferrer"&gt;OpenSearch Serverless interface VPC endpoint DNS resolution&lt;/a&gt;. When creating an OpenSearch Serverless interface VPC endpoint, AWS automatically provisions four private hosted zones. The zones are three visible private hosted zones (for collections, dashboards, and FIPS endpoints) and one hidden internal private hosted zone that work together to resolve collection endpoints to private IP addresses. For more details on this DNS resolution mechanism, customers can review our previous &lt;a href="https://aws.amazon.com/blogs/big-data/designing-centralized-and-distributed-network-connectivity-patterns-for-amazon-opensearch-serverless" target="_blank" rel="noopener noreferrer"&gt;blog post&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Pattern 1: Accessing multiple OpenSearch Serverless collections from on-premises through a centralized VPC endpoint and Route 53 Profiles in a multi-account architecture&lt;/h2&gt; 
&lt;p&gt;The architecture spans three components:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;A central OpenSearch Serverless account that hosts the collections and interface VPC endpoint.&lt;/li&gt; 
 &lt;li&gt;A central networking account that owns the Route 53 Profiles and Inbound Resolver.&lt;/li&gt; 
 &lt;li&gt;An on-premises environment connected using AWS Direct Connect or AWS Site-to-Site VPN.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The following diagram illustrates the architecture across these three components. It shows how DNS queries from on-premises clients are resolved through the Route 53 Profile and Inbound Resolver, and how data traffic reaches the OpenSearch Serverless collections using &lt;a href="https://aws.amazon.com/privatelink/" target="_blank" rel="noopener noreferrer"&gt;AWS PrivateLink&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;a href="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/19/bdb-5780-part1-1.png" target="_blank" rel="noopener noreferrer"&gt;&lt;img style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/19/bdb-5780-part1-1.png"&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;(A)&lt;/strong&gt; The Route 53 Profiles are created in the central networking account and shared through &lt;a href="https://docs.aws.amazon.com/ram/latest/userguide/what-is.html" target="_blank" rel="noopener noreferrer"&gt;AWS Resource Access Manager (AWS RAM)&lt;/a&gt; with the central OpenSearch Serverless account. The central OpenSearch Serverless account associates the PHZs and interface VPC endpoint association with the shared Route 53 Profiles because that’s needed for end-to-end private DNS resolution.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;(B)&lt;/strong&gt; The central AOSS VPC contains an interface VPC endpoint for OpenSearch Serverless with Private DNS enabled. There are four Private Hosted Zones (PHZs):&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;us-east-1.aoss.amazonaws.com&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;us-east-1.opensearch.amazonaws.com&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;us-east-1.aoss-fips.amazonaws.com&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;privatelink.c0X.sgw.iad.prod.aoss.searchservices.aws.dev&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;(C)&lt;/strong&gt; The first three PHZs must be manually associated with the Route 53 Profile.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;(D)&lt;/strong&gt; The fourth is automatically associated when the VPC endpoint is associated with the profile.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;(E)&lt;/strong&gt; On the on-premises side, the DNS resolver is configured with conditional forwarding for &lt;code&gt;us-east-1.aoss.amazonaws.com&lt;/code&gt;, directing queries to the Route 53 Resolver Inbound Endpoint in the central networking account.&lt;/p&gt; 
&lt;h3&gt;DNS resolution flow&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Your on-premises client initiates a request to &lt;code&gt;collection-id-1.us-east-1.aoss.amazonaws.com&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;The on-premises DNS resolver has a conditional forwarder for &lt;code&gt;us-east-1.aoss.amazonaws.com&lt;/code&gt; and forwards the query over AWS Direct Connect or AWS Site-to-Site VPN to the Route 53 Resolver inbound endpoint IPs in the central networking VPC.&lt;/li&gt; 
 &lt;li&gt;The inbound resolver receives the query and passes it to the Route 53 VPC Resolver.&lt;/li&gt; 
 &lt;li&gt;The VPC Resolver checks the Route 53 Profiles associated with the central networking VPC. The Profiles provide access to the visible and hidden PHZs from the central OpenSearch Serverless VPC.&lt;/li&gt; 
 &lt;li&gt;The VPC Resolver uses the visible PHZ to match the wildcard CNAME &lt;code&gt;*.us-east-1.aoss.amazonaws.com&lt;/code&gt; to the interface VPC endpoint (VPCE) DNS name. It then uses the hidden PHZ to resolve the VPCE DNS name to the private &lt;a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html" target="_blank" rel="noopener noreferrer"&gt;elastic network interface&lt;/a&gt; (ENI) IP addresses of the interface VPC endpoint in the central OpenSearch Serverless VPC.&lt;/li&gt; 
 &lt;li&gt;The private ENI IP addresses are returned through the inbound resolver endpoint to the on-premises DNS resolver and back to the on-premises client.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Data flow&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;The on-premises client sends an HTTPS request to the resolved private ENI IP address with the TLS Server Name Indication (SNI) header set to &lt;code&gt;collection-id-1.us-east-1.aoss.amazonaws.com&lt;/code&gt;, over AWS Direct Connect or AWS Site-to-Site VPN through &lt;a href="https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html" target="_blank" rel="noopener noreferrer"&gt;AWS Transit Gateway&lt;/a&gt; or &lt;a href="https://docs.aws.amazon.com/network-manager/latest/cloudwan/what-is-cloudwan.html" target="_blank" rel="noopener noreferrer"&gt;AWS Cloud WAN&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Traffic reaches the interface VPC endpoint ENIs in the central OpenSearch Serverless VPC.&lt;/li&gt; 
 &lt;li&gt;The interface VPC endpoint forwards the request to the OpenSearch Serverless service, which routes to Collection 1.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;To access Collection 2, the client follows the same flow using &lt;code&gt;collection-id-2.us-east-1.aoss.amazonaws.com&lt;/code&gt;. The wildcard DNS resolves to the same interface VPC endpoint, and the OpenSearch Serverless service routes to the correct collection based on the hostname.&lt;/p&gt; 
&lt;h2&gt;Pattern 2: Accessing multiple OpenSearch Serverless collections from spoke accounts using a centralized VPC endpoint and Route 53 Profiles&lt;/h2&gt; 
&lt;p&gt;While Pattern 1 addresses on-premises access, you might also need to provide access from compute resources and distributed applications across multiple AWS accounts. With this pattern, any compute resource running within spoke account VPCs can privately access multiple OpenSearch Serverless collections hosted in a central OpenSearch Serverless VPC through a single shared interface VPC endpoint.&lt;/p&gt; 
&lt;p&gt;In the following example, we use an &lt;a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html" target="_blank" rel="noopener noreferrer"&gt;Amazon Elastic Compute Cloud (Amazon EC2)&lt;/a&gt; instance as a compute resource to illustrate the pattern. However, the same approach applies to any compute resource within the spoke VPC.&lt;/p&gt; 
&lt;p&gt;The following diagram illustrates this multi-account architecture, showing how spoke account VPCs resolve DNS and route data traffic to the central OpenSearch Serverless collections through the shared Route 53 Profile and AWS PrivateLink, alongside the on-premises access path from Pattern 1.&lt;/p&gt; 
&lt;p&gt;&lt;a href="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/bdb-5780-part1-2.png" target="_blank" rel="noopener noreferrer"&gt;&lt;img style="margin: 10px 0px 10px 0px;border: 1px solid #cccccc" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/20/bdb-5780-part1-2.png"&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;(A)&lt;/strong&gt; The Route 53 Profiles, created in the central networking account, are shared via AWS RAM with both the OpenSearch Serverless account and the spoke accounts. The OpenSearch Serverless account associates its interface VPC endpoint and private hosted zones (PHZs) with the Profiles, while each spoke account associates the Profiles with its VPC. Spoke VPCs get full DNS resolution for OpenSearch Serverless collection endpoints without requiring their own interface VPC endpoints, PHZs, or manual DNS configuration.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;(B)&lt;/strong&gt; The central AOSS VPC contains an interface VPC endpoint for OpenSearch Serverless with Private DNS enabled. There are four Private Hosted Zones (PHZs):&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;us-east-1.aoss.amazonaws.com&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;us-east-1.opensearch.amazonaws.com&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;us-east-1.aoss-fips.amazonaws.com&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;privatelink.c0X.sgw.iad.prod.aoss.searchservices.aws.dev&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;(C)&lt;/strong&gt; The first three PHZs must be manually associated with the Route 53 Profile.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;(D)&lt;/strong&gt; The fourth is automatically associated when the VPC endpoint is associated with the profile.&lt;/p&gt; 
&lt;h3&gt;DNS resolution flow&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;An Amazon EC2 instance in Spoke VPC 1 initiates a request to &lt;code&gt;collection-id-1.us-east-1.aoss.amazonaws.com&lt;/code&gt; and sends a DNS query to the Route 53 VPC Resolver.&lt;/li&gt; 
 &lt;li&gt;The VPC Resolver finds the Route 53 Profiles associated with the spoke VPC, which carries the PHZs from the central OpenSearch Serverless account.&lt;/li&gt; 
 &lt;li&gt;The visible PHZ matches the wildcard CNAME &lt;code&gt;*.us-east-1.aoss.amazonaws.com&lt;/code&gt; to the VPCE DNS name. The hidden PHZ resolves the VPCE DNS name to the private ENI IP addresses of the interface VPC endpoint in the central OpenSearch Serverless VPC.&lt;/li&gt; 
 &lt;li&gt;Route 53 returns the private ENI IP addresses to the Amazon EC2 instance.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Data flow&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Your Amazon EC2 instance sends an HTTPS request to the resolved private ENI IP address with the TLS SNI header set to &lt;code&gt;collection-id-1.us-east-1.aoss.amazonaws.com&lt;/code&gt;. This is routed through AWS Transit Gateway or AWS Cloud WAN to the central OpenSearch Serverless VPC.&lt;/li&gt; 
 &lt;li&gt;The request arrives at the interface VPC endpoint ENIs in the central OpenSearch Serverless VPC.&lt;/li&gt; 
 &lt;li&gt;The interface VPC endpoint forwards the request to the OpenSearch Serverless service, which routes to Collection 1.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;To access Collection 2, the same flow applies using &lt;code&gt;collection-id-2.us-east-1.aoss.amazonaws.com&lt;/code&gt;. The same applies to resources in Spoke Account 2 or other spoke accounts with the Route 53 Profiles associated.&lt;/p&gt; 
&lt;h2&gt;AWS RAM Permission Configuration for Resource Association&lt;/h2&gt; 
&lt;p&gt;When the central networking account shares the Route 53 Profiles through AWS RAM, the default AWS managed permissions policy (&lt;code&gt;AWSRAMPermissionRoute53ProfileAllowAssociationActions&lt;/code&gt;) only grants actions for associating and disassociating the Profile with VPCs, viewing Profiles details, and listing associations. It does not include the &lt;code&gt;route53profiles:AssociateResourceToProfile&lt;/code&gt; or &lt;code&gt;route53profiles:DisassociateResourceFromProfile&lt;/code&gt; actions required for the OpenSearch Serverless account to associate its interface VPC endpoint and PHZs with the shared Profiles.&lt;/p&gt; 
&lt;p&gt;To enable this, the central networking account must create a custom managed permission in AWS RAM with the following actions:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;route53profiles:AssociateProfile&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;route53profiles:AssociateResourceToProfile&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;route53profiles:DisassociateProfile&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;route53profiles:DisassociateResourceFromProfile&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;route53profiles:GetProfile&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;route53profiles:GetProfileResourceAssociation&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;route53profiles:ListProfileAssociations&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;route53profiles:ListProfileResourceAssociations&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;route53profiles:ListProfiles&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;This custom permission must be attached to the RAM resource share before the central OpenSearch Serverless account can associate its PHZs and interface VPC endpoint with the Profiles.&lt;/p&gt; 
&lt;h2&gt;Cost considerations&lt;/h2&gt; 
&lt;p&gt;The architecture patterns described in this post use several AWS services that may contribute to your overall costs, including Amazon Route 53 (hosted zones, DNS queries, and Resolver endpoints), and Route 53 Profiles. We recommend reviewing the official AWS pricing pages for the most current rates:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/route53/pricing/" target="_blank" rel="noopener noreferrer"&gt;Amazon Route 53 Pricing&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/privatelink/pricing/" target="_blank" rel="noopener noreferrer"&gt;AWS PrivateLink Pricing&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For a full cost estimate tailored to your workload, use the &lt;a href="https://calculator.aws/" target="_blank" rel="noopener noreferrer"&gt;AWS Pricing Calculator&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;In this post, we showed how organizations can provide secure, private access to multiple OpenSearch Serverless collections from both on-premises environments and distributed AWS accounts using a single centralized interface VPC endpoint and Route 53 Profiles. This architecture centralizes OpenSearch Serverless collections and network infrastructure in a dedicated account, using Route 53 Profiles to propagate DNS across accounts. This eliminates per-account VPC endpoints, manual PHZ associations, and custom DNS configuration in spoke accounts.&lt;/p&gt; 
&lt;p&gt;This pattern is a good fit when a single team or business unit manages OpenSearch Serverless collections centrally. However, many enterprises have business units that need to independently manage their own OpenSearch Serverless collections in separate AWS accounts, each with their own interface VPC endpoints, security policies, and collection lifecycle. In &lt;a href="https://aws.amazon.com/blogs/big-data/designing-centralized-and-distributed-network-connectivity-patterns-for-amazon-opensearch-serverless-part-2/" target="_blank" rel="noopener noreferrer"&gt;Part 2&lt;/a&gt;, we explore how the architecture changes to support this distributed ownership model, where each business unit runs OpenSearch Serverless in their own account while still relying on centralized network connectivity and DNS management through Route 53 Profiles. We will cover how DNS resolution and the Route 53 Profiles configuration adapt when interface VPC endpoints and collections are spread across multiple accounts.&lt;/p&gt; 
&lt;p&gt;For additional details, refer to the &lt;a href="https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-vpc.html" target="_blank" rel="noopener noreferrer"&gt;OpenSearch Serverless VPC endpoint documentation&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/profiles.html" target="_blank" rel="noopener noreferrer"&gt;Route 53 Profiles documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;hr style="width: 80%"&gt; 
&lt;h2&gt;About the authors&lt;/h2&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="size-full wp-image-29797" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/19/bdb-5780-goyalaws.jpg" alt="Ankush Goyal" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Ankush Goyal&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/goyalaws/" target="_blank" rel="noopener"&gt;Ankush&lt;/a&gt; is a Senior Technical Account Manager at AWS Enterprise Support, specializing in helping customers in the travel and hospitality industries optimize their cloud infrastructure. With over 20 years of IT experience, he focuses on leveraging AWS networking services to drive operational efficiency and cloud adoption. Ankush is passionate about delivering impactful solutions and enabling clients to streamline their cloud operations. &lt;/p&gt;
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="size-full wp-image-29797" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/19/bdb-5780-salmanah.jpg" alt="author name" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Salman Ahmed&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/salman-ahmed-aws/" target="_blank" rel="noopener"&gt;Salman&lt;/a&gt; is a Senior Technical Account Manager at AWS. He specializes in guiding customers through the design, implementation, and support of AWS solutions. Combining his networking expertise with a drive to explore new technologies, he helps organizations successfully navigate their cloud journey. Outside of work, he enjoys photography, traveling, and watching his favorite sports teams. &lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Extract data from Amazon Aurora MySQL to Amazon S3 Tables in Apache Iceberg format</title>
		<link>https://aws.amazon.com/blogs/big-data/extract-data-from-amazon-aurora-mysql-to-amazon-s3-tables-in-apache-iceberg-format/</link>
					
		
		<dc:creator><![CDATA[Kunal Ghosh]]></dc:creator>
		<pubDate>Mon, 23 Mar 2026 18:38:10 +0000</pubDate>
				<category><![CDATA[Amazon Aurora]]></category>
		<category><![CDATA[Amazon S3 Tables]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[AWS Glue]]></category>
		<category><![CDATA[Expert (400)]]></category>
		<category><![CDATA[MySQL compatible]]></category>
		<category><![CDATA[Technical How-to]]></category>
		<guid isPermaLink="false">380c85517808fda22046fbd892bfd4af89a3089e</guid>

					<description>In this post, you learn how to set up an automated, end-to-end solution that extracts tables from Amazon Aurora MySQL Serverless v2 and writes them to Amazon S3 Tables in Apache Iceberg format using AWS Glue.</description>
										<content:encoded>&lt;p&gt;If you manage data in &lt;a href="https://www.amazonaws.cn/en/rds/aurora/mysql-features/" target="_blank" rel="noopener noreferrer"&gt;Amazon Aurora MySQL-Compatible Edition&lt;/a&gt; and want to make it available for analytics, machine learning (ML), or cross-service querying in a modern lakehouse format, you’re not alone.&lt;/p&gt; 
&lt;p&gt;Organizations often need to run analytics, build ML models, or join data across multiple sources. These are examples of workloads that can be resource-intensive and impractical to run directly against a transactional database. By extracting your Aurora MySQL data into &lt;a href="https://aws.amazon.com/s3/features/tables/" target="_blank" rel="noopener noreferrer"&gt;Amazon S3 Tables&lt;/a&gt; in &lt;a href="https://iceberg.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache Iceberg&lt;/a&gt; format, you can offload analytical queries from your production database without impacting its performance, while storing data in a fully managed Iceberg table store optimized for analytics. Built on the open Apache Iceberg standard, Amazon Simple Storage Service (Amazon S3) Table data is queryable from engines like &lt;a href="https://aws.amazon.com/athena/" target="_blank" rel="noopener noreferrer"&gt;Amazon Athena&lt;/a&gt;, &lt;a href="https://docs.aws.amazon.com/redshift/latest/dg/c-getting-started-using-spectrum.html" target="_blank" rel="noopener noreferrer"&gt;Amazon Redshift Spectrum&lt;/a&gt;, and &lt;a href="https://aws.amazon.com/emr/features/spark/" target="_blank" rel="noopener noreferrer"&gt;Apache Spark&lt;/a&gt; without additional data copies. You can also combine relational data with other datasets already in your data lake, enabling richer cross-domain insights.&lt;/p&gt; 
&lt;h2&gt;Apache Iceberg and Amazon S3 Tables&lt;/h2&gt; 
&lt;p&gt;&lt;a href="https://iceberg.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache Iceberg&lt;/a&gt; is a widely adopted open table format that offers Atomicity, Consistency, Isolation, Durability (ACID) transactions, schema evolution, and time travel capabilities. It enables multiple engines to work concurrently on the same dataset, making it a popular choice for building open lakehouse architectures.&lt;/p&gt; 
&lt;p&gt;&lt;a href="https://aws.amazon.com/s3/features/tables/" target="_blank" rel="noopener noreferrer"&gt;Amazon S3 Tables&lt;/a&gt; is a purpose-built, fully managed Apache Iceberg table store designed for analytics workloads. It delivers up to 3x faster query performance and up to 10x more transactions per second compared to self-managed Iceberg tables. It also automatically compacts data and removes unreferenced files to optimize storage and performance.&lt;/p&gt; 
&lt;p&gt;In this post, you learn how to set up an automated, end-to-end solution that extracts tables from &lt;a href="https://aws.amazon.com/rds/aurora/" target="_blank" rel="noopener noreferrer"&gt;Amazon Aurora&lt;/a&gt; MySQL Serverless v2 and writes them to Amazon S3 Tables in Apache Iceberg format using &lt;a href="https://aws.amazon.com/glue/" target="_blank" rel="noopener noreferrer"&gt;AWS Glue&lt;/a&gt;. The entire infrastructure is deployed using a single &lt;a href="https://aws.amazon.com/cloudformation/" target="_blank" rel="noopener noreferrer"&gt;AWS CloudFormation&lt;/a&gt; stack.&lt;/p&gt; 
&lt;h2&gt;Requirements&lt;/h2&gt; 
&lt;p&gt;AWS offers zero-ETL integrations&amp;nbsp;from&amp;nbsp;Amazon Aurora&amp;nbsp;to&amp;nbsp;&lt;a href="https://aws.amazon.com/redshift/" target="_blank" rel="noopener noreferrer"&gt;Amazon Redshift&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="https://aws.amazon.com/pm/sagemaker/" target="_blank" rel="noopener noreferrer"&gt;Amazon SageMaker AI&lt;/a&gt;,&amp;nbsp;enabling seamless data flow for analytics and machine learning workloads.&lt;/p&gt; 
&lt;p&gt;However, there&amp;nbsp;isn’t&amp;nbsp;yet a native zero-ETL integration between&amp;nbsp;Amazon Aurora&amp;nbsp;and&amp;nbsp;Amazon S3 Tables. This means&amp;nbsp;that organizations looking to&amp;nbsp;use&amp;nbsp;Amazon S3 Tables&amp;nbsp;for their&amp;nbsp;Lakehouse&amp;nbsp;architecture currently face several requirements:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Setting up ETL pipelines to extract data from&amp;nbsp;Amazon Aurora&amp;nbsp;and transform it into&amp;nbsp;Apache Iceberg&amp;nbsp;format&lt;/li&gt; 
 &lt;li&gt;Configuring networking and security for&amp;nbsp;AWS Glue&amp;nbsp;jobs to access&amp;nbsp;Amazon Aurora&amp;nbsp;databases in private subnets&lt;/li&gt; 
 &lt;li&gt;Coordinating the provisioning of source databases, ETL pipelines, and target table stores&lt;/li&gt; 
 &lt;li&gt;Managing the end-to-end workflow without native automation&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Solution overview&lt;/h2&gt; 
&lt;p&gt;In this solution, you automate the extraction of relational database tables from Amazon Aurora MySQL Serverless v2 to Amazon S3 Tables in Apache Iceberg format using AWS Glue 5.0. To help you get started and test this solution, a CloudFormation template is provided. This template provisions the required infrastructure, loads sample data, and configures the Extract, Transform, Load (ETL) pipeline. You can adapt this template for your own scenario.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="aligncenter size-full wp-image-88773" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/18/bd5552img1.png" alt="Solution overview" width="1541" height="855"&gt;&lt;/p&gt; 
&lt;h2&gt;Sample data&lt;/h2&gt; 
&lt;p&gt;This solution uses the &lt;a href="https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html" target="_blank" rel="noopener noreferrer"&gt;TICKIT sample database&lt;/a&gt;, a well-known dataset used in Amazon Redshift documentation. The TICKIT data models a fictional ticket sales system with seven interrelated tables: users, venue, category, date, event, listing, and sales. The dataset is publicly available as mentioned in the &lt;a href="https://docs.aws.amazon.com/redshift/latest/gsg/new-user-serverless.html" target="_blank" rel="noopener noreferrer"&gt;Amazon Redshift Getting Started Guide&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Solution flow&lt;/h2&gt; 
&lt;p&gt;The solution flow as shown in the previous architecture diagram:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;An &lt;a href="https://aws.amazon.com/lambda/" target="_blank" rel="noopener noreferrer"&gt;AWS Lambda&lt;/a&gt; function downloads the TICKIT sample dataset (a fictional ticket sales system used in Amazon Redshift documentation) from a public Amazon S3 bucket to a staging S3 bucket.&lt;/li&gt; 
 &lt;li&gt;A second Lambda function, using &lt;a href="https://pypi.org/project/PyMySQL/" target="_blank" rel="noopener noreferrer"&gt;PyMySQL&lt;/a&gt; (a Python MySQL client library), loads the staged data files into the Aurora MySQL Serverless v2 database using &lt;code&gt;LOAD DATA LOCAL INFILE&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;The AWS Glue job reads seven TICKIT tables from Aurora MySQL through a native MySQL connection and writes them to Amazon S3 Tables in Apache Iceberg format using the S3 Tables REST catalog endpoint with SigV4 authentication.&lt;/li&gt; 
 &lt;li&gt;You can query the migrated data in S3 Tables using &lt;a href="https://aws.amazon.com/athena/" target="_blank" rel="noopener noreferrer"&gt;Amazon Athena&lt;/a&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;The solution consists of the following key components:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Amazon Aurora MySQL Serverless v2 as the source relational database containing the TICKIT sample dataset (users, venue, category, date, event, listing, and sales tables)&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/secrets-manager/" target="_blank" rel="noopener noreferrer"&gt;AWS Secrets Manager&lt;/a&gt; to store the Aurora MySQL database credentials securely&lt;/li&gt; 
 &lt;li&gt;Amazon S3 staging bucket for the TICKIT sample data files downloaded from the public redshift-downloads S3 bucket&lt;/li&gt; 
 &lt;li&gt;AWS Lambda functions using PyMySQL to load data into Aurora MySQL&lt;/li&gt; 
 &lt;li&gt;AWS Glue 5.0 job (PySpark) to read tables from Aurora MySQL and write them to S3 Tables in Apache Iceberg format&lt;/li&gt; 
 &lt;li&gt;Amazon S3 Tables as the target storage for the migrated Iceberg tables&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/vpc/" target="_blank" rel="noopener noreferrer"&gt;Amazon VPC&lt;/a&gt; with private subnets and VPC endpoints for Amazon S3, S3 Tables, AWS Glue, Secrets Manager, AWS Security Token Service (AWS STS), CloudWatch Logs, and CloudFormation&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Here are some advantages of this architecture:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Fully automated setup: A single CloudFormation stack provisions the required infrastructure, loads sample data, and configures the ETL pipeline.&lt;/li&gt; 
 &lt;li&gt;Serverless and cost-efficient: Aurora MySQL Serverless v2 and AWS Glue both scale based on demand, minimizing idle costs.&lt;/li&gt; 
 &lt;li&gt;Apache Iceberg table format: Data is stored in Apache Iceberg format, enabling ACID transactions, schema evolution, and time travel queries.&lt;/li&gt; 
 &lt;li&gt;Network isolation and credential management: The resources run within private subnets with Virtual Private Cloud (VPC) endpoints, and database credentials are managed through AWS Secrets Manager.&lt;/li&gt; 
 &lt;li&gt;Extensible pattern: The same approach can be adapted for other relational databases (PostgreSQL, SQL Server) and other target formats supported by AWS Glue.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Prerequisites&lt;/h2&gt; 
&lt;p&gt;To follow along, you need an AWS account. If you don’t yet have an &lt;a href="https://aws.amazon.com/resources/create-account/" target="_blank" rel="noopener noreferrer"&gt;AWS account&lt;/a&gt;, you must create one. The CloudFormation stack deployment takes approximately &lt;strong&gt;30-45 minutes&lt;/strong&gt; to complete and requires familiarity with &lt;a href="https://aws.amazon.com/s3/features/tables/" target="_blank" rel="noopener noreferrer"&gt;Amazon S3 Tables&lt;/a&gt;, &lt;a href="https://aws.amazon.com/cloudformation/" target="_blank" rel="noopener noreferrer"&gt;AWS CloudFormation&lt;/a&gt;, &lt;a href="https://aws.amazon.com/what-is/apache-iceberg/" target="_blank" rel="noopener noreferrer"&gt;Apache Iceberg&lt;/a&gt;, &lt;a href="https://aws.amazon.com/glue/" target="_blank" rel="noopener noreferrer"&gt;AWS Glue&lt;/a&gt;, &lt;a href="https://aws.amazon.com/rds/aurora/" target="_blank" rel="noopener noreferrer"&gt;Amazon Aurora&lt;/a&gt;. This solution will incur AWS costs. The main cost drivers are AWS Glue ETL job runs (billed per DPU-hour, proportional to data volume) and Amazon S3 Tables storage and request charges. Remember to clean up resources when you are done to avoid unnecessary charges.&lt;/p&gt; 
&lt;h2&gt;CloudFormation parameters&lt;/h2&gt; 
&lt;p&gt;You can configure the following parameters before deploying the CloudFormation stack:&lt;/p&gt; 
&lt;table class="styled-table" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;strong&gt;Parameter&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;strong&gt;Default&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;strong&gt;Required&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;S3TableBucketName&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Name of the S3 Tables bucket to create (or use existing)&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Yes&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;DatabaseName&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Name of the initial Aurora MySQL database&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;tickit&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;No&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;MasterUsername&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Master username for Aurora MySQL&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;admin&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;No&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;VpcCidr&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;CIDR block for the VPC&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;10.1.0.0/16&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;No&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;S3TableNamespace&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Namespace for S3 Tables&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;tickit&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;No&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Implementation walkthrough&lt;/h2&gt; 
&lt;p&gt;The following steps walk you through the implementation. These steps are to deploy and test an end-to-end solution from scratch. If you are already running some of these components, you may skip to the relevant step. You can also refer to the aws-samples repository, &lt;a href="https://github.com/aws-samples/sample-to-write-aurora-mysql-to-s3tables-using-glue"&gt;sample-to-write-aurora-mysql-to-s3tables-using-glue&lt;/a&gt; for the entire solution.&lt;/p&gt; 
&lt;h2&gt;Step 1: Deploy the CloudFormation stack&lt;/h2&gt; 
&lt;p&gt;Deploy the CloudFormation template &lt;a href="https://github.com/aws-samples/sample-to-write-aurora-mysql-to-s3tables-using-glue/blob/main/scripts/aurora-mysql-to-s3tables-stack.yaml" target="_blank" rel="noopener noreferrer"&gt;scripts/aurora-mysql-to-s3tables-stack.yaml&lt;/a&gt; using the AWS Console or the AWS Command Line Interface (AWS CLI). Provide a name for the S3 Tables bucket; the stack will create it automatically (or use an existing one if it already exists).&lt;/p&gt; 
&lt;p&gt;To deploy using the AWS Console (recommended), navigate to the AWS CloudFormation Console and use the CloudFormation template. Alternatively, to deploy using the AWS CLI first upload the template to an S3 bucket (the template exceeds the 51,200 byte limit for inline –template-body), then create the stack.&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;# Upload the template to S3
aws s3 cp scripts/aurora-mysql-to-s3tables-stack.yaml \
  s3://&amp;lt;your-s3-bucket&amp;gt;/aurora-mysql-to-s3tables-stack.yaml \
  --region &amp;lt;your-region&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;# Create the stack using the S3 template URL
aws cloudformation create-stack \
  --stack-name aurora-mysql-tickit-stack \
  --template-url https://&amp;lt;your-s3-bucket&amp;gt;.s3.&amp;lt;your-region&amp;gt;.amazonaws.com/aurora-mysql-to-s3tables-stack.yaml \
  --parameters \
    ParameterKey=S3TableBucketName,ParameterValue=&amp;lt;your-s3-table-bucket-name&amp;gt; \
  --capabilities CAPABILITY_NAMED_IAM \
  --region &amp;lt;your-region&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;The stack will automatically:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Create the S3 Tables bucket (or use existing if it already exists)&lt;/li&gt; 
 &lt;li&gt;Create a VPC with private subnets and VPC endpoints&lt;/li&gt; 
 &lt;li&gt;Provision an Aurora MySQL Serverless v2 cluster&lt;/li&gt; 
 &lt;li&gt;Download TICKIT sample data from the public Amazon S3 bucket&lt;/li&gt; 
 &lt;li&gt;Load the sample data into Aurora MySQL via a Lambda function using PyMySQL&lt;/li&gt; 
 &lt;li&gt;Create a Glue job configured to migrate data to S3 Tables in Iceberg format&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Note: &lt;/em&gt;&lt;/strong&gt;&lt;em&gt;The S3 Tables bucket is retained when the stack is deleted to preserve your data.&lt;/em&gt;&lt;/p&gt; 
&lt;h2&gt;Step 2: Verify the Aurora MySQL data&lt;/h2&gt; 
&lt;p&gt;Retrieve the AuroraClusterEndpoint, DatabaseName, and SecretArn values from the CloudFormation stack, make a note of the &lt;em&gt;AuroraClusterEndpoint, DatabaseName&lt;/em&gt;, and&lt;em&gt; SecretArn&lt;/em&gt;. You can navigate to the Amazon Aurora Console, choose the Query Editor, and enter the values from the CloudFormation stack to connect. You can also choose your preferred method of &lt;a href="https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Connecting.html" target="_blank" rel="noopener noreferrer"&gt;connecting to an Amazon Aurora DB cluster&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Use the AWS CLI to retrieve the stack outputs: –&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;aws cloudformation describe-stacks --stack-name aurora-mysql-tickit-stack --region &amp;lt;your-region&amp;gt; --query "Stacks[0].Outputs"&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;Then run the following SQL commands to verify the data load:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-sql"&gt;-- Verify if the tables are created
SELECT * FROM information_schema.tables WHERE table_schema = 'tickit';

-- Verify if the data is loaded
SELECT 'users' AS table_name, COUNT(*) AS record_count FROM tickit.users
UNION ALL SELECT 'venue', COUNT(*) FROM tickit.venue
UNION ALL SELECT 'category', COUNT(*) FROM tickit.category
UNION ALL SELECT 'date', COUNT(*) FROM tickit.date
UNION ALL SELECT 'event', COUNT(*) FROM tickit.event
UNION ALL SELECT 'listing', COUNT(*) FROM tickit.listing
UNION ALL SELECT 'sales', COUNT(*) FROM tickit.sales;
&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h2&gt;Step 3: Run the Glue job&lt;/h2&gt; 
&lt;p&gt;Navigate to the AWS Glue Console, choose ETL jobs under Data Integration and ETL from the left panel. Select the AWS Glue job &lt;code&gt;mysql-tickit-to-iceberg-job&lt;/code&gt; and choose Run job to start execution. You can also start the ETL job using the AWS CLI:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;aws glue start-job-run --job-name mysql-tickit-to-iceberg-job --region &amp;lt;your-region&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;The AWS Glue job performs the following operations for each of the seven TICKIT tables:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Reads the table from Aurora MySQL through the native MYSQL Glue connection&lt;/li&gt; 
 &lt;li&gt;Converts the data to a Spark DataFrame&lt;/li&gt; 
 &lt;li&gt;Creates the Iceberg table in the S3 Tables namespace using CREATE TABLE IF NOT EXISTS with the USING ICEBERG clause&lt;/li&gt; 
 &lt;li&gt;Inserts the data using INSERT INTO (or INSERT OVERWRITE if the table already exists)&lt;/li&gt; 
 &lt;li&gt;Verifies the record count and displays sample data&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Step 4: Verify the results&lt;/h2&gt; 
&lt;p&gt;After the AWS Glue job completes, verify that the tables have been created in your S3 Table bucket by navigating to the Amazon S3 Console. Choose Table buckets under Buckets and select your S3 Table bucket. You can also verify using the AWS CLI:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;aws s3tables list-tables \
  --table-bucket-arn arn:aws:s3tables:&amp;lt;your-region&amp;gt;:&amp;lt;your-account-id&amp;gt;:bucket/&amp;lt;your-s3-table-bucket-name&amp;gt; \
  --namespace tickit \
  --region &amp;lt;your-region&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;Select a table from the tickit namespace and choose &lt;em&gt;Preview&lt;/em&gt; to inspect the data.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="aligncenter size-full wp-image-88774" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/12/image-2-4.png" alt="Preview S3 data" width="1917" height="592"&gt;&lt;/p&gt; 
&lt;p&gt;You can also query the migrated tables using Amazon Athena to validate the data.&lt;/p&gt; 
&lt;h2&gt;Clean up resources&lt;/h2&gt; 
&lt;p&gt;Remember to clean up resources when you no longer need them to avoid unnecessary charges.&lt;/p&gt; 
&lt;p&gt;Navigate to the CloudFormation console, search for your stack and choose &lt;strong&gt;Delete&lt;/strong&gt;. Alternatively, use the AWS CLI:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;aws cloudformation delete-stack --stack-name aurora-mysql-tickit-stack --region &amp;lt;your-region&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;The S3 Tables bucket is retained by default. To delete it, use the Amazon S3 console or the AWS CLI to remove the table bucket separately. The staging S3 bucket will be automatically emptied and deleted as part of the stack deletion.&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;aws s3tables delete-table-bucket --table-bucket-arn arn:aws:s3tables:&amp;lt;your-region&amp;gt;:&amp;lt;your-account-id&amp;gt;:bucket/&amp;lt;your-s3-table-bucket-name&amp;gt; --region &amp;lt;your-region&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h2&gt;Summary&lt;/h2&gt; 
&lt;p&gt;In this post, we showed you how to extract data from Amazon Aurora MySQL Serverless v2 and write it to Amazon S3 Tables in Apache Iceberg format using AWS Glue 5.0. By using the native Iceberg support of AWS Glue and the S3 Tables REST catalog endpoint, you can bridge the gap between relational databases and modern lakehouse storage formats. By automating the entire pipeline through CloudFormation, you can quickly set up and replicate this pattern across multiple environments. &lt;/p&gt; 
&lt;p&gt;As AWS Glue and Amazon S3 Tables continue to evolve, you can take advantage of future enhancements while maintaining this automated migration pattern. &lt;/p&gt; 
&lt;p&gt;If you have questions or suggestions, leave us a comment.&lt;/p&gt; 
&lt;hr&gt; 
&lt;h2&gt;About the authors&lt;/h2&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter wp-image-88775 size-thumbnail" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/12/image-3-1-100x133.jpeg" alt="Kunal Ghosh" width="100" height="133"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Kunal Ghosh&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/kunal-ghosh-6583058/" target="_blank" rel="noopener"&gt;Kunal&lt;/a&gt; is a Sr. Solutions Architect at AWS. He is passionate about building efficient and effective solutions on AWS, especially involving generative AI, analytics, data science, and machine learning. Besides family time, he likes reading, swimming, biking, and watching movies.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter wp-image-88776 size-full" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/12/image-4-2.jpeg" alt="Arghya Banerjee" width="100" height="133"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Arghya Banerjee&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/arghya-b-6130b57/" target="_blank" rel="noopener"&gt;Arghya&lt;/a&gt; is a Sr. Solutions Architect at AWS in the San Francisco Bay Area, focused on helping customers adopt and use the AWS Cloud. He is focused on big data, data lakes, streaming and batch analytics services, and generative AI technologies.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter wp-image-88777 size-thumbnail" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/12/image-5-100x100.jpeg" alt="Indranil Banerjee" width="100" height="100"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Indranil Banerjee&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/indranil-banerjee-b00a261/" target="_blank" rel="noopener"&gt;Indranil&lt;/a&gt; is a Sr. Solutions Architect at AWS in the San Francisco Bay Area, focused on helping customers in the hi-tech and semi-conductor sectors solve complex business problems using the AWS Cloud. His special interests are in the areas of legacy modernization and migration, building analytics platforms and helping customers adopt cutting edge technologies such as generative AI.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-thumbnail wp-image-88778" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/12/image-6-2-100x107.png" alt="Vipan Kumar" width="100" height="107"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Vipan Kumar&lt;/h3&gt; 
  &lt;p&gt;&lt;a href="https://www.linkedin.com/in/kvipan/" target="_blank" rel="noopener"&gt;Vipan&lt;/a&gt; is a Sr. Solutions Architect at AWS, where he works with strategic customers. He has extensive experience in machine learning and generative AI. With a background in application development, he is passionate about designing and building enterprise applications for the cloud.&lt;/p&gt; 
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Simplifying Kafka operations with Amazon MSK Express brokers</title>
		<link>https://aws.amazon.com/blogs/big-data/simplifying-kafka-operations-with-amazon-msk-express-brokers/</link>
					
		
		<dc:creator><![CDATA[Mazrim Mehrtens]]></dc:creator>
		<pubDate>Mon, 23 Mar 2026 18:36:26 +0000</pubDate>
				<category><![CDATA[Amazon Managed Streaming for Apache Kafka (Amazon MSK)]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Intermediate (200)]]></category>
		<guid isPermaLink="false">31b684d561f5910f7c4522b397cf5a696c793ea3</guid>

					<description>In this post, we show you how Amazon Managed Streaming for Apache Kafka (Amazon MSK) Express brokers brokers streamline the end-to-end activities for Kafka administration.</description>
										<content:encoded>&lt;p&gt;In this post, we show you how &lt;a href="https://aws.amazon.com/msk/" target="_blank" rel="noopener noreferrer"&gt;Amazon Managed Streaming for Apache Kafka&lt;/a&gt; (Amazon MSK) &lt;a href="https://docs.aws.amazon.com/msk/latest/developerguide/msk-broker-types-express.html" target="_blank" rel="noopener noreferrer"&gt;Express brokers&lt;/a&gt; brokers streamline the end-to-end activities for Kafka administration. Apache Kafka has become the de facto standard for real-time data streaming, powering mission-critical applications across industries worldwide. Its popularity stems from its ability to handle high-throughput, fault-tolerant data pipelines at scale. Given its central role in modern data architectures, managing Apache Kafka with high resilience and reliability is essential for business success.&lt;/p&gt; 
&lt;p&gt;To maintain this level of resilience, administrators need to handle several important operational tasks. Apache Kafka is a distributed stateful system, whose state management requires constant communication and data movement in dynamic cloud environments. Administrators need to carefully size clusters by calculating complex compute, storage, and network requirements. They must provision storage volumes upfront and monitor utilization constantly to avoid disruptions. When workloads grow, scaling the cluster requires hours or days of effort using multiple tools to provision capacity and rebalance load.&lt;/p&gt; 
&lt;p&gt;With these operational requirements in mind, many administrators ask: is there an easier way to manage Apache Kafka at scale while maintaining the high resilience their applications demand?&lt;/p&gt; 
&lt;p&gt;Amazon MSK Express addresses these challenges directly. In this post, we show you how MSK Express brokers streamline the end-to-end activities for Kafka administration, including:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Sizing Kafka clusters for optimal performance and cost&lt;/li&gt; 
 &lt;li&gt;Scaling cluster storage up and down with workload changes&lt;/li&gt; 
 &lt;li&gt;Scaling cluster compute in and out over time&lt;/li&gt; 
 &lt;li&gt;Monitoring cluster health&lt;/li&gt; 
 &lt;li&gt;Managing cluster security&lt;/li&gt; 
 &lt;li&gt;Ensuring high availability with fast and automatic broker recovery&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;What are Amazon MSK Express brokers?&lt;/h2&gt; 
&lt;p&gt;Amazon MSK Express brokers are a transformative breakthrough for customers needing high-throughput Kafka clusters that scale faster and cost less. Express brokers reimagine Kafka’s compute and storage, decoupling to unlock performance and elasticity benefits. Express brokers deliver performance improvements that directly impact your operations:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Up to 3x more throughput per broker, allowing you to handle more data with fewer resources and lower costs&lt;/li&gt; 
 &lt;li&gt;Rebalance partitions across brokers 180x faster, reducing scaling from hours to minutes&lt;/li&gt; 
 &lt;li&gt;Scale up to 20x faster, enabling you to respond to demand spikes without lengthy planning cycles&lt;/li&gt; 
 &lt;li&gt;Recover 90% quicker compared to standard Apache Kafka brokers, minimizing workload disruption and maintaining business continuity&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;To learn more about the technical details, see &lt;a href="https://aws.amazon.com/blogs/big-data/express-brokers-for-amazon-msk-turbo-charged-kafka-scaling-with-up-to-20-times-faster-performance/" target="_blank" rel="noopener noreferrer"&gt;Express brokers for Amazon MSK: Turbo-charged Kafka scaling with up to 20 times faster performance&lt;/a&gt;. For a comprehensive overview of Express broker capabilities, see the &lt;a href="https://docs.aws.amazon.com/msk/latest/developerguide/msk-broker-types-express.html" target="_blank" rel="noopener noreferrer"&gt;MSK Express brokers documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Let’s explore how MSK Express brokers simplify Apache Kafka management.&lt;/p&gt; 
&lt;h3&gt;Sizing an Express cluster&lt;/h3&gt; 
&lt;p&gt;Sizing a traditional Apache Kafka cluster is complex. Working backwards from your ingress and egress load, you need to consider every dimension of your cluster compute, storage, and network limitations. Each node must be carefully sized to handle:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Ingress and egress traffic from your clients&lt;/li&gt; 
 &lt;li&gt;Internal Kafka operations like replication and rebalancing (the process of redistributing partitions across brokers to maintain balance)&lt;/li&gt; 
 &lt;li&gt;High availability with node and Availability Zone failures&lt;/li&gt; 
 &lt;li&gt;Client operations like backfill procedures when reading historical data&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;These activities impact your cluster storage I/O limits, network ingress/egress limits, and CPU and memory constraints. Beyond this, you need to consider the number of partitions required and determine whether your cluster can scale to handle partition management for your use case.&lt;/p&gt; 
&lt;p&gt;MSK Express brokers simplify this calculus. Rather than considering these complex variables, you can focus on what matters:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Your ingress throughput&lt;/li&gt; 
 &lt;li&gt;Your egress throughput&lt;/li&gt; 
 &lt;li&gt;Your partition needs&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;MSK documents the &lt;a href="https://docs.aws.amazon.com/msk/latest/developerguide/limits.html#msk-express-quota-broker-throughput" target="_blank" rel="noopener noreferrer"&gt;Express broker throughput throttle and partition limits by broker size&lt;/a&gt;. MSK pre-calculates these to consider all cluster limits. They include multi-Availability Zone high availability to handle rare events like node failures or AZ impairment.&lt;/p&gt; 
&lt;p&gt;Notice we did not discuss storage in sizing an Express cluster. That is because storage in Express scales nearly infinitely. You pay for storage as you go rather than sizing storage up front.&lt;/p&gt; 
&lt;h3&gt;Scaling Express cluster storage&lt;/h3&gt; 
&lt;p&gt;With sizing simplified by focusing on throughput and partitions, storage management becomes the next operational consideration.&lt;/p&gt; 
&lt;p&gt;Normally, Apache Kafka clusters need storage volumes pre-provisioned to handle all retained data. You must allocate all storage up-front and pay for that storage no matter what your actual data retention is.&lt;/p&gt; 
&lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;: If you store 7 days of data at 1 MB/sec ingress, that’s 600+ GB of storage. This does not include data replication across nodes and buffers for growth and workload variability. This workload requires over 3 TB of storage, allocated up-front, to handle replicas and storage buffers.&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;As your workload evolves, careful monitoring of storage utilization becomes essential. Adding storage capacity prevents workload disruptions. Often, you cannot reclaim this storage. Once you increase the volume size, you continue paying for additional storage even if your workload scales down and no longer requires additional capacity.&lt;/p&gt; 
&lt;p&gt;With Express brokers, there is no need for sizing and provisioning storage volumes. You pay for what you use with no provisioning: the data ingested to the cluster and data stored in the cluster per-GB-per-hour. All data stored in the cluster is replicated across 3 Availability Zones for high availability. This pay-as-you-go model eliminates wasted capacity costs and reduces your total infrastructure spend.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;As workloads scale up, the cluster uses more storage with no changes needed from you&lt;/li&gt; 
 &lt;li&gt;When workloads scale down, the cluster uses less storage, reducing storage charges automatically&lt;/li&gt; 
 &lt;li&gt;Storage management for Apache Kafka becomes simpler with Express. You focus on ensuring that your per-topic retention is right-sized for each use case. That is the only consideration. Once you set up topic retention, MSK Express automatically manages and cost-optimizes storage on your behalf.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Storage management in MSK Express brokers is far simpler than in a traditional Apache Kafka cluster. So is scaling the compute capacity for an Express-based cluster.&lt;/p&gt; 
&lt;h3&gt;Scaling Express cluster compute&lt;/h3&gt; 
&lt;p&gt;Just as storage scales automatically with your workload, compute capacity can also adapt to changing demands.&lt;/p&gt; 
&lt;p&gt;As your workload grows and changes, you may find that you exceed your initial sizing estimates. For a traditional Apache Kafka cluster, scaling the cluster capacity is a significant event. Scaling takes effort to provision capacity and rebalance load, it requires using multiple tools to manage the scaling process (compute, storage, DNS, rebalancing, client configs, and more). The scaling process can take hours or days to complete, which can exacerbate application impact. This means you need to plan well ahead to ensure your Kafka cluster is prepared for any load changes.&lt;/p&gt; 
&lt;p&gt;With MSK Express clusters, this process becomes much simpler and requires little to no upfront planning. It has near zero disruption to your existing workload, allowing your team to focus on building features rather than managing infrastructure.&lt;/p&gt; 
&lt;p&gt;To scale up an MSK Express cluster, you simply add brokers to the cluster. Once new brokers come online, &lt;a href="https://docs.aws.amazon.com/msk/latest/developerguide/intelligent-rebalancing.html" target="_blank" rel="noopener noreferrer"&gt;Express Intelligent Rebalancing&lt;/a&gt; automatically rebalances topic partitions to the new nodes. Thanks to the Express storage architecture, the new nodes automatically have almost all the data they need. There is no significant inter-broker communication for rebalancing. This causes no disruption to existing brokers.&lt;/p&gt; 
&lt;p&gt;The cluster then elects new broker leaders for each partition, enabling producers to direct traffic to the new nodes. The same applies to consumer groups.&lt;/p&gt; 
&lt;p&gt;Express broker DNS design keeps this in mind. Express broker connection strings abstract away from the nodes themselves. Clients connect to the active broker nodes with one connection string. No changes to DNS, load balancing, or client configurations are needed.&lt;/p&gt; 
&lt;p&gt;Deciding when to scale in an Express cluster is also simpler than in a traditional Apache Kafka cluster. The simplified Express architecture means less to monitor and manage for long-term cluster operations.&lt;/p&gt; 
&lt;h3&gt;Monitoring Express clusters&lt;/h3&gt; 
&lt;p&gt;With simplified scaling decisions comes simplified monitoring. Express brokers reduce the number of metrics you need to track for cluster health. The below image demonstrates a dashboard which highlights the key metrics for monitoring MSK Express broker health.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone wp-image-88966 size-full" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/17/BDB-57391.png" alt="Dashboard with key Amazon MSK Express brokers metrics" width="3012" height="1844"&gt;&lt;/p&gt; 
&lt;p&gt;In a traditional Apache Kafka cluster, you need to consider dozens of metrics to understand overall cluster health. Express brokers simplify this operational process. They highlight ingress and egress throughput as two critical metrics for workload sizing and scaling. This streamlined monitoring approach reduces the expertise required to operate Kafka clusters and allows smaller teams to manage larger deployments effectively.&lt;/p&gt; 
&lt;p&gt;Other factors, like poorly designed clients, can incur additional overhead on a cluster. This can cause symptoms such as high CPU utilization without high ingress throughput. It is still important to monitor a variety of metrics with MSK Express brokers.&lt;/p&gt; 
&lt;p&gt;For Express brokers, the following table shows the critical metrics you must monitor and alert on for cluster health:&lt;/p&gt; 
&lt;table class="styled-table" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Metric Name&lt;/td&gt; 
   &lt;td&gt;Description&lt;/td&gt; 
   &lt;td&gt;Recommended Alarm&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;BytesInPerSec&lt;/td&gt; 
   &lt;td&gt;Ingress throughput to the cluster&lt;/td&gt; 
   &lt;td&gt;When &amp;gt; broker limit for &amp;gt; 5 minutes&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;BytesOutPerSec&lt;/td&gt; 
   &lt;td&gt;Egress throughput to the cluster&lt;/td&gt; 
   &lt;td&gt;When &amp;gt; broker limit for &amp;gt; 5 minutes&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;CpuUser + CpuSystem&lt;/td&gt; 
   &lt;td&gt;CPU utilization percentage&lt;/td&gt; 
   &lt;td&gt;When greater than 60% for 15 minutes&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;NetworkProcessorAvgIdlePercent&lt;/td&gt; 
   &lt;td&gt;Network processor thread idle time&lt;/td&gt; 
   &lt;td&gt;When less than 0.5 for &amp;gt; 5 minutes&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RequestHandlerAvgIdlePercent&lt;/td&gt; 
   &lt;td&gt;Request processor thread idle time&lt;/td&gt; 
   &lt;td&gt;When less than 0.4 for &amp;gt; 15 minutes&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;FetchThrottleByteRate&lt;/td&gt; 
   &lt;td&gt;Consumer fetch throttling rate&lt;/td&gt; 
   &lt;td&gt;When &amp;lt; 0 for &amp;gt; 15 minutes&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;ProduceThrottleByteRate&lt;/td&gt; 
   &lt;td&gt;Producer ingress throttling rate&lt;/td&gt; 
   &lt;td&gt;When &amp;lt; 0 for &amp;gt; 15 minutes&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;For more information on monitoring Amazon MSK, see &lt;a href="https://docs.aws.amazon.com/msk/latest/developerguide/metrics-details-express.html" target="_blank" rel="noopener noreferrer"&gt;Monitoring Amazon MSK with Amazon CloudWatch&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Managing Express cluster access&lt;/h3&gt; 
&lt;p&gt;Beyond monitoring, cluster management is another area where MSK Express brokers reduce operational complexity.&lt;/p&gt; 
&lt;p&gt;Express brokers simplify the internal management of Kafka clusters. In a traditional Kafka environment, you use schemes like SASL/SCRAM (username and password-based authentication) or mutual TLS (certificate-based authentication) for client authentication. Once authenticated, you configure complex Kafka ACLs (Access Control Lists—permissions that define who can access which topics) inside the Kafka cluster to authorize client access to topics and data.&lt;/p&gt; 
&lt;p&gt;These paradigms require you to manage all topics, authentication, and authorization inside Apache Kafka. This includes credential management, rotation, and other operational activities surrounding cluster access.&lt;/p&gt; 
&lt;p&gt;MSK simplifies this process by integrating with AWS Identity and Access Management (IAM) for access control. Clients can use IAM Roles that clearly specify cluster access boundaries. They also provide topic-level authorization to read and write data to a cluster with Kafka APIs.&lt;/p&gt; 
&lt;p&gt;Finally, clients can use MSK APIs to directly manage Kafka cluster configurations and Kafka topics, including creating new topics, updating topic configurations and partition counts, and deleting topics. Configurations and topics can be managed with the AWS Console, AWS CLI, and AWS SDK. For more information, refer to &lt;a href="https://aws.amazon.com/about-aws/whats-new/2026/02/amazon-msk-kafka-topics-public-apis/"&gt;Amazon MSK simplifies Kafka topic management with new APIs and console integration&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;You can focus only on your existing enterprise standards for IAM access controls, and your existing AWS CloudFormation and AWS CDK automation to manage your cluster with Infrastructure as Code (IaC). This integration reduces the operational overhead of cluster management and accelerates your time to production by leveraging existing security infrastructure.&lt;/p&gt; 
&lt;p&gt;MSK also supports using SASL/SCRAM and mutual TLS authentication modes alongside IAM access control. This gives you the flexibility to authorize applications outside of AWS. You can also provide access to legacy applications without the need for code changes.&lt;/p&gt; 
&lt;p&gt;For more information, see &lt;a href="https://docs.aws.amazon.com/msk/latest/developerguide/iam-access-control.html" target="_blank" rel="noopener noreferrer"&gt;IAM access control for Amazon MSK&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/msk/latest/developerguide/security.html" target="_blank" rel="noopener noreferrer"&gt;Security in Amazon MSK&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Building highly available Express brokers&lt;/h3&gt; 
&lt;p&gt;With security simplified through IAM integration, high availability is the final piece of the operational puzzle.&lt;/p&gt; 
&lt;p&gt;Many of the same considerations we discussed in scaling Express cluster compute align with high availability considerations for MSK Express brokers.&lt;/p&gt; 
&lt;p&gt;Based on &lt;a href="https://docs.aws.amazon.com/msk/latest/developerguide/msk-broker-types-express.html" target="_blank" rel="noopener noreferrer"&gt;internal testing&lt;/a&gt;, MSK Express broker storage improvements enable faster recovery when broker nodes fail—90% faster than standard brokers. The new node can simply start up with almost no disruption to the rest of the cluster without needing to perform significant rebalancing. This contrasts with standard Kafka clusters, where the cluster needs to rebalance partitions to new nodes after recovery.&lt;/p&gt; 
&lt;p&gt;In addition to these improvements, MSK Express brokers are highly available by default. The service manages critical cluster and topic configurations for high availability and performance on your behalf. This eliminates the need for managing most cluster configurations.&lt;/p&gt; 
&lt;p&gt;Express fully manages configurations like min.insync.replicas, num.io.threads, and others described in &lt;a href="https://docs.aws.amazon.com/msk/latest/developerguide/msk-configuration-express-read-only.html" target="_blank" rel="noopener noreferrer"&gt;Express brokers’ read-only configurations&lt;/a&gt;. This gives you a highly available and performant cluster out of the box.&lt;/p&gt; 
&lt;p&gt;You no longer need to worry about most cluster-level configurations of an Apache Kafka cluster. You can simply:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Start an MSK Express cluster&lt;/li&gt; 
 &lt;li&gt;Configure topics and retention&lt;/li&gt; 
 &lt;li&gt;Proceed without the fine tuning normally needed to ensure a highly available cluster&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;In this post, we showed how MSK Express brokers simplify cluster operations for Apache Kafka clusters. They lower the Total Cost of Ownership (TCO) of running an Apache Kafka cluster by simplifying sizing, storage management, compute management, high availability, and access control, while providing high performance, reliability, and cost-efficiency. These simplifications reduce the specialized expertise needed for cluster administration and accelerate your deployment timeline.&lt;/p&gt; 
&lt;p&gt;With this in mind, we recommend MSK Express brokers for almost all MSK workloads. If you are starting out with a new Kafka cluster or optimizing an existing one, MSK Express brokers provide a strong combination of simplicity, performance, and cost-efficiency.&lt;/p&gt; 
&lt;p&gt;Ready to simplify your Kafka operations? &lt;a href="https://docs.aws.amazon.com/msk/latest/developerguide/getting-started.html" target="_blank" rel="noopener noreferrer"&gt;Get started using Amazon MSK&lt;/a&gt; to create your first Express cluster today. You can provision a fully managed, highly available Kafka cluster in minutes and start experiencing the operational benefits immediately. For pricing details, see &lt;a href="https://aws.amazon.com/msk/pricing/" target="_blank" rel="noopener noreferrer"&gt;Amazon MSK pricing&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;For comprehensive information about Amazon MSK capabilities and features, visit the &lt;a href="https://aws.amazon.com/msk/" target="_blank" rel="noopener noreferrer"&gt;Amazon MSK product page&lt;/a&gt; and the &lt;a href="https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html" target="_blank" rel="noopener noreferrer"&gt;Amazon MSK Developer Guide&lt;/a&gt;.&lt;/p&gt; 
&lt;hr&gt; 
&lt;h2&gt;About the authors&lt;/h2&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-29797" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2024/12/02/mmehrten-1-94x100.png" alt="Mazrim Mehrtens" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Mazrim Mehrtens&lt;/h3&gt; 
  &lt;p&gt;&lt;a target="_blank" href="https://www.linkedin.com/in/mmehrtens/" rel="noopener"&gt;Mazrim&lt;/a&gt; is a Sr. Specialist Solutions Architect for messaging and streaming workloads. Mazrim works with customers to build and support systems that process and analyze terabytes of streaming data in real time, run enterprise Machine Learning pipelines, and create systems to share data across teams seamlessly with varying data toolsets and software stacks.&lt;/p&gt;
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-29797" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2021/02/04/Sai-Maddali-p.png" alt="Sai Maddali" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Sai Maddali&lt;/h3&gt; 
  &lt;p&gt;&lt;a target="_blank" href="https://www.linkedin.com/in/sai-maddali-6b6b417/" rel="noopener"&gt;Sai&lt;/a&gt; is a Senior Manager Product Management at AWS who leads the product team for Amazon MSK. He is passionate about understanding customer needs, and using technology to deliver services that empowers customers to build innovative applications. Besides work, he enjoys traveling, cooking, and running.&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Filter catalog assets using custom metadata search filters in Amazon SageMaker Unified Studio</title>
		<link>https://aws.amazon.com/blogs/big-data/filter-catalog-assets-using-custom-metadata-search-filters-in-amazon-sagemaker-unified-studio/</link>
					
		
		<dc:creator><![CDATA[Ramesh H Singh]]></dc:creator>
		<pubDate>Wed, 18 Mar 2026 23:18:11 +0000</pubDate>
				<category><![CDATA[Amazon SageMaker Unified Studio]]></category>
		<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Intermediate (200)]]></category>
		<category><![CDATA[Technical How-to]]></category>
		<guid isPermaLink="false">4999741fa3cdf4731a813e6f247a0f4d17b1af31</guid>

					<description>Finding the right data assets in large enterprise catalogs can be challenging, especially when thousands of datasets are cataloged with organization-specific metadata. Amazon SageMaker Unified Studio now supports custom metadata search filters. In this post, you learn how to create custom metadata forms, publish assets with metadata values, and use structured filters to discover those assets.</description>
										<content:encoded>&lt;p&gt;Finding the right data assets in large enterprise catalogs can be challenging, especially when thousands of datasets are cataloged with organization-specific metadata. &lt;a href="https://aws.amazon.com/sagemaker/unified-studio/" target="_blank" rel="noopener noreferrer"&gt;Amazon SageMaker Unified Studio&lt;/a&gt; now supports custom metadata search filters. You can filter catalog assets using your own metadata form fields like therapeutic area, data sensitivity, or geographic region rather than relying only on free-text search. Custom metadata forms are structured templates that define additional attributes that can be attached to catalog assets.&lt;/p&gt; 
&lt;p&gt;In this post, you learn how to create custom metadata forms, publish assets with metadata values, and use structured filters to discover those assets. We explore a healthcare and life sciences use case. A research organization catalogs metrics in Amazon SageMaker Catalog using custom metadata forms with fields such as Therapeutic Area and Sample Size. Researchers building Machine learning models can now search datasets based on custom filters across hundreds of cataloged assets to identify the best datasets to train their models.&lt;/p&gt; 
&lt;h2&gt;Key capabilities&lt;/h2&gt; 
&lt;p&gt;Custom metadata search filters in SageMaker Unified Studio offer the following key capabilities:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Custom metadata form filters – You can filter search results using any custom metadata form fields defined in their catalog. For example, a researcher can filter by Therapeutic Area = Oncology and Data Sensitivity = Confidential to locate specific datasets.&lt;/li&gt; 
 &lt;li&gt;Name and description filters – You can add filters that target asset names or descriptions using a text search operator, enabling targeted discovery without scanning full search results.&lt;/li&gt; 
 &lt;li&gt;Date range filters – You can filter assets by date using on, before, after, and between operators, making it straightforward to locate recently updated or historically relevant assets.&lt;/li&gt; 
 &lt;li&gt;Combinable filters – You can combine multiple filters to construct precise queries. For example, filtering by AWS Region = US AND Classification = PII AND Updated after 2026-01-01 returns only assets matching all three criteria.&lt;/li&gt; 
 &lt;li&gt;Persistent filter selections – You can filter configurations stored in your browser and are not shared across devices or other users. You can later return to the catalog and find your previously defined filters.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Solution overview&lt;/h2&gt; 
&lt;p&gt;In the following sections, we demonstrate how to set up custom metadata forms, publish assets with metadata values, and use custom metadata search filters to discover those assets.We complete the following three steps for the demonstration.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Create a custom metadata form&lt;/li&gt; 
 &lt;li&gt;Create and publish assets with metadata&lt;/li&gt; 
 &lt;li&gt;Use custom metadata search filters&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Prerequisites&lt;/h2&gt; 
&lt;p&gt;To follow along with this post, you should have:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;An &lt;a href="https://aws.amazon.com/sagemaker/unified-studio/" target="_blank" rel="noopener noreferrer"&gt;Amazon SageMaker Unified Studio&lt;/a&gt; domain setup&lt;/li&gt; 
 &lt;li&gt;An existing project &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For instructions on setting up a domain and project, see the &lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/getting-started.html" target="_blank" rel="noopener noreferrer"&gt;Getting started&lt;/a&gt; guide.&lt;/p&gt; 
&lt;h2&gt;To create a custom metadata form&lt;/h2&gt; 
&lt;p&gt;Complete the following steps to create a custom metadata form with filterable fields:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;In SageMaker Unified Studio, choose&amp;nbsp;&lt;strong&gt;Project overview&lt;/strong&gt;&amp;nbsp;from the navigation pane.&lt;/li&gt; 
 &lt;li&gt;Under &lt;strong&gt;Project catalog&lt;/strong&gt;, choose &lt;strong&gt;Metadata entities&lt;/strong&gt;.&lt;br&gt; &lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5864-1.png"&gt;&lt;/li&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Create metadata form&lt;/strong&gt;.&lt;br&gt; &lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5864-2.png"&gt;&lt;/li&gt; 
 &lt;li&gt;To create a new metadata form ‘research_metadata’ use the following details, then choose Create metadata form.&lt;br&gt; &lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5864-3.png"&gt;&lt;/li&gt; 
 &lt;li&gt;Define the form fields. For this demo, we add the following fields: &lt;p&gt; Create first field Therapeutic Area (String) – Mark as Searchable&lt;/p&gt; &lt;p&gt; &lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5864-4.png"&gt;&lt;br&gt; &lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5864-5.png"&gt;&lt;/p&gt; &lt;p&gt; Create second field Subject Count (Integer) – Mark as Filterable by range&lt;/p&gt; &lt;p&gt; &lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5864-6.png"&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;Mark the form as ‘Enabled’ so the form is visible and can be used.&lt;br&gt; &lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5864-7.png"&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Create and publish with metadata&lt;/h2&gt; 
&lt;p&gt;In this section, you create a custom asset and attach the research_metadata form created in the previous step.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Under Project catalog in the navigation pane, choose &lt;strong&gt;Metadata entities&lt;/strong&gt;. Choose the ‘ASSET TYPES’ tab and select “CREATE ASSET TYPE’.&lt;br&gt; &lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5864-8.png"&gt;&lt;/li&gt; 
 &lt;li&gt;Create a new asset type and attach the metadata form that we created in the previous step.&lt;br&gt; &lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5864-9.png"&gt;&lt;br&gt; A new asset type ‘metric’ is created.&lt;br&gt; &lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5864-10.png"&gt;&lt;/li&gt; 
 &lt;li&gt;Next, we will create two metrics. Under &lt;strong&gt;Project catalog&lt;/strong&gt; in the navigation pane, choose &lt;strong&gt;Assets&lt;/strong&gt;. On the Asset page, choose &lt;strong&gt;CREATE,&lt;/strong&gt; and then choose &lt;strong&gt;Create asset&lt;/strong&gt; from the menu.&lt;br&gt; &lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5864-11.png"&gt;&lt;/li&gt; 
 &lt;li&gt;In this demo, you create two metrics.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;For the first metric ‘drug_1_treatment’, provide the following asset name and description.&lt;/p&gt; 
&lt;p&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5864-12.png"&gt;&lt;/p&gt; 
&lt;p&gt;Add the following values for the metadata form.&lt;/p&gt; 
&lt;p&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5864-13.png"&gt;&lt;/p&gt; 
&lt;p&gt;Validate all fields and choose &lt;strong&gt;CREATE.&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5864-14.png"&gt;&lt;/p&gt; 
&lt;p&gt;Publish the asset to the catalog.&lt;/p&gt; 
&lt;p&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5864-15.png"&gt;&lt;/p&gt; 
&lt;p&gt;Next, we will create the second metric ‘drug_1_treatment’. Repeat the steps from the previous procedure and enter the values shown.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Subject Count = 450&lt;/li&gt; 
 &lt;li&gt;Therapeutic Area = Oncology&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Use custom metadata search filters&lt;/h2&gt; 
&lt;p&gt;After publishing assets with custom metadata, go to the&amp;nbsp;&lt;strong&gt;Browse Assets&lt;/strong&gt;&amp;nbsp;page to use the filters.&lt;/p&gt; 
&lt;h3&gt;To browse assets and view filters&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;In SageMaker Unified Studio, choose &lt;strong&gt;Discover&lt;/strong&gt; from the navigation bar, then select &lt;strong&gt;Catalog&lt;/strong&gt;, &lt;strong&gt;Browse Assets&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;The search page displays with the filter sidebar on the left. You can see the existing system filters (Data type, Glossary terms, Asset type, Owning project, Source Region, Source account, Domain unit) along with the new Date range and Add Filter sections.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Add a custom filter&lt;/h3&gt; 
&lt;ol start="3"&gt; 
 &lt;li&gt;Choose &lt;strong&gt;+ Add Filter&lt;/strong&gt; at the bottom of the filter sidebar. For &lt;strong&gt;Filter type&lt;/strong&gt;, select &lt;strong&gt;Metadata form&lt;/strong&gt;. For &lt;strong&gt;Metadata form&lt;/strong&gt;, select &lt;strong&gt;research_metadata&lt;/strong&gt; and add a filter as shown in the following image. Choose &lt;strong&gt;Apply&lt;/strong&gt; when you’re done.&lt;br&gt; &lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5864-16.png"&gt;&lt;br&gt; The search results update to show only assets where ‘subject_count’ is greater than 50.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;To combine multiple filters&lt;/h3&gt; 
&lt;ol start="4"&gt; 
 &lt;li&gt;Choose &lt;strong&gt;+ Add Filter&lt;/strong&gt; again. For &lt;strong&gt;Filter type&lt;/strong&gt;, select &lt;strong&gt;Metadata form&lt;/strong&gt;. For &lt;strong&gt;Metadata form&lt;/strong&gt;, select &lt;strong&gt;research_metadata&lt;/strong&gt; and add a filter as shown in the following image. Choose &lt;strong&gt;Apply&lt;/strong&gt; when you’re done.&lt;br&gt; &lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5864-17.png"&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Manage custom filters&lt;/h3&gt; 
&lt;p&gt;Filter configurations are stored in the user’s browser and are not shared across devices or users.&lt;/p&gt; 
&lt;p&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5864-18.png"&gt;&lt;/p&gt; 
&lt;p&gt;To customize search, you could:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Toggle filters – Use the checkboxes next to each custom filter to enable or disable them without deleting.&lt;/li&gt; 
 &lt;li&gt;Edit or delete – Choose the kebab menu (⋮) next to any custom filter to edit its values or delete it.&lt;/li&gt; 
 &lt;li&gt;Clear all – Choose CLEAR next to the Custom filters header to deselect all custom filters at once.&lt;/li&gt; 
 &lt;li&gt;Persistence – Your custom filters persist across browser sessions. When you return to the Browse Assets page, your previously defined filters are still listed in the sidebar, ready to be activated.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Using the SearchListings API&lt;/h2&gt; 
&lt;p&gt;To search catalog assets programmatically, you can use the SearchListings API in &lt;a href="https://aws.amazon.com/datazone/" target="_blank" rel="noopener noreferrer"&gt;Amazon DataZone&lt;/a&gt;, which supports the same filtering capabilities as the SageMaker Unified Studio UI. The following example filters assets where a custom string field contains a specific value and a numeric field is within a range:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-code"&gt;aws datazone search-listings \
    --domain-identifier "dzd_your_domain_id" \
    --filters '{ "and": [
        { "filter": { "attribute": "research_metadata.TherapeuticArea", "value": "Oncology", "operator": "TEXT_SEARCH" } },
        { "filter": { "attribute": "research_metadata.SubjectCount", "intValue": 100, "operator": "GT" } }
    ] }'&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;For more details, see the&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/datazone/latest/APIReference/API_SearchListings.html&amp;quot; \t &amp;quot;_blank" target="_blank" rel="noopener noreferrer"&gt;SearchListings API documentation&lt;/a&gt;&amp;nbsp;in the Amazon DataZone API Reference. &lt;/p&gt; 
&lt;h2&gt;Best practices&lt;/h2&gt; 
&lt;p&gt;Consider the following best practices when using custom metadata search filters:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Define your metadata forms before publishing assets at scale. If you publish assets before the forms are finalized, you might need to re-tag existing assets, which is a time-consuming process in large catalogs.&lt;/li&gt; 
 &lt;li&gt;Define metadata forms aligned with your organization’s discovery needs (therapeutic areas, data classifications, geographic regions) before publishing assets at scale.&lt;/li&gt; 
 &lt;li&gt;Use specific, consistent values in metadata fields to get precise filter results. For example, use standardized values (for example, use “Oncology” consistently rather than “oncology” or “Onc”) across all assets.&lt;/li&gt; 
 &lt;li&gt;Combine multiple filters to narrow results efficiently rather than scanning through broad result sets.&lt;/li&gt; 
 &lt;li&gt;Use the date range filter alongside custom metadata filters to locate assets within specific time windows.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Clean up resources&lt;/h2&gt; 
&lt;p&gt;For instructions on deleting the added assets, see &lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/delete-data-asset.html" target="_blank" rel="noopener noreferrer"&gt;Delete an Amazon SageMaker Unified Studio asset&lt;/a&gt;.&lt;br&gt; For instructions on deleting the metadata forms, see &lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/delete-metadata-form.html" target="_blank" rel="noopener noreferrer"&gt;Delete a metadata form in Amazon SageMaker Unified Studio&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;Custom metadata search filters in Amazon SageMaker Unified Studio give data consumers the ability to find exact assets using structured filters based on their organization’s own metadata fields. By combining multiple filters across custom metadata forms, asset names, descriptions, and date ranges, data consumers can construct precise queries that surface the right datasets without scanning through broad search results. Filter persistence across browser sessions further streamlines repeated discovery workflows.&lt;/p&gt; 
&lt;p&gt;Custom metadata search filters are now available in AWS Regions where Amazon SageMaker is supported.&lt;/p&gt; 
&lt;p&gt;To learn more about Amazon SageMaker, see the &lt;a href="https://docs.aws.amazon.com/next-generation-sagemaker/latest/userguide/what-is-sagemaker.html" target="_blank" rel="noopener noreferrer"&gt;Amazon SageMaker documentation&lt;/a&gt;. To get started with this capability, refer to the &lt;a href="https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/search-for-data.html" target="_blank" rel="noopener noreferrer"&gt;Amazon SageMaker Unified Studio User Guide&lt;/a&gt;.&lt;/p&gt; 
&lt;hr&gt; 
&lt;h2&gt;About the authors&lt;/h2&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-29797" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5864-19.png" alt="Ramesh Singh" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Ramesh Singh&lt;/h3&gt; 
  &lt;p&gt;&lt;a target="_blank" href="https://www.linkedin.com/in/ramesh-harisaran-singh/" rel="noopener"&gt;Ramesh&lt;/a&gt; is a Senior Product Manager Technical (External Services) at AWS in Seattle, Washington, currently with the Amazon SageMaker team. He is passionate about building high-performance ML/AI and analytics products that help enterprise customers achieve their critical goals using cutting-edge technology.&lt;/p&gt;
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-29797" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5864-20.png" alt="Pradeep Misra" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Pradeep Misra&lt;/h3&gt; 
  &lt;p&gt;&lt;a target="_blank" href="https://www.linkedin.com/in/pradeep-m-326258a/" rel="noopener"&gt;Pradeep&lt;/a&gt; is a Principal Analytics and Applied AI Solutions Architect at AWS. He is passionate about solving customer challenges using data, analytics, and Applied AI. Outside of work, he likes exploring new places and playing badminton with his family. He also likes doing science experiments, building LEGOs, and watching anime with his daughters.&lt;/p&gt;
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-29797" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5864-21.png" alt="Alexandra von der Goltz" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Alexandra von der Goltz&lt;/h3&gt; 
  &lt;p&gt;&lt;a target="_blank" href="https://www.linkedin.com/in/alexandra-von-der-goltz-a2b42a172/" rel="noopener"&gt;Alexandra&lt;/a&gt; is a Software Development Engineer (SDE) at AWS based in New York City, on the Amazon SageMaker team. She works on the catalog and data discovery experiences within the Unified Studio.&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Best practices for Amazon Redshift Lambda User-Defined Functions</title>
		<link>https://aws.amazon.com/blogs/big-data/best-practices-for-amazon-redshift-lambda-user-defined-functions/</link>
					
		
		<dc:creator><![CDATA[Sergey Konoplev]]></dc:creator>
		<pubDate>Wed, 18 Mar 2026 18:09:14 +0000</pubDate>
				<category><![CDATA[Advanced (300)]]></category>
		<category><![CDATA[Amazon Redshift]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[Best Practices]]></category>
		<guid isPermaLink="false">a6c8d5afb47ebf74f03a8e06c4bfefc8c908b032</guid>

					<description>While working with Lambda User-Defined Functions (UDFs) in Amazon Redshift, knowing best practices may help you streamline the respective feature development and reduce common performance bottlenecks and unnecessary costs. You wonder what programming language could improve your UDF performance, how else can you use batch processing benefits, what concurrency management considerations might be applicable in your case? In this post, we answer these and other questions by providing a consolidated view of practices to improve your Lambda UDF efficiency. We explain how to choose a programming language, use existing libraries effectively, minimize payload sizes, manage return data, and batch processing. We discuss scalability and concurrency considerations at both the account and per-function levels. Finally, we examine the benefits and nuances of using external services with your Lambda UDFs.</description>
										<content:encoded>&lt;p&gt;While working with &lt;a href="https://docs.aws.amazon.com/redshift/latest/dg/udf-creating-a-lambda-sql-udf.html" target="_blank" rel="noopener noreferrer"&gt;Lambda User-Defined Functions&lt;/a&gt; (UDFs) in &lt;a href="https://aws.amazon.com/redshift" target="_blank" rel="noopener noreferrer"&gt;Amazon Redshift&lt;/a&gt;,&amp;nbsp;knowing best practices may help you streamline the respective feature development and reduce common performance bottlenecks and unnecessary costs.&lt;/p&gt; 
&lt;p&gt;You wonder what programming language could improve your UDF performance, how else can you use batch processing benefits, what concurrency management considerations might be applicable in your case?&amp;nbsp;In this post, we answer these and other questions by providing a consolidated view of practices to improve your Lambda UDF efficiency. We explain how to choose a programming language, use existing libraries effectively, minimize payload sizes, manage return data, and batch processing. We discuss scalability and concurrency considerations at both the account and per-function levels. Finally, we examine the benefits and nuances of using external services with your Lambda UDFs.&lt;/p&gt; 
&lt;h2&gt;Background&lt;/h2&gt; 
&lt;p&gt;Amazon Redshift&amp;nbsp;is a fast, petabyte-scale cloud data warehouse service that makes it simple and cost-effective to analyze data using standard SQL and existing&amp;nbsp;business intelligence tools.&lt;/p&gt; 
&lt;p&gt;&lt;a href="https://aws.amazon.com/lambda/" target="_blank" rel="noopener noreferrer"&gt;AWS Lambda&lt;/a&gt; is a compute service that lets you run code without provisioning or managing servers, supporting a wide variety of programming languages, automatically scaling your applications.&lt;/p&gt; 
&lt;p&gt;Amazon Redshift Lambda UDFs allows you to run Lambda functions directly from SQL, which unlock such capabilities like external API integration, unified code deployment, better compute scalability, cost separation.&lt;/p&gt; 
&lt;h2&gt;Prerequisites&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;AWS account setup requirements&lt;/li&gt; 
 &lt;li&gt;Basic Lambda function creation knowledge&lt;/li&gt; 
 &lt;li&gt;Amazon Redshift cluster access and UDF permissions.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Performance optimization best practices&lt;/h2&gt; 
&lt;p&gt;The following diagram contains necessary visual references from the best practices description.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone wp-image-88741 size-full" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/09/image-1-1.jpg" alt="" width="2283" height="1128"&gt;&lt;/p&gt; 
&lt;h3&gt;Use efficient programming languages&lt;/h3&gt; 
&lt;p&gt;You can choose from Lambda’s wide variety of runtime environments and programming languages. This choice affects both the performance and billing.&amp;nbsp;More performant code may help reduce the cost of Lambda compute and improve SQL query speed. Faster SQL queries could also help reduce costs for Redshift Serverless and potentially improve throughput for Provisioned clusters depending on your specific workload and configuration.&lt;/p&gt; 
&lt;p&gt;When choosing a programming language for your Lambda UDFs, benchmarks may help predict performance and cost implications. The famous Debian’s Benchmarks Game Team provides&amp;nbsp;publicly available insights for different languages in their&amp;nbsp;&lt;a href="https://benchmarksgame-team.pages.debian.net/benchmarksgame/box-plot-summary-charts.html" target="_blank" rel="noopener noreferrer"&gt;micro-benchmark results&lt;/a&gt;. For example, their &lt;a href="https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/python3-go.html" target="_blank" rel="noopener noreferrer"&gt;Python vs Golang&lt;/a&gt;&amp;nbsp;comparison shows up to 2 orders of magnitude run time improvement and twice memory consumption reduction if you could use Golang instead of Python. That may positively reflect on both Lambda UDF performance and Lambda costs for the respective scenarios.&lt;/p&gt; 
&lt;h3&gt;Use existing libraries efficiently&lt;/h3&gt; 
&lt;p&gt;For every language provided by Lambda, you can explore the whole collection of libraries to help you implement tasks better from the speed and resource consumption point of view. When transitioning to Lambda UDFs, review this aspect carefully.&lt;/p&gt; 
&lt;p&gt;For instance, if your Python function manipulates datasets, it might be worth considering using the&amp;nbsp;&lt;a href="https://pandas.pydata.org/" target="_blank" rel="noopener noreferrer"&gt;Pandas&lt;/a&gt; library.&lt;/p&gt; 
&lt;h3&gt;Avoid unnecessary data in payloads&lt;/h3&gt; 
&lt;p&gt;Lambda limits request and response payload size to&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html#function-configuration-deployment-and-execution" target="_blank" rel="noopener noreferrer"&gt;6 MB&lt;/a&gt;&amp;nbsp;for synchronous invocations. Considering that, Redshift is doing best effort to batch the values so that the number of batches (and hence the Lambda calls) would be minimal which reduces the communication overhead. So, the unnecessary data, like one added for future use but not immediately actionable, may reduce efficiency of this effort.&lt;/p&gt; 
&lt;h3&gt;Keep in mind returning data size&lt;/h3&gt; 
&lt;p&gt;Because, from the point of view of Redshift, each Lambda function is a closed system, it is impossible to know what size the returned data can possibly be before executing the function. In this case, if the returned payload is higher than the Lambda payload limit, Redshift will have to retry with the outbound batch of a lower size. That will continue until a fit return payload will be achieved. While it is the best effort, the process might bring a notable overhead.&lt;/p&gt; 
&lt;p&gt;In order to avoid this overhead, you might use the knowledge of your Lambda code, to directly set the maximum batch size on the Redshift side using the &lt;a href="https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html" target="_blank" rel="noopener noreferrer"&gt;MAX_BATCH_SIZE&lt;/a&gt; clause in your Lambda UDF definition.&lt;/p&gt; 
&lt;h3&gt;Use benefits of processing values in batches&lt;/h3&gt; 
&lt;p&gt;Batched calls provide new optimization opportunities to your UDFs. Having a batch of many values passed to the function at once, allows to use various optimization techniques.&lt;/p&gt; 
&lt;p&gt;For example, memoization (result caching), when your function can avoid running the same logic on the same values, hence reducing the total execution time. The standard Python library&amp;nbsp;&lt;a href="https://docs.python.org/3/library/functools.html" target="_blank" rel="noopener noreferrer"&gt;functools&lt;/a&gt;&amp;nbsp;provides convenient caching and&amp;nbsp;Least Recently Used (LRU) caching decorators implementing exactly that.&lt;/p&gt; 
&lt;h2&gt;Scalability and concurrency management&lt;/h2&gt; 
&lt;h3&gt;Increase the account-level concurrency&lt;/h3&gt; 
&lt;p&gt;Redshift uses advanced congestion control to provide the best performance in a highly competitive environment.&amp;nbsp;Lambda provides a default concurrency&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html#function-configuration-deployment-and-execution" target="_blank" rel="noopener noreferrer"&gt;limit of 1,000 concurrent execution&lt;/a&gt;&amp;nbsp;per AWS Region for an account. However, if the latter is not enough, you can always request the account level quota increase for Lambda concurrency, which might be as high as tens of thousands.&lt;/p&gt; 
&lt;p&gt;Note that even with a restricted concurrency space, our Lambda UDF implementation will do the best effort to minimize the congestion and equalize the chances for function calls across Redshift clusters in your account.&lt;/p&gt; 
&lt;h3&gt;Restrict function concurrency with reserved concurrency&lt;/h3&gt; 
&lt;p&gt;If you want to isolate some of the Lambda functions in a restricted concurrency scope, for example you have a data science team experimenting with embedding generation using Lambda UDFs and you don’t want them to affect your account’s Lambda concurrency much, you might want to set a reserved concurrency for their specific functions to operate with.&lt;/p&gt; 
&lt;p&gt;Learn more about &lt;a href="https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html" target="_blank" rel="noopener noreferrer"&gt;reserved concurrency in Lambda&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Integration and external services&lt;/h2&gt; 
&lt;h3&gt;Call existing external services for optimal execution&lt;/h3&gt; 
&lt;p&gt;In some cases, it might be worth considering using existing external services or components of your application instead of re-implementing the same tasks yourself in the Lambda code. For example, you can use Open Policy Agent (OPA) for policy checking, a managed service Protegrity to protect your sensitive data, there are also a variety of services providing hardware acceleration for computationally heavy tasks.&lt;/p&gt; 
&lt;p&gt;Note that some services have their own batching control with a limited batch size. For that we implemented a per-function batch row count setting &lt;a href="https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html" target="_blank" rel="noopener noreferrer"&gt;MAX_BATCH_ROWS&lt;/a&gt; as a clause in the Lambda UDF definition.&lt;/p&gt; 
&lt;p&gt;To learn more on the external service interaction using Lambda UDFs refer the following links:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href="https://github.com/aws-samples/amazon-redshift-udfs/tree/master/lambda-udfs" target="_blank" rel="noopener noreferrer"&gt;Amazon Redshift UDFs GitHub repository&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/apn/data-tokenization-with-amazon-redshift-and-protegrity/" target="_blank" rel="noopener noreferrer"&gt;Data Tokenization with Amazon Redshift and Protegrity&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/big-data/accessing-external-components-using-amazon-redshift-lambda-udfs/" target="_blank" rel="noopener noreferrer"&gt;Accessing external components using Amazon Redshift Lambda UDFs&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;Lambda UDFs provide a way to extend your data warehouse capabilities. By implementing the best practices from this post, you may help optimize your Lambda UDFs for performance and cost efficiency.The key takeaways from this post are:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;performance optimization, showing how to choose efficient programming languages and tools, minimize payload sizes, and leverage batch processing to reduce execution time and costs&lt;/li&gt; 
 &lt;li&gt;scalability management, showing how to configure appropriate concurrency settings at both account and function levels to handle varying workloads effectively&lt;/li&gt; 
 &lt;li&gt;integration efficiency, explaining how to benefit from external services to avoid reinventing functionality while maintaining optimal performance.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For more information, visit the &lt;a href="https://docs.aws.amazon.com/redshift/" target="_blank" rel="noopener noreferrer"&gt;Redshift documentation&lt;/a&gt; and explore the integration examples referenced in this post.&lt;/p&gt; 
&lt;h2&gt;About the author&lt;/h2&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-29797" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/09/image-2-1-100x100.jpg" alt="Sergey Konoplev" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Sergey Konoplev&lt;/h3&gt; 
  &lt;p&gt;&lt;a target="_blank" href="https://www.linkedin.com/in/grayhemp/" rel="noopener"&gt;Sergey&lt;/a&gt; is a Senior Database Engineer on the Amazon Redshift team who is driving a range of initiatives from operations to observability to AI-tooling, including pushing the boundaries of Lambda UDF. Outside of work, Sergey catches waves in Pacific Ocean and enjoys reading aloud (and voice acting) for his daughter.&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>How Vanguard transformed analytics with Amazon Redshift multi-warehouse architecture</title>
		<link>https://aws.amazon.com/blogs/big-data/how-vanguard-transformed-analytics-with-amazon-redshift-multi-warehouse-architecture/</link>
					
		
		<dc:creator><![CDATA[Alex Rabinovich]]></dc:creator>
		<pubDate>Wed, 18 Mar 2026 18:07:54 +0000</pubDate>
				<category><![CDATA[Amazon Redshift]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[Customer Solutions]]></category>
		<category><![CDATA[Intermediate (200)]]></category>
		<guid isPermaLink="false">3844f7dd1a4964d262baafc66130b37060de5519</guid>

					<description>In this post, Vanguard's Financial Advisor Services division describes how they evolved from a single Amazon Redshift cluster to a multi-warehouse architecture using data sharing and serverless endpoints to eliminate performance bottlenecks caused by exponential growth in ETL jobs, dashboards, and user queries.</description>
										<content:encoded>&lt;p&gt;&lt;em&gt;This is a guest post by Alex Rabinovich, Anindya Dasgupta, and Vijesh Chandran from Vanguard, Financial Advisor Services division, in partnership with AWS.&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href="https://investor.vanguard.com/corporate-portal" target="_blank" rel="noopener noreferrer"&gt;Vanguard&lt;/a&gt; stands as one of the world’s leading investment companies, serving more than 50 million investors globally. The company offers an extensive selection of low-cost mutual funds and ETFs with over 450 funds/ETFs along with comprehensive investment advice and related financial services. With a workforce of approximately 20,000 crew members, Vanguard has built its reputation on providing low-cost, high-quality investment solutions that help investors achieve their long-term financial goals.&lt;/p&gt; 
&lt;p&gt;Within this massive organization, Vanguard’s &lt;a href="https://advisors.vanguard.com/" target="_blank" rel="noopener noreferrer"&gt;Financial Advisor Services (FAS)&lt;/a&gt; division stands as one of the most prominent B2B operations in the financial services industry. Operating at an extraordinary scale, FAS oversees a broad range and diverse range of assets through the intermediary channel while supporting a vast network of advisory firms and financial advisors across the country. This division delivers a full suite of investment products, model portfolios, research capabilities, and technology-driven support services designed to help financial advisors serve their clients more effectively.&lt;/p&gt; 
&lt;h2&gt;Business use cases and initial architecture&lt;/h2&gt; 
&lt;p&gt;The scale and complexity of FAS operations generate enormous amounts of data that require sophisticated analytics capabilities to drive business insights, regulatory compliance, and operational efficiency. To address this, Vanguard launched the FAS 360 initiative. This initiative aims to empower Financial Advisor Services (FAS) with a centralized cloud data warehouse that integrates both internal and external data sources into a unified, intelligent system.&lt;/p&gt; 
&lt;h3&gt;Key business use cases:&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Business operations&lt;/strong&gt; – Enables sales goal setting, tracking, and compensation management to drive operational excellence. It delivers insights on product usage patterns across financial advisor clients.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Data science&lt;/strong&gt; – Powers customer segmentation models and call transcription analytics to drive strategic insights. It also supports marketing campaign preparation and customer insights for sales call preparation.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Exploratory analytics&lt;/strong&gt; – Enables ad-hoc leadership questions, what-if scenario analysis, and sales trend analysis for channel managers competitor comparative analysis.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;By consolidating these use cases into a centralized system, FAS 360 enables consistent reporting and data-driven decision-making across Vanguard’s Financial Advisor Services division.&lt;/p&gt; 
&lt;h3&gt;Centralized data warehouse FAS 360:&lt;/h3&gt; 
&lt;p&gt;Vanguard’s first wave of modernization established FAS 360 as a centralized enterprise data warehouse, migrating from a fragmented “data swamp” of Parquet files on &lt;a href="https://aws.amazon.com/s3/" target="_blank" rel="noopener noreferrer"&gt;Amazon Simple Storage Service&lt;/a&gt; (Amazon S3) to a structured, unified system.&lt;/p&gt; 
&lt;p&gt;The following architecture diagram leverages Amazon S3 for raw data storage with &lt;a href="https://aws.amazon.com/redshift/" target="_blank" rel="noopener noreferrer"&gt;Amazon Redshift&lt;/a&gt; serving as the core processing engine, providing integrated access for BI tools, analyst exploration, and data science workloads.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone wp-image-88312 size-full" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/02/23/BDB-5715-image-1.png" alt="" width="711" height="651"&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Here are the key benefits achieved with this architecture:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Single source of truth&lt;/strong&gt; – Consolidated fragmented data sources into a unified system, minimizing multiple versions of truth and establishing consistent reporting practices across the organization&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;10x faster query performance&lt;/strong&gt; – Dramatically improved query response times compared to the previous solution, helping enhance analyst productivity and enabling more complex analytical workloads&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Seamless data lake integration&lt;/strong&gt; – Maintained connectivity with the broader data lake environment while providing structured warehouse capabilities&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Enhanced business agility&lt;/strong&gt; – Increased trust in metrics and unlocked new use cases that were previously untenable, directing the new migration efforts toward the FAS360 system&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;This centralized architecture successfully addressed the limitations of Vanguard’s previous approach, where data was scattered across individuals with limited governance, and established a foundation for their subsequent architectural evolution.&lt;/p&gt; 
&lt;h2&gt;Significant growth and expanding use cases&lt;/h2&gt; 
&lt;p&gt;Vanguard FAS experienced remarkable growth in their data analytics requirements over a two-year period, demonstrating the rapid evolution of modern data needs:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Initial State:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;20 AWS Glue ETL jobs processing daily data loads&lt;/li&gt; 
 &lt;li&gt;Approximately 100 tables in their data warehouse&lt;/li&gt; 
 &lt;li&gt;20 Tableau dashboards serving business users&lt;/li&gt; 
 &lt;li&gt;Around 60 analysts accessing the system&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Two Years Later:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;20 TB in data volume in Amazon Redshift and another 150 TB in S3 data lake&lt;/li&gt; 
 &lt;li&gt;600+ AWS Glue ETL jobs (a 30x increase) handling complex data transformations&lt;/li&gt; 
 &lt;li&gt;300+ tables (3x growth) storing diverse business data&lt;/li&gt; 
 &lt;li&gt;250+ Amazon Redshift materialized views optimizing query performance&lt;/li&gt; 
 &lt;li&gt;Over 500 Tableau dashboards (25x expansion) serving various business functions&lt;/li&gt; 
 &lt;li&gt;500,000+ user queries/months&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;This exponential growth reflected FAS’s increasing reliance on data-driven decision making across the business functions, from risk management and compliance to client service optimization and operational efficiency improvements.&lt;/p&gt; 
&lt;h2&gt;Resource contention and performance bottlenecks&lt;/h2&gt; 
&lt;p&gt;As Vanguard FAS’s data environment expanded, their initial architecture, a single Amazon Redshift provisioned cluster with 2 nodes (ra3.4xlarge), began experiencing severe performance challenges that threatened business operations:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;ETL performance issues:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Frequent ETL SLA failures disrupting critical business processes&lt;/li&gt; 
 &lt;li&gt;Tableau extract failures resulting in stale dashboard data&lt;/li&gt; 
 &lt;li&gt;Resource conflicts between data ingestion and transformation workloads&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;End-user experience degradation:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Poor query performance during peak usage periods&lt;/li&gt; 
 &lt;li&gt;Table and object locking issues preventing concurrent access&lt;/li&gt; 
 &lt;li&gt;Frustrated analysts unable to perform deep data exploration&lt;/li&gt; 
 &lt;li&gt;Limited ability to run long-running analytical queries&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Operational challenges:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Resource contention between ETL workloads and interactive analytics&lt;/li&gt; 
 &lt;li&gt;Inability to scale compute resources independently for different workload types&lt;/li&gt; 
 &lt;li&gt;Single point of failure affecting the data operations&lt;/li&gt; 
 &lt;li&gt;Difficulty in workload prioritization and resource allocation&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;These challenges were fundamentally limiting FAS’s ability to leverage their data assets effectively, impacting everything from daily operational reporting to strategic business analysis.&lt;/p&gt; 
&lt;h2&gt;Solution overview&lt;/h2&gt; 
&lt;p&gt;To address these critical challenges, Vanguard FAS implemented following multi-warehouse architecture that leverages the advanced data sharing capabilities of Amazon Redshift for workload isolation and independent scaling.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignnone size-full wp-image-88313" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/02/23/BDB-5715-image-2.png" alt="" width="831" height="401"&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Producer – Amazon Redshift Provisioned Cluster&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;The central hub consists of the original Amazon Redshift provisioned cluster with RA3 nodes, optimized for consistent, predictable workloads:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Dedicated ETL processing: Handles data ingestion, transformation, and loading operations&lt;/li&gt; 
 &lt;li&gt;Write workload optimization: Manages data writes and updates without interference&lt;/li&gt; 
 &lt;li&gt;Cost optimization: Utilizes reserved instances for predictable, steady-state workloads&lt;/li&gt; 
 &lt;li&gt;Data governance: Serves as the single source of truth for the enterprise data&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Consumer – Amazon Redshift Serverless Workgroups&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Multiple Amazon Redshift Serverless instances serve as specialized consumer endpoints which auto-scales compute resources based on demand:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Analyst Exploration: Dedicated environment for analyst data discovery and experimentation&lt;/li&gt; 
 &lt;li&gt;BI Tools: Instance optimized specifically for Tableau dashboard and visualization workloads&lt;/li&gt; 
 &lt;li&gt;Data Science: For complex and long running machine learning workloads in completely isolated environment&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The solution leverages the native data sharing capabilities of Amazon Redshift to enable secure connectivity between the producer and consumers instances. Consumer clusters can access live data from the producer without data movement, providing real-time access to the most current information available. This zero-copy sharing approach alleviates the need for data duplication or complex synchronization processes, helping reduce both storage costs and operational complexity.&lt;/p&gt; 
&lt;h2&gt;Results&lt;/h2&gt; 
&lt;p&gt;The implementation of the multi-warehouse architecture delivered significant improvements across the key performance indicators:&lt;/p&gt; 
&lt;h3&gt;Predictable Performance&lt;/h3&gt; 
&lt;p&gt;Nightly ETL cycles now consistently complete before the 9 AM SLA, eliminating the previous SLA failures that disrupted business operations and ensuring fresh data is available for morning business activities. Dashboards and reports now reflect the most current data available, providing teams with up-to-date insights for decision-making.&lt;/p&gt; 
&lt;h3&gt;Improved Analyst Productivity and Experience&lt;/h3&gt; 
&lt;p&gt;The new architecture removed the restrictive 10-minute query timeout that previously prevented deep ad hoc exploratory queries. Analysts can now run complex analytical workloads exceeding 30 minutes in a fully isolated environment without impacting other users or ETL processes. This change, combined with significantly faster query response times, has led to higher analyst satisfaction and productivity across the team.&lt;/p&gt; 
&lt;h3&gt;New Analytical Capabilities&lt;/h3&gt; 
&lt;p&gt;The architecture introduced a dedicated “Data Lab” environment where analysts have write access to experiment with data using &lt;code&gt;CREATE TABLE AS SELECT&lt;/code&gt; (CTAS) commands. Each workload type can now scale independently based on demand, with different consumer clusters optimized for specific use cases, enabling more sophisticated analytical approaches.&lt;/p&gt; 
&lt;h3&gt;Operational Excellence&lt;/h3&gt; 
&lt;p&gt;The separation of workloads enabled efficient utilization of compute resources across different patterns, leading to better cost control through appropriate sizing, serverless pay-as-you-go pricing, and reserved instance usage. The cleaner separation of concerns between ETL and analytics workloads has simplified overall management of the data platform.&lt;/p&gt; 
&lt;h3&gt;Ongoing modernization: Evolution toward data mesh architecture&lt;/h3&gt; 
&lt;p&gt;As Vanguard’s data environment matured and their success with the multi-warehouse architecture enabled broader adoption across the organization, they recognized an opportunity to evolve their architecture to match their organizational growth. The expanding portfolio of data products and increasing number of teams leveraging the system created new opportunities for innovation.&lt;/p&gt; 
&lt;p&gt;As Vanguard’s data environment grew, three key challenges emerged:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Centralized ownership bottleneck&lt;/strong&gt; – Single-team data ownership couldn’t scale with the growing number of data products&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Write workload contention&lt;/strong&gt; – Resource contention persisted for write operations on shared endpoints&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Cross-domain dependencies&lt;/strong&gt; – Data object interdependencies across business domains slowed data product development&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Rationale for Data Mesh&lt;/h2&gt; 
&lt;p&gt;Vanguard’s decision to adopt &lt;a href="https://aws.amazon.com/what-is/data-mesh/" target="_blank" rel="noopener noreferrer"&gt;Data Mesh&lt;/a&gt; was driven by the need to:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Decentralize data ownership&lt;/strong&gt; by establishing data domains with dedicated stewards&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Remove write contention&lt;/strong&gt; by isolating each domain’s data loads to separate endpoints&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Enable autonomous development&lt;/strong&gt; allowing stewards to own the complete data product lifecycle and governance&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Leverage modern data lake capabilities&lt;/strong&gt; using AWS Glue and Apache Iceberg format for data product curation&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;This evolution supports Vanguard’s ability to scale organizationally while building on the technical foundation and operational excellence achieved with their multi-warehouse architecture. Building on the success of their Amazon Redshift multi-warehouse implementation, Vanguard FAS is now exploring on the next phase of their data architecture evolution, implementing following data mesh approach.&lt;/p&gt; 
&lt;p&gt;&lt;img loading="lazy" class="alignleft size-full wp-image-88760" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/11/Vanguard_Future_State_Data_Mesh.drawio.png" alt="" width="1131" height="481"&gt;&lt;/p&gt; 
&lt;p&gt;This new data mesh architecture has several key components that work together to enable scalable, domain-oriented data management.&lt;/p&gt; 
&lt;h3&gt;Domain-Oriented Data Ownership&lt;/h3&gt; 
&lt;p&gt;Vanguard is establishing distinct data domains aligned with business functions and assigning dedicated data stewards to each domain for clear ownership and accountability. This strategy shifts from centralized data management to a decentralized model where data ownership and responsibility can be distributed across business domains, enabling teams closer to the data to make informed decisions about their domain-specific needs.&lt;/p&gt; 
&lt;h3&gt;Distributed Data Architecture&lt;/h3&gt; 
&lt;p&gt;The new architecture isolates domain-specific data loads to separate compute endpoints and creates independent data processing pipelines for each domain. This approach helps reduce cross-domain dependencies and conflicts that previously slowed development cycles, allowing teams to iterate and deploy changes without waiting for coordination across the entire organization.&lt;/p&gt; 
&lt;h3&gt;Data Product Approach&lt;/h3&gt; 
&lt;p&gt;Vanguard is curating data products on the data lake using Apache Iceberg format and leveraging AWS Glue for metrics computation and data lake integration. This approach treats data as products with defined SLAs and quality metrics, helping facilitate reliable, high-quality data delivery that downstream consumers can depend on with confidence.&lt;/p&gt; 
&lt;h3&gt;Self-Service Analytics&lt;/h3&gt; 
&lt;p&gt;The implementation enables domain teams to manage their complete data product lifecycle independently while maintaining enterprise governance standards. Vanguard provides comprehensive tools and systems for independent data management, allowing teams to innovate quickly without compromising data quality or security, ultimately accelerating time-to-insight across the organization.This evolution represents a natural progression from centralized data warehouse to multi-warehouse architecture, and finally to a fully distributed, domain-oriented data mesh that can scale with Vanguard’s continued growth.&lt;/p&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;Vanguard Financial Advisor Services’ journey demonstrates that&amp;nbsp;scaling analytics is no longer about scaling a single warehouse bigger, but about&amp;nbsp;architecting for workload isolation, independent scaling, and organizational growth.&lt;/p&gt; 
&lt;p&gt;By evolving from a single 2-node RA3 provisioned cluster to a&amp;nbsp;multi-warehouse architecture using Amazon Redshift Serverless and Provisioned, Vanguard achieved&amp;nbsp;measurable, production-grade outcomes:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;500,000+ monthly queries&lt;/strong&gt;&amp;nbsp;supported without ETL or dashboard contention&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;100% ETL SLA adherence&lt;/strong&gt;, with nightly pipelines completing before 9 AM&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;25x growth in BI consumption&lt;/strong&gt;&amp;nbsp;(20 → 500+ Tableau dashboards) without performance degradation&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;8x growth in analyst population&lt;/strong&gt;&amp;nbsp;(60 → 500+) enabled through workload isolation&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;30x increase in ETL pipelines&lt;/strong&gt;&amp;nbsp;(20 → 600+) without re-architecting ingestion logic&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Zero-copy Amazon Redshift data sharing&lt;/strong&gt;&amp;nbsp;across producer and consumer warehouses, minimizing data duplication and synchronization costs&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Removal of 10-minute query limits&lt;/strong&gt;, unlocking advanced exploratory and long-running analytics&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Critically, these gains were not achieved by over-provisioning compute, but by&amp;nbsp;right-sizing and specializing compute per workload, reserving capacity where demand was predictable (ETL) and using Amazon Redshift&amp;nbsp;Serverless auto-scaling&amp;nbsp;where demand was bursty (BI and ad-hoc analysis).&lt;/p&gt; 
&lt;p&gt;As Vanguard now progresses toward a&amp;nbsp;domain-oriented data mesh, their experience reinforces a key lesson: Multi-warehouse architecture is a foundational enabler for organizational scale, data product ownership, and autonomous analytics.For organizations experiencing exciting growth in their data analytics requirements, Vanguard’s approach showcases the tremendous possibilities that await. With the right architecture and the help of AWS services, organizations can transform their data infrastructure to achieve remarkable improvements in performance, significant cost reductions, and unlock powerful new analytical capabilities that accelerate business value creation.&lt;/p&gt; 
&lt;p&gt;AWS encourages you to connect with your &lt;a href="https://aws.amazon.com/contact-us/" target="_blank" rel="noopener noreferrer"&gt;AWS Account Team&lt;/a&gt; to engage an AWS analytics specialist who can provide expert architectural guidance and tailored recommendations to help you achieve your data transformation goals.&lt;/p&gt; 
&lt;p&gt;© 2026 The Vanguard Group, Inc. and Amazon Web Services, Inc. All rights reserved. This material is provided for informational purposes only and is not intended to be investment advice or a recommendation to take any particular investment action.&lt;/p&gt; 
&lt;hr&gt; 
&lt;h2&gt;About the authors&lt;/h2&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-29797" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/17/BD5715a0.jpeg" alt="Alex Rabinovich" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Alex Rabinovich&lt;/h3&gt; 
  &lt;p&gt;&lt;a target="_blank" href="author LinkedIn" rel="noopener"&gt;Alex&lt;/a&gt; is a Director of Data Engineering at Vanguard, aligned to Financial Advisory Services division. In this role, he leads large‑scale data engineering platforms and modernization initiatives, focusing on building reliable, scalable, and high‑performance data systems in the AWS cloud.&lt;/p&gt;
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-29797" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5715a1.png" alt="Anindya Dasgupta" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Anindya Dasgupta&lt;/h3&gt; 
  &lt;p&gt;&lt;a target="_blank" href="https://www.linkedin.com/in/anindya-dasgupta-6106464/" rel="noopener"&gt;Anindya&lt;/a&gt; is a solutions architect in Vanguard’s Financial Advisor Services Technology division. He has over 25 years of experience building enterprise technology solutions to address complex business challenges. His work focuses on architecting and designing scalable, cloud‑native and data‑driven systems, with hands‑on contributions across application development, system integration, and proof‑of‑concept initiatives.&lt;/p&gt;
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-29797" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5715a2.jpg" alt="Vijesh Chandran" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Vijesh Chandran&lt;/h3&gt; 
  &lt;p&gt;&lt;a target="_blank" href="https://www.linkedin.com/in/vijesh-chandran-a213b826/" rel="noopener"&gt;Vijesh&lt;/a&gt; is Head of Solution Design, overseeing the architecture and design of enterprise technology solutions that support critical business outcomes. His background spans data architecture on cloud‑native platforms, and data‑driven systems, with a strong focus on aligning technology design to business strategy. He plays a hands‑on role in guiding solution direction, integration patterns, and proof‑of‑concept initiatives.&lt;/p&gt;
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-29797" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/03/13/BDB-5715a3.jpg" alt="Raks Khare" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Raks Khare&lt;/h3&gt; 
  &lt;p&gt;&lt;a target="_blank" href="author LinkedIn" rel="noopener"&gt;Raks&lt;/a&gt; is a Senior Analytics Specialist Solutions Architect at AWS based out of Pennsylvania. He helps customers across varying industries and regions architect data analytics solutions at scale on the AWS platform. Outside of work, he likes exploring new travel and food destinations and spending quality time with his family.&lt;/p&gt;
 &lt;/div&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-29797" src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2026/02/23/PXL_20211025_010901845.MP2_-1-100x107.jpg" alt="Poulomi Dasgupta" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Poulomi Dasgupta&lt;/h3&gt; 
  &lt;p&gt;&lt;a target="_blank" href="https://www.linkedin.com/in/poulomi-dasgupta-52568954/" rel="noopener"&gt;Poulomi&lt;/a&gt; is a Senior Analytics Solutions Architect with AWS. She is passionate about helping customers build cloud-based analytics solutions to solve their business problems. Outside of work, she likes travelling and spending time with her family.&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
	</channel>
</rss>