<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Omar Fathy</title>
    <description>The latest articles on DEV Community by Omar Fathy (@omarmfathy219).</description>
    <link>https://dev.to/omarmfathy219</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F306681%2F6ec790dd-d330-4d1f-abfb-f491925b0fc3.png</url>
      <title>DEV Community: Omar Fathy</title>
      <link>https://dev.to/omarmfathy219</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/omarmfathy219"/>
    <language>en</language>
    <item>
      <title>AWS VPC Lattice: Simplifying Application Networking 🚀</title>
      <dc:creator>Omar Fathy</dc:creator>
      <pubDate>Wed, 24 Dec 2025 17:42:22 +0000</pubDate>
      <link>https://dev.to/omarmfathy219/aws-vpc-lattice-simplifying-application-networking-2oen</link>
      <guid>https://dev.to/omarmfathy219/aws-vpc-lattice-simplifying-application-networking-2oen</guid>
      <description>&lt;h2&gt;
  
  
  The Networking Challenge We've All Faced 😤
&lt;/h2&gt;

&lt;p&gt;Let's be honest networking in AWS has never been the most friendly experience for anyone. When you're trying to connect microservices across different VPCs, you quickly find yourself dealing with VPC peering configurations, complex route tables, and security groups that seem to multiply overnight. And that's before you even taking about cross-account service discovery nightmare.&lt;/p&gt;

&lt;p&gt;Remember when you had to manually configure every single connection between your services? When you had to remember which VPC CIDR blocks were available and pray you didn't have overlapping ranges? When you had to babysit your service mesh configuration like it was a newborn that couldn't sleep through the night?&lt;/p&gt;

&lt;p&gt;those were the good old days.&lt;/p&gt;

&lt;h2&gt;
  
  
  challings: The Pain Points
&lt;/h2&gt;

&lt;p&gt;Let's talk about real challings :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VPC Peering Complexity&lt;/strong&gt;: Setting up peering connections between multiple VPCs is like playing a big puzzel game.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Service Discovery Headache&lt;/strong&gt;: Your services can't find each other because they're across different VPCs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security Group Management&lt;/strong&gt;: Managing security groups across VPCs quickly turns into a headache, too many rules, too many places to update them, and every change feels like it breaks something else.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Load Balancing Overhead&lt;/strong&gt;: Every service needs its own load balancer, and before you know it, your AWS bill goes skyhigh.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-Account Complexity&lt;/strong&gt;: When your services live in different AWS accounts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Overlapping CIDR Ranges&lt;/strong&gt;: Most of us uses 10.0.0.0/16 we all thought it was a great idea&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IPv4/IPv6 Migration Headaches&lt;/strong&gt;:  that maybe one of the logest task you can get to try to migrate services one by one without breaking everything&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Enter VPC Lattice: The Solution We've Been Waiting For And then magic happens.
&lt;/h2&gt;

&lt;p&gt;AWS VPC Lattice is essentially AWS saying, "Hey, we know you're tired of this networking nonsense. Let us handle it for you." It's like having a networking expert with your team.&lt;/p&gt;

&lt;p&gt;VPC Lattice is a fully managed service mesh that lets you connect, secure, and monitor communication between your applications across multiple VPCs and AWS accounts. Think of it as the universal translator for your microservices except instead of translating between Klingon and English, it's translating between different VPCs, accounts, and even IPv4/IPv6 protocols.&lt;/p&gt;

&lt;h2&gt;
  
  
  How VPC Lattice Works: The Four Building Blocks
&lt;/h2&gt;

&lt;p&gt;VPC Lattice has four main components:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Services: Your Applications in Disguise
&lt;/h3&gt;

&lt;p&gt;A service in VPC Lattice is a logical abstraction of your application. Instead of dealing with IP addresses and ports, you get a friendly DNS name like &lt;code&gt;billing.app.com&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;The service consists of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Listeners&lt;/strong&gt;: The protocol and port (HTTP, HTTPS, or gRPC)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rules&lt;/strong&gt;: Traffic routing decisions based on path, headers, or HTTP methods&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Target Groups&lt;/strong&gt;: Your actual backend services (EC2, ECS, Lambda, or ALB)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The beauty of this approach is that you will be able to give weight to your targets your traffic routing 90% of that could be sent to Target group one and another 10% could trigger a Lambda function in Target group that is very useful because it helps you with your blue-green deployments. Your clients never know the difference because they're still hitting the same service name.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Service Networks: The Club for Your Services
&lt;/h3&gt;

&lt;p&gt;Service networks are like exclusive clubs where your services hang out. You create one, put your services in it, and then associate it with your consumer VPCs. &lt;/p&gt;

&lt;p&gt;But here's the important part: just because services are in the same network doesn't mean they can talk to each other. You still need to explicitly allow that through authorization policies.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Authorization Policies: The Bouncer at the Door
&lt;/h3&gt;

&lt;p&gt;This is where VPC Lattice gets really clever.  authorization policies can be applied on both levels service network level (coarse-grained) and individual service level (fine-grained) It's like having a two checking point &lt;/p&gt;

&lt;p&gt;The policies are IAM resource policies (similar to S3 bucket policies), so if you're already familiar with AWS IAM, you're golden. You can specify who can access what based on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The caller's identity&lt;/li&gt;
&lt;li&gt;Source VPC&lt;/li&gt;
&lt;li&gt;Service network&lt;/li&gt;
&lt;li&gt;HTTP headers, query strings, or methods&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's an example of a service network authorization policy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Sid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AllowMyPrincipals"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Principal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"vpc-lattice-svcs:Invoke"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Condition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"StringEquals"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"aws:PrincipalOrgId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"o-example"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Service Directory: The Phone Book for Your Services 📞
&lt;/h3&gt;

&lt;p&gt;This is your one-stop shop to see all the services you have access to. Developers can come here to get service names, and administrators can audit what services their account can reach. Simple but effective.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  The Real Magic: How Traffic Actually Flows
&lt;/h2&gt;

&lt;p&gt;Here's where it gets interesting. When your inventory app in VPC1 wants to talk to your billing app in VPC3:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;DNS Resolution&lt;/strong&gt;: Your app looks up &lt;code&gt;billing.app.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Route 53 Response&lt;/strong&gt;: Returns a link-local IP address (169.254.x.x for IPv4, fc00::/7 for IPv6)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VPC Lattice Proxy&lt;/strong&gt;: Traffic hits the VPC Lattice proxy (which handles all the NAT magic)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authorization Check&lt;/strong&gt;: Service network and service policies are evaluated&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Traffic Management&lt;/strong&gt;: Rules are applied, and traffic is routed to the appropriate target&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Target Delivery&lt;/strong&gt;: Traffic reaches your actual service from another link-local IP&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The genius of this approach is that your source (10.0.0.7) and destination (also 10.0.0.7) can have overlapping IP ranges, and VPC Lattice handles all the translation. No more CIDR conflicts!&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Why VPC Lattice is a Game-Changer
&lt;/h2&gt;

&lt;p&gt;VPC Lattice eliminates the need for manual networking configuration. You can forget about setting up VPC peering, managing route tables, or configuring security groups - AWS handles all of that complexity behind the scenes.&lt;/p&gt;

&lt;p&gt;Load balancing becomes automatic with VPC Lattice. Each service gets load balancing capabilities without requiring separate ALBs or NLBs. It's built right into the service definition.&lt;/p&gt;

&lt;p&gt;Cross-account communication becomes seamless. Your services can communicate across different AWS accounts without complex setup or configuration overhead.&lt;/p&gt;

&lt;p&gt;The observability features are comprehensive. You get metrics, logs, and traces out of the box, giving you full visibility into service communication patterns.&lt;/p&gt;

&lt;p&gt;Security is integrated from the start. IAM-based authentication and authorization are built into the service, so security isn't an afterthought.&lt;/p&gt;

&lt;p&gt;IPv4/IPv6 migration becomes much simpler. You can migrate services independently without breaking existing connections or disrupting your infrastructure.&lt;/p&gt;

&lt;p&gt;Every request carries rich metadata about the caller, source VPC, and routing information. This detailed context is incredibly valuable for debugging, monitoring, and understanding your service interactions.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to Use VPC Lattice
&lt;/h2&gt;

&lt;p&gt;VPC Lattice works best in specific scenarios. If you're dealing with microservices spread across multiple VPCs, this service can significantly simplify your networking setup.&lt;/p&gt;

&lt;p&gt;Multi-account environments benefit greatly from VPC Lattice. When your infrastructure spans multiple AWS accounts, the service handles the complexity of cross-account communication automatically.&lt;/p&gt;

&lt;p&gt;For teams exploring service mesh technologies, VPC Lattice provides AWS's native approach to service mesh functionality without the complexity of third-party solutions.&lt;/p&gt;

&lt;p&gt;The service is particularly useful during IPv6 migrations. You can migrate services gradually without disrupting your entire infrastructure.&lt;/p&gt;

&lt;p&gt;Overlapping CIDR ranges become manageable with VPC Lattice. This is a common problem that many organizations face, and VPC Lattice handles it elegantly.&lt;/p&gt;

&lt;p&gt;However, for simple single-VPC applications with just a few services, VPC Lattice might be unnecessary complexity. Sometimes the simplest solution is the right one.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  The Catch
&lt;/h2&gt;

&lt;p&gt;As with any technology, there are trade-offs to consider with VPC Lattice.&lt;/p&gt;

&lt;p&gt;Pricing is the first consideration. You'll pay for data processing and requests, so you'll want to factor this into your cost analysis when planning your implementation.&lt;/p&gt;

&lt;p&gt;There's a learning curve involved. If your team is deeply familiar with traditional VPC networking, they'll need time to understand the service mesh paradigm and how VPC Lattice differs from conventional approaches.&lt;/p&gt;

&lt;p&gt;Vendor lock-in is another factor. Since this is AWS-specific, if you're planning a multi-cloud strategy, you'll need to consider alternative approaches for other cloud providers.&lt;/p&gt;

&lt;p&gt;Network association has some limitations. Each consumer VPC can only be associated with one service network, though individual services can participate in multiple networks.&lt;/p&gt;

&lt;p&gt;That said, when you factor in the time savings and reduced operational overhead, the benefits typically outweigh these considerations. Your engineering time is valuable, and VPC Lattice can save significant amounts of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started: The Practical Stuff 🛠️
&lt;/h2&gt;

&lt;p&gt;Want to try this out? Here's how:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a Service Network&lt;/strong&gt;: Start with the foundation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Define Your Services&lt;/strong&gt;: Register your applications&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set Up Authorization&lt;/strong&gt;: Configure who can access what&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Associate VPCs&lt;/strong&gt;: Connect your consumer VPCs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test and Iterate&lt;/strong&gt;: Start small, then scale&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;AWS has an online guided workshop that takes you through multiple labs. It's highly recommended if you want to see this in action:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://catalog.workshops.aws/handsonwithvpclattice/en-US" rel="noopener noreferrer"&gt;AWS VPC Lattice Workshop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.eksworkshop.com/docs/networking/vpc-lattice/" rel="noopener noreferrer"&gt;EKS Workshop - VPC Lattice&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Wrapping everything Up
&lt;/h2&gt;

&lt;p&gt;So there you have it AWS VPC Lattice in all its glory. It's not perfect, but it's pretty close to what we've all been wishing for.&lt;/p&gt;

&lt;p&gt;If you're tired of managing complex VPC peering configurations, if you're sick of manually configuring load balancers for every service, if you're ready to stop babysitting your service discovery setup—give VPC Lattice a shot.&lt;/p&gt;

&lt;p&gt;It might just be the networking solution that finally lets you focus on building features instead of fighting with infrastructure. And honestly? That's what we all really want, isn't it?&lt;/p&gt;

&lt;p&gt;Now go forth and build something awesome. Your services will thank you. ✨&lt;/p&gt;




&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Getting Started
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/vpc/lattice/getting-started/" rel="noopener noreferrer"&gt;Amazon VPC Lattice Getting Started&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/vpc-lattice/latest/ug/how-it-works.html" rel="noopener noreferrer"&gt;How VPC Lattice Works&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Documentation &amp;amp; Whitepapers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/whitepapers/latest/building-scalable-secure-multi-vpc-network-infrastructure/vpc-lattice.html" rel="noopener noreferrer"&gt;Building Scalable, Secure Multi-VPC Network Infrastructure&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  AWS Blog Posts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/networking-and-content-delivery/build-secure-multi-account-multi-vpc-connectivity-for-your-applications-with-amazon-vpc-lattice/" rel="noopener noreferrer"&gt;Build Secure Multi-Account, Multi-VPC Connectivity with VPC Lattice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/aws/simplify-service-to-service-connectivity-security-and-monitoring-with-amazon-vpc-lattice-now-generally-available/" rel="noopener noreferrer"&gt;Simplify Service-to-Service Connectivity with VPC Lattice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/networking-and-content-delivery/external-connectivity-to-amazon-vpc-lattice/" rel="noopener noreferrer"&gt;External Connectivity to Amazon VPC Lattice&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>microservices</category>
      <category>aws</category>
      <category>networking</category>
      <category>architecture</category>
    </item>
    <item>
      <title>AWS S3 Vectors: Finally, Cloud Scalable Vector Storage 🚀</title>
      <dc:creator>Omar Fathy</dc:creator>
      <pubDate>Tue, 16 Dec 2025 00:40:07 +0000</pubDate>
      <link>https://dev.to/omarmfathy219/aws-s3-vectors-finally-cloud-scalable-vector-storage-1kmb</link>
      <guid>https://dev.to/omarmfathy219/aws-s3-vectors-finally-cloud-scalable-vector-storage-1kmb</guid>
      <description>&lt;p&gt;Been building AI applications lately? You've probably felt the pain of vector embedding storage. Vector databases are powerful, yeah but expensive and a hassle to work with. Surprise. AWS just launched something that can save you up to 90% on vector storage.&lt;/p&gt;

&lt;p&gt;Let me introduce you to &lt;strong&gt;Amazon S3 Vectors&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Are We Discussing Here?
&lt;/h2&gt;

&lt;p&gt;Let's get our feet wet in the fundamentals before jumping into S3 Vectors. In case you already store vectors in Pinecone, Weaviate, or have your own vector database, you're already aware that vectors are numeric encodings of your data text, images, audio, etc. They encode semantic meaning so you can retrieve similar things, drive RAG applications, or grant your AI agents some memory.&lt;/p&gt;

&lt;p&gt;The problem? Traditional vector databases are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💸 Expensive at scale (especially when you're storing millions or billions of vectors)&lt;/li&gt;
&lt;li&gt;🔧 Complex to maintain and provision&lt;/li&gt;
&lt;li&gt;📊 Often overkill if you're not querying constantly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Say hello to &lt;strong&gt;S3 Vectors&lt;/strong&gt; the first cloud object store with native vector support. It's similar to Amazon S3, but optimized for vectors. You get the legendary reliability and scalability of S3, with the capability to actually &lt;em&gt;query&lt;/em&gt; your vectors in sub-second performance.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Why Should You Care? 🤔
&lt;/h2&gt;

&lt;p&gt;Let's be realistic: we don't all need millisecond query times for &lt;em&gt;all&lt;/em&gt; vectors in our system. Sure, your recommendation engine has to be super fast, but what about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📚 Long-term conversation history for your AI agents&lt;/li&gt;
&lt;li&gt;🗂️ Archive data that you query occasionally&lt;/li&gt;
&lt;li&gt;📈 Training datasets that grow over time&lt;/li&gt;
&lt;li&gt;🔍 Semantic search across millions of documents that don't need real time response&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where S3 Vectors shines. Pay only for what you use, no infrastructure to provision whatsoever, and scale from thousands to billions of vectors without breaking a sweat (or your bank).&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture: How It Actually Works
&lt;/h2&gt;

&lt;p&gt;S3 Vectors introduces three core concepts:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Vector Buckets 🪣
&lt;/h3&gt;

&lt;p&gt;A new type of S3 bucket specifically designed for vector data. Not your regular S3 bucket this one is designed for vectors from ground up.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Vector Indexes 📑
&lt;/h3&gt;

&lt;p&gt;Inside each vector bucket, you create indexes to hold and organize your vectors. Each bucket supports up to 10,000 indexes and each index can hold tens of millions of vectors. Indexes are groups that bunch related vectors together.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Vectors (Clearly) ⚡
&lt;/h3&gt;

&lt;p&gt;Your actual vector embeddings live here. And the best news? You can attach metadata as key-value pairs to each vector. Need to filter on date, category, user preference, or genre? No problem. S3 Vectors will automatically optimize your data as it evolves no manual fiddling required.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strong Consistency FTW
&lt;/h3&gt;

&lt;p&gt;Here's the key bit: &lt;strong&gt;writes are strongly consistent&lt;/strong&gt;. When you add or update a vector, it's immediately available for queries. No eventual consistency angst.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's Get Practical: Code That Actually Works 💻
&lt;/h2&gt;

&lt;p&gt;I know you're itching to see some code, so let's walk through a real example. Say you're building a movie recommendation system (because every tutorial needs movies, right? 🎬).&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Generate Embeddings with Amazon Bedrock
&lt;/h3&gt;



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

&lt;span class="c1"&gt;# Set up Bedrock client
&lt;/span&gt;&lt;span class="n"&gt;bedrock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bedrock-runtime&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;region_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;us-west-2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 

&lt;span class="c1"&gt;# Your movie descriptions
&lt;/span&gt;&lt;span class="n"&gt;texts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Star Wars: A farm boy joins rebels to fight an evil empire in space&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Jurassic Park: Scientists create dinosaurs in a theme park that goes wrong&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Finding Nemo: A father fish searches the ocean to find his lost son&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;embeddings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

&lt;span class="c1"&gt;# Getting embeddings for each movie
&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;texts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;inputText&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bedrock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invoke_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;modelId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;amazon.titan-embed-text-v2:0&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;response_body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="n"&gt;embedding&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response_body&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;embedding&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;embeddings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Store Vectors in S3 Vectors
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Create S3 Vectors client
&lt;/span&gt;&lt;span class="n"&gt;s3vectors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s3vectors&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;region_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;us-west-2&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Insert your vectors with metadata
&lt;/span&gt;&lt;span class="n"&gt;s3vectors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put_vectors&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;vectorBucketName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my-movie-vectors&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;indexName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;movie-embeddings&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="n"&gt;vectors&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;float32&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;embeddings&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt; 
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;metadata&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;key1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source_text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;texts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; 
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;genre&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;scifi&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;v2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;float32&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;embeddings&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt; 
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;metadata&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;key2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source_text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;texts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; 
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;genre&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;scifi&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;v3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;float32&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;embeddings&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt; 
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;metadata&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;key3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source_text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;texts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; 
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;genre&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;family&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Query Your Vectors
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# User asks: "List movies about adventures in space"
&lt;/span&gt;&lt;span class="n"&gt;input_text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;List the movies about adventures in space&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# Create embedding for the query
&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;inputText&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;input_text&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bedrock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invoke_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;modelId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amazon.titan-embed-text-v2:0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;model_response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="n"&gt;query_embedding&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model_response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;embedding&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# Do similarity search with metadata filtering
&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;s3vectors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query_vectors&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;vectorBucketName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my-movie-vectors&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;indexName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;movie-embeddings&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;queryVector&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;float32&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;query_embedding&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;topK&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="nb"&gt;filter&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;genre&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;scifi&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;  &lt;span class="c1"&gt;# Only search sci-fi movies
&lt;/span&gt;    &lt;span class="n"&gt;returnDistance&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;returnMetadata&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;vectors&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# Star Wars will be your top match!
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Integration Story: Playing Nice with Others 🔗
&lt;/h2&gt;

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

&lt;p&gt;S3 Vectors is not an isolated island. AWS made sure it plays nice with other tools you may already have on board:&lt;/p&gt;

&lt;h3&gt;
  
  
  Amazon Bedrock Knowledge Bases 🧠
&lt;/h3&gt;

&lt;p&gt;Create knowledge bases for RAG applications natively with S3 Vectors as your storage layer. Cut costs without sacrificing functionality.&lt;/p&gt;

&lt;h3&gt;
  
  
  Amazon OpenSearch Service 🔍
&lt;/h3&gt;

&lt;p&gt;And now things get interesting: use a &lt;strong&gt;tiered storage approach&lt;/strong&gt;. Store your low-frequency, long-term vectors in S3 Vectors (cheap), and scale up to OpenSearch for high-priority vectors when you need that high-QPS, low-latency performance.&lt;/p&gt;

&lt;p&gt;Picture it like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;S3 Vectors&lt;/strong&gt;: Your budget-savior data warehouse for vectors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenSearch&lt;/strong&gt;: Your high-performance query engine&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can even export S3 vector index snapshots directly to OpenSearch Serverless collections from the console. Best of both worlds.&lt;/p&gt;

&lt;h3&gt;
  
  
  Amazon SageMaker Unified Studio 🎨
&lt;/h3&gt;

&lt;p&gt;Build and prototype your generative AI workloads with native access to Bedrock and S3 Vectors in one integrated studio.&lt;/p&gt;

&lt;h2&gt;
  
  
  When Should You Actually Use This? 🎯
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use S3 Vectors if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ You need to persist large vector datasets (millions to billions)&lt;/li&gt;
&lt;li&gt;✅ Query rate is not thousands of QPS&lt;/li&gt;
&lt;li&gt;✅ Cost is a primary concern&lt;/li&gt;
&lt;li&gt;✅ You need sub-second query latency (not microsecond)&lt;/li&gt;
&lt;li&gt;✅ You don't want to worry about infrastructure&lt;/li&gt;
&lt;li&gt;✅ You need strong consistency guarantees&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Stick with traditional vector databases if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ You need ultra-low latency (single-digit milliseconds)&lt;/li&gt;
&lt;li&gt;❌ You're servicing high-QPS real-time applications&lt;/li&gt;
&lt;li&gt;❌ You need advanced features like hybrid search or complex aggregations&lt;/li&gt;
&lt;li&gt;❌ Your vectors are frequently updated and queried simultaneously&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Nitty-Gritty Details 🔧
&lt;/h2&gt;

&lt;p&gt;Some important specs to keep in mind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Supported distance metrics&lt;/strong&gt;: Cosine and Euclidean&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metadata types&lt;/strong&gt;: String, number, boolean, and lists&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metadata filtering&lt;/strong&gt;: All metadata is filterable out of the box&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encryption&lt;/strong&gt;: SSE-S3 by default, or bring your own KMS keys&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access control&lt;/strong&gt;: Default IAM policies (with a separate &lt;code&gt;s3vectors&lt;/code&gt; namespace)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Block Public Access&lt;/strong&gt;: Always enabled (can't be disabled)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Currently available in&lt;/strong&gt;: US East (N. Virginia), US East (Ohio), US West (Oregon), Europe (Frankfurt), and Asia Pacific (Sydney)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting Started (It's Easier Than You Think) ⚡
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Via Console:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to S3 → Vector Buckets&lt;/li&gt;
&lt;li&gt;Click "Create vector bucket"&lt;/li&gt;
&lt;li&gt;Create a vector index (specify dimensionality and distance metric)&lt;/li&gt;
&lt;li&gt;Start inserting vectors via SDK, CLI, or API&lt;/li&gt;
&lt;/ol&gt;

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

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

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

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

&lt;p&gt;&lt;strong&gt;Via Code:&lt;/strong&gt;&lt;br&gt;
Just use the boto3 S3 Vectors client as shown in the examples above—it's that straightforward.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; Check out the &lt;a href="https://github.com/aws-samples/s3-vectors-embed-cli" rel="noopener noreferrer"&gt;S3 Vectors Embed CLI&lt;/a&gt; on GitHub. It lets you create embeddings and store them in S3 Vectors with single commands. Super handy for testing and quick prototypes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resources &amp;amp; Further Reading 📚
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-vectors.html" rel="noopener noreferrer"&gt;AWS S3 Vectors Official Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/s3/features/vectors/" rel="noopener noreferrer"&gt;S3 Vectors Features Page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/aws/introducing-amazon-s3-vectors-first-cloud-storage-with-native-vector-support-at-scale/" rel="noopener noreferrer"&gt;AWS Blog: Introducing S3 Vectors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-vectors-getting-started.htm" rel="noopener noreferrer"&gt;Getting Started Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/aws-samples/s3-vectors-embed-cli" rel="noopener noreferrer"&gt;S3 Vectors Embed CLI on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>database</category>
      <category>aws</category>
      <category>news</category>
    </item>
    <item>
      <title>Kubernetes Auto-Scaling with Karpenter: The Smart Way to Scale on AWS EKS 🚀</title>
      <dc:creator>Omar Fathy</dc:creator>
      <pubDate>Tue, 09 Dec 2025 00:55:20 +0000</pubDate>
      <link>https://dev.to/omarmfathy219/kubernetes-auto-scaling-with-karpenter-the-smart-way-to-scale-on-aws-eks-5bao</link>
      <guid>https://dev.to/omarmfathy219/kubernetes-auto-scaling-with-karpenter-the-smart-way-to-scale-on-aws-eks-5bao</guid>
      <description>&lt;p&gt;We've all been there. You've got your Kubernetes app humming along nicely on EKS, and then it happens. A sudden traffic surge leaves your pods hanging in &lt;code&gt;Pending&lt;/code&gt; because you're out of nodes. Or maybe it's the opposite, and you're staring at your AWS bill wondering why you're paying for a ghost town of idle instances.&lt;/p&gt;

&lt;p&gt;You might be using the usual suspects HPA and the Cluster Autoscaler. They're okay, I guess. But HPA is obsessed with just CPU and memory, which is like trying to drive a car by only looking at the speedometer. And the Cluster Autoscaler? It moves at a glacial pace and doesn't give you much say in the new machines it spins up. As for scaling by hand... let's not even go there.&lt;/p&gt;

&lt;p&gt;What if I told you there's a better way to handle this? A way to let your cluster manage itself, intelligently. That's where two amazing tools, KEDA and Karpenter, come into the picture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Traditional Auto Scaling Doesn't Work
&lt;/h2&gt;

&lt;p&gt;Think about it: what happens when scaling isn't about CPU, but about something real? Like a mountain of messages piling up in your SQS queue, or a sudden flood of API calls? Your standard tools just shrug. They weren't built for that kind of real-world event.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meet KEDA: Your Application's New Best Friend
&lt;/h2&gt;

&lt;p&gt;KEDA is all about making your applications scale based on events. It connects to all sorts of things—Kafka, RabbitMQ, AWS SQS, you name it—and watches for signs of work piling up.&lt;/p&gt;

&lt;p&gt;So how does it work? You create a simple resource called a &lt;code&gt;ScaledObject&lt;/code&gt; in Kubernetes. This little YAML file tells KEDA a few things: which app (Deployment) to watch, and what &lt;code&gt;Trigger&lt;/code&gt; to look for. That trigger could be "scale up if my SQS queue has more than 10 messages." Behind the scenes, KEDA's operator does the math and feeds these custom metrics to the normal Kubernetes HPA, telling it when to add or remove pods. It's a super clever way to make your scaling truly reflect your application's needs, not just its resource usage.&lt;/p&gt;

&lt;p&gt;KEDA is a champ at scaling your pods up and down. But that's only half the battle. What if KEDA wants to spin up a bunch of pods, but you're out of nodes? All those new pods just get stuck in that dreaded &lt;code&gt;Pending&lt;/code&gt; state. That's the exact gap Karpenter fills.&lt;/p&gt;

&lt;p&gt;Karpenter, an open-source autoscaler from AWS, is all about getting you the right nodes at the right time. It watches for those stranded pods and jumps in to provision or decommission EC2 instances based on what your cluster actually needs, right now.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features That Make Karpenter Awesome
&lt;/h3&gt;

&lt;p&gt;Speed, for one. It bypasses a lot of the usual Kubernetes layers and talks straight to the AWS EC2 API, which means it can have a new node ready for you in the time it takes to grab a coffee. But it's not just fast; it's clever. It looks at the pods that are waiting and plays a game of Tetris to find the most cost effective EC2 instance that fits them perfectly. No more paying for oversized nodes!&lt;/p&gt;

&lt;p&gt;And when the traffic dies down, Karpenter turns into a neat freak. It'll gracefully shuffle your pods onto fewer nodes and get rid of the empty ones, which is a beautiful thing for your cloud bill. Since it’s an AWS native tool, all the IAM stuff just works without a headache. You just tell it the rules of the playground what instance types are fair game, which zones to play in using a &lt;code&gt;NodePool&lt;/code&gt;, and its controller takes care of everything else.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Dream Team: KEDA + Karpenter
&lt;/h2&gt;

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

&lt;p&gt;This KEDA and Karpenter combo is the real dream team. Think of KEDA as the brains of the operation the lookout in the crow's nest who spots the approaching wave of work and yells, "More hands on deck!" Then you've got Karpenter as the muscle, the one who instantly builds out the extra deck space (the new nodes) just in time for the new crew (the pods) to get to work. It’s this beautiful, symbiotic relationship that creates a truly elastic infrastructure. Your cluster just expands and contracts exactly when it needs to, without you lifting a finger.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ready to Give it a Shot?
&lt;/h2&gt;

&lt;p&gt;Getting KEDA and Karpenter set up on your EKS cluster does take a little bit of work upfront, but believe me, the time you'll save later is massive. The official docs are your best friend here, since they'll always have the latest and greatest steps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing Karpenter on AWS EKS
&lt;/h2&gt;

&lt;p&gt;Follow these steps to install Karpenter as outlined in the &lt;a href="https://karpenter.sh/docs/getting-started/getting-started-with-karpenter" rel="noopener noreferrer"&gt;official guide&lt;/a&gt;:&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing KEDA on AWS EKS
&lt;/h2&gt;

&lt;p&gt;Follow these steps to install KEDA on AWS EKS using the &lt;a href="https://keda.sh/docs/2.17/deploy/" rel="noopener noreferrer"&gt;official guide&lt;/a&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  Installing Redis
&lt;/h3&gt;

&lt;p&gt;Install Redis using Helm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

helm &lt;span class="nb"&gt;install &lt;/span&gt;redis bitnami/redis &lt;span class="nt"&gt;--namespace&lt;/span&gt; redis &lt;span class="nt"&gt;--create-namespace&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--set&lt;/span&gt; auth.enabled&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This puts Redis in the &lt;code&gt;redis&lt;/code&gt; namespace without authentication, perfect for testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating Your First Auto Scaling Workload
&lt;/h2&gt;

&lt;p&gt;Let's build a sample workload that demonstrates KEDA and Karpenter working together.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deploying a Worker Application
&lt;/h3&gt;

&lt;p&gt;Create a file called &lt;code&gt;scaledobject.yaml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;keda.sh/v1alpha1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ScaledObject&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;redisconsumer&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;scaleTargetRef&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;worker&lt;/span&gt;
  &lt;span class="na"&gt;minReplicaCount&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
  &lt;span class="na"&gt;maxReplicaCount&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;
  &lt;span class="na"&gt;triggers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;redis&lt;/span&gt;
      &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;address&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;redis-master.default.svc.cluster.local:6379&lt;/span&gt;
        &lt;span class="na"&gt;listName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;jobs&lt;/span&gt;
        &lt;span class="na"&gt;listLength&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;5"&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;apps/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deployment&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;worker&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;matchLabels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;worker&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;worker&lt;/span&gt;
    &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;worker&lt;/span&gt;
          &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;busybox&lt;/span&gt;
          &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sh"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;-c"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;while&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;true;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;do&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sleep&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;10;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;done"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
          &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;requests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;250Mi"&lt;/span&gt;
              &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1000m"&lt;/span&gt;
            &lt;span class="na"&gt;limits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;250Mi"&lt;/span&gt;
              &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1000m"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apply this configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; scaledobject.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This setup creates a deployment named &lt;code&gt;worker&lt;/code&gt; and a &lt;code&gt;ScaledObject&lt;/code&gt; that monitors a Redis list called &lt;code&gt;jobs&lt;/code&gt;. KEDA will automatically scale the worker pods based on the length of this list.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing Your Auto Scaling Setup
&lt;/h2&gt;

&lt;p&gt;Now it's time to see your auto scaling infrastructure in action.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Connect to Redis
&lt;/h3&gt;

&lt;p&gt;First, connect to your Redis instance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; redis &lt;span class="si"&gt;$(&lt;/span&gt;kubectl get pod &lt;span class="nt"&gt;-n&lt;/span&gt; redis &lt;span class="nt"&gt;-l&lt;/span&gt; app.kubernetes.io/name&lt;span class="o"&gt;=&lt;/span&gt;redis &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"{.items[0].metadata.name}"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; redis-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Add Workload
&lt;/h3&gt;

&lt;p&gt;Push some messages to the Redis list to simulate workload:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;LPUSH &lt;span class="nb"&gt;jobs&lt;/span&gt; &lt;span class="s2"&gt;"task-1"&lt;/span&gt;
LPUSH &lt;span class="nb"&gt;jobs&lt;/span&gt; &lt;span class="s2"&gt;"task-2"&lt;/span&gt;
LPUSH &lt;span class="nb"&gt;jobs&lt;/span&gt; &lt;span class="s2"&gt;"task-3"&lt;/span&gt;
LPUSH &lt;span class="nb"&gt;jobs&lt;/span&gt; &lt;span class="s2"&gt;"task-4"&lt;/span&gt;
LPUSH &lt;span class="nb"&gt;jobs&lt;/span&gt; &lt;span class="s2"&gt;"task-5"&lt;/span&gt;
LPUSH &lt;span class="nb"&gt;jobs&lt;/span&gt; &lt;span class="s2"&gt;"task-6"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Watch the Magic Happen
&lt;/h3&gt;

&lt;p&gt;Monitor your pods scaling up:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get pods &lt;span class="nt"&gt;-l&lt;/span&gt; &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;worker &lt;span class="nt"&gt;-w&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(demo video)&lt;/p&gt;

&lt;p&gt;So, what just happened behind the scenes? It started the moment you pushed items to the Redis list. KEDA's trigger saw the list growing and knew it needed more pods to handle the work. It told the Kubernetes HPA to scale up the worker deployment, which created new pod replicas. But with no room to run, those pods were just sitting there in &lt;code&gt;Pending&lt;/code&gt;. That's when Karpenter stepped in. It saw the stranded pods, figured out exactly what kind of node they needed, and launched a new EC2 instance to join the cluster. Once the node was ready, Kubernetes scheduled the pods, and they got to work. A perfect, automated chain reaction.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Few Tips for Going Live
&lt;/h2&gt;

&lt;p&gt;When you're ready to take this into production, just keep a couple of things in mind. For KEDA, make sure you set sane &lt;code&gt;min&lt;/code&gt; and &lt;code&gt;max&lt;/code&gt; replica counts so your app doesn't disappear when idle or scale to the moon. And don't be afraid to combine a few different triggers to create some really smart scaling rules. On the Karpenter side of things, give it a good variety of instance types to choose from—flexibility is its superpower. Definitely turn on consolidation to let it clean up underused nodes and save you some cash. And why not let it use Spot instances for workloads that can handle interruptions? It's a great way to slash your EC2 bill.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Benefits You'll Get
&lt;/h2&gt;

&lt;p&gt;So, what do you get out of all this? For your operations team, it means less babysitting. You're not manually managing nodes or tweaking replica counts anymore. This leads to a more reliable system, because your apps can handle sudden traffic spikes without falling over. From a cost perspective, you're only paying for what you use. Karpenter's ability to consolidate nodes and use spot instances means you're not over-provisioning for worst-case scenarios. And finally, the performance boost is real. Your apps respond faster to actual business needs, not just CPU load, leading to a much better experience for your users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Getting Started
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://keda.sh/docs/" rel="noopener noreferrer"&gt;KEDA Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://karpenter.sh/docs/" rel="noopener noreferrer"&gt;Karpenter Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kedacore/keda" rel="noopener noreferrer"&gt;KEDA GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/aws/karpenter" rel="noopener noreferrer"&gt;Karpenter GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>AWS ECS Managed Instances: The Middle Ground We've Been Waiting For</title>
      <dc:creator>Omar Fathy</dc:creator>
      <pubDate>Thu, 27 Nov 2025 12:13:20 +0000</pubDate>
      <link>https://dev.to/omarmfathy219/aws-ecs-managed-instances-the-middle-ground-weve-been-waiting-for-98f</link>
      <guid>https://dev.to/omarmfathy219/aws-ecs-managed-instances-the-middle-ground-weve-been-waiting-for-98f</guid>
      <description>&lt;h1&gt;
  
  
  AWS ECS Managed Instances: The Middle Ground We've Been Waiting For
&lt;/h1&gt;

&lt;p&gt;If you've been operating containerized workloads on AWS, you've probably grappled with a known trade-off. Use Fargate and enjoy hands-off simplicity, but it costs more and you give up control of your compute. Or manage your own EC2 fleet on ECS, enjoy complete hardware control and better costs, but now you're patching instances, configuring auto-scaling groups, and managing launch templates.&lt;/p&gt;

&lt;p&gt;It's a problem that has baffled engineers for decades. But AWS just came out with something that might finally bridge the gap: &lt;strong&gt;ECS Managed Instances&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Container Management Balancing Act
&lt;/h2&gt;

&lt;p&gt;Let's be practical here with container orchestration. Not many teams wake up excited about managing infrastructure. They'd rather deploy features, not troubleshoot why a node consumed all its disk space at 2 AM or why their auto-scaling group went and spawned instances in the wrong availability zone.&lt;/p&gt;

&lt;p&gt;Fargate cut out all of this by being serverless. You define your work, you deploy, and AWS handles all the rest behind the scenes. No instances to manage, no capacity planning, no patching cycles. It's untainted.&lt;/p&gt;

&lt;p&gt;There's always a catch, however.&lt;/p&gt;

&lt;p&gt;What if you use GPUs for machine learning inference as part of your workload? What if processing the data requires high-throughput networking? What happens if you have a database workload that requires quick access to local NVMe storage? Fargate is unable to assist with those. Now that you're working with EC2 instances independently once more, you're also handling all of their accessories.&lt;/p&gt;

&lt;p&gt;Additionally, the expense can be high even if you don't require specialized hardware. Fargate charges more for that convenience, and the math becomes less appealing when you're managing hundreds or even thousands of containers around the clock. You can divide the cost across workloads by bin-packing several containers onto a single instance using EC2-backed clusters. That efficiency builds up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter ECS Managed Instances 🚀
&lt;/h2&gt;

&lt;p&gt;ECS Managed Instances is in the center of that serverless spectrum. Imagine AWS saying, "All right, we'll take care of your EC2 fleet, but you still get to pick the hardware."&lt;/p&gt;

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

&lt;p&gt;In actuality, it appears like this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You still specify instance requirements.&lt;/strong&gt; Do you require GPU acceleration? Do you require specific CPU architectures like Graviton? Do you require specific instance families for network performance? You can specify those characteristics, and ECS will select among compatible instance types. Or you can let AWS automatically select the most cost-effective ones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS does everything operationally for you.&lt;/strong&gt; Provisioning, scaling, security updates, instance refreshes—it's all handled. No more needing to keep launch templates current or deciding on auto-scaling policies. AWS patches instances automatically every 14 days or so, and if you have to avoid interruptions during busy times of day, you can use EC2 event windows to plan maintenance.&lt;/p&gt;

&lt;p&gt;The provisioned compute? It's the same old EC2 instances within your cluster. That means you can have multiple containers per instance, use daemon tasks for collecting logs and other such things, and privilege containers where needed. All of the things Fargate doesn't enable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Makes This Different
&lt;/h2&gt;

&lt;p&gt;Let's step through why this matters:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Operational Simplicity Without Compromise&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;You're not giving up control to get convenience. You can still specify GPU instances for ML workloads, choose Graviton processors for ARM workloads, or choose instance types with local low-latency storage. AWS just handles the drudgery of the operational specifics.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Cost Efficiency That Scales&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;There's an additional management fee on top of EC2 prices—roughly 3% overhead—but you're still coming out ahead of Fargate in most scenarios. More importantly, your existing EC2 savings plans and reserved instances carry over to the underlying compute. For organizations already invested in those, that's a huge win.&lt;/p&gt;

&lt;p&gt;And because ECS is able to bin-pack more than one task into a single instance, you're using resources more efficiently. The service also maximizes placement constantly, combining workloads and auto-shutting down idle instances.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Security by Default&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Managed Instances are powered by Bottlerocket, AWS's container-native operating system. It's lightweight, hardened, and container-optimized. Coupled with automated patching every 14 days, you have a security posture that's easier to handle than rolling your own.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Seamless AWS Integration&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;It's not an afterthought add-on service tacked on to ECS. It's a first-class launch type that integrates with the rest of your AWS stack. VPCs, security groups, IAM roles, CloudWatch metrics—everything just works the way you'd expect.&lt;/p&gt;

&lt;h2&gt;
  
  
  When Should You Use This? 💡
&lt;/h2&gt;

&lt;p&gt;Let's talk about real-world examples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You require specialized hardware.&lt;/strong&gt; Running GPU-accelerated workloads for rendering or ML? Processing high-bandwidth streams of data? ECS Managed Instances enables you to obtain the specialized hardware without ops overhead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You're optimizing for cost at scale.&lt;/strong&gt; If you've got a big container workload and Fargate prices are eating away at your budget, Managed Instances can reduce that expense without diminishing ease of operation. That you're able to leverage current EC2 savings plans makes it all the more compelling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You need daemon tasks or privileged containers.&lt;/strong&gt; Fargate doesn't support them. If your design relies on background work that runs on every host, or you need privileged permissions for certain operations, you'll need EC2-backed clusters. Managed Instances gives you that without the management burden.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You want to reduce management overhead.&lt;/strong&gt; If you're already using self-managed EC2 instances in ECS and fed up with patching, capacity planning, and instance lifecycle management, this is an obvious upgrade path. You retain your flexibility but pass on the operational effort.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tradeoffs You Should Know
&lt;/h2&gt;

&lt;p&gt;There is no free lunch, so let's be realistic about the tradeoffs.&lt;/p&gt;

&lt;p&gt;The management fee is not free. It's a small percentage, but it's always billed at on-demand rates, even though the underlying EC2 instances get to benefit from savings plans. For some workloads, that might tip the economics in support of self-managed infrastructure.&lt;/p&gt;

&lt;p&gt;You also don't get quite the same "fire and forget" as Fargate. AWS certainly does a lot of the heavy lifting, but you're still setting instance attributes and being aware of the compute underneath. It's less work than doing EC2 straight out, but it's not no brain.&lt;/p&gt;

&lt;p&gt;And right now, it's not available in many places. It's offered in US East, US West, Europe (Ireland), Africa (Cape Town), and select Asia Pacific regions. If you're in Frankfurt or elsewhere, you'll be waiting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;If you've already got ECS set up and running, it's simple to experiment with this. In setting up a new cluster, there will be "Managed Instances" as an option to accompany Fargate and EC2. You can choose "Use ECS default" to let AWS pick up-to-date instance types, or use "Use custom – advanced" to specify particular properties like CPU architecture, memory, or GPU requirements.&lt;/p&gt;

&lt;p&gt;You can do this behind the scenes as well with CloudFormation, CDK, or the AWS CLI. Infrastructure-as-code support came out of the box on day one, which is wonderful.&lt;/p&gt;

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

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

&lt;h2&gt;
  
  
  The Bigger Picture ✨
&lt;/h2&gt;

&lt;p&gt;ECS Managed Instances appears to be AWS acknowledging that there indeed was a gap in their container product offerings. Fargate is great at what it does, but it's not the fix for every workload. EC2 offers control, but with operational overhead as the cost. This new option gives a middle ground that many teams will find genuinely useful.&lt;/p&gt;

&lt;p&gt;It's also within a broader trend. AWS is moving towards more managed experiences in general—EKS Auto Mode, managed node groups, services that handle the undifferentiated heavy lifting for you but give you the knobs that you actually care about. ECS Managed Instances fits squarely into that trend.&lt;/p&gt;

&lt;p&gt;If you've been running containers with ECS, this is something you might want to consider. Whether it's valuable depends on your own workload, cost structure, and way of working. But for those who desire the elasticity of EC2 without the management burden, this could be the answer you've been waiting for.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Ready to give it a try?&lt;/strong&gt; Take a look at the &lt;a href="https://aws.amazon.com/ecs/" rel="noopener noreferrer"&gt;official documentation&lt;/a&gt; and launch a test cluster. The best way to determine if it meets your requirements is to deploy your actual workloads and observe how it runs.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>containers</category>
      <category>devops</category>
    </item>
    <item>
      <title>Pod Identity: The Authentication Revolution Kubernetes Needed 🔐</title>
      <dc:creator>Omar Fathy</dc:creator>
      <pubDate>Sun, 12 Oct 2025 23:18:26 +0000</pubDate>
      <link>https://dev.to/omarmfathy219/pod-identity-the-authentication-revolution-kubernetes-needed-33ph</link>
      <guid>https://dev.to/omarmfathy219/pod-identity-the-authentication-revolution-kubernetes-needed-33ph</guid>
      <description>&lt;h2&gt;
  
  
  🤔 What About it?
&lt;/h2&gt;

&lt;p&gt;So AWS just dropped Pod Identity for EKS, and honestly? It's about damn time. 💯 We've been dealing with authentication headaches in Kubernetes for years - hardcoded secrets, complex OIDC setups, and the constant battle between security and simplicity. &lt;/p&gt;

&lt;p&gt;Pod Identity is basically AWS saying "enough is enough" and giving us a way to handle authentication that actually makes sense. No more fighting with OIDC providers or managing a million different service accounts. Just clean, simple, secure authentication that works.&lt;/p&gt;

&lt;h2&gt;
  
  
  😤 The Problems Pod Identity Actually Solves
&lt;/h2&gt;

&lt;p&gt;Let's be real - the old ways of handling authentication in Kubernetes were a mess. We've all been there:&lt;/p&gt;

&lt;h3&gt;
  
  
  The Hardcoded Credentials Mess 🔑
&lt;/h3&gt;

&lt;p&gt;Remember when we used to put AWS credentials in environment variables or config files? Yeah, that was a security nightmare waiting to happen. One leaked credential and your entire infrastructure is toast. &lt;/p&gt;

&lt;h3&gt;
  
  
  The Kubernetes Secrets Problem 🤹‍♂️
&lt;/h3&gt;

&lt;p&gt;Kubernetes secrets seemed like a good idea at first, but they're just base64 encoded. It looks secure but anyone can get in. Plus, managing them across multiple clusters is a pain.&lt;/p&gt;

&lt;h3&gt;
  
  
  The IRSA Complexity Overload 🧠
&lt;/h3&gt;

&lt;p&gt;IAM Roles for Service Accounts (IRSA) was supposed to be the solution, but it came with its own baggage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OIDC providers for every cluster (because apparently we needed more complexity)&lt;/li&gt;
&lt;li&gt;Trust policies that look like they were written by a lawyer&lt;/li&gt;
&lt;li&gt;Cross-cluster management that makes your head spin&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✨ How Pod Identity Changes Everything
&lt;/h2&gt;

&lt;p&gt;Here's where things get interesting. 🤯 Instead of the old approach where every cluster needs its own OIDC setup, Pod Identity uses a single IAM principal (&lt;code&gt;pods.eks.amazonaws.com&lt;/code&gt;) that works across all your clusters.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎭 The Magic Behind the Scenes
&lt;/h3&gt;

&lt;p&gt;So here's how this actually works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;You create an IAM role&lt;/strong&gt; → Give it the permissions your pods need ⚡&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You map it to a service account&lt;/strong&gt; → Tell EKS "this role belongs to this service account" 🎯&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You deploy your pod&lt;/strong&gt; → Use that service account, and magic happens ✨&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS handles the rest&lt;/strong&gt; → The Pod Identity Agent gives your pod temporary credentials automatically 🔄&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It's basically AWS doing all the heavy lifting for you. No more messing around with OIDC providers or trying to figure out complex trust relationships.&lt;/p&gt;

&lt;h2&gt;
  
  
  🆚 Pod Identity vs IRSA: The Real Talk
&lt;/h2&gt;

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

&lt;p&gt;Look, IRSA isn't going anywhere - AWS isn't going to break existing stuff. But Pod Identity is definitely the future, and here's why:&lt;/p&gt;

&lt;h3&gt;
  
  
  What Pod Identity Does Better ✅
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No OIDC providers&lt;/strong&gt; - One less thing to manage and screw up&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-cluster reusability&lt;/strong&gt; - Same IAM role works everywhere&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simpler trust policies&lt;/strong&gt; - Just &lt;code&gt;pods.eks.amazonaws.com&lt;/code&gt;, that's it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better performance&lt;/strong&gt; - Agent-based credential distribution instead of per-pod assumption&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cleaner separation of duties&lt;/strong&gt; - EKS handles the identity stuff, IAM handles the permissions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When You Might Still Want IRSA 🤷‍♂️
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Legacy applications&lt;/strong&gt; - If it works, don't touch it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complex OIDC requirements&lt;/strong&gt; - Some enterprises have existing OIDC setups they can't change&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-account scenarios&lt;/strong&gt; - Pod Identity is still catching up here&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🛠️ How the Pod Identity Agent Actually Works
&lt;/h2&gt;

&lt;p&gt;This is the cool part. The Pod Identity Agent runs on every node in your cluster and handles all the credential distribution. Here's what happens when you deploy a pod:&lt;/p&gt;

&lt;h3&gt;
  
  
  The Pod Gets Mutated 🧬
&lt;/h3&gt;

&lt;p&gt;When EKS starts a pod that uses Pod Identity, it automatically adds these environment variables:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE&lt;/span&gt;
  &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/var/run/secrets/pods.eks.amazonaws.com/serviceaccount/eks-pod-identity-token"&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;AWS_CONTAINER_CREDENTIALS_FULL_URI&lt;/span&gt;
  &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://169.254.170.23/v1/credentials"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Plus it mounts a volume with the authentication token. AWS handles all of this automatically - you don't have to do anything.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Agent Does the Heavy Lifting 💪
&lt;/h3&gt;

&lt;p&gt;The Pod Identity Agent on each node:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Sees the pod&lt;/strong&gt; → Recognizes it needs credentials&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Calls the EKS Auth API&lt;/strong&gt; → Uses &lt;code&gt;AssumeRoleForPodIdentity&lt;/code&gt; to get temporary credentials&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Serves the credentials&lt;/strong&gt; → Makes them available to the AWS SDK via HTTP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handles rotation&lt;/strong&gt; → Automatically refreshes credentials before they expire&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The beauty is that your application code doesn't change at all. The AWS SDK just works with the default credential chain.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔧 Hands-On: Actually Setting This Up
&lt;/h2&gt;

&lt;p&gt;Alright, enough talking. Let's actually build something that works. 💪&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Enable Pod Identity (The Easy Part) 🎉
&lt;/h3&gt;

&lt;p&gt;First, you need to install the Pod Identity Agent add-on. This is actually the easiest part:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Via AWS Console:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to your EKS cluster&lt;/li&gt;
&lt;li&gt;Click on "Add-ons"&lt;/li&gt;
&lt;li&gt;Find "EKS Pod Identity Agent" in the list&lt;/li&gt;
&lt;li&gt;Click "Add" and wait for it to install&lt;/li&gt;
&lt;/ol&gt;

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

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

&lt;p&gt;&lt;strong&gt;Via AWS CLI:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws eks create-addon &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--cluster-name&lt;/span&gt; your-cluster-name &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--addon-name&lt;/span&gt; eks-pod-identity-agent &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--region&lt;/span&gt; your-region
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's pretty much it. No complicated configuration, no OIDC setup, no headaches.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Create an IAM Role (The Trust Policy Part) 🎯
&lt;/h3&gt;

&lt;p&gt;This is where things get interesting. You create an IAM role with a trust policy that looks like this:&lt;/p&gt;

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

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Principal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Service"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pods.eks.amazonaws.com"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"sts:AssumeRole"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"sts:TagSession"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Condition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"StringEquals"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"eks:cluster-name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-cluster-name"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"eks:namespace"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-namespace"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"eks:serviceaccount-name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-service-account"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice how clean that looks? No OIDC provider ARN, no complex conditions, just straightforward "this role can be assumed by pods in this cluster/namespace/service account."&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Create the Association (The Magic Part) ✨
&lt;/h3&gt;

&lt;p&gt;Now you tell EKS "this IAM role belongs to this service account":&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Via AWS Console:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to your EKS cluster&lt;/li&gt;
&lt;li&gt;Click on "Access" tab&lt;/li&gt;
&lt;li&gt;Scroll down to "Pod Identity associations"&lt;/li&gt;
&lt;li&gt;Click "Create Pod Identity association"&lt;/li&gt;
&lt;li&gt;Select your IAM role, namespace, and service account&lt;/li&gt;
&lt;/ol&gt;

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

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

&lt;p&gt;&lt;strong&gt;Via AWS CLI:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws eks create-pod-identity-association &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--cluster-name&lt;/span&gt; your-cluster-name &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--namespace&lt;/span&gt; your-namespace &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--service-account&lt;/span&gt; your-service-account &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--role-arn&lt;/span&gt; arn:aws:iam::123456789012:role/your-pod-identity-role &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--region&lt;/span&gt; your-region
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Deploy Your Test Pod
&lt;/h3&gt;

&lt;p&gt;Now let's test this it. Create a simple pod that uses the service account:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Namespace&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test-namespace&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ServiceAccount&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test-service-account&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test-namespace&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Pod&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test-pod&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test-namespace&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;aws-cli&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;amazon/aws-cli:latest&lt;/span&gt;
    &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;sleep'&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;36000'&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;serviceAccountName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test-service-account&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Deploy it and test:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; pod.yaml
kubectl &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; test-pod &lt;span class="nt"&gt;-n&lt;/span&gt; test-namespace &lt;span class="nt"&gt;--&lt;/span&gt; aws s3 &lt;span class="nb"&gt;ls

&lt;/span&gt;2025-07-06 20:39:47 test.txt
2025-07-06 20:40:08 README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you see your S3 buckets, voilà! Pod Identity is working. 🎉&lt;/p&gt;

&lt;h2&gt;
  
  
  🤷‍♂️ The Reality Check (Because Nothing's Perfect)
&lt;/h2&gt;

&lt;p&gt;Look, Pod Identity is great, but it's not perfect. It only works on EKS with Linux nodes (sorry Windows and Fargate users), and you're limited to 5,000 associations per cluster. Changes can take a few seconds to propagate, and you need network access to the Pod Identity Agent.&lt;/p&gt;

&lt;p&gt;But honestly? These limitations are pretty minor compared to the benefits. The cross-cluster reusability alone is worth the trade-offs for most use cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 Who Should Actually Use This?
&lt;/h2&gt;

&lt;p&gt;If you're building new EKS clusters or dealing with authentication headaches in existing ones, Pod Identity is definitely worth a look. It's perfect for multi-cluster setups where you want the same IAM roles everywhere, and for teams that are tired of fighting with OIDC providers.&lt;/p&gt;

&lt;p&gt;Existing IRSA setups can keep doing their thing - no need to break what's working. And if you're on Fargate, you'll have to wait a bit longer for support.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚚 Migration Reality
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Good news&lt;/strong&gt;: Pod Identity works alongside IRSA, so you can migrate gradually 😅&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Bad news&lt;/strong&gt;: No automatic migration tool (because AWS loves manual work) 😞&lt;/p&gt;

&lt;p&gt;The migration path is actually pretty straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create Pod Identity associations&lt;/strong&gt; for your service accounts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test thoroughly&lt;/strong&gt; - Make sure everything still works&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remove IRSA configurations&lt;/strong&gt; - Clean up the old OIDC stuff&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor and celebrate&lt;/strong&gt; - You're now using the future&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🔒 Security Stuff That Actually Matters
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Network Security 🌐
&lt;/h3&gt;

&lt;p&gt;The Pod Identity Agent runs on port 80 and 2703 on the link-local address (169.254.170.23). You need to make sure your security groups allow this traffic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Credential Isolation 🔐
&lt;/h3&gt;

&lt;p&gt;Each pod only gets credentials for its associated IAM role. No more sharing credentials between pods.&lt;/p&gt;

&lt;h3&gt;
  
  
  Audit Trail 📝
&lt;/h3&gt;

&lt;p&gt;It's a security best practice to always know who's assuming roles and what they're doing. So All Pod Identity operations are logged in CloudTrail, so you can see who's assuming what roles.&lt;/p&gt;

&lt;h3&gt;
  
  
  Least Privilege 🛡️
&lt;/h3&gt;

&lt;p&gt;Since each service account gets its own IAM role, you can scope permissions down to exactly what each application needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌍 Regional Availability
&lt;/h2&gt;

&lt;p&gt;Pod Identity works in all AWS regions where EKS is supported. Multi-region setups work great too - each region needs its own EKS cluster and Pod Identity Agent, but you can share the same IAM roles across regions.&lt;/p&gt;

&lt;p&gt;The only real limitation is that Fargate, Outposts, and EKS Anywhere aren't supported yet. But for standard EKS clusters, you're good to go.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤷‍♂️ So, Should You Actually Use This?
&lt;/h2&gt;

&lt;p&gt;Look, Pod Identity isn't some magic bullet that solves all your Kubernetes authentication problems. But it's definitely a step in the right direction. &lt;/p&gt;

&lt;p&gt;If you're starting a new EKS cluster or dealing with authentication headaches in existing ones, Pod Identity is worth looking into. It's simpler, more secure, and easier to maintain than the alternatives.&lt;/p&gt;

&lt;p&gt;The migration path is manageable, and the benefits are real. Plus, it's the direction AWS is heading, so you might as well get on board now.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔗 Resources That Actually Help
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Essential Documentation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.aws.amazon.com/eks/latest/userguide/pod-id-how-it-works.html" rel="noopener noreferrer"&gt;AWS EKS Pod Identity Documentation&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/setting-up-enable-IAM-roles.html" rel="noopener noreferrer"&gt;Pod Identity vs IRSA Guide&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html" rel="noopener noreferrer"&gt;Getting Started with Pod Identity&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Community Resources
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://aws.amazon.com/blogs/containers/eks-pod-identity/" rel="noopener noreferrer"&gt;AWS Blog: EKS Pod Identity Introduction&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=aUjJSorBE70" rel="noopener noreferrer"&gt;YouTube Tutorials&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/aws-samples/amazon-eks-pod-identity-demo" rel="noopener noreferrer"&gt;GitHub Examples&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>kubernetes</category>
      <category>devops</category>
      <category>aws</category>
    </item>
    <item>
      <title>Amazon Aurora DSQL: The distributed Serverless Database</title>
      <dc:creator>Omar Fathy</dc:creator>
      <pubDate>Wed, 20 Aug 2025 00:51:36 +0000</pubDate>
      <link>https://dev.to/omarmfathy219/amazon-aurora-dsql-the-distributed-serverless-database-4d2</link>
      <guid>https://dev.to/omarmfathy219/amazon-aurora-dsql-the-distributed-serverless-database-4d2</guid>
      <description>&lt;h2&gt;
  
  
  What's All the Hype About? 🤔
&lt;/h2&gt;

&lt;p&gt;So AWS just dropped something that's got the database world talking Aurora DSQL. And honestly? The hype is real. We're talking about a database that "defies physics" according to some folks, and after digging into it, that's not just Vegas conference talk.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem Aurora DSQL Solves
&lt;/h2&gt;

&lt;p&gt;Let's be real traditional databases have this annoying habit of hitting walls. You know the drill: more connections come in, things start locking up, performance goes down the drain, and suddenly your app is crawling. It's like trying to funnel a river through a garden hose.&lt;/p&gt;

&lt;p&gt;Software developers are expensive (and rightfully so), but they're spending way too much time dealing with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integration nightmares during deployment&lt;/li&gt;
&lt;li&gt;Database scaling headaches
&lt;/li&gt;
&lt;li&gt;Infrastructure management that nobody actually wants to do&lt;/li&gt;
&lt;li&gt;Picking the "right" database architecture upfront&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Aurora DSQL Changes Everything
&lt;/h2&gt;

&lt;p&gt;Here's where it gets wild. Instead of the old-school approach where everyone fights for database resources, Aurora DSQL creates a &lt;strong&gt;micro VM for every single transaction&lt;/strong&gt;. We're talking about VMs that use maybe 1/100th of a CPU basically Lambda-level efficiency.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Magic Behind the Scenes 🪄
&lt;/h3&gt;

&lt;p&gt;Each transaction gets its own isolated playground:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Your transaction starts&lt;/strong&gt; → Gets its own mini database engine in a VM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You do your work&lt;/strong&gt; → Completely isolated, no idea other transactions exist
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time to commit&lt;/strong&gt; → The "adjudicator" checks if anyone else modified the same data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Success or retry&lt;/strong&gt; → Either your changes go through, or you retry with exponential backoff&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It's like having your own personal database for every operation. No locks, no waiting, no drama.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Trade-offs (Because Nothing's Perfect)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Good Stuff ✅
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Actually unlimited scale&lt;/strong&gt; for connections (not just marketing speak)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero infrastructure management&lt;/strong&gt; - AWS handles literally everything&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL compatible&lt;/strong&gt; - use the same code you already have&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;99.99% availability&lt;/strong&gt; (single region) / &lt;strong&gt;99.999%&lt;/strong&gt; (multi-region)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Active-active multi-region&lt;/strong&gt; writes out of the box&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Reality Check ⚠️
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;5-minute transaction timeout&lt;/strong&gt; - hard limit, no exceptions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No foreign keys&lt;/strong&gt; - your app needs to handle referential integrity
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No stored procedures&lt;/strong&gt; - logic moves to your application layer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimistic locking&lt;/strong&gt; - more failed transactions, more retry logic needed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limited PostgreSQL features&lt;/strong&gt; (for now) - no JSON, no PG Vector yet&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Who Should Actually Use This Thing?
&lt;/h2&gt;

&lt;p&gt;Look, I've been around enough database launches to know that not every shiny new thing is right for everyone. But after digging into Aurora DSQL, there are some obvious sweet spots:&lt;/p&gt;

&lt;h3&gt;
  
  
  🎮 Gaming Stuff
&lt;/h3&gt;

&lt;p&gt;You know those leaderboards that everyone's constantly updating? Or when 50,000 players are all trying to claim the same daily reward? Yeah, that's where this shines. No more "sorry, database is locked" messages during peak hours.&lt;/p&gt;

&lt;h3&gt;
  
  
  🏦 Banking (Where Money Actually Matters)
&lt;/h3&gt;

&lt;p&gt;If you're doing account transfers and transactions, this could be a game changer. Each transaction usually touches different accounts anyway, so the optimistic locking thing actually works in your favor. Just make sure you can handle those retry scenarios properly.&lt;/p&gt;

&lt;h3&gt;
  
  
  🛒 E-commerce When Things Get Crazy
&lt;/h3&gt;

&lt;p&gt;Black Friday sales, flash deals, thousands of people hitting "buy now" at the same time? Traditional databases cry. Aurora DSQL just keeps going. Shopping carts, order processing, inventory updates it's all fair game.&lt;/p&gt;

&lt;h3&gt;
  
  
  📱 Social Apps (The Attention Economy)
&lt;/h3&gt;

&lt;p&gt;Posts, likes, comments, user sessions basically anything where you've got tons of people doing small, quick operations. If your app has that "everyone's always online" vibe, this might save your sanity.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Makes This Different from Google Spanner?
&lt;/h2&gt;

&lt;p&gt;While Spanner and CockroachDB have done distributed SQL before, Aurora DSQL's approach with individual micro VMs is fundamentally different. It's designed to handle way more concurrent connections without the traditional bottlenecks.&lt;/p&gt;

&lt;p&gt;Plus, it's got that new AWS time service that's supposedly the most accurate clock ever built for computing. When you're doing global, active-active writes, every millisecond matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Migration Reality 🚚
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Good news&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No magic one-click migration from regular Aurora
&lt;/li&gt;
&lt;li&gt;If you're already doing clean application design, the transition isn't horrible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You'll need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Audit your longest-running queries (remember that 5-minute limit)&lt;/li&gt;
&lt;li&gt;Move foreign key logic to your application
&lt;/li&gt;
&lt;li&gt;Add retry logic with exponential backoff&lt;/li&gt;
&lt;li&gt;Test, test, test your failure scenarios&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting Started 🚀
&lt;/h2&gt;

&lt;p&gt;Aurora DSQL is in preview, so expect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Limited features initially (classic AWS MVP approach)&lt;/li&gt;
&lt;li&gt;Rapid feature additions based on real customer feedback&lt;/li&gt;
&lt;li&gt;No CloudFormation/Terraform support yet (shocking, right?)&lt;/li&gt;
&lt;li&gt;PostgreSQL compatibility that's growing over time&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌍 Regional Availability
&lt;/h2&gt;

&lt;p&gt;Aurora DSQL is currently available in a growing number of AWS regions, but there are some important considerations for where you can deploy your clusters.&lt;/p&gt;

&lt;h3&gt;
  
  
  Supported Regions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;United States:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;US East (N. Virginia)&lt;/strong&gt; - us-east-1&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;US East (Ohio)&lt;/strong&gt; - us-east-2
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;US West (Oregon)&lt;/strong&gt; - us-west-2&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Europe:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Europe (Ireland)&lt;/strong&gt; - eu-west-1&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Europe (London)&lt;/strong&gt; - eu-west-2&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Europe (Paris)&lt;/strong&gt; - eu-west-3&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Asia Pacific:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Asia Pacific (Tokyo)&lt;/strong&gt; - ap-northeast-1&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asia Pacific (Osaka)&lt;/strong&gt; - ap-northeast-3&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Multi-Region Catch (There's Always a Catch)
&lt;/h3&gt;

&lt;p&gt;Okay, so here's where things get a bit annoying. You want that fancy multi-region setup with 99.999% availability? Well, you better like American geography because right now it only works between these three US regions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;US East (N. Virginia)&lt;/li&gt;
&lt;li&gt;US East (Ohio) &lt;/li&gt;
&lt;li&gt;US West (Oregon)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I know, I know. Your European customers are probably not thrilled about this. But hey, it's preview tech what did you expect?&lt;/p&gt;

&lt;h3&gt;
  
  
  What This Actually Means for Real Projects
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Building something global?&lt;/strong&gt; You're stuck deploying in US regions for now. Slap CloudFront in front of it and pray the latency isn't too bad for your London users. Not ideal, but it works.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Just need something regional?&lt;/strong&gt; Lucky you! Pick whatever region is closest to your users from the list above. Single-region clusters work just fine everywhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Got compliance headaches?&lt;/strong&gt; If you absolutely must keep data in Europe or Asia, you can still use Aurora DSQL there. You just won't get the multi-region magic. Sometimes that's life in enterprise land.&lt;/p&gt;

&lt;p&gt;AWS is likely to expand multi-region support as the service matures, but for now, that's the reality of working with preview technology.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hands-On: Loading Data with Aurora DSQL Loader
&lt;/h2&gt;

&lt;p&gt;Want to actually try this thing out? AWS has created a handy data loading tool that makes it easy to bulk load data into Aurora DSQL using the high-performance COPY protocol.&lt;/p&gt;

&lt;h3&gt;
  
  
  This Loader Tool Actually Doesn't Suck
&lt;/h3&gt;

&lt;p&gt;So AWS made this Python script called &lt;a href="https://github.com/aws-samples/aurora-dsql-loader" rel="noopener noreferrer"&gt;aurora-dsql-loader&lt;/a&gt;, and honestly? I was expecting another half-baked sample tool, but it's actually pretty decent for getting data into Aurora DSQL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it doesn't make you want to cry:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uses the COPY protocol instead of individual INSERTs (thank god)&lt;/li&gt;
&lt;li&gt;Actually handles threading properly for once&lt;/li&gt;
&lt;li&gt;Lets you tweak batch sizes (1,000 rows seems to be the sweet spot if you have indexes)&lt;/li&gt;
&lt;li&gt;Has retry logic that actually works instead of just failing immediately&lt;/li&gt;
&lt;li&gt;Doesn't freak out about weird delimiters or column order&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Quick Demo: Loading Sample Data
&lt;/h3&gt;

&lt;p&gt;Let's get our hands dirty and actually set up an Aurora DSQL cluster and throw some data at it. 💪&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: The Fun Part Create Your First Cluster
&lt;/h3&gt;

&lt;p&gt;First, navigate to the Aurora DSQL service in your AWS console.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Fill in the basics:&lt;/strong&gt; 📝&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;complate the multi-region setup:&lt;/strong&gt;&lt;/p&gt;

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

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

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

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

&lt;p&gt;&lt;strong&gt;Confirm the cluster peering:&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Wait for it to spin up:&lt;/strong&gt; ⏳&lt;br&gt;
This usually takes a few minutes. Go grab a coffee ☕️ . When it's ready, you'll see your cluster endpoint copy that, you'll need it soon.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Good to GO now&lt;/strong&gt; 🟢&lt;/p&gt;

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

&lt;p&gt;Now that we've got a cluster running, let's actually put some data in it. AWS has created a handy data loading tool that makes it easy to bulk load data using the high-performance COPY protocol.&lt;/p&gt;

&lt;p&gt;Here's how to use it (based on a real demo loading 999,000 records):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt; ⚙️&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# You'll need:&lt;/span&gt;
&lt;span class="c"&gt;# - Python 3.8+&lt;/span&gt;
&lt;span class="c"&gt;# - psycopg3 installed&lt;/span&gt;
&lt;span class="c"&gt;# - AWS CLI configured&lt;/span&gt;
&lt;span class="c"&gt;# - Your Aurora DSQL cluster running&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;1. Clone the loader tool:&lt;/strong&gt; 📥&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/aws-samples/aurora-dsql-loader.git
&lt;span class="nb"&gt;cd &lt;/span&gt;aurora-dsql-loader
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x aurora-dsql-loader.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Create your schema and table:&lt;/strong&gt;🗃️&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Connect to your cluster first&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;    &lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;email&lt;/span&gt;   &lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;age&lt;/span&gt;     &lt;span class="nb"&gt;int&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: If you want to use the generated token from AWS console you should export it in the environment variable &lt;code&gt;PGPASSWORD=&amp;lt;generated-token&amp;gt;&lt;/code&gt; to be able to connect to the database&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;(Optional)&lt;/strong&gt; you can generate records using the following script &lt;code&gt;aurora-dsql-loader.py&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;import random
from faker import Faker

faker &lt;span class="o"&gt;=&lt;/span&gt; Faker&lt;span class="o"&gt;()&lt;/span&gt;
output_file &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"seed_users.sql"&lt;/span&gt;

with open&lt;span class="o"&gt;(&lt;/span&gt;output_file, &lt;span class="s2"&gt;"w"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; as f:
    f.write&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"BEGIN;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;for &lt;/span&gt;i &lt;span class="k"&gt;in &lt;/span&gt;range&lt;span class="o"&gt;(&lt;/span&gt;1, 10001&lt;span class="o"&gt;)&lt;/span&gt;:
        name &lt;span class="o"&gt;=&lt;/span&gt; faker.name&lt;span class="o"&gt;()&lt;/span&gt;.replace&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"'"&lt;/span&gt;, &lt;span class="s2"&gt;"''"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
        email &lt;span class="o"&gt;=&lt;/span&gt; f&lt;span class="s2"&gt;"user{i}@example.com"&lt;/span&gt;
        age &lt;span class="o"&gt;=&lt;/span&gt; random.randint&lt;span class="o"&gt;(&lt;/span&gt;18, 80&lt;span class="o"&gt;)&lt;/span&gt;
        f.write&lt;span class="o"&gt;(&lt;/span&gt;f&lt;span class="s2"&gt;"INSERT INTO users (name, email, age) VALUES ('{name}', '{email}', {age});&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    f.write&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"COMMIT;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;

print&lt;span class="o"&gt;(&lt;/span&gt;f&lt;span class="s2"&gt;"Generated file: {output_file}"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Run the loader:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;PGUSER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;admin &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nv"&gt;PGHOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-cluster-endpoint.dsql.us-east-1.on.aws &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nv"&gt;PGPASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;aws dsql generate-db-connect-admin-auth-token &lt;span class="nt"&gt;--hostname&lt;/span&gt; &lt;span class="nv"&gt;$PGHOST&lt;/span&gt; &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nv"&gt;PGDATABASE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;postgres &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nv"&gt;PGSSLMODE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;require &lt;span class="se"&gt;\&lt;/span&gt;
./aurora-dsql-loader.py &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--filename&lt;/span&gt; your-data-file.txt &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--tablename&lt;/span&gt; &lt;span class="nb"&gt;users&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--threads&lt;/span&gt; 10 &lt;span class="se"&gt;\&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

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

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

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

&lt;p&gt;&lt;strong&gt;What happens:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The tool loads data in batches of 1,000 rows&lt;/li&gt;
&lt;li&gt;Uses 10 threads for parallel processing&lt;/li&gt;
&lt;li&gt;Shows progress feedback as it runs&lt;/li&gt;
&lt;li&gt;Creates a log file for monitoring&lt;/li&gt;
&lt;li&gt;Handles Aurora DSQL's specific requirements automatically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pro tip 😉:&lt;/strong&gt; If you have a multi-region cluster, the data automatically replicates to your second region. You can immediately query from either endpoint and see the same data!&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-World Performance
&lt;/h3&gt;

&lt;p&gt;In practice, developers are seeing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Load times of under 10 minutes for millions of rows&lt;/li&gt;
&lt;li&gt;Automatic handling of Aurora DSQL's optimistic concurrency&lt;/li&gt;
&lt;li&gt;Built-in retry logic for handling transaction conflicts&lt;/li&gt;
&lt;li&gt;Clean progress monitoring and error handling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This tool is especially useful when migrating from other databases or doing initial data loads for new applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, Should You Actually Use This? 🤔🤷‍♂️
&lt;/h2&gt;

&lt;p&gt;Look, Aurora DSQL isn't some miracle cure for all your database problems. AWS isn't stupid - they know there are already plenty of databases out there. What they're trying to solve is that specific nightmare scenario where you have thousands of concurrent connections all fighting over the same database resources.&lt;/p&gt;

&lt;p&gt;If you're building something that needs to handle crazy amounts of concurrent users think social apps, gaming backends, or financial platforms that can't afford to be down then yeah, this could save you a lot of headaches. No more 3am phone calls because your database fell over during peak traffic. 📞😴&lt;/p&gt;

&lt;p&gt;Is it perfect? Hell no. 🤦‍♂️ The 5-minute timeout thing alone is going to bite some people. And if your app is built around foreign keys and stored procedures, you're looking at a decent amount of refactoring.&lt;/p&gt;

&lt;p&gt;But here's the thing if you're already building clean, stateless applications (which you should be anyway), the migration path isn't as scary as it sounds. You just need to get comfortable with retry logic. Lots and lots of retry logic.&lt;/p&gt;




&lt;h2&gt;
  
  
  AI Integration Bonus
&lt;/h2&gt;

&lt;p&gt;Oh, and here's a cool part  Aurora DSQL comes with a Model Context Protocol (MCP) server built-in. Your AI models can chat with your database in natural language, making development cycles faster and reducing the need for deep SQL expertise.&lt;/p&gt;

&lt;p&gt;Because apparently, even databases are getting the AI treatment now.😅&lt;/p&gt;




&lt;h2&gt;
  
  
  📚 Resources
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Essential Documentation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.aws.amazon.com/aurora-dsql/latest/userguide/getting-started.html" rel="noopener noreferrer"&gt;Getting Started Guide&lt;/a&gt;&lt;/strong&gt; - Your first stop for setup&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.aws.amazon.com/aurora-dsql/latest/userguide/working-with-postgresql-compatibility.html" rel="noopener noreferrer"&gt;PostgreSQL Compatibility&lt;/a&gt;&lt;/strong&gt; - What works and what doesn't&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.aws.amazon.com/aurora-dsql/latest/userguide/working-with-postgresql-compatibility-concurrency-control.html" rel="noopener noreferrer"&gt;Concurrency Control Deep Dive&lt;/a&gt;&lt;/strong&gt; - Understanding optimistic locking&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Hands-On Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://console.aws.amazon.com/dsql" rel="noopener noreferrer"&gt;Aurora DSQL Console&lt;/a&gt;&lt;/strong&gt; - Create your first cluster here&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/aws-samples/aurora-dsql-loader" rel="noopener noreferrer"&gt;Aurora DSQL Loader Tool&lt;/a&gt;&lt;/strong&gt; - Bulk data loading utility&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.aws.amazon.com/aurora-dsql/latest/userguide/programming.html" rel="noopener noreferrer"&gt;Programming Examples&lt;/a&gt;&lt;/strong&gt; - SDK code samples&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Technical Details
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.aws.amazon.com/aurora-dsql/latest/userguide/CHAP_quotas.html" rel="noopener noreferrer"&gt;Quotas and Limits&lt;/a&gt;&lt;/strong&gt; - Know before you hit the walls&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://aws.amazon.com/blogs/database/introducing-amazon-aurora-dsql/" rel="noopener noreferrer"&gt;AWS Database Blog&lt;/a&gt;&lt;/strong&gt; - Technical deep dive from AWS&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Amazon EKS Model Context Protocol (MCP): Revolutionizing Kubernetes Development with AI-Powered Context Awareness</title>
      <dc:creator>Omar Fathy</dc:creator>
      <pubDate>Mon, 07 Jul 2025 22:01:54 +0000</pubDate>
      <link>https://dev.to/omarmfathy219/amazon-eks-model-context-protocol-mcp-revolutionizing-kubernetes-development-with-ai-powered-4a0k</link>
      <guid>https://dev.to/omarmfathy219/amazon-eks-model-context-protocol-mcp-revolutionizing-kubernetes-development-with-ai-powered-4a0k</guid>
      <description>&lt;h2&gt;
  
  
  Abstract
&lt;/h2&gt;

&lt;p&gt;They say a picture is worth a thousand prompts but in the fast-paced world of cloud-native development, the Amazon EKS Model Context Protocol (MCP) says even more. Since its release, MCP has quickly distinguished itself as a breakthrough innovation, a clear example of how purposeful design can redefine best practices and significantly accelerate application development on Amazon EKS.&lt;/p&gt;

&lt;p&gt;The Amazon EKS Model Context Protocol (MCP) Server represents a paradigm shift in cloud-native development, introducing AI-powered assistance directly into Kubernetes workflows. This open-source protocol bridges the gap between Large Language Models (LLMs) and EKS cluster management, enabling developers to interact with complex Kubernetes operations through natural language interfaces while maintaining enterprise-grade security and operational excellence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;What is Amazon EKS Model Context Protocol?&lt;/li&gt;
&lt;li&gt;Core Features and Capabilities&lt;/li&gt;
&lt;li&gt;Comparison With Traditional Approaches&lt;/li&gt;
&lt;li&gt;Use Cases and Real-World Examples&lt;/li&gt;
&lt;li&gt;How to Use MCP in EKS&lt;/li&gt;
&lt;li&gt;Architecture and Visual Overview&lt;/li&gt;
&lt;li&gt;Security and Governance&lt;/li&gt;
&lt;li&gt;Future Potential and AWS Vision&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;li&gt;References&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Containerized applications have become the cornerstone of modern cloud deployments, offering consistent environments, streamlined dependency management, and seamless scaling capabilities. However, the journey from application development to production deployment remains fraught with manual, time-consuming processes that require deep expertise in Kubernetes operations, AWS services, and infrastructure management.&lt;/p&gt;

&lt;p&gt;AWS has recently announced the launch of the open-source &lt;strong&gt;Amazon EKS Model Context Protocol (MCP) Server&lt;/strong&gt;, alongside the &lt;strong&gt;Amazon ECS MCP Server&lt;/strong&gt;, marking a significant advancement in AI-assisted cloud-native development. This revolutionary tool brings artificial intelligence directly into the Kubernetes development workflow, transforming how developers interact with EKS clusters.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Challenge
&lt;/h3&gt;

&lt;p&gt;Traditional Kubernetes and EKS management requires developers to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Master complex &lt;code&gt;kubectl&lt;/code&gt; commands and YAML manifests&lt;/li&gt;
&lt;li&gt;Navigate intricate AWS service integrations (IAM, VPC, EBS)&lt;/li&gt;
&lt;li&gt;Manually troubleshoot cluster issues using multiple tools and documentation sources&lt;/li&gt;
&lt;li&gt;Context-switch between various interfaces for cluster management, monitoring, and debugging&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Solution
&lt;/h3&gt;

&lt;p&gt;The EKS MCP Server addresses these challenges by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simplifying cluster setup&lt;/strong&gt; with automated prerequisite creation and best practice application&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streamlining application deployment&lt;/strong&gt; through high-level workflows and automated code generation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accelerating troubleshooting&lt;/strong&gt; via intelligent debugging tools and integrated knowledge base access&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enabling natural language interactions&lt;/strong&gt; for complex Kubernetes operations&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What is Amazon EKS Model Context Protocol?
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; is an open protocol that enables seamless integration between LLM applications and external data sources and tools. Whether you're building an AI-powered IDE, enhancing a chat interface, or creating custom AI workflows, MCP provides a standardized way to connect LLMs with the context they need.&lt;/p&gt;

&lt;h4&gt;
  
  
  Why MCP Servers?
&lt;/h4&gt;

&lt;p&gt;MCP servers enhance the capabilities of foundation models (FMs) in several key ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Improved Output Quality&lt;/strong&gt;: By providing relevant information directly in the model's context, MCP servers significantly improve model responses for specialized domains like AWS services. This approach reduces hallucinations, provides more accurate technical details, enables more precise code generation, and ensures recommendations align with current AWS best practices and service capabilities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Access to Latest Documentation&lt;/strong&gt;: FMs may not have knowledge of recent releases, APIs, or SDKs. MCP servers bridge this gap by pulling in up-to-date documentation, ensuring your AI assistant always works with the latest AWS capabilities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Workflow Automation&lt;/strong&gt;: MCP servers convert common workflows into tools that foundation models can use directly. Whether it's CDK, Terraform, or other AWS-specific workflows, these tools enable AI assistants to perform complex tasks with greater accuracy and efficiency.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Specialized Domain Knowledge&lt;/strong&gt;: MCP servers provide deep, contextual knowledge about AWS services that might not be fully represented in foundation models' training data, enabling more accurate and helpful responses for cloud development tasks.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the context of &lt;code&gt;Amazon EKS&lt;/code&gt;, Integrating the EKS MCP server into AI code assistants enhances development workflow across all phases, from simplifying initial cluster setup with automated prerequisite creation and application of best practices. Further, it streamlines application deployment with high-level workflows and automated code generation. Finally, it accelerates troubleshooting through intelligent debugging tools and knowledge base access. All of this simplifies complex operations through natural language interactions in AI code assistants.&lt;/p&gt;

&lt;h3&gt;
  
  
  MCP in the EKS Ecosystem
&lt;/h3&gt;

&lt;p&gt;A Model Context Protocol (MCP) server for Amazon EKS that enables generative AI models to create and manage Kubernetes clusters on AWS through MCP tools specifically addresses the complexity of Kubernetes cluster management by&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Context-Aware Operations&lt;/strong&gt;: Understanding the current state of your EKS clusters and providing relevant suggestions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EKS Cluster Management&lt;/strong&gt;: Create and manage EKS clusters with dedicated VPCs, proper networking, and CloudFormation templates for reliable, repeatable deployments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kubernetes Resource Management&lt;/strong&gt;: Create, read, update, delete, and list Kubernetes resources with support for applying YAML manifests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Application Deployment&lt;/strong&gt;: Generate and deploy Kubernetes manifests with customizable parameters for containerized applications&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operational Support&lt;/strong&gt;: Access pod logs, Kubernetes events, and monitor cluster resources&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CloudWatch Integration&lt;/strong&gt;: Retrieve logs and metrics from CloudWatch for comprehensive monitoring&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrated Troubleshooting&lt;/strong&gt;: Accessing AWS's internal EKS troubleshooting knowledge base&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security-First Design&lt;/strong&gt;: Configurable read-only mode, sensitive data access controls, and IAM integration for proper permissions management&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Core Features and Capabilities
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Kubernetes Resource Management
&lt;/h3&gt;

&lt;p&gt;The EKS MCP Server provides comprehensive resource management capabilities without requiring deep &lt;code&gt;kubectl&lt;/code&gt; expertise:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Traditional approach - manual YAML creation&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;apps/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deployment&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;web-app&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;production&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;matchLabels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;web-app&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;web-app&lt;/span&gt;
    &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;web-app&lt;/span&gt;
        &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx:1.21&lt;/span&gt;
        &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;containerPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;
        &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;requests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;64Mi"&lt;/span&gt;
            &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;250m"&lt;/span&gt;
          &lt;span class="na"&gt;limits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;128Mi"&lt;/span&gt;
            &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;500m"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;With MCP&lt;/strong&gt;: Natural language request like &lt;em&gt;"Deploy a web application with 3 replicas using nginx 1.21 in the production namespace"&lt;/em&gt; automatically generates and applies the appropriate resources.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. EKS Auto Mode Cluster Management
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Automated Cluster Creation
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Traditional eksctl approach&lt;/span&gt;
eksctl create cluster &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; my-cluster &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--version&lt;/span&gt; 1.29 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--region&lt;/span&gt; us-west-2 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--vpc-private-subnets&lt;/span&gt; subnet-xxx,subnet-yyy &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--vpc-public-subnets&lt;/span&gt; subnet-aaa,subnet-bbb &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--with-oidc&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--managed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;MCP Enhancement&lt;/strong&gt;: Request &lt;em&gt;"Create an EKS cluster with Auto Mode in us-west-2"&lt;/em&gt; triggers automated CloudFormation stack deployment including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dedicated VPC with appropriate subnets&lt;/li&gt;
&lt;li&gt;Security groups with least-privilege access&lt;/li&gt;
&lt;li&gt;OIDC provider configuration&lt;/li&gt;
&lt;li&gt;Auto Mode node pools with optimal instance selection&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Intelligent Troubleshooting Engine
&lt;/h3&gt;

&lt;p&gt;The MCP server includes direct access to AWS's internal EKS troubleshooting guide through the &lt;code&gt;search_eks_troubleshoot_guide&lt;/code&gt; function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Example MCP function call&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;method&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;search_eks_troubleshoot_guide&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;params&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;query&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pod scheduling issues&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cluster_context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;version&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1.29&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;node_groups&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;managed&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fargate&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Security-Centric Design
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Default Read-Only Operation
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Starting MCP server in secure mode (default)&lt;/span&gt;
mcp-server-eks &lt;span class="nt"&gt;--region&lt;/span&gt; us-west-2

&lt;span class="c"&gt;# Enabling write operations (explicit flag required)&lt;/span&gt;
mcp-server-eks &lt;span class="nt"&gt;--region&lt;/span&gt; us-west-2 &lt;span class="nt"&gt;--allow-write&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Comparison With Traditional Approaches
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Reality Check: Before and After MCP
&lt;/h3&gt;

&lt;p&gt;Let's be honest - working with Kubernetes has never been easy. Even experienced developers find themselves drowning in YAML files, debugging cryptic error messages, and spending hours on tasks that should take minutes. The traditional EKS experience often feels like this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Day in the Life: Traditional EKS Development&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Picture this: You're a developer who just wants to deploy a simple Python web application. Here's what your day typically looks like:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Morning Coffee &amp;amp; kubectl Confusion&lt;/strong&gt; ☕
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="c"&gt;# You start with the basics, but even this requires research&lt;/span&gt;
   kubectl create namespace my-app
   kubectl create deployment my-app &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;my-python-app:latest
   &lt;span class="c"&gt;# Wait, what's the right syntax for resource limits again?&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Afternoon YAML Wrestling&lt;/strong&gt; 🤼‍♂️
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;   &lt;span class="c1"&gt;# After hours of Stack Overflow and documentation diving&lt;/span&gt;
   &lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;apps/v1&lt;/span&gt;
   &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deployment&lt;/span&gt;
   &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
     &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-python-app&lt;/span&gt;
     &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-app&lt;/span&gt;
   &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
     &lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;
     &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
       &lt;span class="na"&gt;matchLabels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
         &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-python-app&lt;/span&gt;
     &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
       &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
         &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
           &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-python-app&lt;/span&gt;
       &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
         &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
         &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;app&lt;/span&gt;
           &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-python-app:latest&lt;/span&gt;
           &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
           &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;containerPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8080&lt;/span&gt;
           &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
             &lt;span class="na"&gt;requests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
               &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;64Mi"&lt;/span&gt;
               &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;250m"&lt;/span&gt;
             &lt;span class="na"&gt;limits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
               &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;128Mi"&lt;/span&gt;
               &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;500m"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Evening Troubleshooting Sessions&lt;/strong&gt; 🌙
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="c"&gt;# Your pods are failing, but why?&lt;/span&gt;
   kubectl describe pod my-python-app-xyz
   kubectl logs my-python-app-xyz
   kubectl get events &lt;span class="nt"&gt;--namespace&lt;/span&gt; my-app
   &lt;span class="c"&gt;# 3 hours later, you realize it was a simple port mismatch&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Enter MCP: The Game Changer
&lt;/h3&gt;

&lt;p&gt;Now, imagine the same scenario with the EKS MCP Server. Here's how that same day transforms:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Day in the Life: MCP-Enhanced Development&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Morning Simplicity&lt;/strong&gt; ☀️
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   You: "I have a Python app in my ECR repo at 123456789.dkr.ecr.eu-west-1.amazonaws.com/my-python-app:latest. 
        Can you deploy it to an EKS cluster called 'my-test-cluster'?"

   AI: "I'll help you deploy this! Let me check if the cluster exists and create the necessary resources."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Automatic Infrastructure Creation&lt;/strong&gt; 🏗️&lt;br&gt;
Behind the scenes, MCP intelligently:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Checks if &lt;code&gt;my-test-cluster&lt;/code&gt; exists&lt;/li&gt;
&lt;li&gt;Creates a CloudFormation stack with VPC, subnets, and security groups&lt;/li&gt;
&lt;li&gt;Generates appropriate Kubernetes manifests&lt;/li&gt;
&lt;li&gt;Deploys your application with best practices built-in&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Intelligent Problem Resolution&lt;/strong&gt; 🧠&lt;br&gt;
When issues arise:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   You: "My pods seem to be failing. Can you investigate?"

   AI: "I found the issue! Your image architecture (ARM64) doesn't match your node group (AMD64). 
        I'll recreate the deployment with the correct node selector."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Real-World Impact: The Numbers Don't Lie
&lt;/h3&gt;

&lt;p&gt;Based on real developer experiences and our analysis:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Task&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Traditional Time&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;MCP-Enhanced Time&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Improvement&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;New Cluster Setup&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;45-90 minutes&lt;/td&gt;
&lt;td&gt;5-10 minutes&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;85% faster&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Application Deployment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;30-60 minutes&lt;/td&gt;
&lt;td&gt;3-5 minutes&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;90% faster&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Troubleshooting Issues&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2-8 hours&lt;/td&gt;
&lt;td&gt;15-45 minutes&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;80% faster&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Learning Basic Operations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2-6 months&lt;/td&gt;
&lt;td&gt;1-3 weeks&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;75% faster&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Use Cases and Real-World Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The "Vibe Coding" Revolution🎧💻
&lt;/h3&gt;

&lt;p&gt;The EKS MCP Server isn't just about automation - it's about enabling what AWS engineers call "vibe coding." This means you can go from a rough idea to a deployed, production-ready application through natural conversation with your AI assistant.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use Case 1: The Startup Sprint - Multi-Tenant SaaS Deployment
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The Scenario&lt;/strong&gt;: Meet Alex, a startup founder who needs to deploy a multi-tenant SaaS platform for their new customer management tool. They have limited DevOps experience but big ambitions.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Traditional Nightmare 😰
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Alex would typically spend days on this:&lt;/span&gt;
&lt;span class="c"&gt;# 1. Research namespace isolation patterns&lt;/span&gt;
&lt;span class="c"&gt;# 2. Manually create network policies&lt;/span&gt;
&lt;span class="c"&gt;# 3. Set up resource quotas for each tenant&lt;/span&gt;
&lt;span class="c"&gt;# 4. Configure monitoring and logging&lt;/span&gt;
&lt;span class="c"&gt;# 5. Debug inevitable security and networking issues&lt;/span&gt;

kubectl create namespace tenant-companya
kubectl create namespace tenant-companyb
&lt;span class="c"&gt;# ... followed by dozens of YAML files and kubectl commands&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  The MCP Magic ✨
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Alex: "I need to set up a multi-tenant environment for my SaaS app. I have tenants 'TechCorp' and 'StartupInc', 
      each should be isolated with 2GB RAM limits and auto-scaling between 2-10 pods based on demand."

AI Assistant: "Perfect! I'll create isolated environments for both tenants with proper security boundaries. 
             Let me set this up with network policies and resource quotas."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What Happens Behind the Scenes:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Auto-generated with security best practices&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Namespace&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;tenant-techcorp&lt;/span&gt;
  &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;tenant&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;techcorp&lt;/span&gt;
    &lt;span class="na"&gt;isolation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;enabled&lt;/span&gt;
    &lt;span class="na"&gt;created-by&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mcp-server&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;networking.k8s.io/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;NetworkPolicy&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;tenant-isolation-techcorp&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;tenant-techcorp&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;podSelector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{}&lt;/span&gt;
  &lt;span class="na"&gt;policyTypes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Ingress&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Egress&lt;/span&gt;
  &lt;span class="na"&gt;ingress&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;namespaceSelector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;matchLabels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;tenant&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;techcorp&lt;/span&gt;
  &lt;span class="na"&gt;egress&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;namespaceSelector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;matchLabels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;tenant&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;techcorp&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ResourceQuota&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;tenant-quota-techcorp&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;tenant-techcorp&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;hard&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;requests.memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2Gi"&lt;/span&gt;
    &lt;span class="na"&gt;limits.memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2Gi"&lt;/span&gt;
    &lt;span class="na"&gt;pods&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;10"&lt;/span&gt;
    &lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;5"&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;autoscaling/v2&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;HorizontalPodAutoscaler&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;saas-app-hpa-techcorp&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;tenant-techcorp&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;scaleTargetRef&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;apps/v1&lt;/span&gt;
    &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deployment&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;saas-app-techcorp&lt;/span&gt;
  &lt;span class="na"&gt;minReplicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;
  &lt;span class="na"&gt;maxReplicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;
  &lt;span class="na"&gt;metrics&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Resource&lt;/span&gt;
    &lt;span class="na"&gt;resource&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cpu&lt;/span&gt;
      &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Utilization&lt;/span&gt;
        &lt;span class="na"&gt;averageUtilization&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;70&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The Result&lt;/strong&gt;: Alex goes from concept to secure, multi-tenant environment in under 10 minutes instead of 3-4 days of research and implementation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use Case 2: The "Oh No!" Moment - Production Troubleshooting
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The Scenario&lt;/strong&gt;: Jamie, a DevOps engineer, gets paged at 2 AM. The company's main application is down, customers are complaining, and the CEO is asking for updates every 15 minutes.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Traditional Detective Work 🕵️‍♀️
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Jamie's typical 2 AM troubleshooting journey:&lt;/span&gt;
kubectl get pods &lt;span class="nt"&gt;--all-namespaces&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; CrashLoopBackOff
kubectl describe pod failing-pod-xyz
kubectl logs failing-pod-xyz &lt;span class="nt"&gt;--previous&lt;/span&gt;
kubectl get events &lt;span class="nt"&gt;--sort-by&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;.metadata.creationTimestamp
aws logs start-query &lt;span class="nt"&gt;--log-group-name&lt;/span&gt; /aws/eks/cluster-name/cluster
&lt;span class="c"&gt;# 2 hours later, still searching through logs and documentation...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  The MCP Superhero Moment 🦸‍♀️
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Jamie: "The payment service pods in production are failing. Can you investigate what's happening?"

AI Assistant: "I'm analyzing the issue now. Let me check the pod status, events, and recent logs."

[MCP automatically invokes multiple tools:]
- Checks pod health across namespaces
- Retrieves recent events and error patterns  
- Pulls CloudWatch logs with error filtering
- Accesses EKS troubleshooting knowledge base

AI Assistant: "Found the issue! The payment service is failing due to insufficient IAM permissions 
             for accessing the RDS database. The IAM role is missing the 'rds:DescribeDBInstances' 
             permission. I can fix this by updating the service account's IAM policy."

Jamie: "Yes, please fix it."

AI Assistant: "Done! I've updated the IAM policy and restarted the affected pods. 
             The service should be healthy in about 2 minutes."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The Magic Behind the Scenes:&lt;/strong&gt;&lt;br&gt;
The MCP server automatically:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Used &lt;code&gt;list_k8s_resources&lt;/code&gt; to identify failing pods&lt;/li&gt;
&lt;li&gt;Called &lt;code&gt;get_k8s_events&lt;/code&gt; to gather error context&lt;/li&gt;
&lt;li&gt;Invoked &lt;code&gt;get_cloudwatch_logs&lt;/code&gt; with error filtering&lt;/li&gt;
&lt;li&gt;Searched the &lt;code&gt;eks_troubleshoot_guide&lt;/code&gt; for IAM-related issues&lt;/li&gt;
&lt;li&gt;Used &lt;code&gt;add_inline_policy&lt;/code&gt; to fix the permissions&lt;/li&gt;
&lt;li&gt;Applied the fix with &lt;code&gt;manage_k8s_resource&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;The Result&lt;/strong&gt;: Jamie resolves a critical production issue in 5 minutes instead of 2-3 hours, becoming the office hero.&lt;/p&gt;


&lt;h2&gt;
  
  
  How to Use MCP in EKS
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Prerequisites: Getting Your Environment Ready For magic 🪄
&lt;/h3&gt;

&lt;p&gt;Before we dive into the magic, let's make sure you have everything you need. Think of this as preparing your workspace before starting a project:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Essential Tools&lt;/strong&gt; (The Must-Haves):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.python.org/downloads/release/python-3100/" rel="noopener noreferrer"&gt;Python 3.10+&lt;/a&gt; - The foundation for running MCP servers&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.astral.sh/uv/getting-started/installation/" rel="noopener noreferrer"&gt;uv package manager&lt;/a&gt; - For fast Python package management&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html" rel="noopener noreferrer"&gt;AWS CLI with credentials&lt;/a&gt; - Your gateway to AWS services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Optional But Recommended&lt;/strong&gt; (The Nice-to-Haves):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://eksctl.io/installation/" rel="noopener noreferrer"&gt;eksctl&lt;/a&gt; - For advanced cluster management&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://kubernetes.io/docs/tasks/tools/#kubectl" rel="noopener noreferrer"&gt;kubectl&lt;/a&gt; - For direct Kubernetes interaction when needed
### 🔐 Are You Authorized to Use MCP?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before you can use the EKS MCP server to manage your Kubernetes resources, it's essential to ensure that your IAM role or user has the proper permissions. Without these, actions like querying cluster metadata, generating manifests, or deploying infrastructure will fail with authorization errors.&lt;/p&gt;

&lt;p&gt;Let's walk through what permissions you need and why they matter.&lt;/p&gt;


&lt;h4&gt;
  
  
  🕵️‍♂️ Read-Only Permissions (For Observability and Safe Exploration)
&lt;/h4&gt;

&lt;p&gt;If you're only querying information—such as cluster status, resource metrics, or IAM roles—grant your IAM principal the following &lt;strong&gt;read-only policy&lt;/strong&gt;. This enables the MCP server to gather cluster insights, CloudWatch metrics, and IAM configurations without making changes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"eks:DescribeCluster"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"cloudformation:DescribeStacks"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"cloudwatch:GetMetricData"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"logs:StartQuery"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"logs:GetQueryResults"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"iam:GetRole"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"iam:GetRolePolicy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"iam:ListRolePolicies"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"iam:ListAttachedRolePolicies"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"iam:GetPolicy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"iam:GetPolicyVersion"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"eks-mcpserver:QueryKnowledgeBase"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;✅ Tip: Start with read-only mode for safer exploration, especially in production environments.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h4&gt;
  
  
  ✍️ Write Permissions (For Cluster Creation and Resource Deployment)
&lt;/h4&gt;

&lt;p&gt;To fully leverage MCP's deployment automation—such as provisioning EKS clusters, creating networking resources, or applying manifests—you'll need broader permissions. We recommend attaching the following managed policies to your IAM role or user:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/aws-managed-policy/latest/reference/IAMFullAccess.html" rel="noopener noreferrer"&gt;&lt;strong&gt;IAMFullAccess&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Grants the ability to create and manage IAM roles and policies needed by your EKS workloads.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonVPCFullAccess.html" rel="noopener noreferrer"&gt;&lt;strong&gt;AmazonVPCFullAccess&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Allows provisioning of VPCs, subnets, route tables, NAT gateways, and other essential networking components.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSCloudFormationFullAccess.html" rel="noopener noreferrer"&gt;&lt;strong&gt;AWSCloudFormationFullAccess&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Required to deploy the CloudFormation stack located at:&lt;br&gt;
&lt;code&gt;/awslabs/eks_mcp_server/templates/eks-templates/eks-with-vpc.yaml&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Custom EKS Full Access Policy&lt;/strong&gt; (needed for full cluster and node group operations):&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"eks:*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h4&gt;
  
  
  🔄 Accessing the Kubernetes API: What You Should Know
&lt;/h4&gt;

&lt;p&gt;Even with the correct IAM permissions, Kubernetes API access in EKS has a few additional rules. For your user or role to successfully interact with the Kubernetes API via MCP, &lt;strong&gt;one of the following conditions must be true&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The IAM principal &lt;strong&gt;created the EKS cluster&lt;/strong&gt; originally, and thus has automatic API access.&lt;/li&gt;
&lt;li&gt;An &lt;strong&gt;EKS Access Entry&lt;/strong&gt; has been manually configured to grant access to your IAM principal.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you encounter &lt;code&gt;Unauthorized&lt;/code&gt; or &lt;code&gt;Forbidden&lt;/code&gt; errors while performing Kubernetes actions, it's likely due to a missing access entry. Review the EKS documentation on &lt;a href="https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html" rel="noopener noreferrer"&gt;Access Entries&lt;/a&gt; for instructions on granting permissions explicitly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setting Up Your AI Copilot
&lt;/h3&gt;

&lt;p&gt;The beauty of the EKS MCP Server is that it works with multiple AI assistants. Here's how to set it up with the most popular options:&lt;/p&gt;

&lt;h4&gt;
  
  
  Option 1: Cursor IDE Setup (Recommended for Developers)
&lt;/h4&gt;

&lt;p&gt;Cursor IDE has become the go-to choice for developers who want AI assistance integrated directly into their coding workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Basic Configuration&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Cursor and click the gear icon (⚙️) in the top-right corner&lt;/li&gt;
&lt;li&gt;Navigate to &lt;strong&gt;MCP&lt;/strong&gt; → &lt;strong&gt;Add new global MCP server&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Paste this configuration:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;For Mac/Linux:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"awslabs.eks-mcp-server"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"autoApprove"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"disabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uvx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"awslabs.eks-mcp-server@latest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"--allow-write"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"FASTMCP_LOG_LEVEL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ERROR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AWS_PROFILE"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-profile"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AWS_REGION"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"us-west-2"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"transportType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"stdio"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;For Windows:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"awslabs.eks-mcp-server"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"autoApprove"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"disabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uvx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"--from"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"awslabs.eks-mcp-server@latest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"awslabs.eks-mcp-server.exe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"--allow-write"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"FASTMCP_LOG_LEVEL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ERROR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AWS_PROFILE"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-profile"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AWS_REGION"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"us-west-2"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"transportType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"stdio"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;After a few minutes, you should see a green indicator if your MCP server definition is valid.&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 2: Test Your Setup&lt;/strong&gt;&lt;br&gt;
Open a chat panel in Cursor (&lt;code&gt;Ctrl/⌘ + L&lt;/code&gt;) and try:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Create a new EKS cluster named 'my-test-cluster' in the 'us-west-2' region using Kubernetes version 1.31."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Option 2: Amazon Q Developer CLI Setup
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Install Q Developer CLI&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Set up the Amazon Q Developer CLI&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the &lt;a href="https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-installing.html" rel="noopener noreferrer"&gt;Amazon Q Developer CLI&lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;The Q Developer CLI supports MCP servers for tools and prompts out-of-the-box. Edit your Q developer CLI's MCP configuration file named mcp.json following &lt;a href="https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-mcp-configuration.html" rel="noopener noreferrer"&gt;these instructions&lt;/a&gt;. For example:&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Verify Setup&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="c"&gt;# Check available tools&lt;/span&gt;
  q tools
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2: Configure MCP&lt;/strong&gt;&lt;br&gt;
Edit your &lt;code&gt;mcp.json&lt;/code&gt; file:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For Mac/Linux:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  {
    "mcpServers": {
      "awslabs.eks-mcp-server": {
        "command": "uvx",
        "args": ["awslabs.eks-mcp-server@latest"],
        "env": {
          "FASTMCP_LOG_LEVEL": "ERROR"
        },
        "autoApprove": [],
        "disabled": false
      }
    }
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;For Windows:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  {
    "mcpServers": {
      "awslabs.eks-mcp-server": {
        "command": "uvx",
        "args": ["--from", "awslabs.eks-mcp-server@latest", "awslabs.eks-mcp-server.exe"],
        "env": {
          "FASTMCP_LOG_LEVEL": "ERROR"
        },
        "autoApprove": [],
        "disabled": false
      }
    }
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Verify your setup by running the &lt;code&gt;/tools&lt;/code&gt; command in the Q Developer CLI to see the available EKS MCP tools.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Understanding Security Flags and Configurations 🔒
&lt;/h3&gt;

&lt;p&gt;The EKS MCP Server comes with built-in configurable arguments and environment variables as safety switches:&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;args&lt;/code&gt; field in your MCP server definition allows you to customize how the EKS MCP server runs by passing specific command-line arguments. These flags control permissions, security behavior, and how the server interacts with Kubernetes and AWS resources.&lt;/p&gt;

&lt;p&gt;You can fine-tune the behavior of the EKS MCP server using environment variables defined under the &lt;code&gt;env&lt;/code&gt; field. These variables control everything from logging verbosity to AWS authentication settings.&lt;/p&gt;

&lt;h4&gt;
  
  
  🔧 Common Command Arguments
&lt;/h4&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;--allow-write&lt;/code&gt; Flag
&lt;/h4&gt;

&lt;p&gt;When the &lt;code&gt;--allow-write&lt;/code&gt; flag is enabled, the EKS MCP Server can create missing IAM permissions for EKS resources through the &lt;code&gt;add_inline_policy&lt;/code&gt; tool. This tool enables the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only creates new inline policies; it never modifies existing policies.&lt;/li&gt;
&lt;li&gt;Is useful for automatically fixing common permissions issues with EKS clusters.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Should be used with caution and with properly scoped IAM roles.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;What it does&lt;/strong&gt;: Enables creation, modification, and deletion of resources&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;When to use&lt;/strong&gt;: Development environments, trusted automation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;When NOT to use&lt;/strong&gt;: Production clusters without proper review processes&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Conservative&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;approach&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(read-only)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"awslabs.eks-mcp-server@latest"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Development&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;approach&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;write&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;access)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"awslabs.eks-mcp-server@latest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"--allow-write"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;code&gt;--allow-sensitive-data-access&lt;/code&gt; Flag
&lt;/h4&gt;

&lt;p&gt;Enables access to sensitive data such as logs, events, and Kubernetes Secrets.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Default: false (Access to sensitive data is restricted by default)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What it does&lt;/strong&gt;: Allows access to logs, events, and secrets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use&lt;/strong&gt;: Troubleshooting, monitoring, development&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When NOT to use&lt;/strong&gt;: Shared environments or when logs contain sensitive data
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Full&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;access&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;carefully)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"awslabs.eks-mcp-server@latest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"--allow-write"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"--allow-sensitive-data-access"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Important Security Note&lt;/strong&gt;: Users should exercise caution when &lt;code&gt;--allow-write&lt;/code&gt; and &lt;code&gt;--allow-sensitive-data-access&lt;/code&gt; modes are enabled with these broad permissions, as this combination grants significant privileges to the MCP server. Only enable these flags when necessary and in trusted environments. For production use, consider creating more restrictive custom policies.&lt;/p&gt;

&lt;h4&gt;
  
  
  ⚙️ Common Environment variables
&lt;/h4&gt;

&lt;p&gt;Here's a sample configuration snippet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"awslabs.eks-mcp-server"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"FASTMCP_LOG_LEVEL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ERROR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AWS_PROFILE"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my-profile"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AWS_REGION"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"us-west-2"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  🔊 &lt;code&gt;FASTMCP_LOG_LEVEL&lt;/code&gt; &lt;em&gt;(optional)&lt;/em&gt;
&lt;/h4&gt;

&lt;p&gt;Controls the verbosity of logs produced by the MCP server.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Accepted values&lt;/strong&gt;: &lt;code&gt;"DEBUG"&lt;/code&gt;, &lt;code&gt;"INFO"&lt;/code&gt;, &lt;code&gt;"WARNING"&lt;/code&gt;, &lt;code&gt;"ERROR"&lt;/code&gt;, &lt;code&gt;"CRITICAL"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Default&lt;/strong&gt;: &lt;code&gt;"WARNING"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use case&lt;/strong&gt;: Set to &lt;code&gt;"ERROR"&lt;/code&gt; in production to reduce noise; use &lt;code&gt;"DEBUG"&lt;/code&gt; when troubleshooting.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📌 &lt;em&gt;Example:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"FASTMCP_LOG_LEVEL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ERROR"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h4&gt;
  
  
  🔐 &lt;code&gt;AWS_PROFILE&lt;/code&gt; &lt;em&gt;(optional)&lt;/em&gt;
&lt;/h4&gt;

&lt;p&gt;Specifies which named AWS CLI profile to use when authenticating with AWS services.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Default&lt;/strong&gt;: If not set, the server falls back to the default credentials provider chain (e.g., environment, EC2 metadata).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use case&lt;/strong&gt;: Ideal when running the server locally with multiple profiles configured.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📌 &lt;em&gt;Example:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"AWS_PROFILE"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my-profile"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h4&gt;
  
  
  🌍 &lt;code&gt;AWS_REGION&lt;/code&gt; &lt;em&gt;(optional)&lt;/em&gt;
&lt;/h4&gt;

&lt;p&gt;Defines the target AWS region where EKS clusters are located. All MCP operations will use this region context.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Default&lt;/strong&gt;: If not provided, AWS SDK default behavior will apply (which may vary based on environment).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use case&lt;/strong&gt;: Ensure MCP commands and deployments run in the intended region, especially when managing clusters across multiple environments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📌 &lt;em&gt;Example:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"AWS_REGION"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"us-west-2"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Best Practices for Safe MCP Usage
&lt;/h3&gt;

&lt;h4&gt;
  
  
  The "Production Safety" Checklist ✅
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;Start Read-Only&lt;/strong&gt;: Always begin with read-only mode for evaluation&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Environment Separation&lt;/strong&gt;: Use different configurations for dev/staging/prod&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Access Control&lt;/strong&gt;: Apply least-privilege IAM policies&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Audit Everything&lt;/strong&gt;: Enable comprehensive logging&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Regular Updates&lt;/strong&gt;: Keep MCP server updated with security patches&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  The "Developer Happiness" Checklist 😊
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;Enable Write Mode&lt;/strong&gt;: For development environments, enable &lt;code&gt;--allow-write&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Sensitive Data Access&lt;/strong&gt;: Enable for troubleshooting capabilities&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Auto-Approve&lt;/strong&gt;: Consider enabling for trusted, repeated operations&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Multiple MCP Servers&lt;/strong&gt;: Combine EKS with other AWS MCP servers as needed&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Custom Regions&lt;/strong&gt;: Set appropriate AWS regions for your infrastructure
### Quick Troubleshooting Guide&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  "It's Not Working!" - Common Issues and Solutions
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Issue&lt;/strong&gt;: MCP server shows as disconnected&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check AWS credentials&lt;/span&gt;
aws sts get-caller-identity

&lt;span class="c"&gt;# Verify Python and uv installation&lt;/span&gt;
python &lt;span class="nt"&gt;--version&lt;/span&gt;
uv &lt;span class="nt"&gt;--version&lt;/span&gt;

&lt;span class="c"&gt;# Check MCP server logs&lt;/span&gt;
&lt;span class="c"&gt;# (Look in your AI assistant's debug/log output)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Issue&lt;/strong&gt;: Permission denied errors&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Verify IAM permissions&lt;/span&gt;
aws iam simulate-principal-policy &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--policy-source-arn&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;aws sts get-caller-identity &lt;span class="nt"&gt;--query&lt;/span&gt; Arn &lt;span class="nt"&gt;--output&lt;/span&gt; text&lt;span class="si"&gt;)&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--action-names&lt;/span&gt; eks:DescribeCluster &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--resource-arns&lt;/span&gt; &lt;span class="s2"&gt;"*"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Issue&lt;/strong&gt;: Cluster connection problems&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Update kubeconfig&lt;/span&gt;
aws eks update-kubeconfig &lt;span class="nt"&gt;--region&lt;/span&gt; us-west-2 &lt;span class="nt"&gt;--name&lt;/span&gt; my-cluster

&lt;span class="c"&gt;# Test connectivity&lt;/span&gt;
kubectl cluster-info
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;h3&gt;
  
  
  How Everything Connects: The Big Picture
&lt;/h3&gt;

&lt;p&gt;Imagine the EKS MCP Server as a universal translator that sits between your natural language requests and the complex world of AWS and Kubernetes APIs. Here's how the magic happens:&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;AI Assistant (e.g., &lt;code&gt;Cursor&lt;/code&gt;) at the top&lt;/li&gt;
&lt;li&gt;MCP Protocol layer&lt;/li&gt;
&lt;li&gt;EKS MCP Server in the middle
&lt;/li&gt;
&lt;li&gt;AWS Services (EKS, IAM, CloudWatch, VPC) at the bottom&lt;/li&gt;
&lt;li&gt;Bidirectional data flow arrows&lt;/li&gt;
&lt;li&gt;Security boundaries and encryption indicators]&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  The Intelligence Behind the Simplicity
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;What you see&lt;/strong&gt;: Simple conversation with your AI assistant&lt;br&gt;
&lt;strong&gt;What's actually happening&lt;/strong&gt;: A sophisticated orchestration of AWS services&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your Input: "Deploy my Python app to EKS"
    ↓
AI Processing: Understanding intent and context
    ↓
MCP Translation: Converting to specific tool calls
    ↓
AWS API Calls: Executing infrastructure operations
    ↓
Kubernetes Operations: Managing application deployments
    ↓
Real-time Feedback: Monitoring and reporting status
    ↓
Human-friendly Response: "Your app is deployed and healthy!"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Tools Under the Hood
&lt;/h3&gt;

&lt;p&gt;The EKS MCP Server comes packed with an impressive array of tools. Think of them as specialized functions that handle different aspects of cluster management to automate and simplify management of your Amazon EKS clusters and Kubernetes resources. Each tool performs a targeted operation and can be invoked as part of your workflow for provisioning, managing, observing, and troubleshooting infrastructure.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Cluster Management Tools&lt;/strong&gt; 🏗️
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;manage_eks_stacks&lt;/code&gt; - Your cluster lifecycle manager.
Automates lifecycle management of EKS CloudFormation stacks.
&lt;strong&gt;Features:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Generate CloudFormation templates for EKS clusters.&lt;/li&gt;
&lt;li&gt;Deploy clusters with all necessary components (VPCs, subnets, IAM roles, etc.).&lt;/li&gt;
&lt;li&gt;Describe stack metadata, status, outputs.&lt;/li&gt;
&lt;li&gt;Delete stacks and clean up associated resources.&lt;/li&gt;
&lt;li&gt;Operates only on stacks originally created by this tool.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;operation&lt;/code&gt;: &lt;code&gt;generate&lt;/code&gt;, &lt;code&gt;deploy&lt;/code&gt;, &lt;code&gt;describe&lt;/code&gt;, or &lt;code&gt;delete&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;template_file&lt;/code&gt;: required for &lt;code&gt;generate&lt;/code&gt;/&lt;code&gt;deploy&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cluster_name&lt;/code&gt;: required for all operations

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;search_eks_troubleshoot_guide&lt;/code&gt; - Your troubleshooting expert
Searches AWS EKS Troubleshoot Guide for relevant issue resolutions.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provides solutions for common EKS issues (bootstrap, node autoscaling, etc.)&lt;/li&gt;
&lt;li&gt;Suggests short-term fixes and long-term resolutions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;query&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Kubernetes Resource Tools&lt;/strong&gt; ⚙️
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;manage_k8s_resource&lt;/code&gt; - Your Swiss Army knife for Kubernetes objects
Manages any Kubernetes resource directly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Supports &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;replace&lt;/code&gt;, &lt;code&gt;patch&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;, and &lt;code&gt;read&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Works with both namespaced and non-namespaced resources&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;operation&lt;/code&gt;, &lt;code&gt;cluster_name&lt;/code&gt;, &lt;code&gt;kind&lt;/code&gt;, &lt;code&gt;api_version&lt;/code&gt;, &lt;code&gt;name&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;namespace&lt;/code&gt; (optional), &lt;code&gt;body&lt;/code&gt; (for create/replace/patch)

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;list_k8s_resources&lt;/code&gt; - Your resource discovery tool
Lists resources by type in a Kubernetes cluster.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Filters by namespace, label, or field selectors&lt;/li&gt;
&lt;li&gt;Outputs metadata for matched resources&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cluster_name&lt;/code&gt;, &lt;code&gt;kind&lt;/code&gt;, &lt;code&gt;api_version&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;namespace&lt;/code&gt;, &lt;code&gt;label_selector&lt;/code&gt;, &lt;code&gt;field_selector&lt;/code&gt; (all optional)

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;apply_yaml&lt;/code&gt; - Your manifest deployment specialist
Applies multi-resource YAML manifests to a cluster.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accepts multi-document YAML files&lt;/li&gt;
&lt;li&gt;Applies all resources within a specified namespace&lt;/li&gt;
&lt;li&gt;Can force updates to existing resources&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;yaml_path&lt;/code&gt;, &lt;code&gt;cluster_name&lt;/code&gt;, &lt;code&gt;namespace&lt;/code&gt;, &lt;code&gt;force&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;list_api_versions&lt;/code&gt; your Kubernetes objects refrence
Lists all API versions available in a Kubernetes cluster.
&lt;strong&gt;Features:&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Includes both core (&lt;code&gt;v1&lt;/code&gt;) and grouped (&lt;code&gt;apps/v1&lt;/code&gt;, etc.) APIs&lt;/li&gt;
&lt;li&gt;Useful for compatibility checks and YAML generation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cluster_name&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Application Support Tools&lt;/strong&gt; 🚀
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;generate_app_manifest&lt;/code&gt; - Your deployment template generator
Generates basic Kubernetes manifests for your application.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Produces &lt;code&gt;Deployment&lt;/code&gt; and &lt;code&gt;Service&lt;/code&gt; YAML files&lt;/li&gt;
&lt;li&gt;Configurable replicas, resources, load balancer, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;app_name&lt;/code&gt;, &lt;code&gt;image_uri&lt;/code&gt;, &lt;code&gt;output_dir&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Optional: &lt;code&gt;port&lt;/code&gt;, &lt;code&gt;replicas&lt;/code&gt;, &lt;code&gt;cpu&lt;/code&gt;, &lt;code&gt;memory&lt;/code&gt;, &lt;code&gt;namespace&lt;/code&gt;, &lt;code&gt;load_balancer_scheme&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;get_pod_logs&lt;/code&gt; - Your application debugger
Retrieves logs from a specific pod.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Filter by time window, line count, or byte size&lt;/li&gt;
&lt;li&gt;Supports logs from specific containers&lt;/li&gt;
&lt;li&gt;Requires &lt;code&gt;--allow-sensitive-data-access&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cluster_name&lt;/code&gt;, &lt;code&gt;pod_name&lt;/code&gt;, &lt;code&gt;namespace&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Optional: &lt;code&gt;container_name&lt;/code&gt;, &lt;code&gt;since_seconds&lt;/code&gt;, &lt;code&gt;tail_lines&lt;/code&gt;, &lt;code&gt;limit_bytes&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;get_k8s_events&lt;/code&gt; - Your event investigator
Fetches Kubernetes events for a resource.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Returns detailed info: timestamps, reasons, component, and type&lt;/li&gt;
&lt;li&gt;Supports both namespaced and cluster-wide resources&lt;/li&gt;
&lt;li&gt;Requires &lt;code&gt;--allow-sensitive-data-access&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cluster_name&lt;/code&gt;, &lt;code&gt;kind&lt;/code&gt;, &lt;code&gt;name&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Optional: &lt;code&gt;namespace&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;CloudWatch Integration Tools&lt;/strong&gt; 📊
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;get_cloudwatch_logs&lt;/code&gt; - Your centralized logging assistant
Fetches CloudWatch logs for specific EKS resources.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Query logs by time, resource type, name, filter patterns&lt;/li&gt;
&lt;li&gt;Supports both infrastructure and application logs&lt;/li&gt;
&lt;li&gt;Requires &lt;code&gt;--allow-sensitive-data-access&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cluster_name&lt;/code&gt;, &lt;code&gt;log_type&lt;/code&gt;, &lt;code&gt;resource_type&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Optional: &lt;code&gt;resource_name&lt;/code&gt;, &lt;code&gt;minutes&lt;/code&gt;, &lt;code&gt;start_time&lt;/code&gt;, &lt;code&gt;end_time&lt;/code&gt;, &lt;code&gt;limit&lt;/code&gt;, &lt;code&gt;filter_pattern&lt;/code&gt;, &lt;code&gt;fields&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;get_cloudwatch_metrics&lt;/code&gt; - Your performance monitoring tool
Fetches CloudWatch metrics for your workloads.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Query by metric name, namespace, dimensions&lt;/li&gt;
&lt;li&gt;Configure range, granularity, and statistic&lt;/li&gt;
&lt;li&gt;Supports custom dimensions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cluster_name&lt;/code&gt;, &lt;code&gt;metric_name&lt;/code&gt;, &lt;code&gt;namespace&lt;/code&gt;, &lt;code&gt;dimensions&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Optional: &lt;code&gt;minutes&lt;/code&gt;, &lt;code&gt;start_time&lt;/code&gt;, &lt;code&gt;end_time&lt;/code&gt;, &lt;code&gt;limit&lt;/code&gt;, &lt;code&gt;stat&lt;/code&gt;, &lt;code&gt;period&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;get_eks_metrics_guidance&lt;/code&gt;
Lists recommended metrics and dimensions for various EKS resource types.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Covers supported types: &lt;code&gt;cluster&lt;/code&gt;, &lt;code&gt;node&lt;/code&gt;, &lt;code&gt;pod&lt;/code&gt;, &lt;code&gt;namespace&lt;/code&gt;, &lt;code&gt;service&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Outputs available metrics, descriptions, and dimension mappings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;resource_type&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Implementation Note:&lt;/strong&gt;&lt;br&gt;
  Generated from AWS &lt;a href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-metrics-EKS.html" rel="noopener noreferrer"&gt;Container Insights metrics&lt;/a&gt; using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  uv pip &lt;span class="nb"&gt;install &lt;/span&gt;bs4
  python /scripts/update_eks_cloudwatch_metrics_guidance.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;strong&gt;IAM Integration&lt;/strong&gt; 🔐
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;get_policies_for_role&lt;/code&gt;
Retrieves policy details for an IAM role.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Includes assume role policy, managed policies, and inline policies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;role_name&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;add_inline_policy&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Attaches a new inline policy to an IAM role.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prevents accidental overwrite of existing policies&lt;/li&gt;
&lt;li&gt;Accepts JSON policy document or list of statements&lt;/li&gt;
&lt;li&gt;Requires &lt;code&gt;--allow-write&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;role_name&lt;/code&gt;, &lt;code&gt;policy_name&lt;/code&gt;, &lt;code&gt;permissions&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Smart Design Philosophy
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why Unified Tools Instead of Separate Functions?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Traditional approaches would create individual tools for every Kubernetes resource type (pods, services, deployments, etc.). This would quickly overwhelm the AI's context window. Instead, the EKS MCP Server uses a clever approach:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Instead of:
- create_pod_tool
- create_service_tool  
- create_deployment_tool
- update_pod_tool
- update_service_tool
- ... (50+ tools)

We have:
- manage_k8s_resource (handles all CRUD operations)
- list_k8s_resources (handles all resource discovery)
- apply_yaml (handles manifest deployment)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This design keeps the context window manageable while providing comprehensive functionality.&lt;/p&gt;




&lt;h2&gt;
  
  
  Security and Governance: Balancing Power with Control
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Understanding the Security Paradigm
&lt;/h3&gt;

&lt;p&gt;When we talk about granting AI agents permissions to manage your cloud infrastructure, it's natural to have concerns. The AWS team has designed EKS MCP with a fundamental security principle in mind: &lt;strong&gt;MCP servers only have access to what you already have access to&lt;/strong&gt;. They cannot magically access secrets from other accounts or perform actions beyond your existing permissions.&lt;/p&gt;

&lt;p&gt;Think of it this way: the MCP server operates with the same level of access that you, as a developer, would have. It's essentially acting as an intelligent extension of your existing credentials, not as a privileged escalation tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  Critical Security Considerations in Production
&lt;/h3&gt;

&lt;h4&gt;
  
  
  The Reality of AI-Powered Operations
&lt;/h4&gt;

&lt;p&gt;During AWS's internal discussions, the team emphasized a crucial point: &lt;strong&gt;these tools are incredibly powerful, and that power requires responsibility&lt;/strong&gt;,and as any Spider-Man fan knows: with great power comes great responsibility." 🕷️💻  As one AWS engineer put it during their live demo: &lt;em&gt;"We are in some ways making it more powerful for them, making it easier for them to deploy... but again, make sure you check, please, Vibe coding and AI tools can take you far—but if you’re flying blind, you might also crash hard."&lt;/em&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  Production Environment Safeguards
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;The Golden Rule&lt;/strong&gt;: When running MCP servers on production clusters, &lt;strong&gt;⚠️🛑 always turn off auto-approvals for write operations&lt;/strong&gt;. Here's why this matters:&lt;/p&gt;

&lt;p&gt;In live demonstrations, AWS engineers showed scenarios where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An incorrect API endpoint was automatically corrected ✅ (helpful)&lt;/li&gt;
&lt;li&gt;But in another case, when an endpoint was wrong, the system also changed the container image saying "maybe use another image" and patched the deployment ❌ (potentially dangerous)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Recommendation&lt;/strong&gt;: Approve write operations one by one in production environments to maintain control over what gets deployed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Protection and Privacy
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Redacting Sensitive Information
&lt;/h4&gt;

&lt;p&gt;One of the most significant security features being implemented is &lt;strong&gt;automatic redaction of PII and sensitive data&lt;/strong&gt;. This includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Passwords and secret keys&lt;/li&gt;
&lt;li&gt;API tokens and credentials
&lt;/li&gt;
&lt;li&gt;Personal identifiable information&lt;/li&gt;
&lt;li&gt;Sensitive configuration data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This data is redacted from both logs and AI model outputs, addressing concerns about secure data being passed to LLMs.&lt;/p&gt;

&lt;h3&gt;
  
  
  IAM Integration and Best Practices
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Principle of Least Privilege in Practice
&lt;/h4&gt;

&lt;p&gt;The MCP server follows AWS security best practices through:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Dedicated IAM roles&lt;/strong&gt; designed specifically for MCP operations with minimal required permissions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separate roles&lt;/strong&gt; for read-only versus write operations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource tagging strategies&lt;/strong&gt; to limit actions to MCP-managed resources&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regular permission audits&lt;/strong&gt; using IAM Access Analyzer to identify and remove unused permissions&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Kubernetes RBAC: Your Safety Net
&lt;/h4&gt;

&lt;p&gt;Remember that even with proper IAM permissions, Kubernetes API access must be correctly configured. The MCP server operates within the same RBAC constraints that govern your manual kubectl operations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Operational Security: The Human Element
&lt;/h3&gt;

&lt;h4&gt;
  
  
  The Importance of Vigilance
&lt;/h4&gt;

&lt;p&gt;As AWS's product manager candidly shared: &lt;em&gt;"I'm not an engineer by trade... I'm not exactly sure all of the guidelines that I need to make sure that I check. Since I'm not an engineer, I don't know what I don't know."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This honest admission highlights a critical point: &lt;strong&gt;monitoring and vigilance are essential&lt;/strong&gt;. Whether you're a pro or new to Kubernetes world, always:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Review what's being deployed to your account&lt;/li&gt;
&lt;li&gt;Understand the changes before approving them&lt;/li&gt;
&lt;li&gt;Set up proper monitoring and alerting&lt;/li&gt;
&lt;li&gt;Implement resource limits and quotas&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Guardrails and Control Mechanisms
&lt;/h4&gt;

&lt;p&gt;The MCP server includes several built-in safety features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Resource validation&lt;/strong&gt; before deploying infrastructure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Template verification&lt;/strong&gt; to prevent arbitrary stack deletion&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Allowlists and denylists&lt;/strong&gt; for specific resources&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consent requirements&lt;/strong&gt; for sensitive operations&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Future Potential and AWS Vision: The Evolution of AI-Driven Infrastructure
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Where We Are Today vs. Tomorrow
&lt;/h3&gt;

&lt;p&gt;Currently, we're in in a &lt;strong&gt;"supervised state"&lt;/strong&gt; with AI integrations, as AWS call it. As one AWS engineer noted: &lt;em&gt;"We're not quite there yet for unsupervised agents just monitoring your clusters and making actions. It'll be some time before we fully trust agents."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;But the trend is evident and the opportunities are vast.&lt;/p&gt;

&lt;h3&gt;
  
  
  Near-Term Evolution
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Improved Remote Features
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Obstacle&lt;/strong&gt;: Some AI tooling doesn't work too well with remote MCP hosts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: The tendency in the industry is:&lt;br&gt;
- Improved remote MCP server design&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pre-defined best practise templates&lt;/li&gt;
&lt;li&gt;Automatic updating and maintenance&lt;/li&gt;
&lt;li&gt;Enhanced reliability for distributed deployments&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Agent to agent communication
&lt;/h4&gt;

&lt;p&gt;One of the more promising ones is &lt;strong&gt;agent communication&lt;/strong&gt;. Imagine agents that can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Communicate with one another without direct user action&lt;/li&gt;
&lt;li&gt;Partner with Delivery for complicated deployment scenarios
– Discuss ideas and help others troubleshoot issues
- Keep audit trails of all inter-agent operations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Problem&lt;/strong&gt;: What guidelines should you put in place so that agents are responsive while you still end up seeing the final results? &lt;/p&gt;

&lt;h3&gt;
  
  
  Addressing the Context Window Problem
&lt;/h3&gt;

&lt;h4&gt;
  
  
  The Current Limitation
&lt;/h4&gt;

&lt;p&gt;As of now there is a restriction on addition of no of MCP tools IDE can work at a time. This poses a problem when you have to use the right tools for the job.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Future Solution
&lt;/h4&gt;

&lt;p&gt;AWS is exploring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dynamic tool, switch&lt;/strong&gt;: It selects the correct MCP server depending on the current context Automatically generates tool switching, the default workflow tool selects the correct MCP server depending on the current context spinning up a dev environment outside an IDE, where you can directly modify project files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Smart tool routing&lt;/strong&gt;: Selection of the most appropriate tool based on context&lt;br&gt;
-&lt;strong&gt;Standardised interfaces&lt;/strong&gt;: MCP servers are easier to be interchanged and's more reliable.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Final Thoughts: The Pull of the Long-Term ValueError — The path from Supervised to Autonomous
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Today: AI Help That’s Monitored
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;AI suggests actions&lt;/li&gt;
&lt;li&gt;Humans review and approve&lt;/li&gt;
&lt;li&gt;Clear audit trails&lt;/li&gt;
&lt;li&gt;Safety nets and guardrails&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Tomorrow: Smart Autonomous Operations
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Proactive monitoring of the cluster health&lt;/li&gt;
&lt;li&gt;Self-healing infrastructure&lt;/li&gt;
&lt;li&gt;Predictive issue resolution&lt;/li&gt;
&lt;li&gt;Oversight over humans with exception intervention&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  The Big Idea: Trust via Transparency
&lt;/h4&gt;

&lt;p&gt;The journey to autonomy is not one of eliminating human overseers, but of designing AI systems so trustworthy, transparent and predictable that these overseers become strategic rather than simply tactical. &lt;/p&gt;

&lt;h3&gt;
  
  
  Benefiting Industry: Best Practices, Accelerated Innovation
&lt;/h3&gt;

&lt;h4&gt;
  
  
  The Feedback Loop Effect
&lt;/h4&gt;

&lt;p&gt;Early feedback to AWS has revealed that &lt;strong&gt;supervised&lt;/strong&gt;customers are executing &lt;strong&gt;better practices&lt;/strong&gt; when setting up MCP. This forms a positive feedback cycle:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;AI advises the right moves&lt;/strong&gt; → Better practice.rewire.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improved applications&lt;/strong&gt; → Better applications&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reliability of systems rise&lt;/strong&gt; → More reliance on AI supporting us&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More confidence&lt;/strong&gt;- Greater acceptance of automation&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Innovation Acceleration
&lt;/h4&gt;

&lt;p&gt;Developers spend more time on: Here is how you spend your time more on the following and less on the previous section: Infrastructure complexity.&lt;br&gt;
- &lt;strong&gt;Business logic and functionality&lt;/strong&gt;&lt;br&gt;
- &lt;strong&gt;User experience enhancements&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Crafty problem-solver&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quick prototyping &amp;amp; iteration&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Difficulties and Self-Reflection
&lt;/h3&gt;

&lt;h4&gt;
  
  
   Challenge of Summarization
&lt;/h4&gt;

&lt;p&gt;As AWS engineers said while testing: ``When the LLM is trying to diagnose the problem it is asking multiple things and trying to summarize the result. Sometimes the summarization isn’t a match of what we intended to do.” *&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;: And in an EKS Auto Mode investigation, where the AI correctly figured out which policies were needed, it thought they should be added to the node role first, not the cluster role. On the second proofing, it fixed this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Challenge Ahead&lt;/strong&gt;: Getting the balance on data for AI models right – enough for the right troubleshooting without clogging up the context window. &lt;/p&gt;

&lt;h4&gt;
  
  
   Problem Of Consistent Installation
&lt;/h4&gt;

&lt;p&gt;Current problem: Not all MCP servers install the same, even on the same server config. The industry is heading toward standardization to try to make these interactions more predictable and reliable. &lt;/p&gt;

&lt;h3&gt;
  
  
  The Bigger Picture: Democratizing Cloud Expertise
&lt;/h3&gt;

&lt;p&gt;The ultimate vision extends beyond just making Kubernetes easier. It's about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Democratizing cloud expertise&lt;/strong&gt;: Making advanced cloud capabilities accessible to developers regardless of their infrastructure background&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reducing the expertise gap&lt;/strong&gt;: Helping junior developers learn through AI-guided practice&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improving security posture&lt;/strong&gt;: Making security best practices the default, not the exception&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accelerating innovation&lt;/strong&gt;: Removing infrastructure complexity as a barrier to creativity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The convergence of AI and cloud infrastructure management represents one of the most significant shifts in how we build and operate systems. Amazon EKS MCP is positioned at the forefront of this transformation, providing both the power to accelerate development and the guardrails to do so safely.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The Amazon EKS Model Context Protocol represents a transformative advancement in cloud-native development, fundamentally changing how developers interact with Kubernetes infrastructure. By bridging the gap between natural language and complex cluster operations, MCP democratizes access to enterprise-grade container orchestration while maintaining the security and operational excellence that AWS customers demand.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Benefits Realized
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Accelerated Development Cycles&lt;/strong&gt;: Reducing deployment times from hours to minutes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lowered Barrier to Entry&lt;/strong&gt;: Making Kubernetes accessible to developers of all skill levels&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced Operational Excellence&lt;/strong&gt;: Integrating best practices into every interaction&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improved Security Posture&lt;/strong&gt;: Implementing security-by-default with granular controls&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost Optimization&lt;/strong&gt;: Intelligent resource management reducing unnecessary expenses&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Strategic Implications
&lt;/h3&gt;

&lt;p&gt;The introduction of MCP signals AWS's commitment to AI-driven infrastructure management, positioning the platform for the next generation of cloud-native applications. Organizations adopting MCP early will gain competitive advantages through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Faster Time-to-Market&lt;/strong&gt;: Reduced complexity in deployment pipelines&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improved Developer Satisfaction&lt;/strong&gt;: Focus on business logic rather than infrastructure management&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced Reliability&lt;/strong&gt;: AI-assisted troubleshooting and preventive maintenance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Future-Proof Architecture&lt;/strong&gt;: Foundation for emerging AI and ML workloads&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What's Next?
&lt;/h3&gt;

&lt;p&gt;To explore Amazon EKS MCP in your environment:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start with Evaluation&lt;/strong&gt;: Deploy MCP in read-only mode for risk-free exploration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pilot Project&lt;/strong&gt;: Choose a non-critical application for initial testing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team Training&lt;/strong&gt;: Invest in AI-assisted development practices&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gradual Adoption&lt;/strong&gt;: Expand usage based on success metrics and team confidence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community Engagement&lt;/strong&gt;: Contribute feedback and use cases to shape future development&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The convergence of artificial intelligence and cloud infrastructure management is no longer a future possibility—it's today's reality. Amazon EKS MCP provides the foundation for this transformation, enabling organizations to harness the full potential of AI-assisted development while maintaining the reliability, security, and scalability that modern applications demand.&lt;/p&gt;




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

&lt;h3&gt;
  
  
  Official AWS Documentation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/eks/latest/userguide/" rel="noopener noreferrer"&gt;Amazon EKS User Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/eks/latest/userguide/auto-mode.html" rel="noopener noreferrer"&gt;EKS Auto Mode Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/eks/latest/userguide/mcp-server.html" rel="noopener noreferrer"&gt;Model Context Protocol (MCP) Server for EKS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html" rel="noopener noreferrer"&gt;AWS IAM Best Practices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/architecture/well-architected/" rel="noopener noreferrer"&gt;AWS Well-Architected Framework&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Technical Resources
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/aws/eks-mcp-server" rel="noopener noreferrer"&gt;EKS MCP Server GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/awslabs/mcp/tree/main/src/eks-mcp-server/awslabs/eks_mcp_server" rel="noopener noreferrer"&gt;MCP Server Source Code on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/awslabs/mcp/blob/main/src/eks-mcp-server/README.md" rel="noopener noreferrer"&gt;EKS MCP Server README&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://awslabs.github.io/mcp/servers/eks-mcp-server/" rel="noopener noreferrer"&gt;MCP Server Web Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://modelcontextprotocol.io/introduction" rel="noopener noreferrer"&gt;Model Context Protocol Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/modelcontextprotocol" rel="noopener noreferrer"&gt;Model Context Protocol GitHub Organization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kubernetes.io/docs/" rel="noopener noreferrer"&gt;Kubernetes Official Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cncf.io/security-best-practices/" rel="noopener noreferrer"&gt;CNCF Security Best Practices&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Community and Learning
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.eksworkshop.com/" rel="noopener noreferrer"&gt;AWS EKS Workshop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kubernetes.academy/" rel="noopener noreferrer"&gt;Kubernetes Academy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cncf.io/training/certification/" rel="noopener noreferrer"&gt;CNCF Training and Certification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/containers/accelerating-application-development-with-the-amazon-eks-model-context-protocol-server/" rel="noopener noreferrer"&gt;AWS Containers Blog – EKS MCP Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/containers/automating-ai-assisted-container-deployments-with-amazon-ecs-mcp-server/" rel="noopener noreferrer"&gt;AWS Containers Blog – ECS MCP Overview&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Related Whitepapers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;"AI-Driven Infrastructure Management: The Future of Cloud Operations"&lt;/li&gt;
&lt;li&gt;"Security Best Practices for AI-Integrated Development Workflows"&lt;/li&gt;
&lt;li&gt;"Cost Optimization Strategies for Modern Kubernetes Deployments"&lt;/li&gt;
&lt;li&gt;"The Evolution of Developer Experience in Cloud-Native Environments"&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>The revolution of e-commerce 👗with Three.js and AWS Amplify ☁️</title>
      <dc:creator>Omar Fathy</dc:creator>
      <pubDate>Fri, 30 Sep 2022 01:03:33 +0000</pubDate>
      <link>https://dev.to/omarmfathy219/the-revolution-of-e-commerce-with-threejs-and-aws-amplify-2j3j</link>
      <guid>https://dev.to/omarmfathy219/the-revolution-of-e-commerce-with-threejs-and-aws-amplify-2j3j</guid>
      <description>&lt;h2&gt;
  
  
  Introduction 🏁
&lt;/h2&gt;

&lt;p&gt;The world around us is in a great and huge evolution some examples of this evolution are the evolution in health, industry, transportation, etc... another example of this evolution is the evaluation of &lt;strong&gt;Online shopping&lt;/strong&gt;. Many people are now shopping through the Internet and buying most of their supplies on the Internet without the need to leave their homes. Get off is for bus, work, taxi, etc...&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem 😞
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Online shopping&lt;/strong&gt; has disadvantages, for example, How many times have you bought a piece of clothes and been shocked that the product you purchased was not as described on the online site or that the size you bought was not the accurate size, how many times have you wished that you were able to switch between the colors and shapes of the clothes Even if you are in a real clothes store ... Here comes the role of &lt;strong&gt;TopShop&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is &lt;a href="https://s3.console.aws.amazon.com/s3/object/3d-virtual-dressing-room?region=us-east-1&amp;amp;prefix=index.html" rel="noopener noreferrer"&gt;TopShop&lt;/a&gt;? 🛒
&lt;/h2&gt;

&lt;p&gt;TopShop is a &lt;strong&gt;3D Virtual Dressing Room&lt;/strong&gt; that aims to help the customefacilitateng the process of buying clothes through the Internet by viewing a &lt;strong&gt;3D model&lt;/strong&gt; of the product before purchasing it, and he can choose from different colors of the product and see the benefits of using the &lt;strong&gt;3D modeling&lt;/strong&gt; in representing the product as it will look in real life.&lt;/p&gt;

&lt;h1&gt;
  
  
  Technology 🖥
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;WebGL&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Three.js&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Blender&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bulma&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sass&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Gulp&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AWS Amplify&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Demo 🎬
&lt;/h1&gt;

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

&lt;p&gt;Here user can &lt;a href="https://3d-virtual-dressing-room.s3.us-east-1.amazonaws.com/authentication.html" rel="noopener noreferrer"&gt;log in&lt;/a&gt; to the website or he can use any one of the demo accounts we listed previously just &lt;strong&gt;click on it&lt;/strong&gt; 😉 you can try the demo from &lt;a href="https://dev5094.d37d2vafcqn90u.amplifyapp.com" rel="noopener noreferrer"&gt;here&lt;/a&gt; or &lt;a href="https://3d-virtual-dressing-room.s3.amazonaws.com/index.html" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

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

&lt;h1&gt;
  
  
  About 3D Model
&lt;/h1&gt;

&lt;p&gt;I will explain how the model is set up in &lt;a href="https://www.blender.org" rel="noopener noreferrer"&gt;Blender&lt;/a&gt;, and if youd like to create something of your own, change a free model you found somewhere online, or instruct someone youre commissioning. Heres some information about how our 3D model is authored.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scale
&lt;/h2&gt;

&lt;p&gt;The scale is set to approximately what it would be in the real world.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Layering and naming conventions
&lt;/h2&gt;

&lt;p&gt;This part is &lt;strong&gt;important&lt;/strong&gt; : each element of the object you want to customize independently needs to be its object in the 3D scene, and each item needs to have a** unique name**. Here we have &lt;em&gt;up&lt;/em&gt; and &lt;em&gt;down&lt;/em&gt;. Note that if you have said, three items all called up, Blender is going to name them as &lt;em&gt;up&lt;/em&gt;, &lt;em&gt;up.001&lt;/em&gt;, &lt;em&gt;up.002&lt;/em&gt;. That doesnt matter, because in our JavaScript well be using &lt;em&gt;includes(up)&lt;/em&gt; to find all of those objects that contain the string up in it.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  File Format
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://threejs.org" rel="noopener noreferrer"&gt;Three.js&lt;/a&gt; supports a bunch of 3D object file formats, &lt;strong&gt;but the one it recommends is glTF (.glb)&lt;/strong&gt;. Blender supports this format as an export option, so no worries there.&lt;/p&gt;

&lt;h1&gt;
  
  
  Three.js
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Loading the model
&lt;/h2&gt;

&lt;p&gt;Were going to add the function that loads in models, this is provided by the second dependency we added in our HTML.&lt;/p&gt;

&lt;p&gt;Before we do that though, lets reference the model, well be using this variable quite a bit. Add this at the top of your JavaScript, above your BACKGROUND_COLOR. Lets also add a path to the model. Ive hosted it for us, its about 1Mb in size.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var theModel; 
const MODEL_PATH ="https://s3-us-west-2.amazonaws.com/s.cdpn.io/1376484/model.glb";

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

&lt;/div&gt;



&lt;p&gt;Now we can create a new loader and use the load method. This sets theModel as our 3D models' entire scene. Were also going to set the size for this app, the right size seems to be about twice as big as its loaded. Thirdly, were going to offset the y position by -1 to bring it down a little bit, and finally, were going to add the model to the scene.&lt;/p&gt;

&lt;p&gt;The first parameter is the models filepath, the second is a function that runs once the resource is loaded, the third is undefined for now but can be used for a second function that runs while the resource is loading, and the final parameter handles errors.&lt;/p&gt;

&lt;h2&gt;
  
  
  Camera 📷
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Init the object Loader 
var loader = new THREE. GLTFLoader();
loader.load(MODEL_PATH, function(gltf) {
theModel = gltf.scene;
// Set the models initial scale
theModel.scale.set(2,2,2);
// Offset the y position a bit 
theModel.position.y = -1;
// Add the model to the scene 
scene.add(theModel);
}, undefined, function(error) {
console.error(error)
});

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Lights 💡
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Add Lights 
var hemiLight = new THREE.HemisphereLight(Oxffffff, 0xffffff, 0.61);
hemiLight.position.set(0, 50, 0); 
// Add hemisphere light to scene
scene.add(hemiLight);
var dirlight = new THREE.DirectionalLight(Oxffffff, 0.54);
dirLight.position.set(-8, 12, 8); 
dirLight.castShadow = true;
dirLight.shadow.mapSize = new THREE.Vector2(1024, 1024);
// Add directional Light to scene
scene.add(dirLight);

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Controls 🛠
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Add controls 
var controls = new THREE.OrbitControls(camera, renderer.domElement); 
controls.maxPolarAngle = Math.PI/ 2;
controls.minPolar Angle = Math.PI/ 3; 
controls.enableDamping = true; 
controls.enablePan = false; 
controls.dampingFactor = 0.1; 
controls. autoRotate = false; 
// Toggle this if you'd like the model to automatically rotate 
controls.autoRotateSpeed = 0.2;

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

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;to Learn more check the &lt;a href="https://threejs.org/docs/" rel="noopener noreferrer"&gt;documentation here&lt;/a&gt; or &lt;a href="https://threejs.org/manual/" rel="noopener noreferrer"&gt;manual from here&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Amplify Hosting
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Why should I use it? 🤔
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/amplify/" rel="noopener noreferrer"&gt;AWS Amplify&lt;/a&gt; is a complete solution that lets frontend web and mobile developers quickly build, ship, and host full-stack applications on AWS, with the flexibility to leverage the breadth of AWS services as use cases evolve. No cloud expertise is needed.&lt;/p&gt;

&lt;p&gt;To get started, log in to the &lt;a href="https://us-east-1.console.aws.amazon.com/amplify/home" rel="noopener noreferrer"&gt;Amplify console&lt;/a&gt;. If you are starting from the &lt;strong&gt;AWS Amplify&lt;/strong&gt; home page, choose to &lt;strong&gt;Get Started&lt;/strong&gt; at the top of the page.&lt;/p&gt;

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

&lt;p&gt;Then choose to &lt;strong&gt;Get started&lt;/strong&gt; under &lt;strong&gt;Deliver&lt;/strong&gt;.&lt;/p&gt;

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

&lt;p&gt;If you are starting from the &lt;strong&gt;All apps&lt;/strong&gt; page, choose &lt;strong&gt;New app&lt;/strong&gt; , then &lt;strong&gt;Host web app&lt;/strong&gt; in the upper right corner.&lt;/p&gt;

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

&lt;p&gt;you can manually deploy an app using drag and drop&lt;/p&gt;

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

&lt;p&gt;but we will use our GitHub repo&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Connect a repository 🗃
&lt;/h2&gt;

&lt;p&gt;Connect your GitHub, Bitbucket, GitLab, or AWS CodeCommit repository. After you authorize the Amplify console with Bitbucket, GitLab, or AWS CodeCommit, Amplify fetches an access token from the repository provider.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Step 2: Confirm build settings for the front end 🛠
&lt;/h2&gt;

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

&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Verify that the build commands and build output directory (that is, artifacts &amp;gt; baseDirectory) are accurate. If you need to modify this information, choose Edit to open the YML editor. You can save your build settings on our servers, or you can download the YML and add it to the root of your repo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Confirm build settings for the backend
&lt;/h2&gt;

&lt;p&gt;To deploy backend functionality using the Amplify CLI during your build, create or reuse an AWS Identity and Access Management (IAM) service role. IAM roles are a secure way to grant Amplify permissions to act on resources in your account. For detailed instructions, see &lt;a href="https://docs.aws.amazon.com/amplify/latest/userguide/how-to-service-role-amplify-console.html" rel="noopener noreferrer"&gt;Adding a service role&lt;/a&gt;.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Step4: Save and deploy 💾
&lt;/h2&gt;

&lt;p&gt;Review all of your settings to ensure everything is set up correctly. Choose &lt;strong&gt;Save and deploy&lt;/strong&gt; to deploy your web app.&lt;/p&gt;

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

&lt;p&gt;Access the build logs screen by choosing a progress indicator in the branch section. A build has the following stages:&lt;/p&gt;

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

&lt;p&gt;Now your app is built and deployed 🎉🎉🎉&lt;/p&gt;

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

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

&lt;blockquote&gt;
&lt;p&gt;Of course, this is just a simple example of hosting a web app using AWS Amplify, but there is a lot that you can do, so you can learn more through&lt;a href="https://aws.amazon.com/getting-started/hands-on/build-react-app-amplify-graphql/" rel="noopener noreferrer"&gt;this demo&lt;/a&gt; and you can use Amplify Studio to easily build and ship complete web and mobile apps in hours. With Amplify Studio, you can quickly build an app backend, create a rich user interface (UI) React components, and connect a UI to the backend in clicks.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Resources 📄
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://get.webgl.org/" rel="noopener noreferrer"&gt;WebGL&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://threejs.org/" rel="noopener noreferrer"&gt;Three.js&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.blender.org/" rel="noopener noreferrer"&gt;Blender&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.javascript.com/" rel="noopener noreferrer"&gt;JavaScript&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://bulma.io/" rel="noopener noreferrer"&gt;Bulma&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://sass-lang.com/" rel="noopener noreferrer"&gt;Sass&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://gulpjs.com/" rel="noopener noreferrer"&gt;Gulp&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://aws.amazon.com/amplify/" rel="noopener noreferrer"&gt;AWS Amplify&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.amplify.aws/" rel="noopener noreferrer"&gt;Amplify Framework Documentation&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://aws.amazon.com/amplify/studio/" rel="noopener noreferrer"&gt;AWS Amplify Studio&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>awsamplify</category>
      <category>threejs</category>
    </item>
  </channel>
</rss>
