<?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>Forem: Yeshwanth L M</title>
    <description>The latest articles on Forem by Yeshwanth L M (@yeshwanthlm).</description>
    <link>https://forem.com/yeshwanthlm</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%2F1037588%2F92470647-636a-4b9d-ac66-72901e7fdd48.jpg</url>
      <title>Forem: Yeshwanth L M</title>
      <link>https://forem.com/yeshwanthlm</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/yeshwanthlm"/>
    <language>en</language>
    <item>
      <title>re:Play 2025</title>
      <dc:creator>Yeshwanth L M</dc:creator>
      <pubDate>Sun, 07 Dec 2025 14:10:03 +0000</pubDate>
      <link>https://forem.com/yeshwanthlm/replay-2025-52oo</link>
      <guid>https://forem.com/yeshwanthlm/replay-2025-52oo</guid>
      <description>&lt;p&gt;re:Invent Week AWS News Round-Up Summary&lt;/p&gt;

&lt;p&gt;This week's AWS news was dominated by &lt;strong&gt;re:Invent&lt;/strong&gt; announcements, with a massive flow of new services and features across multiple domains.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Performance and Compute Power
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AWS Graviton5 CPU:&lt;/strong&gt; Unveiled for up to &lt;strong&gt;30% better performance&lt;/strong&gt; and &lt;strong&gt;40% better price performance&lt;/strong&gt; than Graviton4 for general-purpose workloads, launching with new &lt;strong&gt;Amazon EC2 M9g instances&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lambda Managed Instances:&lt;/strong&gt; A new way to run Lambda functions on &lt;strong&gt;EC2 compute&lt;/strong&gt; with serverless simplicity, granting access to specialized hardware and flexible EC2 pricing while AWS manages the infrastructure.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Serverless and Data Modernization
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lambda Durable Functions:&lt;/strong&gt; Allows for the orchestration of multi-step applications and AI workflows directly in Lambda, featuring &lt;strong&gt;automatic checkpointing&lt;/strong&gt; and year-long waits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon S3 Object Size Increase:&lt;/strong&gt; The maximum object size limit has been significantly increased from 5 TB to &lt;strong&gt;50 TB&lt;/strong&gt;, supporting massive datasets like AI training corpora and high-resolution video.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Cost Optimization
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Database Savings Plans:&lt;/strong&gt; New, flexible, commit-based discounts of up to &lt;strong&gt;35%&lt;/strong&gt; for AWS managed databases across engines and regions, simplifying long-term cost optimization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon RDS for SQL Server:&lt;/strong&gt; Now supports &lt;strong&gt;Microsoft SQL Server 2022 Developer Edition&lt;/strong&gt; to help cut non-production licensing costs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. AI, Agents, and Foundation Models
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;New Foundation Models in Amazon Bedrock:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mistral AI&lt;/strong&gt; models (fast, cost-effective options).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon Nova 2 Lite and Nova 2 Pro (Preview)&lt;/strong&gt; with advanced step-by-step reasoning and a large &lt;strong&gt;1M-token context window&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Agentic Services (AI-Powered Teammates - Previews):&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AWS Security Agent:&lt;/strong&gt; Frontier agentic approach for &lt;strong&gt;AppSec&lt;/strong&gt;, code analysis, and on-demand penetration testing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS DevOps Agent:&lt;/strong&gt; Autonomous on-call teammate to accelerate &lt;strong&gt;incident response&lt;/strong&gt;, correlate metrics/logs, and recommend resilience improvements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kiro’s New Autonomous Agent:&lt;/strong&gt; An AI dev teammate that runs multi-repo tasks and ships coordinated pull requests.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Security and Observability
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Security Hub &amp;amp; GuardDuty Enhancements:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AWS Security Hub:&lt;/strong&gt; Now Generally Available with near real-time risk analytics and unified exposure views.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GuardDuty Extended Threat Detection:&lt;/strong&gt; Adds unified, AI-powered attack sequence findings for EC2 and ECS.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;CloudWatch Unification:&lt;/strong&gt; Now unifies log data management and analytics (operations, security, compliance) with new features like &lt;strong&gt;OCSF/OTel normalization&lt;/strong&gt; and &lt;strong&gt;AI-powered queries&lt;/strong&gt;.&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;X-Ray Transition to OpenTelemetry:&lt;/strong&gt; Encouraging customers to adopt the open, vendor-neutral tracing standard.&lt;/li&gt;

&lt;/ul&gt;




&lt;h3&gt;
  
  
  Key Takeaways for Your Stream:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Big Theme:&lt;/strong&gt; A massive acceleration in &lt;strong&gt;AI and Agents&lt;/strong&gt; across every part of the AWS stack (DevOps, Security, and App Dev).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Performance Jump:&lt;/strong&gt; Graviton continues to lead with major performance and cost efficiency gains.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simplicity and Scale:&lt;/strong&gt; The S3 limit increase and Lambda's move to durable functions are game-changers for large-scale data and complex serverless workflows.&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>🤖 AWS Outage (Oct 2025): Breakdown &amp; Lessons</title>
      <dc:creator>Yeshwanth L M</dc:creator>
      <pubDate>Wed, 22 Oct 2025 06:38:51 +0000</pubDate>
      <link>https://forem.com/aws-builders/aws-outage-oct-2025-breakdown-lessons-5f06</link>
      <guid>https://forem.com/aws-builders/aws-outage-oct-2025-breakdown-lessons-5f06</guid>
      <description>&lt;h2&gt;
  
  
  🌎 The Big Picture: What Happened?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;When:&lt;/strong&gt; Monday, October 20, 2025 (for about 15 hours).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;What:&lt;/strong&gt; A massive portion of the internet stopped working. Apps like Roblox, Snapchat, Duolingo, and even services like Alexa and Ring doorbells went offline.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Where:&lt;/strong&gt; The failure started in &lt;strong&gt;AWS US-EAST-1&lt;/strong&gt; (Northern Virginia). This is the oldest, largest, and most important AWS data center region in the world.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; It was &lt;strong&gt;not&lt;/strong&gt; a hack. It was an internal technical failure that caused a massive chain reaction (a cascading failure).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  💥 The Story: A Cascade of Failures
&lt;/h2&gt;

&lt;p&gt;The failure was like a set of dominos falling.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The First Domino (The Monitor):&lt;/strong&gt; A tiny, internal AWS system that monitors the health of its own &lt;strong&gt;Network Load Balancers (NLBs)&lt;/strong&gt; glitched.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Second Domino (The Traffic Cop):&lt;/strong&gt; Because the monitor failed, the NLBs (the "traffic cops" that direct data) also failed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Third Domino (The Phonebook):&lt;/strong&gt; &lt;strong&gt;DynamoDB&lt;/strong&gt; (a critical database used by thousands of apps) relied on those "traffic cops" for its &lt;strong&gt;DNS&lt;/strong&gt; (the internet's "phonebook"). When the cops failed, the phonebook entry for DynamoDB went blank.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Final Collapse:&lt;/strong&gt; Apps across the internet tried to "call" DynamoDB but couldn't find its "phone number." This caused them to fail. The failure then spread to other core services in the region, like &lt;strong&gt;EC2&lt;/strong&gt; (servers) and &lt;strong&gt;IAM&lt;/strong&gt; (logins), bringing down the entire region's "management layer."&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Simple Analogy: A tiny fuse for the airport's control tower blew. This made the air traffic controllers go blind. Because they were blind, they couldn't tell planes which runway to land on. Soon, no planes could land (DynamoDB), and this caused the entire airport to shut down (the whole region).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🧑‍💻 3 Hard Lessons for Engineers
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The &lt;code&gt;us-east-1&lt;/code&gt; Trap:&lt;/strong&gt; We all use US-EAST-1 as our default. This outage proved many &lt;em&gt;global&lt;/em&gt; services (like IAM logins) are still secretly controlled from this one region. A failure there can break your app &lt;em&gt;everywhere&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Cloud is Not Magic:&lt;/strong&gt; The cloud is just someone else's computer. We must design our apps to &lt;em&gt;survive&lt;/em&gt; cloud failures. We share responsibility for resilience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your App is Only as Strong as its Weakest Link:&lt;/strong&gt; Thousands of apps failed because their &lt;em&gt;entire&lt;/em&gt; system was in one region, or they "hardcoded" a dependency (like &lt;code&gt;dynamodb.us-east-1.amazonaws.com&lt;/code&gt;) into their app.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🛠️ Your 5-Step Survival Guide (DevOps Action Plan)
&lt;/h2&gt;

&lt;p&gt;Here are the concrete actions to prevent this from happening to you.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;1. Stop Confusing Multi-AZ and Multi-Region&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-AZ&lt;/strong&gt; (multiple data centers in one city) is the &lt;em&gt;minimum&lt;/em&gt;. It &lt;strong&gt;would not&lt;/strong&gt; have saved you from this outage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Action:&lt;/strong&gt; Use a &lt;strong&gt;Multi-Region&lt;/strong&gt; architecture (e.g., US-EAST-1 and US-WEST-2) for critical apps. This can be Active-Passive (warm standby) or Active-Active (running in both places at once).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;2. Use DNS Failover (Your Best Friend)&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;This is non-negotiable for a multi-region setup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Action:&lt;/strong&gt; Use &lt;strong&gt;Amazon Route 53 DNS Failover&lt;/strong&gt;. It automatically detects a failing region and sends all your users to the healthy one, like a smart GPS rerouting traffic around a crash.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;3. Design for Graceful Degradation&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Your app shouldn't be "all or nothing."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Action:&lt;/strong&gt; Ask: "If the 'upload' feature breaks, can I just disable the button and let the user keep browsing?" Decouple your services (e.g., with SQS queues) so a failure in one part doesn't crash the whole system.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;4. Banish Hardcoded Endpoints&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Never, ever write &lt;code&gt;us-east-1&lt;/code&gt; directly in your application's code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Action:&lt;/strong&gt; Audit your code. Use environment variables or a parameter store (like AWS SSM) to manage endpoints. Your app shouldn't care &lt;em&gt;where&lt;/em&gt; it's running.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;5. Practice Failing (Chaos Engineering)&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;The companies that survived weren't lucky; they were prepared.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Action:&lt;/strong&gt; Run a &lt;strong&gt;GameDay&lt;/strong&gt; (a simulated disaster). Intentionally break things in your test environment to find weaknesses. Ask your team, "What happens if I shut down the primary database right now?" and &lt;em&gt;test it&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>techwithyeshwanth</category>
      <category>cloud</category>
      <category>devops</category>
    </item>
    <item>
      <title>AWS Bedrock Powered VPC Flow Log Analyzer 🔍</title>
      <dc:creator>Yeshwanth L M</dc:creator>
      <pubDate>Wed, 15 Oct 2025 11:46:27 +0000</pubDate>
      <link>https://forem.com/aws-builders/aws-bedrock-vpc-flow-log-analyzer-3gi1</link>
      <guid>https://forem.com/aws-builders/aws-bedrock-vpc-flow-log-analyzer-3gi1</guid>
      <description>&lt;h1&gt;
  
  
  Supercharge Your VPC Flow Log Analysis with Amazon Bedrock
&lt;/h1&gt;

&lt;p&gt;In today's complex and dynamic cloud environments, understanding network traffic is crucial for security, troubleshooting, and performance optimization. AWS VPC Flow Logs provide a wealth of information about the IP traffic going to and from network interfaces in your VPC. However, manually analyzing these logs can be a daunting and time-consuming task.&lt;/p&gt;

&lt;p&gt;What if you could use the power of generative AI to analyze your VPC Flow Logs using natural language? This is where the &lt;strong&gt;Amazon Bedrock-Powered VPC Flowlogs Analyzer&lt;/strong&gt; comes in. This solution, available on GitHub, leverages the capabilities of Amazon Bedrock to provide a powerful and intuitive way to query and understand your network traffic.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge with VPC Flow Logs
&lt;/h2&gt;

&lt;p&gt;VPC Flow Logs are a critical source of information for network monitoring and security analysis. They can help you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Diagnose overly restrictive or permissive security group and NACL rules.&lt;/li&gt;
&lt;li&gt;Monitor traffic that is reaching your instances.&lt;/li&gt;
&lt;li&gt;Understand traffic patterns and identify anomalies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, the raw data from Flow Logs is verbose and can be difficult to parse. To get meaningful insights, you often need to use specialized tools or write complex queries, which can be a barrier for many users.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution: A Generative AI-Powered Approach
&lt;/h2&gt;

&lt;p&gt;The Amazon Bedrock-Powered VPC Flowlogs Analyzer provides a new paradigm for interacting with your network data. Instead of writing complex queries, you can simply ask questions in plain English. For example, you could ask:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IP Address Analysis:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"What source IP addresses do you see?"&lt;/li&gt;
&lt;li&gt;"List all destination IP addresses"&lt;/li&gt;
&lt;li&gt;"Which IP has the most traffic?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Port and Protocol Analysis:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"What destination ports are being accessed?"&lt;/li&gt;
&lt;li&gt;"Show me all TCP connections"&lt;/li&gt;
&lt;li&gt;"Which protocols are being used?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Security Analysis:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Which connections were rejected?"&lt;/li&gt;
&lt;li&gt;"Show me suspicious activities"&lt;/li&gt;
&lt;li&gt;"Are there any failed connection attempts?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Traffic Analysis:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"What's the largest data transfer?"&lt;/li&gt;
&lt;li&gt;"Show me connections to external IPs"&lt;/li&gt;
&lt;li&gt;"Which interface has the most traffic?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The solution uses Amazon Bedrock, a fully managed service that offers a choice of high-performing foundation models (FMs) from leading AI companies, to understand your natural language queries and generate the appropriate code and queries to retrieve the information from your VPC Flow Logs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Natural Language Queries:&lt;/strong&gt; Ask questions about your VPC Flow Logs in plain English.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Serverless and Scalable:&lt;/strong&gt; The solution is built on a serverless architecture that can scale to handle large volumes of data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easy to Deploy:&lt;/strong&gt; The entire infrastructure can be deployed using a single python script.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extensible:&lt;/strong&gt; The solution can be extended to support additional data sources and analysis capabilities.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;To get started with the Amazon Bedrock-Powered VPC Flowlogs Analyzer, you will need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An AWS account with access to Amazon Bedrock.&lt;/li&gt;
&lt;li&gt;Python 3.10+ installed on your local machine.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The solution can be deployed using a simple script that sets up all the necessary AWS resources. Once deployed, you can start querying your VPC Flow Logs using natural language through the provided interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example Usage
&lt;/h2&gt;

&lt;p&gt;Here are a few examples of how you can use the solution to analyze your VPC Flow Logs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Identify suspicious traffic:&lt;/strong&gt; "Show me all traffic from IP address 192.0.2.1"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Troubleshoot connectivity issues:&lt;/strong&gt; "Is there any traffic being blocked by a security group?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor application traffic:&lt;/strong&gt; "What are the top 10 most active IP addresses?"&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The Amazon Bedrock-Powered VPC Flowlogs Analyzer is a powerful tool that can help you unlock the full potential of your VPC Flow Logs. By leveraging the power of generative AI, you can gain deeper insights into your network traffic, improve your security posture, and optimize your cloud environment.&lt;/p&gt;

&lt;p&gt;To learn more and get started, check out the &lt;a href="https://github.com/yeshwanthlm/Amazon-Bedrock-Powered-VPC-Flowlogs-Analyzer" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Demo of the project: &lt;a href="https://youtu.be/3pC720Wd-Rk" rel="noopener noreferrer"&gt;Hands-on Demo&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>vpc</category>
      <category>aws</category>
      <category>loganalysis</category>
    </item>
    <item>
      <title>4 Ways to Transfer Files/Code From Your Local Computer to a Remote Cloud Server</title>
      <dc:creator>Yeshwanth L M</dc:creator>
      <pubDate>Tue, 07 Oct 2025 09:35:13 +0000</pubDate>
      <link>https://forem.com/aws-builders/file-and-code-transfer-local-machine-cloud-server-513l</link>
      <guid>https://forem.com/aws-builders/file-and-code-transfer-local-machine-cloud-server-513l</guid>
      <description>&lt;p&gt;&lt;strong&gt;File and Code Transfer: Local Machine → Cloud Server&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This guide explains four popular methods to transfer files or code from your local computer to a remote cloud server, such as AWS EC2 running Ubuntu.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. SCP (Secure Copy Protocol)&lt;/strong&gt;&lt;br&gt;
Quickly copy files or folders from your local machine to a remote server over SSH.&lt;/p&gt;

&lt;p&gt;Copy a single file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;scp -i /path/to/private/key.pem /local/file/path user@SERVER_PUBLIC_IP:/PATH/INSIDE/SERVER
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy an entire folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;scp -i /path/to/private/key.pem /local/FOLDER/path user@SERVER_PUBLIC_IP:/PATH/INSIDE/SERVER

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. S3 Method (with IAM Role on EC2)&lt;/strong&gt;&lt;br&gt;
Upload files to an S3 bucket from your local machine. Then, grant your EC2 instance permission to access S3, and transfer files directly on the instance.&lt;/p&gt;

&lt;p&gt;Sample IAM Policy for EC2 IAM Role:&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="s2"&gt;"s3:*"&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="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:s3:::file-transfer-demo-server-bucket"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:s3:::file-transfer-demo-server-bucket/*"&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;Upload from local to S3:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aws s3 cp /path/to/file s3://file-transfer-demo-server-bucket/

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

&lt;/div&gt;



&lt;p&gt;Download from S3 to EC2:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aws s3 cp s3://file-transfer-demo-server-bucket/IMG_8366.jpg /home/ubuntu/

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

&lt;/div&gt;



&lt;p&gt;The EC2 instance must have the proper IAM role attached with this policy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. WinSCP or Other SFTP GUI Tools&lt;/strong&gt;&lt;br&gt;
For Windows or those who prefer GUIs, use WinSCP (or FileZilla, Cyberduck) for drag-and-drop file transfer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connect using SFTP, your server’s IP, username (e.g., ubuntu), and your .pem SSH private key.&lt;/li&gt;
&lt;li&gt;Drag files or folders from local to remote panel.&lt;/li&gt;
&lt;li&gt;Make sure SFTP/SSH (port 22) is open.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. GitHub: Clone Code from Repository&lt;/strong&gt;&lt;br&gt;
For code and structured projects, push your content to a GitHub (or GitLab) repository, then on the cloud server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/yourusername/your-repo.git

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

&lt;/div&gt;



&lt;p&gt;Note:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requires git installed on the cloud server.&lt;/li&gt;
&lt;li&gt;Best for transferring source code, not large binary files.&lt;/li&gt;
&lt;li&gt;For all SSH-based methods (SCP, SFTP, WinSCP), ensure the correct username and private key.&lt;/li&gt;
&lt;li&gt;Always protect your credentials and configure least-privilege access for IAM roles and bucket policies.&lt;/li&gt;
&lt;li&gt;For large files or many files, S3 or SCP may be more efficient than GitHub.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>tutorial</category>
      <category>cloud</category>
      <category>linux</category>
      <category>aws</category>
    </item>
    <item>
      <title>Enhance Your Cloud Development Workflow with Amazon Q CLI and MCP Servers</title>
      <dc:creator>Yeshwanth L M</dc:creator>
      <pubDate>Tue, 07 Oct 2025 07:19:02 +0000</pubDate>
      <link>https://forem.com/aws-builders/enhance-your-cloud-development-workflow-with-amazon-q-cli-and-mcp-servers-1bbh</link>
      <guid>https://forem.com/aws-builders/enhance-your-cloud-development-workflow-with-amazon-q-cli-and-mcp-servers-1bbh</guid>
      <description>&lt;p&gt;In the rapidly evolving landscape of cloud development, tools that streamline workflows and enhance productivity are invaluable. Amazon Q CLI, a command-line interface tool, brings intelligent assistance directly to your terminal with features like IDE-style autocomplete and agentic capabilities. When paired with Model Context Protocol (MCP) servers, Amazon Q CLI transforms into a powerful ally, offering a rich "toolbox" of functionalities for diverse development tasks. This guide will walk you through the complete setup of Amazon Q CLI and MCP servers, empowering you to automate and accelerate your AWS projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding Amazon Q CLI and MCP Servers&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Amazon Q CLI&lt;/strong&gt; acts as a smart assistant within your terminal, understanding your context and providing intelligent suggestions or executing tasks based on your input. It aims to reduce manual effort and cognitive load during development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; Servers are specialized applications that extend the capabilities of Amazon Q CLI. They provide specific functionalities, acting as plugins or modules that Amazon Q CLI can leverage to perform more complex operations, such as generating infrastructure diagrams, writing code, or managing Kubernetes resources. Think of them as a collection of experts that Amazon Q CLI can consult for specialized tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installing Amazon Q CLI&lt;/strong&gt;&lt;br&gt;
Before you begin, ensure you have an AWS Builder ID, as it's a prerequisite for using Amazon Q CLI.&lt;br&gt;
The installation process for Amazon Q CLI is straightforward and varies slightly depending on your operating system:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For macOS:&lt;/strong&gt;&lt;br&gt;
The simplest way to install Amazon Q CLI on macOS is by using Homebrew:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;brew install amazon-q&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Alternatively, you can download the installer directly and follow the on-screen prompts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For Windows (via WSL - Windows Subsystem for Linux):&lt;/strong&gt;&lt;br&gt;
If you're a Windows user, WSL offers a seamless Linux environment to run Amazon Q CLI.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download the Amazon Q CLI zip file.&lt;/li&gt;
&lt;li&gt;Unzip the contents to your desired location.&lt;/li&gt;
&lt;li&gt;Open your WSL terminal and navigate to the unzipped directory.&lt;/li&gt;
&lt;li&gt;Run the installation program provided within the unzipped files.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;For Linux (e.g., Ubuntu):&lt;/strong&gt;&lt;br&gt;
For Linux distributions like Ubuntu, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;First, ensure your system is up-to-date:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install libfuse2, which is often a dependency:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;sudo apt install libfuse2 -y&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download the Amazon Q CLI .deb package.
Install the .deb file using dpkg:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;sudo dpkg -i amazon-q-cli.deb&lt;/code&gt; (Replace amazon-q-cli.deb) with the actual filename&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;After successful installation, you can log in to Amazon Q CLI using your AWS Builder ID:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;q login&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Once logged in, you can start interacting with Amazon Q CLI by simply typing q in your terminal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setting up MCP Servers Locally&lt;/strong&gt;&lt;br&gt;
MCP servers can be run locally using various tools like npx, uvx, or docker. This guide will demonstrate using uvx for its simplicity and efficiency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install uvx:&lt;/strong&gt;&lt;br&gt;
If you don't have uvx installed, you can typically install it via npm (Node Package Manager):&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install -g uvx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configure mcp.json:&lt;/strong&gt;&lt;br&gt;
Create or modify the mcp.json file located in your Amazon Q CLI configuration directory: ~/.aws/amazonq/mcp.json. This file defines the MCP servers that Amazon Q CLI will recognize and utilize.&lt;/p&gt;

&lt;p&gt;Here's an example of how your mcp.json might look, including configurations for an AWS CDK MCP server and an AWS Diagram MCP server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "servers": [
    {
      "name": "awslabs.cdk-mcp-server",
      "command": "uvx",
      "args": ["awslabs.cdk-mcp-server"]
    },
    {
      "name": "awslabs.aws-diagram-mcp-server",
      "command": "uvx",
      "args": ["awslabs.aws-diagram-mcp-server"]
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this configuration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"name": A unique identifier for the MCP server.&lt;/li&gt;
&lt;li&gt;"command": The executable command to run the MCP server (e.g., uvx).&lt;/li&gt;
&lt;li&gt;"args": Any arguments required to run the specific MCP server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By defining these entries, you're essentially telling Amazon Q CLI where to find and how to launch these powerful extensions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Powerful Use Cases with Amazon Q CLI and MCP Servers&lt;/strong&gt;&lt;br&gt;
With Amazon Q CLI and MCP servers set up, you unlock a realm of possibilities for automating and enhancing your AWS development tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
Creating Architectural Diagrams:
The awslabs.aws-diagram-mcp-server is incredibly useful for visually representing your cloud infrastructure. You can describe your desired architecture in natural language, and Amazon Q CLI, leveraging the MCP server, will generate a professional diagram.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example Prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;q chat "Create a fault-tolerant, highly available real-time GPS tracking system using AWS ECS Fargate, Redis (ElastiCache), Aurora Serverless, and API Gateway. Use ALB for socket routing, integrate CloudWatch for logging, and S3 for archival storage. CI/CD should be managed by CodePipeline."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Amazon Q CLI will then process this prompt and output a detailed architectural diagram, saving you hours of manual drawing. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generating Terraform Code:&lt;br&gt;
For Infrastructure as Code (IaC) enthusiasts, MCP servers can assist in generating Terraform configurations. Describe the AWS resources you need, and Amazon Q CLI can provide the corresponding Terraform code, significantly accelerating your IaC development.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Managing Kubernetes Resources:&lt;br&gt;
If you're working with Kubernetes on AWS (e.g., EKS), MCP servers can help you generate Kubernetes manifests (YAML files) based on your requirements, simplifying the deployment and management of containerised applications.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Conclusion&lt;br&gt;
Integrating Amazon Q CLI with MCP servers transforms your command-line experience into an intelligent and highly efficient development environment. From generating complex architectural diagrams to automating infrastructure provisioning and managing Kubernetes resources, these tools empower you to work smarter, not just harder. By following the steps outlined in this guide, you can unlock a new level of productivity in your AWS cloud&lt;/p&gt;

</description>
      <category>cloudarchitecture</category>
      <category>aws</category>
      <category>amazonqcli</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Automate Your AWS MSK Kafka Cluster with Terraform: A Complete Guide</title>
      <dc:creator>Yeshwanth L M</dc:creator>
      <pubDate>Tue, 07 Oct 2025 07:18:39 +0000</pubDate>
      <link>https://forem.com/aws-builders/automate-your-aws-msk-kafka-cluster-with-terraform-a-complete-guide-18li</link>
      <guid>https://forem.com/aws-builders/automate-your-aws-msk-kafka-cluster-with-terraform-a-complete-guide-18li</guid>
      <description>&lt;p&gt;In a previous post, we walked through setting up an AWS MSK cluster manually using the AWS Console. While that's great for learning, it's not repeatable, scalable, or easy to manage. Today, we're taking it to the next level with &lt;strong&gt;Infrastructure as Code (IaC)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We'll use &lt;strong&gt;Terraform&lt;/strong&gt; to define our entire MSK environment—VPC, subnets, security groups, IAM roles, the MSK cluster, and even a client EC2 instance—in a single set of configuration files. With a few simple commands, you can create, update, or destroy the whole setup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What We'll Build:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A new VPC with public subnets across three Availability Zones.&lt;/li&gt;
&lt;li&gt;All necessary networking (Internet Gateway, Route Tables).&lt;/li&gt;
&lt;li&gt;A secure MSK Kafka cluster.&lt;/li&gt;
&lt;li&gt;An EC2 instance pre-configured with Kafka tools and the correct authentication settings.&lt;/li&gt;
&lt;li&gt;IAM roles and security groups that allow the EC2 instance to securely communicate with the MSK cluster.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's get started!&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before you begin, make sure you have the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;An AWS Account:&lt;/strong&gt; You'll need an AWS account with programmatic access. If you haven't already, configure your credentials locally using the AWS CLI:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws configure
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Terraform Installed:&lt;/strong&gt; You'll need the Terraform CLI installed on your machine.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  How to Install Terraform
&lt;/h3&gt;

&lt;p&gt;Terraform is easy to install. Here are instructions for common operating systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On macOS (using Homebrew):&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;brew tap hashicorp/tap
brew &lt;span class="nb"&gt;install &lt;/span&gt;hashicorp/tap/terraform
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;On Windows (using Chocolatey):&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;choco &lt;span class="nb"&gt;install &lt;/span&gt;terraform
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;On Linux (Debian/Ubuntu):&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;wget &lt;span class="nt"&gt;-O-&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;https://apt.releases.hashicorp.com/gpg]&lt;span class="o"&gt;(&lt;/span&gt;https://apt.releases.hashicorp.com/gpg&lt;span class="o"&gt;)&lt;/span&gt; | &lt;span class="nb"&gt;sudo &lt;/span&gt;gpg &lt;span class="nt"&gt;--dearmor&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /usr/share/keyrings/hashicorp-archive-keyring.gpg
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] [https://apt.releases.hashicorp.com](https://apt.releases.hashicorp.com) &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;lsb_release &lt;span class="nt"&gt;-cs&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; main"&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/hashicorp.list
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;terraform
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;After installation, verify it's working by running:&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;terraform &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📜 Understanding the Terraform Code
&lt;/h2&gt;

&lt;p&gt;Save the code from the prompt into a file named &lt;code&gt;main.tf&lt;/code&gt;. Let's break down what each section of our Terraform configuration does.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Networking (VPC, Subnets, IGW)
&lt;/h3&gt;

&lt;p&gt;This section builds the foundational network for our resources. We create a new VPC and then provision three public subnets, one in each available AWS Availability Zone for high availability. The Internet Gateway and Route Tables ensure our EC2 instance can reach the internet.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Security (Security Groups &amp;amp; SSH Key)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSH Key:&lt;/strong&gt; Terraform dynamically generates an RSA key pair. The public key is uploaded to AWS (&lt;code&gt;aws_key_pair&lt;/code&gt;), and the private key is saved locally as &lt;code&gt;msk-client-key.pem&lt;/code&gt; so you can SSH into the EC2 instance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security Groups:&lt;/strong&gt; We create two security groups: one for the MSK cluster and one for the EC2 client. The rules are configured to allow the EC2 instance and the MSK cluster to communicate freely with each other on any port, while the EC2 instance only accepts incoming SSH traffic from the internet.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. IAM Role for EC2
&lt;/h3&gt;

&lt;p&gt;Instead of hardcoding AWS keys, we use an IAM Role. This block creates an &lt;code&gt;aws_iam_role&lt;/code&gt; that the EC2 instance can "assume." The attached &lt;code&gt;aws_iam_policy&lt;/code&gt; grants the instance specific permissions to connect, describe, read from, and write to the MSK cluster topics. This is the most secure way to grant AWS permissions to services.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. The MSK Cluster
&lt;/h3&gt;

&lt;p&gt;This is the core resource. We define an &lt;code&gt;aws_msk_cluster&lt;/code&gt; with three small broker nodes (&lt;code&gt;kafka.t3.small&lt;/code&gt;). Critically, the &lt;code&gt;client_authentication&lt;/code&gt; block is configured to use &lt;strong&gt;IAM (&lt;code&gt;iam = true&lt;/code&gt;)&lt;/strong&gt;, which allows our EC2 instance to authenticate using its assigned IAM role.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. The EC2 Client Instance
&lt;/h3&gt;

&lt;p&gt;This is where the magic happens! We launch a &lt;code&gt;t2.micro&lt;/code&gt; EC2 instance. The &lt;code&gt;user_data&lt;/code&gt; script is a powerful feature that runs automatically on the first boot. This script:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installs Java.&lt;/li&gt;
&lt;li&gt;Downloads and extracts the correct version of Kafka.&lt;/li&gt;
&lt;li&gt;Downloads the AWS MSK IAM Auth library, which is required for IAM authentication.&lt;/li&gt;
&lt;li&gt;Creates the &lt;code&gt;client.properties&lt;/code&gt; file with the exact configuration needed for our Kafka tools to authenticate with MSK via IAM.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means that as soon as the instance is ready, it's already fully configured to act as a Kafka client!&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Deploying the Infrastructure
&lt;/h2&gt;

&lt;p&gt;Note: You can find the complete terraform script here: &lt;a href="https://github.com/yeshwanthlm/AWS-MSK-Crash-Course/blob/main/terraform/msk-cluster-with-vpc-ec2-client.tf" rel="noopener noreferrer"&gt;https://github.com/yeshwanthlm/AWS-MSK-Crash-Course/blob/main/terraform/msk-cluster-with-vpc-ec2-client.tf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With the &lt;code&gt;msk-cluster-with-vpc-ec2-client.tf&lt;/code&gt; file saved, running the deployment is as simple as three commands.&lt;/p&gt;

&lt;h4&gt;
  
  
  Initialize Terraform
&lt;/h4&gt;

&lt;p&gt;This command downloads the necessary AWS provider plugin.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Plan the Deployment
&lt;/h4&gt;

&lt;p&gt;This is a dry run. Terraform shows you exactly what resources it will create, change, or destroy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform plan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Apply the Configuration
&lt;/h4&gt;

&lt;p&gt;This command executes the plan and builds everything in your AWS account. Type yes when prompted.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform apply
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Grab a coffee! ☕ The MSK cluster creation is the longest step and will take around &lt;strong&gt;20-30 minutes&lt;/strong&gt;. Once finished, Terraform will display the outputs, including the public IP of your EC2 instance.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Connecting and Testing Your Cluster
&lt;/h2&gt;

&lt;p&gt;Once terraform apply is complete, let's verify everything works.&lt;/p&gt;

&lt;h4&gt;
  
  
  Get the EC2 Public IP
&lt;/h4&gt;

&lt;p&gt;Find the public IP from the Terraform output. You can also run terraform output ec2_public_ip.&lt;/p&gt;

&lt;h4&gt;
  
  
  SSH into the EC2 Instance
&lt;/h4&gt;

&lt;p&gt;The private key msk-client-key.pem was saved in your project directory.&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;# Make sure to set correct permissions if needed&lt;/span&gt;
&lt;span class="nb"&gt;chmod &lt;/span&gt;400 msk-client-key.pem

ssh &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"msk-client-key.pem"&lt;/span&gt; ec2-user@&amp;lt;YOUR_EC2_PUBLIC_IP&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Get Your Bootstrap Brokers String
&lt;/h4&gt;

&lt;p&gt;In your local terminal (not the SSH session), get the connection string from the Terraform outputs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform output bootstrap_brokers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy this long string. You'll need it for the next steps.&lt;/p&gt;

&lt;h4&gt;
  
  
  Create a Kafka Topic
&lt;/h4&gt;

&lt;p&gt;Inside your EC2 SSH session, navigate to the Kafka bin directory and create a topic.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/kafka-topics.sh &lt;span class="nt"&gt;--create&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--bootstrap-server&lt;/span&gt; &amp;lt;bootstrapServerString&amp;gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--command-config&lt;/span&gt; /home/ec2-user/kafka_2.13-3.6.0/bin/client.properties &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--replication-factor&lt;/span&gt; 3 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--partitions&lt;/span&gt; 1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--topic&lt;/span&gt; my-first-topic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Start a Producer
&lt;/h4&gt;

&lt;p&gt;In the same terminal, start the console producer. This will give you a &amp;gt; prompt.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/kafka-console-producer.sh &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--broker-list&lt;/span&gt; &amp;lt;bootstrapServerString&amp;gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--producer&lt;/span&gt;.config /home/ec2-user/kafka_2.13-3.6.0/bin/client.properties &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--topic&lt;/span&gt; my-first-topic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Type a message like Hello from Terraform! and press Enter.&lt;/p&gt;

&lt;h4&gt;
  
  
  Start a Consumer (in a new terminal)
&lt;/h4&gt;

&lt;p&gt;Open a &lt;strong&gt;second terminal window&lt;/strong&gt; and SSH into your EC2 instance again. Navigate to the same bin directory and run the consumer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/kafka-console-consumer.sh &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--bootstrap-server&lt;/span&gt; &amp;lt;bootstrapServerString&amp;gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--consumer&lt;/span&gt;.config /home/ec2-user/kafka_2.13-3.6.0/bin/client.properties &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--topic&lt;/span&gt; my-first-topic &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--from-beginning&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should instantly see Hello from Terraform! appear in your consumer window. Success! 🎉&lt;/p&gt;

&lt;h2&gt;
  
  
  🧹 Cleaning Up
&lt;/h2&gt;

&lt;p&gt;Don't forget to tear down your infrastructure to avoid ongoing AWS charges! The beauty of Terraform is that this is a single, simple command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform destroy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Type yes when prompted, and Terraform will neatly remove all the resources it created.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;You've successfully automated a complete AWS MSK environment using Terraform. With Infrastructure as Code, you now have a repeatable, version-controlled, and reliable way to manage your Kafka clusters on AWS. This is the foundation for building powerful, event-driven applications at scale.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>terraform</category>
      <category>kafka</category>
      <category>iac</category>
    </item>
    <item>
      <title>A Beginner's Guide to AWS MSK: From Cluster Setup to Your First Message</title>
      <dc:creator>Yeshwanth L M</dc:creator>
      <pubDate>Mon, 06 Oct 2025 09:48:49 +0000</pubDate>
      <link>https://forem.com/aws-builders/a-beginners-guide-to-aws-msk-from-cluster-setup-to-your-first-message-3j05</link>
      <guid>https://forem.com/aws-builders/a-beginners-guide-to-aws-msk-from-cluster-setup-to-your-first-message-3j05</guid>
      <description>&lt;h1&gt;
  
  
  🚀 Getting Started with AWS MSK: Your First Kafka Cluster
&lt;/h1&gt;

&lt;p&gt;Ever wondered how massive, data-driven apps handle real-time event streams for things like live analytics, log aggregation, or IoT data? A key technology behind this is &lt;strong&gt;Apache Kafka&lt;/strong&gt;, a powerful open-source distributed event streaming platform.&lt;/p&gt;

&lt;p&gt;However, setting up and managing Kafka on your own can be a complex and time-consuming task. This is where &lt;strong&gt;AWS Managed Streaming for Apache Kafka (MSK)&lt;/strong&gt; comes in.&lt;/p&gt;

&lt;p&gt;In this guide, we'll cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What AWS MSK is and why it's useful.&lt;/li&gt;
&lt;li&gt;The different cluster types available.&lt;/li&gt;
&lt;li&gt;A full, hands-on tutorial to create your own MSK cluster and send your first messages from an EC2 instance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's dive in!&lt;/p&gt;




&lt;h2&gt;
  
  
  ## 🤔 What is AWS MSK?
&lt;/h2&gt;

&lt;p&gt;Think of Apache Kafka as a high-speed, central post office for your application's data. 📮 Applications can send messages (&lt;strong&gt;produce&lt;/strong&gt;) to different mailboxes (&lt;strong&gt;topics&lt;/strong&gt;), and other applications can pick them up (&lt;strong&gt;consume&lt;/strong&gt;) when they're ready.&lt;/p&gt;

&lt;p&gt;AWS MSK is a &lt;strong&gt;fully managed service&lt;/strong&gt; that runs this post office for you. It handles the heavy lifting so you don't have to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Provisioning Servers:&lt;/strong&gt; No need to pick, set up, or configure EC2 instances.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kafka Software Management:&lt;/strong&gt; AWS handles the installation, patching, and upgrades of Kafka.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High Availability:&lt;/strong&gt; MSK automatically distributes your cluster across multiple data centers (Availability Zones) to ensure it's resilient to failure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In short, you get the full power of Apache Kafka without the operational overhead.&lt;/p&gt;




&lt;h2&gt;
  
  
  ## ✨ Why Do You Need AWS MSK?
&lt;/h2&gt;

&lt;p&gt;So, why choose MSK over managing Kafka yourself?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;✅ Simplified Operations:&lt;/strong&gt; Spend your time building applications, not managing infrastructure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🌐 Highly Available &amp;amp; Scalable:&lt;/strong&gt; MSK is built for resilience. You can easily scale your cluster's compute and storage with a few clicks and no downtime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔒 Secure by Default:&lt;/strong&gt; Integrates seamlessly with AWS services like IAM for authentication, VPC for network isolation, and KMS for encrypting your data at rest and in transit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;💯 Fully Compatible:&lt;/strong&gt; It's 100% compatible with open-source Apache Kafka. You can migrate existing applications, tools, and plugins without changing your code.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ## Cluster Types: Provisioned vs. Serverless
&lt;/h2&gt;

&lt;p&gt;When creating a cluster, MSK gives you two options:&lt;/p&gt;

&lt;h3&gt;
  
  
  ### Provisioned Clusters
&lt;/h3&gt;

&lt;p&gt;This is the traditional model. Think of it like &lt;strong&gt;leasing a fleet of trucks&lt;/strong&gt;. 🚚 You choose the size and number of trucks (broker types and count), and you have full control over the configuration.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best for:&lt;/strong&gt; Predictable, high-volume workloads where you want fine-grained control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You pay for:&lt;/strong&gt; The resources you provision, 24/7.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ### Serverless Clusters
&lt;/h3&gt;

&lt;p&gt;This is a newer, more flexible option. Think of it like a &lt;strong&gt;pay-per-package delivery service&lt;/strong&gt;. 📦 You don't manage any trucks; you just send your data, and the service automatically scales to handle the load.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best for:&lt;/strong&gt; New apps, or workloads with variable or unpredictable traffic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You pay for:&lt;/strong&gt; The data you stream and retain (throughput and storage).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this tutorial, we'll use a &lt;strong&gt;Provisioned&lt;/strong&gt; cluster to see all the underlying configurations.&lt;/p&gt;




&lt;h2&gt;
  
  
  ## 🛠️ Hands-On Demo: Creating Your Cluster and Sending Messages
&lt;/h2&gt;

&lt;p&gt;Time to build! We'll create an MSK cluster and an EC2 instance to communicate with it.&lt;/p&gt;

&lt;h3&gt;
  
  
  ### Part 1: Create the MSK Cluster
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; In the AWS Console, navigate to &lt;strong&gt;MSK&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt; Click &lt;strong&gt;Create cluster&lt;/strong&gt; and choose the &lt;strong&gt;Custom create&lt;/strong&gt; method.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Cluster settings:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cluster name:&lt;/strong&gt; &lt;code&gt;my-demo-msk-cluster&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cluster type:&lt;/strong&gt; &lt;strong&gt;Provisioned&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apache Kafka version:&lt;/strong&gt; Use the recommended default.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Networking:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Select your desired &lt;strong&gt;VPC&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;at least two Availability Zones&lt;/strong&gt; and select a subnet in each. For a simple demo, public subnets are fine, but use private subnets for production.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Security:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Under &lt;strong&gt;Access control methods&lt;/strong&gt;, check the box for &lt;strong&gt;IAM role-based authentication&lt;/strong&gt;. This is the most secure and straightforward way to connect from other AWS services.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Review and Create&lt;/strong&gt;. The cluster will take &lt;strong&gt;20-30 minutes&lt;/strong&gt; to become &lt;code&gt;Active&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  ### Part 2: Set Up the EC2 Client &amp;amp; Security Groups
&lt;/h3&gt;

&lt;p&gt;While the cluster is creating, let's set up our client machine.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Launch an EC2 Instance:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to the EC2 service and click &lt;strong&gt;Launch instance&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Name:&lt;/strong&gt; &lt;code&gt;MSK-Client-EC2&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AMI:&lt;/strong&gt; &lt;strong&gt;Amazon Linux 2&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instance Type:&lt;/strong&gt; &lt;code&gt;t2.micro&lt;/code&gt; (Free Tier eligible)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network:&lt;/strong&gt; &lt;strong&gt;Crucially, select the same VPC and one of the subnets you used for your MSK cluster.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;IAM Role:&lt;/strong&gt; Attach an IAM role to the instance with a policy that allows it to connect to MSK. A simple policy for this demo would be:&lt;br&gt;
&lt;/p&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;"kafka-cluster:Connect"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"kafka-cluster:AlterCluster"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"kafka-cluster:DescribeCluster"&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="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;"kafka-cluster:*Topic*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"kafka-cluster:WriteData"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"kafka-cluster:ReadData"&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="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;"kafka-cluster:AlterGroup"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"kafka-cluster:DescribeGroup"&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;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configure Security Groups (The Important Part!):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MSK Cluster Security Group:&lt;/strong&gt; Find the security group attached to your MSK cluster. Add an &lt;strong&gt;inbound rule&lt;/strong&gt; to allow &lt;strong&gt;All traffic&lt;/strong&gt; from the security group of your &lt;code&gt;MSK-Client-EC2&lt;/code&gt; instance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EC2 Instance Security Group:&lt;/strong&gt; Find the security group for your EC2 instance. Add an &lt;strong&gt;inbound rule&lt;/strong&gt; to allow &lt;strong&gt;All traffic&lt;/strong&gt; from the MSK cluster's security group. Also, make sure you have a rule to allow SSH from your IP.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This two-way rule allows the EC2 instance and the MSK brokers to communicate freely within the VPC.&lt;/p&gt;

&lt;h3&gt;
  
  
  ### Part 3: Connect and Send Messages
&lt;/h3&gt;

&lt;p&gt;Once your MSK cluster is &lt;strong&gt;Active&lt;/strong&gt; and your EC2 instance is running, SSH into the instance.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Install Tools:&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;# Update and install Java&lt;/span&gt;
    &lt;span class="nb"&gt;sudo &lt;/span&gt;yum update &lt;span class="nt"&gt;-y&lt;/span&gt;
    &lt;span class="nb"&gt;sudo &lt;/span&gt;yum &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nb"&gt;install &lt;/span&gt;java-11
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Download and extract Apache Kafka tools&lt;/span&gt;
wget https://archive.apache.org/dist/kafka/3.6.0/kafka_2.13-3.6.0.tgz

&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-xzf&lt;/span&gt; kafka_2.13-3.6.0.tgz

&lt;span class="nb"&gt;cd &lt;/span&gt;kafka_2.13-3.6.0/libs

wget https://github.com/aws/aws-msk-iam-auth/releases/download/v1.1.1/aws-msk-iam-auth-1.1.1-all.jar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Create Client Properties File:&lt;/strong&gt;&lt;br&gt;
We need to tell the Kafka tools to use IAM for authentication.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create the config file&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt; &amp;gt; client.properties
security.protocol=SASL_SSL
sasl.mechanism=AWS_MSK_IAM
sasl.jaas.config=software.amazon.msk.auth.iam.IAMLoginModule required;
sasl.client.callback.handler.class=software.amazon.msk.auth.iam.IAMClientCallbackHandler
&lt;/span&gt;&lt;span class="no"&gt;EOF
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Get Bootstrap Servers:&lt;/strong&gt;&lt;br&gt;
In the MSK console, click your cluster, then &lt;strong&gt;View client information&lt;/strong&gt;. Copy the &lt;strong&gt;Bootstrap servers&lt;/strong&gt; endpoint for &lt;strong&gt;IAM&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Create a Topic:&lt;/strong&gt;&lt;br&gt;
Let's create a "mailbox" called &lt;code&gt;my-first-topic&lt;/code&gt;. Replace &lt;code&gt;&amp;lt;YOUR_BOOTSTRAP_SERVERS&amp;gt;&lt;/code&gt; with the endpoint you just copied.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/kafka-topics.sh &lt;span class="nt"&gt;--create&lt;/span&gt; &lt;span class="nt"&gt;--bootstrap-server&lt;/span&gt; &amp;lt;bootstrapServerString&amp;gt; &lt;span class="nt"&gt;--command-config&lt;/span&gt; /home/ec2-user/kafka_2.13-3.6.0/bin/client.properties &lt;span class="nt"&gt;--replication-factor&lt;/span&gt; 3 &lt;span class="nt"&gt;--partitions&lt;/span&gt; 1 &lt;span class="nt"&gt;--topic&lt;/span&gt; my-first-topic
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Start a Producer:&lt;/strong&gt;&lt;br&gt;
This command gives you a prompt where you can type messages to send.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/kafka-console-producer.sh &lt;span class="nt"&gt;--broker-list&lt;/span&gt; &amp;lt;bootstrapServerString&amp;gt; &lt;span class="nt"&gt;--producer&lt;/span&gt;.config /home/ec2-user/kafka_2.13-3.6.0/bin/client.properties &lt;span class="nt"&gt;--topic&lt;/span&gt; my-first-topic

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


&lt;p&gt;Type &lt;code&gt;Hello MSK!&lt;/code&gt; and hit Enter. Type a few more messages.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Start a Consumer (in a new terminal):&lt;/strong&gt;&lt;br&gt;
Open a &lt;strong&gt;second SSH session&lt;/strong&gt; to your EC2 instance, navigate to the same &lt;code&gt;bin&lt;/code&gt; directory, and run:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/kafka-console-consumer.sh &lt;span class="nt"&gt;--bootstrap-server&lt;/span&gt; &amp;lt;bootstrapServerString&amp;gt; &lt;span class="nt"&gt;--consumer&lt;/span&gt;.config /home/ec2-user/kafka_2.13-3.6.0/bin/client.properties &lt;span class="nt"&gt;--topic&lt;/span&gt; my-first-topic &lt;span class="nt"&gt;--from-beginning&lt;/span&gt;

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

&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You should see the messages you typed in the producer terminal appear instantly! 🎉&lt;/p&gt;




&lt;h2&gt;
  
  
  ## Conclusion
&lt;/h2&gt;

&lt;p&gt;Congratulations! You've successfully deployed a highly available Apache Kafka cluster using AWS MSK, configured secure access from an EC2 instance, and sent your first real-time messages.&lt;/p&gt;

&lt;p&gt;By using MSK, you get to leverage the power of Kafka for your event-driven applications without the headache of managing the underlying infrastructure.&lt;/p&gt;

&lt;p&gt;Thanks for reading! Let me know in the comments if you have any questions.&lt;/p&gt;

&lt;h1&gt;
  
  
  aws #kafka #cloud #devops #tutorial
&lt;/h1&gt;

</description>
      <category>aws</category>
      <category>kafka</category>
      <category>msk</category>
      <category>devops</category>
    </item>
    <item>
      <title>Automate AWS RDS &amp; Aurora Recommendations with Lambda and EventBridge</title>
      <dc:creator>Yeshwanth L M</dc:creator>
      <pubDate>Mon, 06 Oct 2025 05:49:58 +0000</pubDate>
      <link>https://forem.com/aws-builders/automate-aws-rds-aurora-recommendations-with-lambda-and-eventbridge-ng3</link>
      <guid>https://forem.com/aws-builders/automate-aws-rds-aurora-recommendations-with-lambda-and-eventbridge-ng3</guid>
      <description>&lt;h1&gt;
  
  
  Never Miss an AWS Database Tune-Up Again: Your Automated Alert System
&lt;/h1&gt;

&lt;p&gt;As developers, we're constantly juggling a million things. The last thing we want to worry about is whether our &lt;strong&gt;Amazon RDS and Aurora databases&lt;/strong&gt; are running at their peak. AWS provides a ton of great recommendations to boost performance, security, and reliability, but who has the time to check for them manually? 😥&lt;/p&gt;

&lt;p&gt;What if you could get these crucial recommendations delivered straight to your inbox, automatically? In this post, we'll walk you through a simple yet powerful solution to automate this process using &lt;strong&gt;AWS Lambda, Amazon EventBridge, and Amazon Simple Email Service (SES)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Let's dive in! 🚀&lt;/p&gt;




&lt;h2&gt;
  
  
  The Big Picture: How It Works
&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%2F0i2bq2j1hhqmzf3ych3y.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%2F0i2bq2j1hhqmzf3ych3y.png" alt=" " width="779" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We'll be creating a serverless workflow that does the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Scheduled Trigger:&lt;/strong&gt; An &lt;strong&gt;Amazon EventBridge&lt;/strong&gt; rule will kick things off on a schedule you define (e.g., once a day, once a week).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Recommendation Fetching:&lt;/strong&gt; The EventBridge rule will trigger an &lt;strong&gt;AWS Lambda function&lt;/strong&gt;. This function's job is to go and fetch all the latest recommendations for your RDS and Aurora instances.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Email Notification:&lt;/strong&gt; Once the Lambda function has the recommendations, it will format them into a neat HTML email and send it to you and your team using &lt;strong&gt;Amazon SES&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This "set it and forget it" system ensures you're always in the loop about potential optimizations for your databases.&lt;/p&gt;




&lt;h2&gt;
  
  
  Let's Get Building! The Step-by-Step Guide
&lt;/h2&gt;

&lt;p&gt;Here’s a high-level overview of the steps we’ll take to bring this solution to life:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Tag, You're It! Tag Your Database Instances
&lt;/h3&gt;

&lt;p&gt;First things first, you'll need a way to identify the database instances you want to monitor. The easiest way to do this is by applying a &lt;strong&gt;tag&lt;/strong&gt;. For example, you could create a tag with the key &lt;code&gt;send-recommendations&lt;/code&gt; and the value &lt;code&gt;true&lt;/code&gt; for all the databases you want to receive notifications for.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Get Your Email Ready with Amazon SES
&lt;/h3&gt;

&lt;p&gt;To send emails, you'll need to set up &lt;strong&gt;Amazon SES&lt;/strong&gt;. This involves verifying your email address or domain to ensure you're authorized to send emails from it.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Permissions, Permissions, Permissions: The IAM Role
&lt;/h3&gt;

&lt;p&gt;Our Lambda function needs permission to access other AWS services (like RDS and SES). We'll create an &lt;strong&gt;IAM (Identity and Access Management) role&lt;/strong&gt; with a policy that grants the necessary permissions. This is a crucial security step to ensure our function only has access to what it needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. The Brains of the Operation: The Lambda Function
&lt;/h3&gt;

&lt;p&gt;This is where the magic happens! We'll write a Lambda function (you can use your favorite language, like Python or Node.js) that will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fetch recommendations for your RDS and Aurora instances (using the tag we created earlier to filter them).&lt;/li&gt;
&lt;li&gt;Format the recommendations into a user-friendly HTML email.&lt;/li&gt;
&lt;li&gt;Send the email using Amazon SES.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Set the Clock with EventBridge
&lt;/h3&gt;

&lt;p&gt;Finally, we'll create an &lt;strong&gt;Amazon EventBridge rule&lt;/strong&gt; that runs on a schedule. This rule will be configured to trigger our Lambda function, kicking off the entire process automatically.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Get the Code&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;You can find the complete source code, including the Lambda function and IAM policy, on GitHub. Feel free to clone it and get started right away!&lt;/p&gt;

&lt;p&gt;➡️ &lt;strong&gt;GitHub Repo:&lt;/strong&gt; &lt;a href="https://github.com/yeshwanthlm/RDS-Automation/tree/main" rel="noopener noreferrer"&gt;https://github.com/yeshwanthlm/RDS-Automation/tree/main&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why You Should Do This Right Now
&lt;/h2&gt;

&lt;p&gt;By automating your RDS and Aurora recommendations, you'll:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Save Time and Effort:&lt;/strong&gt; No more manually checking for recommendations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stay Proactive:&lt;/strong&gt; Address potential issues before they become major problems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Boost Performance and Security:&lt;/strong&gt; Keep your databases running smoothly and securely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never Miss a Beat:&lt;/strong&gt; Ensure critical recommendations are never overlooked.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best part? This solution is incredibly flexible. You can customize the filtering logic to match your organization's specific needs and priorities.&lt;/p&gt;

&lt;p&gt;So what are you waiting for? Take an hour to set this up today and thank yourself later. Happy coding! 🎉&lt;/p&gt;

</description>
      <category>aws</category>
      <category>serverless</category>
      <category>python</category>
      <category>automation</category>
    </item>
    <item>
      <title>How to Convert AWS Clicks into CDK/CloudFormation (The EASY Way)</title>
      <dc:creator>Yeshwanth L M</dc:creator>
      <pubDate>Sun, 05 Oct 2025 13:28:51 +0000</pubDate>
      <link>https://forem.com/aws-builders/how-to-convert-aws-clicks-into-cdkcloudformation-the-easy-way-14lg</link>
      <guid>https://forem.com/aws-builders/how-to-convert-aws-clicks-into-cdkcloudformation-the-easy-way-14lg</guid>
      <description>&lt;h2&gt;
  
  
  The Manual Grind is Over
&lt;/h2&gt;

&lt;p&gt;Let's be real: setting up infrastructure in the AWS Management Console is a right of passage. We've all been there—clicking through menus, configuring settings, and trying to remember every single step we took. It works for a one-off task, but what happens when you need to do it again? And again? It's slow, error-prone, and doesn't scale.&lt;/p&gt;

&lt;p&gt;For years, the answer has been Infrastructure as Code (IaC) using tools like AWS CloudFormation or the AWS Cloud Development Kit (CDK). But this comes with a steep learning curve. What if you could get the best of both worlds? What if you could perform your setup once in the console and have AI generate the code for you?&lt;/p&gt;

&lt;p&gt;That's exactly what &lt;strong&gt;Console-to-Code&lt;/strong&gt;, a powerful feature in Amazon Q Developer, does. It watches your actions in the console and magically transforms them into clean, ready-to-use IaC.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Console-to-Code is a Game-Changer 🚀
&lt;/h2&gt;

&lt;p&gt;This isn't just another tool; it's a fundamental shift in how we can approach cloud automation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bridge the Skills Gap:&lt;/strong&gt; New to IaC? No problem. Use the visual console you're comfortable with and get high-quality code as your output. It's an incredible way to learn by doing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Massive Time Saver:&lt;/strong&gt; Instead of spending hours writing YAML or TypeScript from scratch, you can generate a solid baseline in minutes. This dramatically speeds up prototyping and deployment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enforce Consistency and Best Practices:&lt;/strong&gt; By converting manual setups into code, you create a repeatable, reliable process. This ensures every environment you spin up is identical, eliminating the "it worked on my machine" problem for infrastructure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Language Support:&lt;/strong&gt; Whether you're a fan of Python, Java, TypeScript with the AWS CDK, or prefer the simplicity of CloudFormation (JSON/YAML), Console-to-Code has you covered.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  From Clicks to Code: Your 3-Step Guide
&lt;/h2&gt;

&lt;p&gt;Ready to try it out? The process is incredibly straightforward. Here’s how to turn your console actions into reusable code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Hit Record
&lt;/h3&gt;

&lt;p&gt;First, you need to tell Amazon Q to start watching.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Log in to your &lt;strong&gt;AWS Management Console&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt; Navigate to a supported service like &lt;strong&gt;VPC&lt;/strong&gt;, &lt;strong&gt;RDS&lt;/strong&gt;, or &lt;strong&gt;EC2&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt; On the far right edge of your browser window, you'll see the &lt;strong&gt;Console-to-Code icon&lt;/strong&gt;. Click it.&lt;/li&gt;
&lt;li&gt; Simply click &lt;strong&gt;"Start recording."&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it! The tool is now actively recording every infrastructure-related action you take.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Build Your Infrastructure
&lt;/h3&gt;

&lt;p&gt;Now for the fun part. Go through the console and perform the tasks you want to automate.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Launch an EC2 instance.&lt;/li&gt;
&lt;li&gt;Create a new S3 bucket and configure its policies.&lt;/li&gt;
&lt;li&gt;Set up a VPC with subnets and route tables.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can even move between different services during a single recording session. The Console-to-Code panel will keep track of everything you do.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Generate Your Code
&lt;/h3&gt;

&lt;p&gt;Once you've completed your setup, it's time to get your code.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; In the Console-to-Code panel, you'll see a list of all the actions you performed.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Review and select&lt;/strong&gt; the specific actions you want to include in your IaC template.&lt;/li&gt;
&lt;li&gt; At the bottom of the panel, choose your desired output format from the dropdown menu (e.g., &lt;strong&gt;AWS CDK - Python&lt;/strong&gt; or &lt;strong&gt;CloudFormation - YAML&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt; Click the &lt;strong&gt;"Generate chosen language"&lt;/strong&gt; button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instantly, the panel will display the generated code. You'll not only get the IaC template but also the equivalent CLI commands for your reference.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts &amp;amp; Best Practices
&lt;/h2&gt;

&lt;p&gt;Console-to-Code is an incredibly powerful feature for accelerating your cloud journey. To get the most out of it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Plan Your Steps:&lt;/strong&gt; Have a clear idea of what you want to build &lt;em&gt;before&lt;/em&gt; you start recording to keep your generated code clean and focused.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review the Output:&lt;/strong&gt; The generated code is a fantastic starting point, but always review it to understand what's happening and see if you can make any custom tweaks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use it as a Learning Tool:&lt;/strong&gt; If you're new to IaC, generate code for simple tasks first. Study the output to understand how resources are defined and linked. It’s one of the most practical ways to learn.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The era of choosing between the easy-to-use console and powerful automation is over. With Console-to-Code, you can finally have both.&lt;/p&gt;

&lt;p&gt;Happy building!&lt;/p&gt;




&lt;h2&gt;
  
  
  Connect with the Author
&lt;/h2&gt;

&lt;p&gt;Thanks for reading! I'm &lt;strong&gt;Yeshwanth L M&lt;/strong&gt;, an AWS Community Builder passionate about making cloud and DevOps accessible to everyone. If you found this article helpful, let's connect!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;YouTube:&lt;/strong&gt; &lt;a href="https://www.youtube.com/@TechWithYeshwanth/videos" rel="noopener noreferrer"&gt;Subscribe to TechWithYeshwanth&lt;/a&gt; for more tutorials.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community:&lt;/strong&gt; &lt;a href="https://www.youtube.com/channel/UCwhERUcuzUCwr8x8mQ8zrcw/join" rel="noopener noreferrer"&gt;Join the Channel Membership&lt;/a&gt; for exclusive perks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/yeshwanthlm" rel="noopener noreferrer"&gt;Follow my projects&lt;/a&gt; and contribute.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blog:&lt;/strong&gt; &lt;a href="https://dev.to/yeshwanthlm/"&gt;Read more articles on dev.to&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instagram:&lt;/strong&gt; &lt;a href="https://www.instagram.com/techwithyeshwanth/" rel="noopener noreferrer"&gt;Follow @techwithyeshwanth&lt;/a&gt; for daily tech content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LinkedIn:&lt;/strong&gt; &lt;a href="https://www.linkedin.com/company/techwithyeshwanth/" rel="noopener noreferrer"&gt;Connect on LinkedIn&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Book a 1:1 Call:&lt;/strong&gt; &lt;a href="https://topmate.io/techwithyeshwanth" rel="noopener noreferrer"&gt;Schedule a mentoring session with me on TopMate&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>cloud</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Conquering the AWS Certified Solutions Architect Associate Exam: Your Essential Study Guide and Tips from A Monk in Cloud</title>
      <dc:creator>Yeshwanth L M</dc:creator>
      <pubDate>Fri, 06 Jun 2025 16:42:05 +0000</pubDate>
      <link>https://forem.com/aws-builders/conquering-the-aws-certified-solutions-architect-associate-exam-your-essential-study-guide-and-3b9d</link>
      <guid>https://forem.com/aws-builders/conquering-the-aws-certified-solutions-architect-associate-exam-your-essential-study-guide-and-3b9d</guid>
      <description>&lt;p&gt;Hey Cloud Enthusiasts! Yeshwanth here, ready to guide you through the journey of preparing for one of the most coveted certifications in the cloud computing landscape: the AWS Certified Solutions Architect Associate (SAA-C03) exam. This certification is a powerful testament to your ability to design and implement well-architected infrastructures within the AWS Cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding the Role of an AWS Solutions Architect:&lt;/strong&gt;&lt;br&gt;
As a Solutions Architect, your core responsibility is to bridge customer requirements with effective, scalable, and secure AWS solutions. This means not only knowing which services to use but also understanding how to combine them to create infrastructure that adheres to key principles: efficiency, security, reliability, fault tolerance, and cost-effectiveness. These are the pillars upon which your SAA-C03 exam will be built.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your Primary Study Resources:&lt;/strong&gt;&lt;br&gt;
When it comes to official study materials, consider the following your go-to sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;AWS Whitepapers: These provide in-depth technical details and best practices.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AWS FAQs: Often overlooked, but they contain crucial Q&amp;amp;A on service functionalities and limitations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AWS Documentation: The authoritative source for all AWS services.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Best &lt;a href="https://learn.cantrill.io/p/all-the-things-plus?affcode=212820_1wcobgaz" rel="noopener noreferrer"&gt;video tutorials&lt;/a&gt; by Adrian Cantrill.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Beyond reading, hands-on experience in building systems on AWS is incredibly beneficial. The exam includes many scenario-based questions, and practical knowledge will greatly enhance your understanding. For the most precise and up-to-date information on the exam structure and content, always consult the official SAA-C03 Exam Guide directly on the AWS Certification website. Give it a quick read to set your expectations!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Starting Your SAA-C03 Journey: A Recommended First Step&lt;/strong&gt;&lt;br&gt;
If you're relatively new to AWS, I highly recommend kicking off your studies with the FREE AWS Certified Cloud Practitioner Essentials digital course. This interactive course covers fundamental AWS Cloud concepts, services, security, architecture, pricing, and support plans. It's an excellent foundation before you delve into the more complex topics of the SAA-C03.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Navigating Study Materials: Staying Up-to-Date&lt;/strong&gt;&lt;br&gt;
The internet is awash with resources claiming to be the "best" for the SAA-C03 exam. However, it's critical to be discerning. Some resources might be outdated and won't cover the latest services or features introduced in the SAA-C03 exam version.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My golden rule: Always check the official AWS Certification website for the most current information.&lt;/strong&gt; The official AWS Certified Solutions Architect Associate SAA-C03 exam page is your single source of truth. Here, you'll find the official exam guide, sample questions, and the link to schedule your exam.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Services for the SAA-C03 Exam (SAA-C03 Version Specific)&lt;/strong&gt;&lt;br&gt;
For the SAA-C03 exam version, be aware of services like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Global Accelerator&lt;/li&gt;
&lt;li&gt;Elastic Fabric Adapter (EFA)&lt;/li&gt;
&lt;li&gt;Elastic Network Adapter (ENA)&lt;/li&gt;
&lt;li&gt;AWS ParallelCluster&lt;/li&gt;
&lt;li&gt;Amazon FSx (for Windows File Server and Lustre)&lt;/li&gt;
&lt;li&gt;AWS DataSync&lt;/li&gt;
&lt;li&gt;AWS Directory Service&lt;/li&gt;
&lt;li&gt;High Performance Computing concepts&lt;/li&gt;
&lt;li&gt;Aurora Serverless&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Core AWS Services to Master for the SAA-C03 Exam&lt;/strong&gt;&lt;br&gt;
While the list above highlights specific updates, a deep understanding of the following core AWS services is non-negotiable for the SAA-C03:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;EC2 (Elastic Compute Cloud): This is foundational. Understand instance types, AMIs, storage options (EBS), and networking.&lt;/li&gt;
&lt;li&gt;Lambda: The heart of serverless computing. Know its integrations with other AWS services for building complete serverless applications.&lt;/li&gt;
&lt;li&gt;Elastic Load Balancer (ELB): Crucial for high availability. Study the different types (Application, Network, Gateway) and their features.&lt;/li&gt;
&lt;li&gt;Auto Scaling: Understand what services can be auto-scaled, the triggers for scaling, and how it manages instance counts.&lt;/li&gt;
&lt;li&gt;Elastic Block Store (EBS): Primary storage for EC2. Familiarize yourself with volume types, security, backup, and restore procedures.&lt;/li&gt;
&lt;li&gt;S3 / Glacier: Explore the various S3 storage classes, their use cases, and capabilities like static website hosting, access policies, and lifecycle management. S3 is a heavily tested service!&lt;/li&gt;
&lt;li&gt;Storage Gateway: Understand its purpose and when to use it versus direct S3 or EBS. Differentiate between DataSync and Storage Gateway.&lt;/li&gt;
&lt;li&gt;EFS (Elastic File System): Often compared with other storage solutions. Know when EFS is the right choice, considering cost and efficiency trade-offs.&lt;/li&gt;
&lt;li&gt;RDS / Aurora: Understand the differences between various RDS databases and what makes Aurora unique. Learn about parameter groups, option groups, and subnet groups.&lt;/li&gt;
&lt;li&gt;DynamoDB: A frequently tested NoSQL database. Compare it with RDS, ElastiCache, and Redshift. It's often paired with Lambda for serverless applications.&lt;/li&gt;
&lt;li&gt;ElastiCache: Focus on Redis and its functions. Identify scenarios where caching can improve performance, such as managing ELB session state or optimizing RDS.&lt;/li&gt;
&lt;li&gt;VPC / NACL / Security Groups: Master the components of a Virtual Private Cloud (subnets, route tables, internet gateways, NAT gateways, VPN gateways). Crucially, understand the distinct roles of Network Access Control Lists (NACLs) and Security Groups.&lt;/li&gt;
&lt;li&gt;Route 53: Study the different record types and routing policies. Be familiar with hosted zones and domains.&lt;/li&gt;
&lt;li&gt;IAM (Identity and Access Management): IAM Users, Groups, Policies, and Roles are fundamental. Understand how IAM integrates with other services for secure applications and be aware of best practices.&lt;/li&gt;
&lt;li&gt;CloudWatch: Learn about monitoring in AWS, metrics, CloudWatch Logs, CloudWatch Alarms, and custom metrics using the CloudWatch Agent.&lt;/li&gt;
&lt;li&gt;CloudTrail: Understand how CloudTrail works and the types of logs it stores, differentiating them from CloudWatch Logs.&lt;/li&gt;
&lt;li&gt;Kinesis: Have a high-level understanding of Kinesis Data Streams, including sharding, and how the different Kinesis services operate.&lt;/li&gt;
&lt;li&gt;CloudFront: Learn how CloudFront speeds up content delivery, its content sources, and supported SSL certificates.&lt;/li&gt;
&lt;li&gt;SQS (Simple Queue Service): Understand how SQS decouples systems, message management (standard, FIFO, dead-letter queues), and the differences between SQS, SNS, SES, and Amazon MQ.&lt;/li&gt;
&lt;li&gt;SNS (Simple Notification Service): Study its function, integrations, and supported notification recipients.&lt;/li&gt;
&lt;li&gt;SWF (Simple Workflow Service) / CloudFormation / OpsWorks: Understand the functions, capabilities, and typical use cases for each of these orchestration and automation services.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Crucial Comparison Scenarios&lt;/strong&gt;&lt;br&gt;
Based on my exam experience, pay special attention to the nuances and appropriate use cases when comparing these services:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS DataSync vs. Storage Gateway&lt;/li&gt;
&lt;li&gt;FSx (considerations for cold and hot storage)&lt;/li&gt;
&lt;li&gt;Cross-Region Read Replicas vs. Multi-AZ RDS (focus on high-availability aspects)&lt;/li&gt;
&lt;li&gt;Amazon Object Key vs. Object Metadata&lt;/li&gt;
&lt;li&gt;Direct Connect vs. Site-to-Site VPN&lt;/li&gt;
&lt;li&gt;AWS Config vs. AWS CloudTrail&lt;/li&gt;
&lt;li&gt;Security Group vs. NACL&lt;/li&gt;
&lt;li&gt;NAT Gateway vs. NAT Instance&lt;/li&gt;
&lt;li&gt;Geolocation routing policy vs. Geoproximity routing policy on Route 53&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Your Path to Success: Practice and Hands-On Experience&lt;/strong&gt;&lt;br&gt;
Beyond the official documentation, consider leveraging reputable study aids like practice exams. Aim for consistent high scores to ensure you're truly prepared for the exam's format and difficulty.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Most importantly, get hands-on!&lt;/strong&gt; Sign up for an AWS Free Tier account and perform lab exercises. Experiencing these services directly – spinning up EC2 instances, creating S3 buckets, configuring VPCs – will deeply embed the concepts and help you remember what each service is capable of. It's an invaluable part of the learning process.&lt;/p&gt;

&lt;p&gt;I wish you all the best on your AWS Certified Solutions Architect Associate exam journey! If you have any questions or want to share your own tips, drop them in the comments below.&lt;/p&gt;

&lt;p&gt;Happy Architecting!&lt;/p&gt;

&lt;p&gt;&lt;a href="//yeshwanthlm.in"&gt;Yeshwanth&lt;/a&gt; AKA &lt;a href="https://www.youtube.com/@amonkincloud/videos" rel="noopener noreferrer"&gt;A Monk in Cloud&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>architecture</category>
      <category>solutions</category>
      <category>exam</category>
    </item>
    <item>
      <title>Simplifying Multi-Region EC2 Management with AWS EC2 Instance Manager</title>
      <dc:creator>Yeshwanth L M</dc:creator>
      <pubDate>Thu, 22 May 2025 13:59:11 +0000</pubDate>
      <link>https://forem.com/aws-builders/simplifying-multi-region-ec2-management-with-aws-ec2-instance-manager-3h22</link>
      <guid>https://forem.com/aws-builders/simplifying-multi-region-ec2-management-with-aws-ec2-instance-manager-3h22</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Managing EC2 instances across multiple AWS regions can be a challenging task. As your cloud infrastructure grows, switching between regions in the AWS Console becomes time-consuming and inefficient. &lt;br&gt;
Today, I'm excited to introduce the AWS EC2 Instance Manager - a lightweight, browser-based tool I've developed to solve this exact problem.&lt;/p&gt;

&lt;p&gt;🔗 Try the app here:&lt;br&gt;
&lt;a href="https://gray-plant-037bead10.6.azurestaticapps.net/" rel="noopener noreferrer"&gt;https://gray-plant-037bead10.6.azurestaticapps.net/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📂 GitHub Repo:&lt;br&gt;
&lt;a href="https://github.com/yeshwanthlm/AWS-EC2-Instance-Manager" rel="noopener noreferrer"&gt;https://github.com/yeshwanthlm/AWS-EC2-Instance-Manager&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge of Multi-Region Management
&lt;/h2&gt;

&lt;p&gt;If you're managing AWS infrastructure, you've likely encountered these pain points:&lt;/p&gt;

&lt;p&gt;• Constantly switching between AWS regions to check instance status&lt;br&gt;
• Difficulty getting a consolidated view of all running instances&lt;br&gt;
• Time wasted navigating through the AWS Console for simple operations&lt;br&gt;
• Need for a quick way to stop or terminate instances across regions&lt;/p&gt;

&lt;p&gt;These challenges inspired me to create a simple yet powerful solution that runs entirely in your browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing AWS EC2 Instance Manager
&lt;/h2&gt;

&lt;p&gt;The AWS EC2 Instance Manager is a static web application that provides a unified interface for managing EC2 instances across all AWS regions. What makes this tool special is its simplicity - there's no &lt;br&gt;
backend server, no complex setup, and no additional infrastructure required.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Cross-Region Visibility
&lt;/h4&gt;

&lt;p&gt;The application automatically discovers and queries all AWS regions, providing a single dashboard view of your EC2 instances. This eliminates the need to manually switch between regions in the AWS &lt;br&gt;
Console.&lt;/p&gt;

&lt;h4&gt;
  
  
  Focus on Active Resources
&lt;/h4&gt;

&lt;p&gt;The tool shows only running instances by default, helping you focus on active resources that might be incurring costs. This filtering makes it easier to identify instances that could potentially be &lt;br&gt;
stopped to optimize your AWS spending.&lt;/p&gt;

&lt;h4&gt;
  
  
  Streamlined Instance Management
&lt;/h4&gt;

&lt;p&gt;With just a single click, you can stop or terminate instances directly from the interface. This streamlined approach saves valuable time compared to navigating through the AWS Console for each action.&lt;/p&gt;

&lt;h4&gt;
  
  
  Security-First Design
&lt;/h4&gt;

&lt;p&gt;Security is a top priority. The application handles AWS credentials with care - they're stored only in memory and never persisted or sent to any server other than AWS directly. This client-side only &lt;br&gt;
architecture minimizes security risks.&lt;/p&gt;

&lt;h4&gt;
  
  
  Responsive Interface
&lt;/h4&gt;

&lt;p&gt;Whether you're at your desk or on the go, the responsive design ensures the tool works seamlessly across desktop and mobile browsers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Implementation
&lt;/h2&gt;

&lt;p&gt;The AWS EC2 Instance Manager is built with simplicity in mind:&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;Pure Web Technologies&lt;/strong&gt;: The application uses vanilla HTML, CSS, and JavaScript without any frameworks, keeping it lightweight and fast.&lt;br&gt;
• &lt;strong&gt;AWS SDK for JavaScript&lt;/strong&gt;: Leverages the AWS SDK v2 to interact with AWS services directly from the browser.&lt;br&gt;
• &lt;strong&gt;Client-Side Architecture&lt;/strong&gt;: All processing happens in your browser, with no server-side components required.&lt;/p&gt;

&lt;p&gt;This approach makes the tool incredibly portable - you can run it from any computer with a modern web browser.&lt;/p&gt;

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

&lt;p&gt;Using the EC2 Instance Manager is straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clone or download the repository from GitHub&lt;/li&gt;
&lt;li&gt;Open the index.html file in your web browser&lt;/li&gt;
&lt;li&gt;Enter your AWS credentials (Account ID, Access Key ID, and Secret Access Key)&lt;/li&gt;
&lt;li&gt;Click "Connect to AWS" to fetch your running instances&lt;/li&gt;
&lt;li&gt;Use the provided buttons to stop or terminate instances as needed&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Required Permissions
&lt;/h3&gt;

&lt;p&gt;To use the tool effectively, your AWS credentials need these specific permissions:&lt;br&gt;
• ec2:DescribeRegions - To discover all available AWS regions&lt;br&gt;
• ec2:DescribeInstances - To list EC2 instances in each region&lt;br&gt;
• ec2:StopInstances - To stop running instances&lt;br&gt;
• ec2:TerminateInstances - To terminate instances when needed&lt;/p&gt;

&lt;h2&gt;
  
  
  Security Considerations
&lt;/h2&gt;

&lt;p&gt;While the tool is designed with security in mind, it's important to note that storing AWS credentials in a browser application is not recommended for production environments. For production use, consider &lt;br&gt;
these more secure alternatives:&lt;/p&gt;

&lt;p&gt;• Implement authentication using Amazon Cognito&lt;br&gt;
• Create a backend using API Gateway and Lambda to handle AWS operations&lt;br&gt;
• Use proper IAM roles with least privilege principles&lt;/p&gt;

&lt;h2&gt;
  
  
  Future Roadmap
&lt;/h2&gt;

&lt;p&gt;This is just the beginning for the EC2 Instance Manager. Future enhancements may include:&lt;/p&gt;

&lt;p&gt;• Adding the ability to start stopped instances&lt;br&gt;
• Including more detailed instance information and advanced filtering options&lt;br&gt;
• Expanding support to other AWS resources like RDS databases and Lambda functions&lt;br&gt;
• Implementing secure credential storage with Amazon Cognito&lt;/p&gt;

&lt;h2&gt;
  
  
  Troubleshooting Tips
&lt;/h2&gt;

&lt;p&gt;If you encounter issues while using the tool:&lt;/p&gt;

&lt;p&gt;• Verify your AWS credentials are correct and have the necessary permissions&lt;br&gt;
• Ensure you have running EC2 instances in your account&lt;br&gt;
• Check your browser's console for any error messages&lt;br&gt;
• Make sure your browser isn't blocking scripts from loading&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The AWS EC2 Instance Manager demonstrates how a simple tool can significantly improve the efficiency of cloud resource management. By providing a consolidated view of EC2 instances across all regions and &lt;br&gt;
enabling quick actions, it saves valuable time for AWS users.&lt;/p&gt;

&lt;p&gt;I built this tool to address a common pain point in my own AWS management workflow, and I hope it proves useful for others facing similar challenges. The project is open-source and available for anyone to&lt;br&gt;
use, modify, and improve.&lt;/p&gt;

&lt;p&gt;Whether you're managing a handful of instances or a large fleet across multiple regions, this tool can help streamline your EC2 management tasks and provide better visibility into your AWS resources.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;This project was developed by Yeshwanth L M at &lt;a href="https://yeshwanthlm.in" rel="noopener noreferrer"&gt;A Monk in Cloud&lt;/a&gt;. The AWS EC2 Instance Manager is licensed under the MIT License, making it freely available for personal and &lt;br&gt;
commercial use.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Building a Tech Logo Memory Match Game with Pygame</title>
      <dc:creator>Yeshwanth L M</dc:creator>
      <pubDate>Wed, 21 May 2025 15:36:34 +0000</pubDate>
      <link>https://forem.com/aws-builders/building-a-tech-logo-memory-match-game-with-pygame-554c</link>
      <guid>https://forem.com/aws-builders/building-a-tech-logo-memory-match-game-with-pygame-554c</guid>
      <description>&lt;p&gt;Memory games are not only fun but also help improve cognitive skills like concentration and short-term memory. In this blog post, I'll walk you through how I built a tech-themed memory matching card game using Python and Pygame.&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Overview
&lt;/h2&gt;

&lt;p&gt;The Tech Logo Memory Match Game is a classic card-matching game where players flip cards to find matching pairs. What makes this version special is that it features logos from popular tech companies, making it both entertaining and educational for tech enthusiasts.&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%2Fdwdbdidgs3f5rdltatn3.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%2Fdwdbdidgs3f5rdltatn3.png" alt="Game Preview" width="800" height="625"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tech-themed cards&lt;/strong&gt;: Featuring logos from companies like AWS, Azure, Docker, GitHub, and more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple difficulty levels&lt;/strong&gt;: Easy (3x4 grid), Medium (4x4 grid), and Hard (4x5 grid)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Countdown timer&lt;/strong&gt;: Adding excitement and challenge&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Score tracking&lt;/strong&gt;: Keeping count of moves and completion time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smooth animations&lt;/strong&gt;: Card flipping animations for better user experience&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Development Process
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Setting Up the Project
&lt;/h3&gt;

&lt;p&gt;I started by setting up the basic structure of the project:&lt;br&gt;
&lt;/p&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;pygame&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;

&lt;span class="c1"&gt;# Initialize pygame
&lt;/span&gt;&lt;span class="n"&gt;pygame&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Set up display
&lt;/span&gt;&lt;span class="n"&gt;WIDTH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HEIGHT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;600&lt;/span&gt;
&lt;span class="n"&gt;screen&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pygame&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;display&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_mode&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;WIDTH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HEIGHT&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;pygame&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;display&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_caption&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tech Logo Memory Match&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Creating the Card Class
&lt;/h3&gt;

&lt;p&gt;The Card class is the foundation of the game, handling the state and behavior of each card:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Card&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;logo_img&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;back_img&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;logo_img&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logo_img&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;back_img&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;back_img&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_flipped&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_matched&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;draw&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_flipped&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_matched&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;blit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;logo_img&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;blit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;back_img&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;is_clicked&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mouse_pos&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;mouse_pos&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="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt;
                &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;mouse_pos&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="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Implementing Game Logic
&lt;/h3&gt;

&lt;p&gt;The core game logic involves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shuffling and distributing cards&lt;/li&gt;
&lt;li&gt;Handling card flips&lt;/li&gt;
&lt;li&gt;Checking for matches&lt;/li&gt;
&lt;li&gt;Managing the timer and game state
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;check_for_match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flipped_cards&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flipped_cards&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;flipped_cards&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="n"&gt;logo_img&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;flipped_cards&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="n"&gt;logo_img&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;flipped_cards&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="n"&gt;is_matched&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
            &lt;span class="n"&gt;flipped_cards&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="n"&gt;is_matched&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Creating the User Interface
&lt;/h3&gt;

&lt;p&gt;A clean, intuitive UI is crucial for a good gaming experience:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;draw_ui&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;time_left&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;moves&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;difficulty&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Draw background
&lt;/span&gt;    &lt;span class="n"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;44&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;52&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="c1"&gt;# Draw timer
&lt;/span&gt;    &lt;span class="n"&gt;font&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pygame&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;font&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;SysFont&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Arial&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;timer_text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;font&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Time: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;time_left&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;s&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;blit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timer_text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="c1"&gt;# Draw moves counter
&lt;/span&gt;    &lt;span class="n"&gt;moves_text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;font&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Moves: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;moves&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;blit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;moves_text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WIDTH&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="c1"&gt;# Draw difficulty
&lt;/span&gt;    &lt;span class="n"&gt;diff_text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;font&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Difficulty: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;difficulty&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;blit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;diff_text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WIDTH&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Adding Difficulty Levels
&lt;/h3&gt;

&lt;p&gt;Different difficulty levels keep the game challenging and engaging:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;setup_game&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;difficulty&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;difficulty&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Easy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cols&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="mi"&gt;4&lt;/span&gt;
        &lt;span class="n"&gt;time_limit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;
    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;difficulty&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Medium&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cols&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
        &lt;span class="n"&gt;time_limit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;90&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="c1"&gt;# Hard
&lt;/span&gt;        &lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cols&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
        &lt;span class="n"&gt;time_limit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt;

    &lt;span class="c1"&gt;# Create and return the game board
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;create_board&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cols&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;time_limit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6. Implementing Animations
&lt;/h3&gt;

&lt;p&gt;Smooth animations enhance the gaming experience:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;flip_animation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;card&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;clock&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;frames&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;original_width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;card&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;frames&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# Calculate width for this frame
&lt;/span&gt;        &lt;span class="n"&gt;current_width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;original_width&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;frames&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;frames&lt;/span&gt;

        &lt;span class="c1"&gt;# Clear the card area
&lt;/span&gt;        &lt;span class="n"&gt;pygame&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;draw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;44&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;52&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; 
                        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;card&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;card&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;original_width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;card&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

        &lt;span class="c1"&gt;# Draw the card with the current width
&lt;/span&gt;        &lt;span class="n"&gt;scaled_img&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pygame&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;card&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;back_img&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;card&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_flipped&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;card&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;logo_img&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current_width&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;card&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;blit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scaled_img&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;card&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;original_width&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;current_width&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;card&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

        &lt;span class="n"&gt;pygame&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;display&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;clock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tick&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📷 Screenshots
&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%2Fdwdbdidgs3f5rdltatn3.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%2Fdwdbdidgs3f5rdltatn3.png" alt="Game Preview" width="800" height="625"&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%2F4goy4r7xfnwoal1dls6c.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%2F4goy4r7xfnwoal1dls6c.png" alt="Game Play" width="800" height="625"&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%2Fjdixn4i8c5ac6s4phb58.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%2Fjdixn4i8c5ac6s4phb58.png" alt="Victory Screen" width="800" height="625"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges and Solutions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Challenge 1: Card Matching Logic
&lt;/h3&gt;

&lt;p&gt;One of the initial challenges was implementing the card matching logic correctly. I needed to ensure that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only two cards could be flipped at once&lt;/li&gt;
&lt;li&gt;Matched cards stayed face up&lt;/li&gt;
&lt;li&gt;Unmatched cards flipped back after a short delay&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The solution was to use a list to track flipped cards and implement a state machine to manage the game flow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenge 2: Responsive Layout
&lt;/h3&gt;

&lt;p&gt;Making the game look good on different screen sizes was another challenge. I solved this by calculating card positions dynamically based on the screen dimensions and the number of cards.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenge 3: Performance Optimization
&lt;/h3&gt;

&lt;p&gt;With animations and multiple images, performance could be an issue. I optimized by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pre-loading all images at startup&lt;/li&gt;
&lt;li&gt;Using efficient drawing techniques&lt;/li&gt;
&lt;li&gt;Limiting unnecessary screen updates&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lessons Learned
&lt;/h2&gt;

&lt;p&gt;Building this game taught me several valuable lessons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Planning is crucial&lt;/strong&gt;: Having a clear structure before coding saved time and reduced bugs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User experience matters&lt;/strong&gt;: Small details like animations and clear UI make a big difference&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing is essential&lt;/strong&gt;: Regular testing with different scenarios helped catch issues early&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Future Improvements
&lt;/h2&gt;

&lt;p&gt;There are several ways I plan to enhance this game in the future:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add sound effects and background music&lt;/li&gt;
&lt;li&gt;Implement a high score system&lt;/li&gt;
&lt;li&gt;Create custom themes beyond tech logos&lt;/li&gt;
&lt;li&gt;Add multiplayer functionality&lt;/li&gt;
&lt;li&gt;Optimize for mobile devices&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;💡 All of this started with just one prompt to &lt;a href="https://aws.amazon.com/q/" rel="noopener noreferrer"&gt;Amazon Q&lt;/a&gt;:&lt;br&gt;
"Create a memory matching card game using the Pygame library, where players flip cards to match iconic tech logos like AWS, Azure, Docker, and GitHub. Incorporate multiple difficulty levels and a countdown timer to add challenge and urgency. Use clean UI design with subtle animations to enhance the learning experience while keeping it fun and educational."&lt;/p&gt;

&lt;p&gt;✅ Amazingly, Amazon Q generated the entire game logic, assets integration, and structure without me having to modify a single line. This is a glimpse into how powerful and production-ready generative AI has become—even for something as interactive as a game!&lt;/p&gt;

&lt;p&gt;Creating this Tech Logo Memory Match Game was both fun and educational. Pygame provides a great framework for building simple games, and the project helped me improve my Python skills while creating something enjoyable.&lt;/p&gt;

&lt;p&gt;If you're interested in trying the game yourself or contributing to its development, check out the &lt;a href="https://github.com/yeshwanthlm/Q-Game-Development-Challenge" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Happy coding and happy matching!&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Note: Don't forget to replace the GitHub repository link with your actual repository URL once you've created it.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>amazonqcli</category>
      <category>awschallenge</category>
      <category>aws</category>
      <category>amonkincloud</category>
    </item>
  </channel>
</rss>
