<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Tanushree Aggarwal</title>
    <description>The latest articles on DEV Community by Tanushree Aggarwal (@tanushree_aggarwal).</description>
    <link>https://dev.to/tanushree_aggarwal</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%2F1044203%2F97dbb2d3-033f-4362-8cc0-5b747492da2b.jpg</url>
      <title>DEV Community: Tanushree Aggarwal</title>
      <link>https://dev.to/tanushree_aggarwal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tanushree_aggarwal"/>
    <language>en</language>
    <item>
      <title>20 Years, Infinite Objects: The Amazon S3 Story</title>
      <dc:creator>Tanushree Aggarwal</dc:creator>
      <pubDate>Sat, 14 Mar 2026 17:46:45 +0000</pubDate>
      <link>https://dev.to/aws-builders/20-years-infinite-objects-the-amazon-s3-story-1mie</link>
      <guid>https://dev.to/aws-builders/20-years-infinite-objects-the-amazon-s3-story-1mie</guid>
      <description>&lt;h3&gt;
  
  
  🪣 An Ode to Amazon S3
&lt;/h3&gt;

&lt;p&gt;Some technologies shout about their greatness. Others just… store the internet.&lt;/p&gt;

&lt;p&gt;Amazon S3 belongs firmly in the second category.&lt;/p&gt;

&lt;p&gt;Launched on 14-March-2006 with a simple promise — store anything, retrieve it anytime — S3 has spent the last two decades becoming the unsung hero of the cloud. Photos, backups, data lakes, ML datasets, logs, websites… if it lives in the cloud, there’s a decent chance it lives in an S3 bucket.&lt;/p&gt;

&lt;p&gt;And like any 20-year journey, the story of S3 is filled with innovation, lessons learned, and a few “well, that was interesting” moments.&lt;/p&gt;




&lt;h3&gt;
  
  
  20 Years of Quietly Running the Internet.
&lt;/h3&gt;

&lt;p&gt;Let’s take a nostalgic walk through the milestones:&lt;/p&gt;

&lt;p&gt;🚀 &lt;strong&gt;2006 – Amazon S3 Launch&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Announced as "storage for the internet", designed to make web-scale computing easier for developers, it supported REST, SOAP, and BitTorrent protocols. Storing 1 GB of data for 1 month costed just 15 cents, while transferring data in-and-out of the system costed 20 cents per GB!&lt;/p&gt;




&lt;p&gt;🌍 &lt;strong&gt;2007 – S3 in Europe&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;S3 expanded outside US, with its first region Europe, reducing latency and making cloud storage truly global. For European developers, this meant their data didn’t have to take a transatlantic vacation every time an application accessed it.&lt;/p&gt;




&lt;p&gt;⚠️ &lt;strong&gt;2008 – The Famous S3 Outage&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While the announcement of Amazon S3 storage price reduction attracted more customers, a major outage briefly reminded everyone that even cloud infrastructure can have bad days!&lt;/p&gt;




&lt;p&gt;🌐 &lt;strong&gt;2009 – CloudFront Integration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Integration with Amazon CloudFront allowed S3 to power global content delivery. Suddenly S3 wasn’t just storage—it became the engine behind faster websites, media streaming, and global apps.  Requests originating anywhere in the world were routed to one of 14 edge locations (8 in the United States, 4 in Europe, and 2 in Asia). By the end of 2009, Amazon CloudFront that the ability to limit access to Amazon S3 content using &lt;strong&gt;Origin Access Identity (OAI)&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;💰 &lt;strong&gt;2010 – Reduced Redundancy Storage&lt;/strong&gt;&lt;br&gt;
The Standard Storage Class now provided 99.999999999% &lt;strong&gt;durability&lt;/strong&gt;.&lt;br&gt;
AWS introduced Reduced Redundancy Storage for data that didn’t need the full durability treatment and provided 99.99% durability.&lt;br&gt;
In simple terms: “Cheaper storage for stuff you wouldn’t cry about losing.”&lt;/p&gt;

&lt;p&gt;📦 &lt;strong&gt;2010 – Multipart Upload&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Multipart upload allowed large files to be uploaded in pieces simultaneously.&lt;br&gt;
Anyone who has ever tried uploading a massive dataset over a flaky connection knows how revolutionary this felt—finally, uploads that don’t restart from zero.&lt;/p&gt;

&lt;p&gt;2010 brought with it a lot of features still available to us - support for &lt;strong&gt;bucket policies&lt;/strong&gt; to set access control for buckets. S3 accessible via the &lt;strong&gt;AWS Management Console&lt;/strong&gt;, &lt;strong&gt;AWS Cloud Free Tier&lt;/strong&gt; allowing storing up to 5GB of data free of charge, but most importantly - support for storing large &lt;strong&gt;objects up to 5TB&lt;/strong&gt; in size.&lt;/p&gt;




&lt;p&gt;🌎 &lt;strong&gt;2011 – Static Website Hosting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;S3 suddenly gained the ability to host static websites directly from buckets. Developers realized they could run websites without servers, and a whole generation of lightweight web apps was born.&lt;/p&gt;

&lt;p&gt;🔐 &lt;strong&gt;2011 - AWS Identity and Access Management (IAM)&lt;/strong&gt;&lt;br&gt;
IAM was Generally Available, and management features of Amazon S3 are officially available&lt;/p&gt;

&lt;p&gt;⚙️ &lt;strong&gt;2011 – Lifecycle Policies&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lifecycle rules automated the movement or deletion of data based on age or usage.&lt;br&gt;
For engineers drowning in storage bills, this felt like hiring a very responsible robot janitor for your buckets.&lt;/p&gt;




&lt;p&gt;🧊 &lt;strong&gt;2012 – Amazon S3 Glacier&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The arrival of Amazon S3 Glacier brought ultra-cheap archival storage to the cloud, without compromising the durability!&lt;br&gt;
Companies that once stored tapes in warehouses suddenly realized they could archive decades of data without needing forklifts.&lt;/p&gt;

&lt;p&gt;🌍 &lt;strong&gt;2012 – Cross-Origin Resource Sharing (CORS)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CORS support allowed web applications from different domains to safely fetch resources from S3. It quietly enabled modern web architectures where APIs, apps, and assets live in different places but work together seamlessly.&lt;/p&gt;




&lt;p&gt;🧾 &lt;strong&gt;2013 – CloudTrail Logs to S3&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The announcement of AWS CloudTrail, a web service that could records API calls made on your account and delivers log files to your Amazon S3 bucket. Just like that, S3 became the default vault for security logs, audits, and compliance data.&lt;/p&gt;




&lt;p&gt;🗂 &lt;strong&gt;2014 – Lifecycle Management of Versioned Objects&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;S3’s Lifecycle Management integrated S3 and Glacier and made the details visible via the Storage Class of each object. You could set up a simple Lifecycle rule using the AWS Management Console. &lt;/p&gt;

&lt;p&gt;🔔 &lt;strong&gt;2014 – Event Notifications&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Support for event notifications to trigger events to Amazon SNS, Amazon SQS, AWS Lambda - whenever objects were created or modified. Suddenly storage became interactive, kicking off serverless pipelines and automation workflows.&lt;/p&gt;

&lt;p&gt;🔎 &lt;strong&gt;2014 – Server-Side Encryption with Customer Keys&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SSE-C allowed customers to supply their own encryption keys. Security teams everywhere collectively nodded and said: “Now we’re talking.”&lt;/p&gt;




&lt;p&gt;🔐 &lt;strong&gt;2015 – S3 VPC Endpoint&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;VPC endpoints allowed private connections between S3 and workloads inside a VPC. Data could now move without touching the public internet, which made security architects sleep noticeably better at night.&lt;/p&gt;

&lt;p&gt;2015 also brought along another key feature -  &lt;strong&gt;cross-region replication&lt;/strong&gt; &lt;/p&gt;




&lt;p&gt;⚡ &lt;strong&gt;2016 – Transfer Acceleration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Transfer Acceleration used AWS’s global edge network to speed up uploads. If you’ve ever uploaded huge files across continents, you know this feature felt like someone secretly upgraded your internet connection.&lt;/p&gt;




&lt;p&gt;🧠 &lt;strong&gt;2017 – Amazon Macie for S3&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazon Macie began scanning S3 buckets for sensitive data using machine learning. Finally, a system that could say: “Hey… maybe storing credit card numbers in that bucket wasn’t the best idea.”&lt;/p&gt;




&lt;p&gt;🛡 &lt;strong&gt;2018 – Block Public Access&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Block Public Access was introduced to prevent accidental exposure of buckets. Let’s just say this feature has saved countless engineers from awkward security incidents.&lt;/p&gt;

&lt;p&gt;🧠 &lt;strong&gt;2018 – Intelligent-Tiering&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Intelligent-Tiering automatically moves objects between storage tiers based on usage patterns.&lt;br&gt;
Translation: S3 started optimizing your storage bill while you slept.&lt;/p&gt;

&lt;p&gt;📊 &lt;strong&gt;2018 – One Zone IA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One Zone Infrequent Access offered lower-cost storage in a single availability zone. Perfect for secondary backups or data that doesn’t need the full multi-AZ treatment.&lt;/p&gt;




&lt;p&gt;🎯 &lt;strong&gt;2019 – S3 Access Points&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Access Points simplified permission management for large shared datasets. For organizations with thousands of users and applications, this was like finally organizing a chaotic storage closet.&lt;/p&gt;




&lt;p&gt;⚡ &lt;strong&gt;2020 – Strong Consistency&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;S3 introduced strong read-after-write consistency across all regions. For developers, this was a huge moment—one of the most annoying distributed system edge cases simply disappeared.&lt;/p&gt;




&lt;p&gt;🌎 &lt;strong&gt;2021 – Multi-Region Access Points&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Multi-Region Access Points allowed applications to access replicated data across regions through a single endpoint. Global applications suddenly became easier to build—and far more resilient to regional outages.&lt;/p&gt;




&lt;p&gt;💾 &lt;strong&gt;2022 – AWS Backup for S3&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Integration with AWS Backup allowed centralized backup policies for S3. Because when it comes to data, the only thing better than storage… is having a backup of that storage.&lt;/p&gt;




&lt;p&gt;🚀 &lt;strong&gt;2023 – S3 Express One Zone&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;S3 Express One Zone introduced ultra-low latency storage for high-performance workloads. For AI pipelines and analytics systems, this meant faster data access and happier GPUs.&lt;/p&gt;




&lt;p&gt;🤖 &lt;strong&gt;2024 – Amazon S3 Tables&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;S3 Tables introduced native tabular storage optimized for analytics workloads. This pushed S3 deeper into the world of modern data lakes and large-scale analytics platforms.&lt;/p&gt;




&lt;p&gt;📦 &lt;strong&gt;2025 – Maximum Object Size Increased to 50 TB&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A major announcement at re:Invent 2025 - the maximum object size increased to 50 TB. At this point, uploading a single object to S3 could basically mean “store an entire dataset in one go.”&lt;/p&gt;




&lt;p&gt;🌐 &lt;strong&gt;2026 – Account Regional Namespaces&lt;/strong&gt;&lt;br&gt;
Just a day before the 20th birthday, the announcement dropped like a perfect pain patch — removing the age-old friction of checking if your bucket name is already taken before you can start storing data.&lt;br&gt;
With this feature, you can predictably name and create general purpose buckets in your own account regional namespace by appending your account’s unique suﬃx in your requested bucket name, meaning you can now create general purpose bucket names across multiple AWS Regions with assurance that your desired bucket names will always be available for you to use!&lt;/p&gt;




&lt;h3&gt;
  
  
  Conclusion - ☁️ The Service That Quietly Holds the Internet
&lt;/h3&gt;

&lt;p&gt;Amazon S3 rarely gets flashy headlines. It doesn’t launch new phones or social networks.&lt;/p&gt;

&lt;p&gt;But behind the scenes, it stores trillions of objects and exabytes of data powering applications across the world.&lt;/p&gt;

&lt;p&gt;From startups to global enterprises, from static websites to AI training datasets—S3 has been the quiet backbone of the cloud revolution.&lt;/p&gt;

&lt;p&gt;And after 20 years, one thing is pretty clear:&lt;/p&gt;

&lt;p&gt;The internet may run on code… but a lot of that code runs on S3.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Which S3 feature do you think changed cloud architecture the most? Drop your thoughts in the comment section!&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Bonus
&lt;/h3&gt;

&lt;p&gt;Checkout the original S3 release announcement and Jeff Barr's blogpost from 2006!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2006/03/13/announcing-amazon-s3---simple-storage-service/" rel="noopener noreferrer"&gt;https://aws.amazon.com/about-aws/whats-new/2006/03/13/announcing-amazon-s3---simple-storage-service/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/blogs/aws/amazon_s3/" rel="noopener noreferrer"&gt;https://aws.amazon.com/blogs/aws/amazon_s3/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>s3</category>
      <category>cloud</category>
      <category>cloudstorage</category>
    </item>
    <item>
      <title>Observability-Driven Kubernetes: A Practical EKS Demo</title>
      <dc:creator>Tanushree Aggarwal</dc:creator>
      <pubDate>Sat, 20 Dec 2025 16:22:34 +0000</pubDate>
      <link>https://dev.to/aws-builders/observability-driven-kubernetes-a-practical-eks-demo-5gjp</link>
      <guid>https://dev.to/aws-builders/observability-driven-kubernetes-a-practical-eks-demo-5gjp</guid>
      <description>&lt;h1&gt;
  
  
  Introduction : EKS Observability Platform 🖥️
&lt;/h1&gt;

&lt;p&gt;As cloud-native systems continue to grow in complexity, many organizations depend on Kubernetes to run and scale their containerized applications. While Kubernetes is powerful, managing distributed workloads often comes with limited visibility, making it difficult to detect issues before they impact the business. The real challenge isn’t just deploying applications to a Kubernetes cluster—it’s understanding how those applications are performing, how resources are being used, and whether the system is healthy overall. In today's blog we look at how building an observability-first Amazon Elastic Kubernetes Service (EKS) platform can help solve these challenges through better monitoring, automated scaling, and early detection of potential incidents.&lt;/p&gt;

&lt;p&gt;This project aims to demonstrates how we can design, provision, and operate a &lt;strong&gt;production‑style, observability‑first Kubernetes platform on Amazon EKS&lt;/strong&gt;, using Terraform as the platform definition layer.&lt;br&gt;
The focus is &lt;strong&gt;Day‑2 operations&lt;/strong&gt;: metrics, autoscaling, failure recovery, and clean platform boundaries — not just deploying containers. &lt;/p&gt;
&lt;h2&gt;
  
  
  Project Goals 🤖
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Build a &lt;strong&gt;true 3‑tier architecture&lt;/strong&gt; on EKS (Frontend → API → Platform Services)&lt;/li&gt;
&lt;li&gt;Provision infrastructure using &lt;strong&gt;modular Terraform&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Deploy &lt;strong&gt;Prometheus + Grafana before workloads&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Demonstrate &lt;strong&gt;autoscaling and self‑healing&lt;/strong&gt; with live metrics&lt;/li&gt;
&lt;li&gt;Serve as a &lt;strong&gt;GitHub portfolio project for platform engineering&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  What This Project Demonstrates 💭✏️
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Production‑style Terraform design&lt;/li&gt;
&lt;li&gt;Observability‑driven operations&lt;/li&gt;
&lt;li&gt;Safe autoscaling practices&lt;/li&gt;
&lt;li&gt;Kubernetes self‑healing behavior&lt;/li&gt;
&lt;li&gt;Platform engineering mindset&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Project Structure 📋
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.
├── providers.tf
├── versions.tf
├── variables.tf
├── main.tf
├── outputs.tf
├── modules/
│ ├── vpc/
│ ├── eks/
│ ├── observability/
│ └── apps/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Each Terraform module represents a &lt;strong&gt;platform responsibility boundary&lt;/strong&gt;.&lt;/p&gt;
&lt;h4&gt;
  
  
  Infrastructure (Terraform)
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;VPC Module&lt;/strong&gt;: Creates networking foundation with public/private subnets&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;EKS Module&lt;/strong&gt;: Deploys managed Kubernetes cluster (v1.32) with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2-4 worker nodes (t3.medium instances)&lt;/li&gt;
&lt;li&gt;Public/private API endpoint access&lt;/li&gt;
&lt;li&gt;IAM Roles for Service Accounts enabled&lt;/li&gt;
&lt;li&gt;Cluster creator admin permissions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Application Stack&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: &lt;code&gt;containous/whoami&lt;/code&gt; service showing request details&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API&lt;/strong&gt;: &lt;code&gt;hashicorp/http-echo&lt;/code&gt; returning "Hello from API"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource Limits&lt;/strong&gt;: CPU/memory constraints for autoscaling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HPA&lt;/strong&gt;: Horizontal Pod Autoscaler (2-6 replicas, 50% CPU threshold)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5jzcv14izmkktkojulqk.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%2F5jzcv14izmkktkojulqk.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Observability Stack&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prometheus&lt;/strong&gt;: Metrics collection via kube-prometheus-stack Helm chart&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grafana&lt;/strong&gt;: Visualization dashboards for:

&lt;ul&gt;
&lt;li&gt;Kubernetes cluster metrics&lt;/li&gt;
&lt;li&gt;Pod/deployment monitoring&lt;/li&gt;
&lt;li&gt;CPU/memory utilization&lt;/li&gt;
&lt;li&gt;Autoscaling events&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Implementation Guide 🎨
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Step 1: Network Foundation (VPC Module)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; EKS must run in private subnets for production‑grade security.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create VPC with public + private subnets&lt;/li&gt;
&lt;li&gt;Enable NAT Gateway for outbound traffic&lt;/li&gt;
&lt;li&gt;Keep networking isolated from workloads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key takeaway: 🌟 &lt;em&gt;Networking is platform infrastructure, not app concern.&lt;/em&gt; 🌟&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 2: EKS Cluster Provisioning
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; Managed control plane + managed node groups reduce operational load.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provision EKS cluster&lt;/li&gt;
&lt;li&gt;Create managed node group&lt;/li&gt;
&lt;li&gt;Expose cluster endpoint and credentials for providers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key takeaway: 🌟 &lt;em&gt;Platform teams optimize for operability, not customization.&lt;/em&gt; 🌟&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 3: Observability‑First Setup
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; You cannot safely scale or debug what you cannot see.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create dedicated &lt;code&gt;observability&lt;/code&gt; namespace&lt;/li&gt;
&lt;li&gt;Install &lt;code&gt;kube‑prometheus‑stack&lt;/code&gt; via Helm&lt;/li&gt;
&lt;li&gt;Deploy Grafana and Prometheus &lt;strong&gt;before apps&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key takeaway: 🌟 &lt;em&gt;Observability is foundational infrastructure.&lt;/em&gt; 🌟&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 4: Application Namespaces
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; Namespace isolation simplifies ownership and RBAC later.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create &lt;code&gt;apps&lt;/code&gt; namespace&lt;/li&gt;
&lt;li&gt;Keep workloads separate from platform tooling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key takeaway: 🌟 &lt;em&gt;Logical isolation improves long‑term operability.&lt;/em&gt; 🌟&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 5: Frontend Tier Deployment
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; Complete the 3‑tier story, even with a simple UI.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deploy NGINX frontend&lt;/li&gt;
&lt;li&gt;Expose via ClusterIP service&lt;/li&gt;
&lt;li&gt;Define resource requests and limits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key takeaway: 🌟 &lt;em&gt;Even simple workloads deserve resource boundaries.&lt;/em&gt; 🌟&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 6: Backend API Tier Deployment
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; This tier demonstrates autoscaling and failure recovery.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deploy lightweight API (&lt;code&gt;http‑echo&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Apply CPU requests/limits&lt;/li&gt;
&lt;li&gt;Expose internally via service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key takeaway: 🌟 &lt;em&gt;Backend services are the primary scaling surface.&lt;/em&gt; 🌟&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 7: Horizontal Pod Autoscaling (HPA)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; Scaling without metrics is dangerous.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure HPA based on CPU utilization&lt;/li&gt;
&lt;li&gt;Define min/max replicas&lt;/li&gt;
&lt;li&gt;Observe behavior in Grafana&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key takeaway: 🌟 &lt;em&gt;Autoscaling is a control system, not a checkbox.&lt;/em&gt; 🌟&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 8: Failure Injection (Day‑2 Operations)
&lt;/h3&gt;
&lt;h4&gt;
  
  
  Pod Failure
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Manually delete an API pod&lt;/li&gt;
&lt;li&gt;Observe:&lt;/li&gt;
&lt;li&gt;No frontend impact&lt;/li&gt;
&lt;li&gt;New pod scheduled automatically&lt;/li&gt;
&lt;li&gt;Metrics reflect recovery&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  Node Failure
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Drain a worker node&lt;/li&gt;
&lt;li&gt;Observe:&lt;/li&gt;
&lt;li&gt;Pods rescheduled&lt;/li&gt;
&lt;li&gt;No service interruption&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key takeaway: 🌟 &lt;em&gt;Resilience is observable, not assumed.&lt;/em&gt; 🌟&lt;/p&gt;
&lt;h2&gt;
  
  
  Implementation 🌀
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;terraform init&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgdqqqjnqss03vbu0ez2i.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%2Fgdqqqjnqss03vbu0ez2i.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;terraform validate&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn62ybs5nz1l0ve97xh2g.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%2Fn62ybs5nz1l0ve97xh2g.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;terraform plan&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxw4acfsj0cjc93xicmm.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%2Fgxw4acfsj0cjc93xicmm.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;terraform apply&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkhept89nlk54pp7t2y4y.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%2Fkhept89nlk54pp7t2y4y.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Testing ⚡⚡
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Login to the AWS Management Console and see the EKS cluster.
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv3s22dh5icx8qz9x7w43.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%2Fv3s22dh5icx8qz9x7w43.png" alt=" "&gt;&lt;/a&gt;&lt;br&gt;
Explore a bit to identify the resources created, networking layer etc.&lt;/p&gt;
&lt;h3&gt;
  
  
  Let us check our frontend service
&lt;/h3&gt;

&lt;p&gt;Check current frontend service: &lt;br&gt;
&lt;code&gt;kubectl get svc -n apps&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If no service exists, create one:&lt;br&gt;
&lt;code&gt;kubectl patch svc frontend -n apps -p '{"spec": {"type": "LoadBalancer"}}'&lt;/code&gt;&lt;br&gt;
&lt;code&gt;kubectl patch svc api -n apps -p '{"spec": {"type": "LoadBalancer"}}'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Get the external URL:&lt;br&gt;
&lt;code&gt;kubectl get svc frontend -n apps&lt;/code&gt;&lt;br&gt;
&lt;code&gt;kubectl get svc api -n apps&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Wait for EXTERNAL-IP to show the AWS ELB hostname (takes 2-3 minutes).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Get the hostname directly:&lt;br&gt;
&lt;code&gt;kubectl get svc frontend -n apps -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kubectl get svc api  -n apps -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Access your frontend&lt;br&gt;
Once you have the hostname, access it in your browser:&lt;br&gt;
&lt;code&gt;http://your-elb-hostname&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Access Grafana
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;kubectl port-forward -n observability svc/kube-prometheus-grafana 3000:80&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnznhmdba6c6e23fmd3fq.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%2Fnznhmdba6c6e23fmd3fq.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open browser:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;http://localhost:3000&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Login:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Username: admin&lt;/li&gt;
&lt;li&gt;Password: retrieve from Kubernetes secret&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Decode the Grafana &lt;code&gt;admin&lt;/code&gt; password: &lt;br&gt;
&lt;code&gt;$password = kubectl get secret -n observability kube-prometheus-grafana -o jsonpath="{.data.admin-password}"&lt;br&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%2Feaxs4gimgnvxrfjr9pbj.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%2Feaxs4gimgnvxrfjr9pbj.png" alt=" "&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%2F90thqmbzkd23b07axpdp.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%2F90thqmbzkd23b07axpdp.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Configure and View dashboards!&lt;/p&gt;

&lt;p&gt;Follow same approach for Prometheus:&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%2F91044ddhc0wxfml9q2n6.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%2F91044ddhc0wxfml9q2n6.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Observe Baseline Metrics
&lt;/h3&gt;

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

&lt;ul&gt;
&lt;li&gt;Kubernetes / Nodes&lt;/li&gt;
&lt;li&gt;Kubernetes / Pods&lt;/li&gt;
&lt;li&gt;Kubernetes / Workloads / Deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Confirm:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API replicas = 2&lt;/li&gt;
&lt;li&gt;Low CPU usage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff1ekwezz45w354ahl33p.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%2Ff1ekwezz45w354ahl33p.png" alt=" "&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%2F8ay11ivxomgcd56cip2f.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%2F8ay11ivxomgcd56cip2f.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Generate Load (Autoscaling Demo)
&lt;/h3&gt;

&lt;p&gt;Exec into API pod:&lt;br&gt;
&lt;code&gt;kubectl exec -it deploy/api -n apps -- sh&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Generate CPU load:&lt;br&gt;
&lt;code&gt;while true; do :; done&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Observe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU spikes in Grafana&lt;/li&gt;
&lt;li&gt;HPA scales pods from 2 → 6&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmy3pf66mkgui302m673x.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%2Fmy3pf66mkgui302m673x.png" alt=" "&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%2Feuf29egb4wtjao8jfzzo.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%2Feuf29egb4wtjao8jfzzo.png" alt=" "&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%2Fchax2zvf6rh5cjmivg0j.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%2Fchax2zvf6rh5cjmivg0j.png" alt=" "&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%2F6n3q1jlz3i5svmjrz8x3.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%2F6n3q1jlz3i5svmjrz8x3.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Pod Failure Injection
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;kubectl delete pod -n apps -l app=api&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Observe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New pod scheduled immediately&lt;/li&gt;
&lt;li&gt;No frontend impact&lt;/li&gt;
&lt;li&gt;Metrics show brief dip and recovery&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Node Failure Injection
&lt;/h3&gt;

&lt;p&gt;List nodes:&lt;br&gt;
&lt;code&gt;kubectl get nodes&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Drain one node:&lt;br&gt;
&lt;code&gt;kubectl drain &amp;lt;node-name&amp;gt; --ignore-daemonsets&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Observe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pods rescheduled&lt;/li&gt;
&lt;li&gt;Grafana shows node loss&lt;/li&gt;
&lt;li&gt;Service remains available&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Github Repository
&lt;/h3&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;a href="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;&lt;/a&gt;
      &lt;a href="https://github.com/aggarwal-tanushree" rel="noopener noreferrer"&gt;
        aggarwal-tanushree
      &lt;/a&gt; / &lt;a href="https://github.com/aggarwal-tanushree/eks-observability-first-platform" rel="noopener noreferrer"&gt;
        eks-observability-first-platform
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Personal platform engineering project demonstrating an observability-first 3-tier architecture on Amazon EKS using Terraform, Prometheus, and Grafana.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;EKS Observability First Platform&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A complete Terraform-based solution for deploying an Amazon EKS cluster with built-in observability stack and sample applications.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Description&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;This project provisions a production-ready EKS cluster on AWS with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VPC Infrastructure&lt;/strong&gt;: Custom VPC with public/private subnets across multiple AZs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EKS Cluster&lt;/strong&gt;: Kubernetes 1.32 with managed node groups&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Observability Stack&lt;/strong&gt;: Prometheus and Grafana via Helm charts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sample Applications&lt;/strong&gt;: Frontend and API deployments for testing&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Directory Structure&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;
&lt;pre class="notranslate"&gt;&lt;code&gt;eks-observability-first-platform/
├── modules/
│   ├── vpc/                    # VPC module
│   │   ├── main.tf
│   │   ├── outputs.tf
│   │   └── variables.tf
│   ├── eks/                    # EKS cluster module
│   │   ├── main.tf
│   │   ├── outputs.tf
│   │   └── variables.tf
│   ├── observability/          # Prometheus/Grafana stack
│   │   ├── main.tf
│   │   ├── variables.tf
│   │   └── versions.tf
│   └── apps/                   # Sample applications
│       ├── main.tf
│       ├── variables.tf
│       └── versions.tf
├── main.tf                     # Root module&lt;/code&gt;&lt;/pre&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/aggarwal-tanushree/eks-observability-first-platform" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Cost Controls in This Platform 💲:
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Right‑Sized Node Groups 🧮
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; Over‑provisioning nodes is the most common EKS cost mistake.&lt;/p&gt;

&lt;h4&gt;
  
  
  Resource Requests &amp;amp; Limits 💣🔆🔅
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Frontend&lt;/strong&gt;: &lt;strong&gt;Requests&lt;/strong&gt; : 50m CPU / 64Mi memory.  &lt;strong&gt;Limits&lt;/strong&gt; : 200m CPU / 128Mi memory&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend API&lt;/strong&gt;: &lt;strong&gt;Requests&lt;/strong&gt; : 100m CPU / 128Mi memory. &lt;strong&gt;Limits&lt;/strong&gt; : 500m CPU / 256Mi memory&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Enables accurate scheduling&lt;/li&gt;
&lt;li&gt;Prevents noisy‑neighbor problems&lt;/li&gt;
&lt;li&gt;Improves HPA decision quality&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Horizontal Pod Autoscaling 👈👉👆👇
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Minimum replicas: 2&lt;/li&gt;
&lt;li&gt;Maximum replicas: 6&lt;/li&gt;
&lt;li&gt;Scaling driven by CPU utilization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cost Benefit:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Low load → minimal replicas → lower cost&lt;/li&gt;
&lt;li&gt;High load → scale only when needed&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Observability Reduces Hidden Costs 💰
&lt;/h4&gt;

&lt;p&gt;Metrics help avoid:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Over‑scaling due to guesswork&lt;/li&gt;
&lt;li&gt;Long outages with high blast radius&lt;/li&gt;
&lt;li&gt;Manual firefighting (human cost)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Insight:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Observability is a cost‑control mechanism, not just a debugging tool.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This demo proves that &lt;strong&gt;EKS platforms must be observable before they are scalable&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion 🗝️
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The Operational Challenge:&lt;/strong&gt;&lt;br&gt;
As organizations adopt Kubernetes, many run into an unexpected contradiction. While containers and orchestration make it easier to scale and move faster, they also add complexity that makes systems harder to understand. As a result, teams often end up reacting to problems after something breaks instead of preventing issues through better visibility and automation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Observability-First Approach&lt;/strong&gt;&lt;br&gt;
The answer is to adopt an observability-first approach—one where monitoring and visibility are built into the platform from day one, not added later as an afterthought. When teams can clearly see what’s happening inside their systems, they’re able to spot issues early, make smarter decisions automatically, and continuously improve performance. This shift allows organizations to move from constantly reacting to problems to predicting and preventing them.&lt;br&gt;
In an observability-first platform, monitoring is woven directly into the infrastructure as it’s being created. Every component is instrumented and visible as soon as it goes live. This creates a strong foundation for automatic scaling, meaningful alerts, and data-driven capacity planning. Over time, the platform becomes more self-aware—able to understand how it’s performing and adjust on its own as conditions change.&lt;/p&gt;

&lt;p&gt;So to summarize, in this (lengthy, but hopefully insightful) blog, we:&lt;br&gt;
✅ Built a &lt;strong&gt;production‑style Amazon EKS platform&lt;/strong&gt; using modular Terraform, separating networking, cluster, observability, and application concerns.&lt;br&gt;
✅ Implemented &lt;strong&gt;Prometheus and Grafana before workloads&lt;/strong&gt;, enabling safe CPU‑based autoscaling and rapid failure detection.&lt;br&gt;
✅ Validated &lt;strong&gt;Day‑2 operations&lt;/strong&gt; by demonstrating pod and node failure recovery with real‑time metrics.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Remember, &lt;em&gt;"If you can’t observe it, you can’t operate it."&lt;/em&gt; 🙏&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Future Enhancements 🧩
&lt;/h2&gt;

&lt;p&gt;🚀 ALB Ingress + path‑based routing&lt;br&gt;
🚀 An Interactive Web UI for Frontend&lt;br&gt;
🚀 Distributed tracing (OpenTelemetry)&lt;br&gt;
🚀 RBAC per namespace&lt;br&gt;
🚀 CI/CD pipeline integration&lt;br&gt;
🚀 Cost dashboards&lt;/p&gt;

&lt;h2&gt;
  
  
  References 🌐
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/eks/" rel="noopener noreferrer"&gt;https://aws.amazon.com/eks/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.hashicorp.com/terraform/tutorials/kubernetes/eks" rel="noopener noreferrer"&gt;https://developer.hashicorp.com/terraform/tutorials/kubernetes/eks&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://registry.terraform.io/providers/hashicorp/aws/latest" rel="noopener noreferrer"&gt;https://registry.terraform.io/providers/hashicorp/aws/latest&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>kubernetes</category>
      <category>observability</category>
      <category>devops</category>
    </item>
    <item>
      <title>Simplifying Container Ops: What ECS Express Mode Brings to the Table</title>
      <dc:creator>Tanushree Aggarwal</dc:creator>
      <pubDate>Sun, 30 Nov 2025 17:25:22 +0000</pubDate>
      <link>https://dev.to/aws-builders/simplifying-container-ops-what-ecs-express-mode-brings-to-the-table-6dp</link>
      <guid>https://dev.to/aws-builders/simplifying-container-ops-what-ecs-express-mode-brings-to-the-table-6dp</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In an era where shipping software often feels like wrestling a hydra of YAML files, security groups, load balancers, and networking rules, Amazon ECS Express Mode arrives like a well-timed plot twist. Announced in November-2025, it promises what developers have wanted for a decade: &lt;strong&gt;production-grade containers without the ceremony, the toil, or the infrastructure-induced existential dread&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;ECS Express Mode takes the idea of “simple deployment” and pushes it to its logical extreme. Bring a container image and two IAM roles, and with one command or a casual click, AWS conjures an entire, operationally sound architecture. We’re talking Fargate tasks, VPC wiring, security groups, an Application Load Balancer with proper health checks, autoscaling that isn’t an afterthought, and even a ready-to-use domain or public URL.&lt;/p&gt;

&lt;p&gt;Unlike many &lt;em&gt;“easy mode”&lt;/em&gt; cloud abstractions, Express Mode doesn’t trap you in a sandbox! All the resources it creates live fully within your AWS account, totally visible, totally tweakable.&lt;/p&gt;

&lt;p&gt;That's quite a big sell. Isn't it?&lt;br&gt;
In today's blog we are going to cover the first impressions of this offering and see if it really lives up to the hype!&lt;/p&gt;
&lt;h2&gt;
  
  
  Proposed Demo Application
&lt;/h2&gt;

&lt;p&gt;The project demonstrates a complete ECS Express Mode workflow from containerization to deployment and cleanup using a simple Express.js web server. &lt;/p&gt;
&lt;h4&gt;
  
  
  Core Functionality
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Web Server:&lt;/strong&gt;&lt;br&gt;
• Runs on port 3000 (configurable via PORT environment variable)&lt;br&gt;
• Serves JSON responses instead of HTML pages&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two Endpoints:&lt;/strong&gt;&lt;br&gt;
• GET / - Returns a JSON object with:&lt;br&gt;
  • Welcome message ("ECS Express Mode Test")&lt;br&gt;
  • Current timestamp&lt;br&gt;
  • Container hostname (useful for identifying which container instance is responding)&lt;br&gt;
• GET /health - Health check endpoint returning {"status": "healthy"}&lt;/p&gt;
&lt;h4&gt;
  
  
  Purpose
&lt;/h4&gt;

&lt;p&gt;This is a demonstration application designed to:&lt;br&gt;
• Show how to containerize a Node.js app for ECS&lt;br&gt;
• Test ECS Express Mode deployment capabilities&lt;br&gt;
• Provide observable outputs (timestamp, hostname) to verify the service is running&lt;br&gt;
• Include health checks for container orchestration&lt;/p&gt;
&lt;h4&gt;
  
  
  Technical Stack
&lt;/h4&gt;

&lt;p&gt;• &lt;strong&gt;Runtime:&lt;/strong&gt; Node.js 18&lt;br&gt;
• &lt;strong&gt;Framework:&lt;/strong&gt; Express.js web framework&lt;br&gt;
• &lt;strong&gt;Container:&lt;/strong&gt; Dockerized for deployment on AWS Fargate&lt;br&gt;
• &lt;strong&gt;Logging:&lt;/strong&gt; Outputs to CloudWatch via ECS logging configuration&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The application itself is intentionally simple - it's meant to be a working example of deploying containerized applications using ECS Express Mode rather than a complex business application. The real value is&lt;br&gt;
in the deployment infrastructure and automation scripts that surround it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;
  
  
  Files created:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;app.js&lt;/strong&gt; - Simple Express.js web server with two endpoints:&lt;br&gt;
• / - Returns JSON with message, timestamp, and hostname&lt;br&gt;
• /health - Health check endpoint returning status&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;package.json&lt;/strong&gt; - Node.js project configuration defining dependencies (Express.js) and start script&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;*&lt;em&gt;Dockerfile *&lt;/em&gt; - Container build instructions:&lt;br&gt;
• Uses Node.js 18 Alpine base image&lt;br&gt;
• Installs dependencies and copies application code&lt;br&gt;
• Exposes port 3000 and runs the app&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;task-definition.json&lt;/strong&gt; - ECS task configuration specifying:&lt;br&gt;
• Fargate compatibility with 256 CPU/512MB memory&lt;br&gt;
• Container image location and port mapping&lt;br&gt;
• CloudWatch logging configuration&lt;br&gt;
• Task execution role for permissions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;deploy.sh&lt;/strong&gt; - Automated deployment script that:&lt;br&gt;
• Creates ECR repository&lt;br&gt;
• Builds and pushes Docker image&lt;br&gt;
• Updates task definition with account details&lt;br&gt;
• Creates ECS cluster and service with Express Mode&lt;br&gt;
• Sets up CloudWatch logging&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;• &lt;strong&gt;test-express-mode.sh&lt;/strong&gt; - Testing script that validates:&lt;br&gt;
• Service status and task counts&lt;br&gt;
• Task details and network configuration&lt;br&gt;
• Auto-scaling settings&lt;br&gt;
• Recent service events&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;cleanup.sh&lt;/strong&gt; - Resource cleanup script that:&lt;br&gt;
• Scales service to 0 and deletes it&lt;br&gt;
• Removes ECS cluster&lt;br&gt;
• Deletes ECR repository&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;The link to this code is provided below, so you can easily follow along in your personal AWS account.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Prerequisites ⚠
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;AWS CLI configured&lt;/li&gt;
&lt;li&gt;Docker installed&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Cost Warning 📊💰
&lt;/h2&gt;

&lt;p&gt;This demo could cost you $0.05-0.10 per hour apprx. while running (Fargate pricing for 0.25 vCPU, 0.5 GB memory).&lt;/p&gt;
&lt;h2&gt;
  
  
  Breakdown of IAM Permissions and Policies used in this demo 🔏
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Primary IAM Role&lt;/strong&gt; &lt;br&gt;
&lt;code&gt;ecsTaskExecutionRole&lt;/code&gt; - This is the main IAM role referenced in the task definition that ECS Fargate uses to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;• Pull container images from ECR
• Write logs to CloudWatch
• Manage task lifecycle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Required Permissions&lt;/strong&gt;&lt;br&gt;
The demo requires your AWS user/role to have permissions for:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ECR (Elastic Container Registry):
• ecr:CreateRepository
• ecr:GetAuthorizationToken
• ecr:BatchCheckLayerAvailability
• ecr:GetDownloadUrlForLayer
• ecr:BatchGetImage

ECS (Elastic Container Service):
• ecs:CreateCluster
• ecs:CreateService
• ecs:RegisterTaskDefinition
• ecs:DescribeTasks
• ecs:ListTasks

CloudWatch Logs:
• logs:CreateLogGroup
• logs:DescribeLogStreams

EC2 (for networking):
• ec2:DescribeVpcs
• ec2:DescribeSubnets
• ec2:DescribeSecurityGroups
• ec2:DescribeNetworkInterfaces
• ec2:AuthorizeSecurityGroupIngress

STS (Security Token Service):
• sts:GetCallerIdentity
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Task Execution Role Permissions&lt;/strong&gt;&lt;br&gt;
The &lt;code&gt;ecsTaskExecutionRole&lt;/code&gt; needs the AWS managed policy:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;• AmazonECSTaskExecutionRolePolicy
This policy provides the minimum permissions required for ECS tasks
to pull images and write logs.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Well-Architected Framework 🔒🛡️⚡💰♻️
&lt;/h2&gt;

&lt;p&gt;This demo incorporates basic elements from well-architected pillars as listed below. For a production implementation, you would want to enhance security (eg: secrets management, network segmentation) and reliability (multi-AZ deployment, backup strategies).&lt;/p&gt;

&lt;p&gt;🔧 Operational Excellence:&lt;br&gt;
• CloudWatch logging configuration for monitoring&lt;br&gt;
• Health check endpoint (/health) for service monitoring&lt;br&gt;
• Automated deployment scripts for consistent operations&lt;/p&gt;

&lt;p&gt;Security🔒 :&lt;br&gt;
• IAM execution role for task permissions&lt;br&gt;
• VPC networking with security groups&lt;br&gt;
• Container isolation through Fargate&lt;/p&gt;

&lt;p&gt;Reliability🛡️ :&lt;br&gt;
• ECS service with desired count for high availability&lt;br&gt;
• Auto-scaling capabilities (referenced in test script)&lt;br&gt;
• Health checks for automatic recovery&lt;/p&gt;

&lt;p&gt;Performance Efficiency⚡ :&lt;br&gt;
• Fargate serverless compute (no infrastructure management)&lt;br&gt;
• Right-sized CPU/memory allocation (256 CPU, 512 MB memory)&lt;br&gt;
• Express Mode optimizations for faster startup&lt;/p&gt;

&lt;p&gt;Cost Optimization💰 :&lt;br&gt;
• Fargate pay-per-use model&lt;br&gt;
• Minimal resource allocation&lt;br&gt;
• Auto-scaling to match demand&lt;/p&gt;

&lt;p&gt;Sustainability♻️ :&lt;br&gt;
• Serverless architecture reduces idle resources&lt;br&gt;
• Container efficiency&lt;br&gt;
• Right-sizing to minimize waste&lt;/p&gt;
&lt;h2&gt;
  
  
  Implementation ✍
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Step 1: Update Configuration
&lt;/h3&gt;

&lt;p&gt;Before deploying, we will need to update the subnet and security group IDs in &lt;code&gt;deploy.sh&lt;/code&gt; script.&lt;/p&gt;

&lt;p&gt;For this, we will fetch our VPC information from our AWS account.&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;# Find your default VPC&lt;/span&gt;
aws ec2 describe-vpcs &lt;span class="nt"&gt;--filters&lt;/span&gt; &lt;span class="s2"&gt;"Name=is-default,Values=true"&lt;/span&gt; &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s1"&gt;'Vpcs[0].VpcId'&lt;/span&gt; &lt;span class="nt"&gt;--output&lt;/span&gt; text

&lt;span class="c"&gt;# Find subnets in your VPC (replace vpc-xxxxx with your VPC ID)&lt;/span&gt;
aws ec2 describe-subnets &lt;span class="nt"&gt;--filters&lt;/span&gt; &lt;span class="s2"&gt;"Name=vpc-id,Values=vpc-xxxxx"&lt;/span&gt; &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s1"&gt;'Subnets[0].SubnetId'&lt;/span&gt; &lt;span class="nt"&gt;--output&lt;/span&gt; text

&lt;span class="c"&gt;# Find default security group&lt;/span&gt;
aws ec2 describe-security-groups &lt;span class="nt"&gt;--filters&lt;/span&gt; &lt;span class="s2"&gt;"Name=vpc-id,Values=vpc-xxxxx"&lt;/span&gt; &lt;span class="s2"&gt;"Name=group-name,Values=default"&lt;/span&gt; &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s1"&gt;'SecurityGroups[0].GroupId'&lt;/span&gt; &lt;span class="nt"&gt;--output&lt;/span&gt; text
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;• Replace &lt;code&gt;subnet-xxxxxx&lt;/code&gt; and &lt;code&gt;sg-xxxxxx&lt;/code&gt; in the deploy script with actual values from your VPC&lt;br&gt;
• Ensure your AWS credentials have the necessary ECS, ECR, and CloudWatch permissions&lt;/p&gt;

&lt;p&gt;Edit &lt;code&gt;deploy.sh&lt;/code&gt; and replace:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;subnet-xxxxxx&lt;/code&gt; with your actual subnet ID&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;sg-xxxxxx&lt;/code&gt; with your actual security group ID&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;make sure that the &lt;code&gt;Security Group&lt;/code&gt; has an inbound rule for port 3000&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Step 2: Deploy the Application
&lt;/h3&gt;

&lt;p&gt;Run &lt;code&gt;./deploy.sh&lt;/code&gt; to deploy your Express Mode service.&lt;br&gt;
This will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a container registry&lt;/li&gt;
&lt;li&gt;Build and upload your app&lt;/li&gt;
&lt;li&gt;Create an ECS cluster&lt;/li&gt;
&lt;li&gt;Start your service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx0zcr3bw0qx7welu8phs.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%2Fx0zcr3bw0qx7welu8phs.png" alt=" "&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%2Folyjfq1wx6enik0wo4mi.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%2Folyjfq1wx6enik0wo4mi.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check in the AWS Management Console:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp7b80fr4vd8z8knx7itq.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%2Fp7b80fr4vd8z8knx7itq.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It worked! And just like that, our cluster is running!&lt;/p&gt;
&lt;h4&gt;
  
  
  Step 3: Test the Deployment
&lt;/h4&gt;

&lt;p&gt;Use &lt;code&gt;./test-express-mode.sh&lt;/code&gt; to validate the deployment.&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%2Fodhihpopy7jiaqwfq6n4.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%2Fodhihpopy7jiaqwfq6n4.png" alt=" "&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0kk4rtm02cccxwfeeryc.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%2F0kk4rtm02cccxwfeeryc.png" alt=" "&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgobvjuwk60qpi8noyh7o.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%2Fgobvjuwk60qpi8noyh7o.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 4: Find Your Application URL
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Get task details to find public IP&lt;/span&gt;
aws ecs describe-tasks &lt;span class="nt"&gt;--cluster&lt;/span&gt; express-mode-cluster &lt;span class="nt"&gt;--tasks&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;aws ecs list-tasks &lt;span class="nt"&gt;--cluster&lt;/span&gt; express-mode-cluster &lt;span class="nt"&gt;--service-name&lt;/span&gt; express-mode-service &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s1"&gt;'taskArns[0]'&lt;/span&gt; &lt;span class="nt"&gt;--output&lt;/span&gt; text&lt;span class="si"&gt;)&lt;/span&gt; &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s1"&gt;'tasks[0].attachments[0].details[?name==`networkInterfaceId`].value'&lt;/span&gt; &lt;span class="nt"&gt;--output&lt;/span&gt; text

&lt;span class="c"&gt;# Get public IP (replace eni-xxxxx with the network interface ID from above)&lt;/span&gt;
aws ec2 describe-network-interfaces &lt;span class="nt"&gt;--network-interface-ids&lt;/span&gt; eni-xxxxx &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s1"&gt;'NetworkInterfaces[0].Association.PublicIp'&lt;/span&gt; &lt;span class="nt"&gt;--output&lt;/span&gt; text
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Visit &lt;code&gt;http://YOUR-PUBLIC-IP:3000&lt;/code&gt; in your browser.&lt;/p&gt;

&lt;p&gt;Perfect! It loads!&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%2Fawcjbgnepq6jh5wd0sxi.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%2Fawcjbgnepq6jh5wd0sxi.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Step 5: Clean Up Resources
&lt;/h4&gt;

&lt;p&gt;Run &lt;code&gt;./cleanup.sh&lt;/code&gt; when done testing to avoid further billing on resources.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./cleanup.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Github Repository
&lt;/h3&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/aggarwal-tanushree" rel="noopener noreferrer"&gt;
        aggarwal-tanushree
      &lt;/a&gt; / &lt;a href="https://github.com/aggarwal-tanushree/amazon-ecs-express-mode-demo" rel="noopener noreferrer"&gt;
        amazon-ecs-express-mode-demo
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      The project demonstrates a complete ECS Express Mode workflow from containerization to deployment and cleanup using a simple Express.js web server
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;ECS Express Mode Demo - Complete Beginner's Guide&lt;/h1&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What is ECS Express Mode?&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Amazon ECS Express Mode is a simplified way to run containerized applications without managing servers. It automatically handles scaling, networking, and infrastructure.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Prerequisites&lt;/h2&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;1. Install Required Tools&lt;/h3&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Install AWS CLI&lt;/span&gt;
curl &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt; -o &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;awscliv2.zip&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;
unzip awscliv2.zip
sudo ./aws/install

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Install Docker&lt;/span&gt;
sudo apt update
sudo apt install docker.io
sudo usermod -aG docker &lt;span class="pl-smi"&gt;$USER&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;2. Configure AWS Credentials&lt;/h3&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;aws configure&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Enter your:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Access Key ID&lt;/li&gt;
&lt;li&gt;AWS Secret Access Key&lt;/li&gt;
&lt;li&gt;Default region (e.g., us-east-1)&lt;/li&gt;
&lt;li&gt;Output format (json)&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;3. Get Your VPC Information&lt;/h3&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Find your default VPC&lt;/span&gt;
aws ec2 describe-vpcs --filters &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;Name=is-default,Values=true&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt; --query &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;Vpcs[0].VpcId&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt; --output text
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Find subnets in your VPC (replace vpc-xxxxx with your VPC ID)&lt;/span&gt;
aws ec2 describe-subnets --filters &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;Name=vpc-id,Values=vpc-xxxxx&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt; --query &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;Subnets[0].SubnetId&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt; --output text

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Find default security group&lt;/span&gt;
aws ec2 describe-security-groups&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/aggarwal-tanushree/amazon-ecs-express-mode-demo" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  Amazon ECS v/s Amazon ECS Express Mode
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Key Differences 🚀⭐
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature / Aspect&lt;/th&gt;
&lt;th&gt;Traditional Amazon ECS&lt;/th&gt;
&lt;th&gt;Amazon ECS Express Mode&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Networking Setup&lt;/td&gt;
&lt;td&gt;Manual VPC, subnet, and security group configuration&lt;/td&gt;
&lt;td&gt;Automatic networking setup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Load Balancing&lt;/td&gt;
&lt;td&gt;Must create &amp;amp; manage ALB/NLB separately&lt;/td&gt;
&lt;td&gt;Built-in load balancing (no ALB/NLB required)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Service Discovery&lt;/td&gt;
&lt;td&gt;Manual configuration required&lt;/td&gt;
&lt;td&gt;Automatic service discovery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Complexity&lt;/td&gt;
&lt;td&gt;Requires deeper networking &amp;amp; infra knowledge&lt;/td&gt;
&lt;td&gt;Minimal configuration, simplified deployment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Control Level&lt;/td&gt;
&lt;td&gt;High granular control&lt;/td&gt;
&lt;td&gt;Abstracts away infrastructure complexity&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Benefits of Express Mode 💪
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benefit Category&lt;/th&gt;
&lt;th&gt;Advantages of ECS Express Mode&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Faster Time to Market&lt;/td&gt;
&lt;td&gt;Deploy in minutes; no custom networking; automatic scaling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reduced Ops Overhead&lt;/td&gt;
&lt;td&gt;AWS manages infra; auto security groups; built-in logging/observability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost Optimization&lt;/td&gt;
&lt;td&gt;No idle load balancers; automatic right-sizing; no extra networking fees&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Developer-Friendly&lt;/td&gt;
&lt;td&gt;Focus on code; simplified CLI; less AWS expertise needed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  When to Use Each 💡
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Use Case Type&lt;/th&gt;
&lt;th&gt;Use Express Mode For…&lt;/th&gt;
&lt;th&gt;Use Traditional ECS For…&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Application Complexity&lt;/td&gt;
&lt;td&gt;Simple apps, APIs, prototypes&lt;/td&gt;
&lt;td&gt;Complex multi-tier architectures&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Networking Requirements&lt;/td&gt;
&lt;td&gt;Standard networking&lt;/td&gt;
&lt;td&gt;Custom networking needs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Team Skill Level&lt;/td&gt;
&lt;td&gt;Teams new to AWS/containers&lt;/td&gt;
&lt;td&gt;Teams with advanced AWS/networking expertise&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security Requirements&lt;/td&gt;
&lt;td&gt;Standard default configurations&lt;/td&gt;
&lt;td&gt;Advanced/custom security configurations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Load Balancer Needs&lt;/td&gt;
&lt;td&gt;Basic built-in LB is sufficient&lt;/td&gt;
&lt;td&gt;Need advanced ALB/NLB features&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Express Mode essentially provides a "serverless container" experience similar to how Lambda abstracts server management, but for containerized applications that need more control than Lambda functions provide.&lt;/p&gt;

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

&lt;p&gt;Amazon ECS Express Mode feels like AWS acknowledging a universal truth: &lt;em&gt;most developers want to build features, not infrastructures&lt;/em&gt; . By letting teams deploy robust, scalable containerized services in minutes instead of weeks, AWS has delivered something refreshingly pragmatic! &lt;/p&gt;

&lt;p&gt;For those building microservices, internal tools, or rapid prototypes, or simply looking to ship faster — &lt;strong&gt;Express Mode is a powerful ally&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Whether you’re racing a deadline, experimenting with a new idea, or assembling a constellation of microservices, Express Mode isn’t just a convenience — it’s a genuine accelerator.&lt;/p&gt;

&lt;p&gt;Have you tried this offering yet? Let me know your thoughts in the comments!&lt;/p&gt;

&lt;h2&gt;
  
  
  References 📝
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2025/11/announcing-amazon-ecs-express-mode/" rel="noopener noreferrer"&gt;https://aws.amazon.com/about-aws/whats-new/2025/11/announcing-amazon-ecs-express-mode/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/AmazonECS/latest/developerguide/express-service-overview.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/AmazonECS/latest/developerguide/express-service-overview.html&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus 🔓
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Install Required Tools
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;##### Install AWS CLI&lt;/span&gt;
curl &lt;span class="s2"&gt;"https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip"&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="s2"&gt;"awscliv2.zip"&lt;/span&gt;
unzip awscliv2.zip
&lt;span class="nb"&gt;sudo&lt;/span&gt; ./aws/install

&lt;span class="c"&gt;##### Install Docker&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;docker.io
&lt;span class="nb"&gt;sudo &lt;/span&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; docker &lt;span class="nv"&gt;$USER&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configure AWS Credentials
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws configure

Enter your:
- AWS Access Key ID
- AWS Secret Access Key
- Default region &lt;span class="o"&gt;(&lt;/span&gt;e.g., us-east-1&lt;span class="o"&gt;)&lt;/span&gt;
- Output format &lt;span class="o"&gt;(&lt;/span&gt;json&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Troubleshooting
&lt;/h3&gt;

&lt;p&gt;Here are some troubleshooting steps in case you run into issues&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo chmod&lt;/span&gt; +x &lt;span class="k"&gt;*&lt;/span&gt;.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;"No default VPC" error:&lt;/strong&gt;&lt;br&gt;
Create a VPC or use an existing one's subnet/security group IDs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Container won't start:&lt;/strong&gt;&lt;br&gt;
Check CloudWatch logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws logs describe-log-streams &lt;span class="nt"&gt;--log-group-name&lt;/span&gt; &lt;span class="s2"&gt;"/ecs/express-mode-test"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Can't access the application:&lt;/strong&gt;&lt;br&gt;
Ensure your security group allows inbound traffic on port 3000:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ec2 authorize-security-group-ingress &lt;span class="nt"&gt;--group-id&lt;/span&gt; sg-xxxxx &lt;span class="nt"&gt;--protocol&lt;/span&gt; tcp &lt;span class="nt"&gt;--port&lt;/span&gt; 3000 &lt;span class="nt"&gt;--cidr&lt;/span&gt; 0.0.0.0/0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Next Steps
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Modify &lt;code&gt;app.js&lt;/code&gt; to add new features&lt;/li&gt;
&lt;li&gt;Update the container and redeploy&lt;/li&gt;
&lt;li&gt;Explore ECS auto-scaling features&lt;/li&gt;
&lt;li&gt;Add a load balancer for production use&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>containers</category>
      <category>ecs</category>
    </item>
    <item>
      <title>Rock, Paper, Innovation: Create a Game in Minutes with Amazon Q</title>
      <dc:creator>Tanushree Aggarwal</dc:creator>
      <pubDate>Fri, 30 May 2025 16:58:40 +0000</pubDate>
      <link>https://dev.to/aws-builders/rock-paper-innovation-create-a-game-in-minutes-with-amazon-q-ag3</link>
      <guid>https://dev.to/aws-builders/rock-paper-innovation-create-a-game-in-minutes-with-amazon-q-ag3</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;🧑‍🍳 &lt;strong&gt;What is Amazon Q CLI?&lt;/strong&gt;&lt;br&gt;
Amazon Q &lt;em&gt;Developer&lt;/em&gt; CLI, popularly referred to as &lt;strong&gt;Amazon Q CLI&lt;/strong&gt; is a command-line tool developed by AWS that integrates &lt;em&gt;Amazon Q&lt;/em&gt;, a generative AI-powered assistant, into your terminal. &lt;br&gt;
The tool leverages AI to help dev enthusiasts build applications by typing in plain(ish) English - like asking it questions, getting code, running tasks etc.&lt;/p&gt;

&lt;p&gt;Amazon Q CLI is like talking to your cloud services using a magical command-line genie that understands what you mean, not just what you type. &lt;/p&gt;

&lt;p&gt;🛠️ &lt;strong&gt;What makes it cool?&lt;/strong&gt;&lt;br&gt;
Natural language to code – Talk like a human, get dev-grade output.&lt;/p&gt;

&lt;p&gt;Smart suggestions – “You asked for X, but also consider Y.”&lt;/p&gt;

&lt;p&gt;Command line native – Lives in your terminal like a helpful ghost.&lt;/p&gt;

&lt;p&gt;Context-aware – Knows about your AWS environment and your project.&lt;/p&gt;

&lt;p&gt;🧃 &lt;strong&gt;TL;DR:&lt;/strong&gt;&lt;br&gt;
Amazon Q CLI is like ChatGPT for your cloud - but instead of chit-chat, it gets real work done in your AWS setup, straight from the terminal.&lt;/p&gt;

&lt;p&gt;Reminiscing the good old days, I developed &lt;em&gt;Rock, Paper, Scissors&lt;/em&gt; game in Python3 without writing a single line of code, and simply providing a prompt to Amazon Q CLI!&lt;/p&gt;

&lt;p&gt;Continue reading .. to learn how you can do the same in a matter of minutes!&lt;/p&gt;
&lt;h2&gt;
  
  
  Cost
&lt;/h2&gt;

&lt;p&gt;None!&lt;/p&gt;

&lt;p&gt;Amazon Q Developer CLI can be used for free through the AWS Free Tier! To access it, you can sign up for an &lt;a href="https://docs.aws.amazon.com/signin/latest/userguide/sign-in-aws_builder_id.html" rel="noopener noreferrer"&gt;AWS Builder ID&lt;/a&gt;, which does not require an AWS account. This allows you to explore the features of Amazon Q Developer CLI, including natural language command execution and code transformation, within certain usage limits.&lt;/p&gt;

&lt;p&gt;The functionality being used in this blog lies within the free tier and will not incur any costs if you choose to follow along or develop a game inspired by this blog.&lt;/p&gt;
&lt;h2&gt;
  
  
  Amazon Q CLI installation
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Install Amazon Q CLI&lt;br&gt;
The steps for installing Amazon Q CLI are available in the &lt;a href="https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-installing.html" rel="noopener noreferrer"&gt;official AWS documentation&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Authenticate Amazon Q CLI by running the command: &lt;code&gt;q login&lt;/code&gt;. This opens a browser window for authentication. Log in with your AWS Builder ID to access the free-tier.&lt;br&gt;
You can run your prompts directly on the Q CLI, or as I am doing in this blog - via the VSCode extension.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Install VS Code Extension &lt;em&gt;(Optional)&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;a) Open Visual Studio Code.&lt;br&gt;
b) Go to Extensions &lt;code&gt;(Ctrl+Shift+X)&lt;/code&gt;.&lt;br&gt;
c) Search for &lt;code&gt;Amazon Q&lt;/code&gt;.&lt;br&gt;
d) Click &lt;code&gt;Install&lt;/code&gt; on the official Amazon Q extension.&lt;/p&gt;

&lt;p&gt;4) Configure Amazon Q in VS Code &lt;em&gt;(Optional)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;a) Open the Command Palette &lt;code&gt;(Ctrl+Shift+P)&lt;/code&gt;.&lt;br&gt;
b) Type and select &lt;code&gt;“Amazon Q: Connect”&lt;/code&gt;.&lt;br&gt;
c) Follow prompts to authenticate using your AWS Builder ID (same as CLI).&lt;/p&gt;

&lt;p&gt;5) Test Setup&lt;br&gt;
a) Run &lt;code&gt;q help&lt;/code&gt; in a VS Code terminal or on the Q CLI (if you are not using the VSCode IDE)&lt;br&gt;
b) Use commands like q ask or q code to verify integration.&lt;/p&gt;
&lt;h3&gt;
  
  
  Implementation - Prompt and Amazon Q CLI output
&lt;/h3&gt;

&lt;p&gt;Click the &lt;code&gt;Amazon Q CLI&lt;/code&gt; extension icon in your VSCode to start the implementation!&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%2Fdv0l0s09qd3z4pm8eo54.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%2Fdv0l0s09qd3z4pm8eo54.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's enter our first prompt!&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%2Fkx34ho9r532c6spfntct.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%2Fkx34ho9r532c6spfntct.png" alt=" "&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkfds7notpiladmpv1mze.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%2Fkfds7notpiladmpv1mze.png" alt=" "&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsve64oajkq86mgbwj4ld.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%2Fsve64oajkq86mgbwj4ld.png" alt=" "&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdcw7k1nw8ltn52sb41np.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%2Fdcw7k1nw8ltn52sb41np.png" alt=" "&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkeaxnhll5ir0dadwbn9t.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%2Fkeaxnhll5ir0dadwbn9t.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Game - Version 1
&lt;/h4&gt;

&lt;p&gt;Amazon Q CLI not only wrote a Python script for the &lt;code&gt;Rock, Paper, Scissors&lt;/code&gt; game, but also generated well documented instructions in &lt;code&gt;README.md&lt;/code&gt; describing the functionality and execution instructions!&lt;/p&gt;

&lt;p&gt;Let us test what we created!&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%2Fx107odgp0jy1ke3pz3vs.gif" 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%2Fx107odgp0jy1ke3pz3vs.gif" alt="Version1-Demo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While this version of the implementation aligns well with the input prompt, works well and is without any (visible) bugs, let's see if we can UP our game!&lt;/p&gt;
&lt;h4&gt;
  
  
  Updated prompt and Amazon Q output
&lt;/h4&gt;

&lt;p&gt;Prompt 2 &lt;br&gt;
&lt;code&gt;update the code to take the player's name as input for a more personalized feel. Update the quality of the game graphics and change the color scheme to something more subtle that works well in both light and dark themed devices&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feic9ykd2vc4o8avcbrea.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%2Feic9ykd2vc4o8avcbrea.png" alt=" "&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1fn96emo2igcpzymgk1g.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%2F1fn96emo2igcpzymgk1g.png" alt=" "&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgr5ssyug42yexdfnpxro.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%2Fgr5ssyug42yexdfnpxro.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Game - Version 2
&lt;/h4&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%2Fpbgfmfslohyt5e7im07g.gif" 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%2Fpbgfmfslohyt5e7im07g.gif" alt="Version2-Demo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that looks much better! While there is a slight rendering issue, the look and feel of the game has improved to a great extent. You may continue interacting with Amazon Q CLI to tweak the game as per your liking.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I noticed that Amazon Q did not update the &lt;code&gt;README.md&lt;/code&gt; and &lt;code&gt;game_specs.txt&lt;/code&gt; files this time around. Probably my prompt was the culprit here, since I only asked it to "update the code". Another reminder for us that &lt;strong&gt;AI assistants are only as good as the prompt&lt;/strong&gt;!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Prompt 3&lt;br&gt;
&lt;code&gt;update all the files to reflect the latest changes in main.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fadnqphpf0jfm7pkkuemp.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%2Fadnqphpf0jfm7pkkuemp.png" alt=" "&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo7m2ny85rcqhj5yc3nah.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%2Fo7m2ny85rcqhj5yc3nah.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Bonus
&lt;/h4&gt;

&lt;p&gt;I asked Amazon Q to create a flowchart of the application and it generated the flowchart in three formats!&lt;br&gt;&lt;br&gt;
A &lt;code&gt;.txt&lt;/code&gt; , a markdown &lt;code&gt;.md&lt;/code&gt; version and a &lt;code&gt;Python script&lt;/code&gt; to generate the flowchart diagram at runtime!&lt;/p&gt;

&lt;p&gt;Whaaatttttt???? &lt;em&gt;mind blown&lt;/em&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%2F63in9rdbzkxnclsaj4lg.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%2F63in9rdbzkxnclsaj4lg.png" alt=" "&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%2F5ds7b826dczmingadyty.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%2F5ds7b826dczmingadyty.png" alt=" "&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%2Fy2hjfsgc6fh5yc5mcsy7.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%2Fy2hjfsgc6fh5yc5mcsy7.png" alt=" "&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%2Fjqlix84ybichwl7omixy.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%2Fjqlix84ybichwl7omixy.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Github Repository
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/aggarwal-tanushree" rel="noopener noreferrer"&gt;
        aggarwal-tanushree
      &lt;/a&gt; / &lt;a href="https://github.com/aggarwal-tanushree/rock-paper-scissors-python" rel="noopener noreferrer"&gt;
        rock-paper-scissors-python
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Rock, Paper, Scissors Game&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A modern 2D implementation of the classic Rock, Paper, Scissors game built with Python and Pygame, featuring personalized gameplay and enhanced visuals.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Game Rules&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Rock beats scissors&lt;/li&gt;
&lt;li&gt;Scissors beat paper&lt;/li&gt;
&lt;li&gt;Paper beats rock&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Personalized gameplay with player name input&lt;/li&gt;
&lt;li&gt;Modern UI with subtle color scheme for both light and dark themes&lt;/li&gt;
&lt;li&gt;Interactive elements with hover effects and animations&lt;/li&gt;
&lt;li&gt;Score tracking across multiple rounds&lt;/li&gt;
&lt;li&gt;Simple mouse and keyboard controls&lt;/li&gt;
&lt;li&gt;End-game summary with personalized results&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Requirements&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Python 3.6 or higher&lt;/li&gt;
&lt;li&gt;Pygame 2.5.2 or higher&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Clone or download this repository&lt;/li&gt;
&lt;li&gt;Install the required dependencies:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;pip install -r requirements.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How to Play&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Run the game:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;python main.py
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Enter your name when prompted&lt;/li&gt;
&lt;li&gt;Click on one of the colored squares to make your choice
&lt;ul&gt;
&lt;li&gt;Red square: Rock&lt;/li&gt;
&lt;li&gt;Green square: Paper&lt;/li&gt;
&lt;li&gt;Blue square: Scissors&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;After seeing the result, click
&lt;ul&gt;
&lt;li&gt;"Play Again" button to play another round&lt;/li&gt;
&lt;li&gt;"End Game" button to…&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/aggarwal-tanushree/rock-paper-scissors-python" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;AI tools like Amazon Q CLI are incredibly powerful and flexible — they let you talk to your programming language or your cloud setup almost like you're having a conversation, right from the command line. You can ask it to write code, fix bugs, manage services and more, which can save tons of time and make complex tasks easier. &lt;/p&gt;

&lt;p&gt;But there's a catch: if you're not familiar with programming or how your systems work, it's easy to make mistakes. You might accidentally change something important, open up a security hole, or rack up unexpected costs. So while these tools are super helpful, they work best when you understand what they’re doing behind the scenes and don’t just trust them blindly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remember, AI assistants are only as good as your prompt!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Thank you for stopping by! I hope you found this blog useful! Are you planning to take Amazon Q CLI for a spin? Let me know in the comment section!&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/q-free-tier.html" rel="noopener noreferrer"&gt;Amazon Q free-tier&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-installing.html" rel="noopener noreferrer"&gt;Amazon Q CLI installation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.aws/content/2xIoduO0xhkhUApQpVUIqBFGmAc/build-games-with-amazon-q-cli-and-score-a-t-shirt?trk=b085178b-f0cb-447b-b32d-bd0641720467&amp;amp;sc_channel=el" rel="noopener noreferrer"&gt;Build Games with Amazon Q CLI and score a T shirt&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awschallenge</category>
      <category>programming</category>
      <category>ai</category>
    </item>
    <item>
      <title>Goodbye Logouts: Manage Multiple AWS Accounts on One Browser!</title>
      <dc:creator>Tanushree Aggarwal</dc:creator>
      <pubDate>Fri, 17 Jan 2025 12:59:18 +0000</pubDate>
      <link>https://dev.to/tanushree_aggarwal/goodbye-logouts-manage-multiple-aws-accounts-on-one-browser-2n23</link>
      <guid>https://dev.to/tanushree_aggarwal/goodbye-logouts-manage-multiple-aws-accounts-on-one-browser-2n23</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Are you tired of constant toggling between multiple AWS accounts? Is having multiple browser windows, just so you can access different AWS account simultaneously reducing your overall efficiency? &lt;/p&gt;

&lt;p&gt;If this is something you still struggle with, I have great news for you!&lt;/p&gt;

&lt;p&gt;AWS has now introduced multi-session support for web browsers! &lt;/p&gt;

&lt;p&gt;These can be &lt;code&gt;root&lt;/code&gt; accounts, &lt;code&gt;IAM users&lt;/code&gt; or &lt;code&gt;federated roles&lt;/code&gt; - across the same or different AWS accounts (current maximum concurrent session limit is 5).&lt;/p&gt;

&lt;p&gt;Continue reading to learn how to enable this feature...&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost
&lt;/h2&gt;

&lt;p&gt;This is a free feature, and does not incur any cost to the user.&lt;/p&gt;

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

&lt;p&gt;In order to be able to do so, we need to enable &lt;code&gt;Multi Session&lt;/code&gt; (which can also be disabled anytime we no longer wish to use.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Sign in to the &lt;a href="https://console.aws.amazon.com/console/home" rel="noopener noreferrer"&gt;AWS Management Console&lt;/a&gt; of the account you wish to enable the feature.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;On the top right navigation pane, click your &lt;em&gt;account name&lt;/em&gt; to expand the dropdown list.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;code&gt;Turn on multi-session support&lt;/code&gt;. Do the same at the next screen. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53oh2r7c6br46iwsi2re.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%2F53oh2r7c6br46iwsi2re.png" alt="Image description" width="800" height="286"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7vmcuk91n8gdmanqnlzr.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%2F7vmcuk91n8gdmanqnlzr.png" alt="Image description" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Your browser window should immediately get refreshed. &lt;strong&gt;Notice that the browser URL has changed!&lt;/strong&gt; The new one has your AWS account ID and a unique string combination. Bookmark this URL for future use.&lt;br&gt;
Multi-session support is now enabled for the current &lt;strong&gt;account+user&lt;/strong&gt;.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To enable the same for more users in the same account, click &lt;code&gt;Add sessions&lt;/code&gt; in your account dropdown list. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5h9lli1yjpf22o6xobsm.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%2F5h9lli1yjpf22o6xobsm.png" alt="Image description" width="397" height="586"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enter the credentials. &lt;strong&gt;This can be an IAM user, Root user or Federated roles of the same or a different account altogether&lt;/strong&gt;, and a new sub-domain URL is now created for the second user! Remember to bookmark this URL as well!&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgfxp9zoiqe3t13qh1p7d.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%2Fgfxp9zoiqe3t13qh1p7d.png" alt="Image description" width="800" height="47"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Switch between both the open tabs. You are logged in as different accounts in each! You can access upto 5 such login URLs simultaneously in a web browser.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Remember, this is the limit for a single web-browser, and is not an account specific limit. If you try accessing more than five, you will be asked to logout from one of the existing sessions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa56gadbiokk331aweu3u.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%2Fa56gadbiokk331aweu3u.png" alt="Image description" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Disabling Multi-Session
&lt;/h2&gt;

&lt;p&gt;Disabling the feature is as easy as enabling it. Simply click the &lt;code&gt;Turn off multi-session support&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3i5zn2vc5s8325f1gt77.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%2F3i5zn2vc5s8325f1gt77.png" alt="Image description" width="785" height="547"&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%2F206q4g9971zf8suatqfp.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%2F206q4g9971zf8suatqfp.png" alt="Image description" width="735" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2025/01/aws-management-console-simultaneous-sign-in-multiple-accounts/" rel="noopener noreferrer"&gt;https://aws.amazon.com/about-aws/whats-new/2025/01/aws-management-console-simultaneous-sign-in-multiple-accounts/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Banner image is AI generated&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Block direct access to CloudFront origins with custom headers and AWS WAF</title>
      <dc:creator>Tanushree Aggarwal</dc:creator>
      <pubDate>Tue, 31 Dec 2024 18:24:04 +0000</pubDate>
      <link>https://dev.to/tanushree_aggarwal/block-direct-access-to-cloudfront-origins-with-custom-headers-and-aws-waf-1o25</link>
      <guid>https://dev.to/tanushree_aggarwal/block-direct-access-to-cloudfront-origins-with-custom-headers-and-aws-waf-1o25</guid>
      <description>&lt;h2&gt;
  
  
  Introduction:
&lt;/h2&gt;

&lt;p&gt;In today's age, insecure web applications are prime targets for cybercriminals seeking unauthorized access to sensitive information. Such breaches can lead to the exposure of personal, financial, or proprietary data, resulting in legal liabilities and loss of customer trust. A compromised web application can severely damage an organization's reputation. Broken Access Control occurs when users can access resources beyond their authorization, leading to unauthorized data exposure, and this type of security vulnerability is more common than you may think! &lt;br&gt;
In this blog we will walkthrough a web architecture, which at first glance will probably not indicate the underlying issue to most readers.&lt;br&gt;
Stay tuned!&lt;/p&gt;

&lt;h2&gt;
  
  
  Services:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/waf/" rel="noopener noreferrer"&gt;Amazon Web Application Firewall&lt;/a&gt;&lt;br&gt;
AWS WAF is a web application firewall that lets you monitor the HTTP(S) requests that are forwarded to your protected web application resources. AWS WAF lets you control access to your content. Based on criteria that you specify, such as the IP addresses that requests originate from or the values of query strings, the service associated with your protected resource responds to requests either with the requested content, with an HTTP 403 status code (Forbidden), or with a custom response.&lt;sup id="fnref1"&gt;1&lt;/sup&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Current Architecture:
&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%2F9nygs6ofpa3zfrda8tgq.jpg" 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%2F9nygs6ofpa3zfrda8tgq.jpg" alt="Image description" width="800" height="699"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We have a Amazon Virtual Private Cloud(VPC), spanning two Availability Zones(AZ). Each AZ has a public and a private subnet.&lt;/li&gt;
&lt;li&gt;The private subnets host our Elastic Compute Cloud (EC2) instances, which act as our web server virtual machines(VMs), configured with an Auto Scaling group(ASG).&lt;/li&gt;
&lt;li&gt;The public subnets have NAT gateways for the outbound traffic from our VMs.&lt;/li&gt;
&lt;li&gt;Inbound traffic is routed to our VMs through an Application Load Balancer(ALB). The Security Groups(SGs) attached to our EC2 instances allow traffic only from the SG attached to the ALB. This means that the EC2 instances will only receive inbound traffic from our ALB, all other inbound traffic will be denied.&lt;/li&gt;
&lt;li&gt;An Amazon CloudFront distribution is sending traffic to our ALB. This is the first point of entry for the internet traffic.&lt;/li&gt;
&lt;li&gt;The ALB SG is configured to allow traffic only from the CloudFront &lt;code&gt;prefixes&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Our CloudFront distribution is protected by Amazon Web Application Firewall(WAF), which blocks all commonly known security vulnerabilities.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Problem
&lt;/h2&gt;

&lt;p&gt;How would you rate the above architecture?&lt;/p&gt;

&lt;p&gt;Are you able to spot the security flaw?&lt;/p&gt;

&lt;p&gt;No?&lt;/p&gt;

&lt;p&gt;Need a hint?&lt;/p&gt;

&lt;p&gt;The issue lies somewhere here:&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%2Fdfrk2wrrebpy7ngm01pg.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%2Fdfrk2wrrebpy7ngm01pg.png" alt="Image description" width="421" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If your answer is still &lt;code&gt;No&lt;/code&gt;, do not worry! A vast majority of people probably won't be able to spot the security flaw!&lt;/p&gt;

&lt;p&gt;So what exactly is the issue here?&lt;/p&gt;

&lt;p&gt;Let me demonstrate.&lt;/p&gt;

&lt;p&gt;We already have a CloudFront distribution sending traffic to our ALB.&lt;/p&gt;

&lt;p&gt;What happens if I create another CloudFront distribution having the same Application Load Balancer as &lt;code&gt;Origin&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;Let's check!&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%2Fb73eny2zvh84zp1wvoy6.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%2Fb73eny2zvh84zp1wvoy6.png" alt="Image description" width="800" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yes! The traffic goes through!&lt;/p&gt;

&lt;p&gt;But why?&lt;/p&gt;

&lt;p&gt;Understand that incoming traffic to our Application load balancer is allowed for all the CloudFront prefixes.&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%2F3dvfs0xtkq2niqddtd14.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%2F3dvfs0xtkq2niqddtd14.png" alt="Image description" width="800" height="128"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is because CloudFront does not have one single I.P address, rather a range of I.P addresses, and those too change frequently.&lt;br&gt;
To make this management easier, AWS introduced a &lt;a href="https://aws.amazon.com/blogs/networking-and-content-delivery/limit-access-to-your-origins-using-the-aws-managed-prefix-list-for-amazon-cloudfront/" rel="noopener noreferrer"&gt;prefix list&lt;/a&gt; which we have configured as the &lt;code&gt;source&lt;/code&gt; in our ALB Security Group.&lt;/p&gt;

&lt;p&gt;This is the problem!&lt;/p&gt;

&lt;p&gt;We want &lt;strong&gt;only our CloudFront distribution&lt;/strong&gt; to be able to send traffic to our ALB, and NO other.&lt;/p&gt;

&lt;p&gt;So how do we fix this?&lt;/p&gt;

&lt;p&gt;Good news - This can be achieved by making two small changes to our existing configuration!&lt;/p&gt;

&lt;h2&gt;
  
  
  Proposed Architecture
&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%2Fiil502p150wze7qbk26t.jpg" 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%2Fiil502p150wze7qbk26t.jpg" alt="Image description" width="800" height="718"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;1) Our ALB should be able to identify which CloudFront distribution is the correct one - for this we will update our CloudFront distribution to send some additional &lt;code&gt;custom headers&lt;/code&gt; while sending the request to the ALB.&lt;/p&gt;

&lt;p&gt;2) Traffic from all other CloudFront distributions (which can be within our account or some alien account) to be &lt;strong&gt;blocked&lt;/strong&gt; - for this we will add a Web Application Firewall rule, with the default action as &lt;code&gt;block&lt;/code&gt;, and only &lt;code&gt;allow&lt;/code&gt; traffic after checking the request headers!&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost Warning:
&lt;/h2&gt;

&lt;p&gt;Proceed with caution!&lt;br&gt;
AWS WAF is not covered under the AWS free-tier.&lt;br&gt;
Charges are based on the following factors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Number of web ACLs created.&lt;/li&gt;
&lt;li&gt;Number  of rules configured for each web ACL.&lt;/li&gt;
&lt;li&gt;Number of web requests received.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Refer WAF pricing details &lt;a href="https://aws.amazon.com/waf/pricing/" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation:
&lt;/h2&gt;

&lt;p&gt;Step-1:&lt;/p&gt;

&lt;p&gt;Let us update our CloudFront distribution to send custom headers.&lt;/p&gt;

&lt;p&gt;Navigate to your distribution, and under the &lt;code&gt;Origins&lt;/code&gt; tab, select the ALB, and click &lt;code&gt;Edit&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvznr0xt9hy1ht6udis2z.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%2Fvznr0xt9hy1ht6udis2z.png" alt="Image description" width="800" height="193"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Scroll down to reach the &lt;code&gt;Add custom headers&lt;/code&gt; section, and click &lt;code&gt;Add header&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcghs4ir4ifole19h4hkz.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%2Fcghs4ir4ifole19h4hkz.png" alt="Image description" width="800" height="594"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here, we can add any custom HTTP header of our choice. Refer the &lt;a href="https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/add-origin-custom-headers.html" rel="noopener noreferrer"&gt;list&lt;/a&gt; before making your choice. I am selecting &lt;code&gt;x-origin-verify&lt;/code&gt; for the demo, it can be anything else, the possibilities are endless, you can choose one as per your architecture (eg: authentication, source i.p address etc.)&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%2Fd7c0asgdau99d1lsb2o9.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%2Fd7c0asgdau99d1lsb2o9.png" alt="Image description" width="800" height="130"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add the header and &lt;code&gt;save&lt;/code&gt;. The distribution will take a few minutes to update.&lt;/p&gt;

&lt;p&gt;Step-2:&lt;br&gt;
Let's create the WAF rule.&lt;/p&gt;

&lt;p&gt;Navigate to &lt;code&gt;WAF &amp;amp; Shield&lt;/code&gt; from the hamburger menu.&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%2F8ovjnpa49yxzgq6fn9fp.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%2F8ovjnpa49yxzgq6fn9fp.png" alt="Image description" width="800" height="247"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;code&gt;Create web ACL&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Select &lt;code&gt;Regional Resources&lt;/code&gt; and the region in which your &lt;code&gt;Application Load Balancer&lt;/code&gt; is based. Also give the web ACL a name. Click &lt;code&gt;Next&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxdddlyrkblaiyjvd2aol.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%2Fxdddlyrkblaiyjvd2aol.png" alt="Image description" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the &lt;code&gt;Associated AWS resources&lt;/code&gt;, we will add our ALB. Click &lt;code&gt;Add AWS resources&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy7p8mhmmbcqx36x6r4sn.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%2Fy7p8mhmmbcqx36x6r4sn.png" alt="Image description" width="800" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select the &lt;code&gt;Application Load Balancer&lt;/code&gt; radio button. If you created the rule in the same region as the ALB, you should be able to see your ALB name populate in the &lt;code&gt;Resources&lt;/code&gt; section. Select the relevant ALB from the list.&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%2F0w1h4ttq033etg4r95cj.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%2F0w1h4ttq033etg4r95cj.png" alt="Image description" width="800" height="581"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the next screen, from the &lt;code&gt;Add rules&lt;/code&gt; dropdown, select &lt;code&gt;My own rules and rule groups&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fur0doyu6yoo30mqabrie.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%2Fur0doyu6yoo30mqabrie.png" alt="Image description" width="800" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select &lt;code&gt;Rule builder&lt;/code&gt;.&lt;br&gt;
Give the WAF rule a meaningful name, and select type as &lt;code&gt;Regular rule&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3gskp1ziwta1j1na10hk.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%2F3gskp1ziwta1j1na10hk.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's create our custom rule. &lt;br&gt;
First we select &lt;code&gt;matches the statement&lt;/code&gt;, and then base our scenario on it.&lt;/p&gt;

&lt;p&gt;From the &lt;code&gt;Inspect&lt;/code&gt; dropdown select &lt;code&gt;Single Header&lt;/code&gt; and for the &lt;code&gt;Header field&lt;/code&gt; type &lt;code&gt;x-origin-verify&lt;/code&gt;, because we want to allow traffic only for the web request with the header we configured in our CloudFront distribution.&lt;/p&gt;

&lt;p&gt;Next, select &lt;code&gt;Exactly matches string&lt;/code&gt; for the &lt;code&gt;Match type&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;String to match&lt;/code&gt; will be the string we are passing as custom header from our CloudFront distribution &lt;code&gt;originsTest&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;We can optionally also perform some &lt;code&gt;Text Transformation&lt;/code&gt;, which is not in scope of this blog.&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%2F2d096bb6hii9wqzwrr3i.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%2F2d096bb6hii9wqzwrr3i.png" alt="Image description" width="800" height="570"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We continue defining our rule.&lt;br&gt;
From the &lt;code&gt;Action&lt;/code&gt; dropdown select the action that will be performed if the criteria we defined above is met. &lt;code&gt;Allow&lt;/code&gt;.&lt;br&gt;
Click &lt;code&gt;Add rule&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdq9fpkw4zkrkjxhghbr1.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%2Fdq9fpkw4zkrkjxhghbr1.png" alt="Image description" width="800" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A recently added feature show us how many &lt;code&gt;capacity units&lt;/code&gt; will be used by the defined rule.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Select the &lt;code&gt;Default&lt;/code&gt; action which will be performed for &lt;em&gt;all requests that do not match our criteria&lt;/em&gt;&lt;br&gt;
We choose &lt;code&gt;Block&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5jm84agl9s0gbyveqnh0.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%2F5jm84agl9s0gbyveqnh0.png" alt="Image description" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the next screen, select your rule and click &lt;code&gt;Next&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frg8lpq1tphq31q4rzgvm.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%2Frg8lpq1tphq31q4rzgvm.png" alt="Image description" width="800" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can choose to enable CloudWatch metrics to view the rule in action.&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%2F4nejp55o4qxw1viry8z1.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%2F4nejp55o4qxw1viry8z1.png" alt="Image description" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Review your configuration and click &lt;code&gt;Create&lt;/code&gt;. This may take a few minutes to complete, post which a &lt;code&gt;Successful&lt;/code&gt; message will pop up on the screen.&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%2Fewqp2anx8blri01g0k4k.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%2Fewqp2anx8blri01g0k4k.png" alt="Image description" width="513" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our WAF rule is active now!&lt;br&gt;
Let's put it to the test!&lt;/p&gt;

&lt;p&gt;Try accessing the application from your original CloudFront distribution.&lt;br&gt;
Does the traffic go through?&lt;br&gt;
Yes! It does!&lt;/p&gt;

&lt;p&gt;Now try accessing the CloudFront distribution we created without the custom headers.&lt;br&gt;
We are no longer able to access the web application through this distribution, meaning that our WAF ACL is working perfectly!&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%2Fecc6iomzlqngmhr2cjny.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%2Fecc6iomzlqngmhr2cjny.png" alt="Image description" width="800" height="237"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As the last step of our verification, let's go back to our WAF ACL, and check the &lt;code&gt;Sampled request&lt;/code&gt; tab.&lt;br&gt;
All the requests that were inspected by this WAF ACL will be displayed here, along with the associated action.&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%2Fs65k99hgiejv1icgsxaf.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%2Fs65k99hgiejv1icgsxaf.png" alt="Image description" width="800" height="351"&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%2F6ab1ahd83r0rwbodd40e.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%2F6ab1ahd83r0rwbodd40e.png" alt="Image description" width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;In this blog we walked through a very common web architecture and uncovered the underlying security flaw. We then proceeded to make a minor tweak in the existing flow which changed our security game altogether! The current state is not the perfect architecture and can be modified in a number of ways to improve our security posture even further.&lt;br&gt;
Amazon WAF offers many other features which were not in scope of this blog.&lt;/p&gt;

&lt;h2&gt;
  
  
  References:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2024/11/amazon-cloudfront-charges-requests-blocked-aws-waf/#:~:text=Amazon%20CloudFront%20no%20longer%20charges%20for%20requests%20blocked%20by%20AWS%20WAF,-Posted%20on%3A%20Nov&amp;amp;text=Effective%20October%2025%2C%202024%2C%20all,requests%20blocked%20by%20AWS%20WAF" rel="noopener noreferrer"&gt;Amazon WAF pricing announcement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/add-origin-custom-headers.html" rel="noopener noreferrer"&gt;Custom headers to origin requests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/HowToUpdateDistribution.html" rel="noopener noreferrer"&gt;Updating CloudFront distributions&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>aws</category>
      <category>security</category>
      <category>cloudcomputing</category>
    </item>
    <item>
      <title>Dr. Swami Sivasubramanian's Keynote - under 5 minutes</title>
      <dc:creator>Tanushree Aggarwal</dc:creator>
      <pubDate>Wed, 04 Dec 2024 18:35:04 +0000</pubDate>
      <link>https://dev.to/aws-builders/dr-swami-sivasubramanians-keynote-under-5-minutes-cg6</link>
      <guid>https://dev.to/aws-builders/dr-swami-sivasubramanians-keynote-under-5-minutes-cg6</guid>
      <description>&lt;p&gt;A quick summary of Dr. Swami Sivasubramanian's keynote at AWS Re:Invent Day 4.&lt;/p&gt;

&lt;p&gt;Dr. Swami Sivasubramanian, VP of AI and Data at AWS talked about&lt;br&gt;
how the use of strong data foundation can help create innovative and differentiated customer solutions.&lt;/p&gt;

&lt;p&gt;Customer speakers delved into how they have used data to support a variety of use cases, including generative AI, to create unique customer experiences.&lt;/p&gt;

&lt;p&gt;Here are the key takeaways from the keynote:&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon SageMaker HyperPod Flexible Training Plans
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Efficiently distribute and parallelize your training workload across all accelerators.&lt;/li&gt;
&lt;li&gt;Save weeks of training time and help meet timelines and budgets&lt;/li&gt;
&lt;li&gt;Remove manual provisioning of compute capacity&lt;/li&gt;
&lt;li&gt;Quickly create training plan, save weeks of training&lt;/li&gt;
&lt;li&gt;Now Generally Available&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-sagemaker-hyperpod-flexible-training-plans/" rel="noopener noreferrer"&gt;https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-sagemaker-hyperpod-flexible-training-plans/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon SageMaker HyperPod task governance
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Centralized governance across all generative AI development tasks&lt;/li&gt;
&lt;li&gt;Optimize accelerator utilization for model training, fine tuning and inference&lt;/li&gt;
&lt;li&gt;Up to 40% cost reduction&lt;/li&gt;
&lt;li&gt;Dynamically allocate accelerator compute resources across tasks&lt;/li&gt;
&lt;li&gt;Ensure high priority tasks are completed on time&lt;/li&gt;
&lt;li&gt;Monitor and audit compute allocation and utilization in real time&lt;/li&gt;
&lt;li&gt;Now Generally Available&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2024/12/task-governance-amazon-sagemaker-hyperpod/" rel="noopener noreferrer"&gt;https://aws.amazon.com/about-aws/whats-new/2024/12/task-governance-amazon-sagemaker-hyperpod/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  AI apps from AWS partners now available in Amazon SageMaker AI
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Enables customers to easily discover, deploy, and use best-in-class machine learning (ML) and generative AI (GenAI) &lt;/li&gt;
&lt;li&gt;Find, deploy and use AI apps from AWS partners within AWS SageMaker&lt;/li&gt;
&lt;li&gt;Use 3rd party specialized applications at various ML lifecycle stages&lt;/li&gt;
&lt;li&gt;Fully managed AWS experience with no infrastructure to provision or operate&lt;/li&gt;
&lt;li&gt;Data does not leave your AaageMaker development environment&lt;/li&gt;
&lt;li&gt;Support for Comet, Fiddler, Deepchecks, Lakera&lt;/li&gt;
&lt;li&gt;Support for more 3rd party apps coming soon&lt;/li&gt;
&lt;li&gt;Now Generally Available&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-sagemaker-partner-ai-apps/" rel="noopener noreferrer"&gt;https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-sagemaker-partner-ai-apps/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Poolside coming to Amazon Bedrock early next year
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Hottest startup providing Software engineering AI for large enterprises&lt;/li&gt;
&lt;li&gt;Poolside assistants &lt;code&gt;malibu&lt;/code&gt; (tackles complex software engineering challenges) and &lt;code&gt;point&lt;/code&gt; (low latency code completion predictions for developers) - coming soon to AWS!&lt;/li&gt;
&lt;li&gt;AWS first cloud provider to provide access to Poolside&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Stability AI's &lt;code&gt;Stable Diffusion 3.5&lt;/code&gt; coming soon to Amazon Bedrock
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Generate stunning, high-quality images from text descriptions&lt;/li&gt;
&lt;li&gt;Accelerate concept art creation, visual effects, prototyping and detailed product imagery&lt;/li&gt;
&lt;li&gt;High quality AI image generation. easily deployable art scale&lt;/li&gt;
&lt;li&gt;Trained on Amazon SageMaker HyperPod&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Luma AI coming soon to Amazon Bedrock
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Hyper fast creation time for high quality video generation from text and images&lt;/li&gt;
&lt;li&gt;Experiment with fluid, cinematic and naturalistic camera motions&lt;/li&gt;
&lt;li&gt;Amazon Bedrock first cloud provider to get access to the latest Luma model - &lt;code&gt;Luma Ray2&lt;/code&gt;, a high quality text-to-image and text-to-video generation model&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Announcing Amazon Bedrock Marketplace
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Access to more than 100 models from leading providers, in a single unified console experience in Amazon Bedrock&lt;/li&gt;
&lt;li&gt;Deploy models on managed endpoints with custom scaling policies&lt;/li&gt;
&lt;li&gt;Leverage Bedrock APIs to integration &lt;/li&gt;
&lt;li&gt;Now Generally Available&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-bedrock-marketplace-100-models-bedrock/" rel="noopener noreferrer"&gt;https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-bedrock-marketplace-100-models-bedrock/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon Bedrock supports prompt caching
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Lower response latency and decrease cost by caching infrequently used prompts&lt;/li&gt;
&lt;li&gt;Reduce costs by up to 90% and latency by up to 85% for supported models&lt;/li&gt;
&lt;li&gt;Available in Preview&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-bedrock-preview-prompt-caching/" rel="noopener noreferrer"&gt;https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-bedrock-preview-prompt-caching/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon Bedrock Intelligent Prompt Routing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Define your cost and latency thresholds and Bedrock will route prompts to best suited model&lt;/li&gt;
&lt;li&gt;Available in Preview&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Amazon Kendra Generative AI Index
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Out of the box vector index

&lt;ul&gt;
&lt;li&gt;Supporting connectors for 40+ enterprise data sources (like SharePoint, OneDrive, Salesforce) with Amazon Bedrock knowledge bases&lt;/li&gt;
&lt;li&gt;Kendra GenAI Index supports mobility across AWS generative AI services like Amazon Bedrock Knowledge Base and Amazon Q Business,&lt;/li&gt;
&lt;li&gt;Available in Preview&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2024/12/genai-index-amazon-kendra/" rel="noopener noreferrer"&gt;https://aws.amazon.com/about-aws/whats-new/2024/12/genai-index-amazon-kendra/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon Bedrock Knowledge Bases supports structured data retrieval
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;- Fully managed RAG that supports relational queries natively&lt;/li&gt;
&lt;li&gt;Seamlessly integrate structured data for RAG&lt;/li&gt;
&lt;li&gt;Use data stored in amazon SageMaker Lakehouse, newly released S3 Tables and Redshift&lt;/li&gt;
&lt;li&gt;Bedrock KBs can transform natural language queries into SQL queries, allowing users to retrieve data directly from the source without the need to move or preprocess the data, reducing development time from months to days&lt;/li&gt;
&lt;li&gt;Improve accuracy of queries with customized content&lt;/li&gt;
&lt;li&gt;Available in Preview&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-bedrock-knowledge-bases-structured-data-retrieval/" rel="noopener noreferrer"&gt;https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-bedrock-knowledge-bases-structured-data-retrieval/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon Bedrock Knowledge Bases now supports GraphRAG
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Generate more relevant responses for gen AI apps using KBs&lt;/li&gt;
&lt;li&gt;Auto generation of knowledge graphs (using Amazon Neptune) to link relationships across data sources&lt;/li&gt;
&lt;li&gt;Enables building more comprehensive and explainable gen AI apps&lt;/li&gt;
&lt;li&gt;More accurate responses through a single API&lt;/li&gt;
&lt;li&gt;Available in Preview&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-bedrock-knowledge-bases-graphrag-preview/" rel="noopener noreferrer"&gt;https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-bedrock-knowledge-bases-graphrag-preview/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon Bedrock Data Automation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GenAI ETL &lt;/li&gt;
&lt;li&gt;Transform unstructured multimodal data for gen AI apps and analytics&lt;/li&gt;
&lt;li&gt;Extract, transform and generate structured data from multi-modal content&lt;/li&gt;
&lt;li&gt;Generates customized outputs based on rules&lt;/li&gt;
&lt;li&gt;Fully managed, single API experience&lt;/li&gt;
&lt;li&gt;No coding required&lt;/li&gt;
&lt;li&gt;Prevents risks of hallucinations&lt;/li&gt;
&lt;li&gt;Available in Preview&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-bedrock-data-automation-available-preview/" rel="noopener noreferrer"&gt;https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-bedrock-data-automation-available-preview/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon Bedrock Guardrails Multimodal Toxicity Detection
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Configure safeguards for image content&lt;/li&gt;
&lt;li&gt;Enhance security of multimodal gen AI apps&lt;/li&gt;
&lt;li&gt;Enable consistent policy control&lt;/li&gt;
&lt;li&gt;Available to all models within amazon Bedrock that support image content, including fine-tuned models&lt;/li&gt;
&lt;li&gt;Available in Preview&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-bedrock-guardrails-multimodal-toxicity-detection-image-content-preview/" rel="noopener noreferrer"&gt;https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-bedrock-guardrails-multimodal-toxicity-detection-image-content-preview/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon Q Developer is now available in SageMaker Canvas
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Develop machine learning models in natural language, without a single line of Python code&lt;/li&gt;
&lt;li&gt;Q Developer will break down your objective into specific ML tasks, define problem and apply data preparation techniques on the data&lt;/li&gt;
&lt;li&gt;Available in Preview&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-q-developer-guide-sagemaker-canvas-users-ml-development/" rel="noopener noreferrer"&gt;https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-q-developer-guide-sagemaker-canvas-users-ml-development/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon Q in QuickSight Scenarios
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Run scenario analysis to help users find answers to complex problems easily &lt;/li&gt;
&lt;li&gt;Ask Q questions about complex business problems using natural language!&lt;/li&gt;
&lt;li&gt;Q automatically finds relevant data and suggests analysis&lt;/li&gt;
&lt;li&gt;10x faster analysis than spreadsheets&lt;/li&gt;
&lt;li&gt;Accessible from any Amazon QuickSight dashboard&lt;/li&gt;
&lt;li&gt;Available in Preview&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2024/12/scenario-analysis-capability-amazon-q-quicksight-preview/" rel="noopener noreferrer"&gt;https://aws.amazon.com/about-aws/whats-new/2024/12/scenario-analysis-capability-amazon-q-quicksight-preview/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS Education literacy initiative
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt; Five year commitment of cloud technology and technical support for organizations creating digital learning solutions&lt;/li&gt;
&lt;li&gt;Empowering organizations to educate underprivileged learners globally through cloud computing&lt;/li&gt;
&lt;li&gt;Up to $100 million commitment of AWS cloud credits, over the next 5 years, along with support from AWS experts for training&lt;/li&gt;
&lt;li&gt;Deepen existing partnership with &lt;code&gt;code.org&lt;/code&gt; for providing learning platform&lt;/li&gt;
&lt;li&gt;New partnership with &lt;code&gt;Rocket Learning&lt;/code&gt; - an organization supporting more than 3 million children in India&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2024/12/aws-education-equity-boost-education-underserved-learners/" rel="noopener noreferrer"&gt;https://aws.amazon.com/about-aws/whats-new/2024/12/aws-education-equity-boost-education-underserved-learners/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's all for today! &lt;br&gt;
Hope you enjoyed this summary! Which announcement is your favorite? &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: No AI was used in the creation of this blog. &lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>aws</category>
      <category>techtalks</category>
      <category>cloud</category>
      <category>ai</category>
    </item>
    <item>
      <title>CEO Keynote with Matt Garman - under 5 minutes</title>
      <dc:creator>Tanushree Aggarwal</dc:creator>
      <pubDate>Tue, 03 Dec 2024 19:37:28 +0000</pubDate>
      <link>https://dev.to/aws-builders/ceo-keynote-with-matt-garman-under-5-minutes-1m3c</link>
      <guid>https://dev.to/aws-builders/ceo-keynote-with-matt-garman-under-5-minutes-1m3c</guid>
      <description>&lt;h2&gt;
  
  
  General Announcements
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Billion dollars in credits announced for Startups!
&lt;/h3&gt;

&lt;h2&gt;
  
  
  Compute
&lt;/h2&gt;

&lt;h3&gt;
  
  
  NVIDIA P6 family of instances
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Featuring NVIDIA Blackwell chips&lt;/li&gt;
&lt;li&gt;Offering 25 times faster compute&lt;/li&gt;
&lt;li&gt;Availability : early next year&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Amazon EC2 Trainium 2 (TRM2) Instances Generally Available
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;TRM2 announced in Re:Invent2023 is now in GA!&lt;/li&gt;
&lt;li&gt;Next generation Trainium instances, powered by Trainium2&lt;/li&gt;
&lt;li&gt;offers best price performance for GenAI on AWS&lt;/li&gt;
&lt;li&gt;Custom built processors by AWS for GenAI&lt;/li&gt;
&lt;li&gt;Up to 30-40% better price performance than current generation GPU-based instances&lt;/li&gt;
&lt;li&gt;16 Trainium2 chips&lt;/li&gt;
&lt;li&gt;Up to 20.8 FB8 petaflops from a single compute&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  EC2 TRM2 Ultra Server
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Connects 4 Trainium2 instances&lt;/li&gt;
&lt;li&gt;Single Ultra node will offer over 83 petaflops of compute!&lt;/li&gt;
&lt;li&gt;Expected to create material impact on model training clusters &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Trainium 3 (TRM3)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Available later next year&lt;/li&gt;
&lt;li&gt;2x more performance&lt;/li&gt;
&lt;li&gt;40% more efficient&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Storage
&lt;/h2&gt;

&lt;h3&gt;
  
  
  New bucket type S3 Table Buckets
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Now in General Availability&lt;/li&gt;
&lt;li&gt;Tabular data in the cloud&lt;/li&gt;
&lt;li&gt;Up to 3 times faster query performance&lt;/li&gt;
&lt;li&gt;Up to 10 times higher transactions per second for Apache Iceberg tables - Supporting automated table events&lt;/li&gt;
&lt;li&gt;S3 manages removal of unreferenced files&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Faster Metadata management in S3, announcing S3 Metadata
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Now available in Preview&lt;/li&gt;
&lt;li&gt;Fastest and easiest way to manage metadata in S3&lt;/li&gt;
&lt;li&gt;S3 automatically updates object metadata in Iceberg tables&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Database
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Celebrating 10 years of Amazon Aurora
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;was announced at Re:Invent 10 years ago&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Announcing Amazon Aroura DSQL
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Now available in Preview&lt;/li&gt;
&lt;li&gt;Fastest distributed SQL database&lt;/li&gt;
&lt;li&gt;Low latency read-writes&lt;/li&gt;
&lt;li&gt;Virtually unlimited scalability, and scales down to Zero&lt;/li&gt;
&lt;li&gt;4x faster read-writes compared to Google Spanner&lt;/li&gt;
&lt;li&gt;Fully managed&lt;/li&gt;
&lt;li&gt;99.999% multi-region availability&lt;/li&gt;
&lt;li&gt;Strong consistency&lt;/li&gt;
&lt;li&gt;PostgreSQL compatible&lt;/li&gt;
&lt;li&gt;Amazon DynamoDB Global Tables&lt;/li&gt;
&lt;li&gt;Also supporting multi-region strong consistency&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Artificial Intelligence
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Amazon Bedrock Model Distillation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Create faster and more effective models&lt;/li&gt;
&lt;li&gt;Send sample prompt from you application and Bedrock will do all the work for you&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transfer knowledge from a complex model to a small one with ease!&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Distilled models are 500% times faster , 75% less expensive&lt;/li&gt;
&lt;li&gt;Available in preview&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Amazon Bedrock Automated Reasoning Checks
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fev70ytl7kjo4ilb8ipyu.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%2Fev70ytl7kjo4ilb8ipyu.png" alt="Image description" width="800" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reasoning system in Amazon Bedrock&lt;/li&gt;
&lt;li&gt;Automated checks&lt;/li&gt;
&lt;li&gt;If model thinks that the answer is not correct, it sends back asking for more prompts&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Amazon Bedrock Multi Agent Collaboration
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Easily build, deploy and orchestrate teams of agents that work together to handle complex, multi-step tasks&lt;/li&gt;
&lt;li&gt;Orchestrate agents without complex coding&lt;/li&gt;
&lt;li&gt;Agents work in parallel, accelerating tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Tune into Swami's keynote tomorrow for more Bedrock announcements!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Announcements from Amazon
&lt;/h3&gt;

&lt;p&gt;Andy Jassy surprised us with 6 new Amazon Frontier models that will be available within Amazon Bedrock!&lt;/p&gt;

&lt;h4&gt;
  
  
  Amazon Nova
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;State of the art foundation models that deliver frontier intelligence &lt;/li&gt;
&lt;li&gt;Offering industry leading price performance&lt;/li&gt;
&lt;li&gt;Comes in 4 flavors - one text and three multimodal models.&lt;/li&gt;
&lt;li&gt;75% more cost effective&lt;/li&gt;
&lt;li&gt;Fasted models in their respective intelligence classes in Bedrock&lt;/li&gt;
&lt;li&gt;Support fine-tuning to boost accuracy&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deep Integration with Bedrock Knowledge Bases for RAG&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;Optimized for proprietary applications that require interaction through APIs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration with just announced Amazon Bedrock Distillation&lt;/strong&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;i) &lt;strong&gt;Amazon Nova Micro&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Text based &lt;/li&gt;
&lt;li&gt;Performance benchmarks equal or better than Llama and Gemini models&lt;/li&gt;
&lt;li&gt;Now Generally available&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ii) &lt;strong&gt;Amazon Nova Lite&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Very low-cost multimodal model&lt;/li&gt;
&lt;li&gt;Lightening fast for processing image, video and text inputs&lt;/li&gt;
&lt;li&gt;Now Generally available&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;iii) &lt;strong&gt;Amazon Nova Pro&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Highly capable multimodal model &lt;/li&gt;
&lt;li&gt;Offers best combination of accuracy, speed and cost for wide range of tasks&lt;/li&gt;
&lt;li&gt;Now Generally available&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;iv) &lt;strong&gt;Amazon Nova Premier&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Coming in Q1 2025&lt;/li&gt;
&lt;li&gt;Most capable multimodal model for complex reasoning tasks&lt;/li&gt;
&lt;li&gt;best teacher for distilling custom models&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Amazon Canvas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;State of the art image generation model&lt;/li&gt;
&lt;li&gt;Now Generally available&lt;/li&gt;
&lt;li&gt;Edit images with NLP text prompts&lt;/li&gt;
&lt;li&gt;Offers control for color scheme and layout&lt;/li&gt;
&lt;li&gt;Built-in controls for responsible AI&lt;/li&gt;
&lt;li&gt;Watermarking for traceability and content moderation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Amazon Nova Real
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Now Generally available&lt;/li&gt;
&lt;li&gt;State of the art video generation model&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Amazon Nova Reel - coming soon
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;State of the art video generation model&lt;/li&gt;
&lt;li&gt;Now Generally available&lt;/li&gt;
&lt;li&gt;Offers full camera control - ranging from 360 degree rotation to zoom&lt;/li&gt;
&lt;li&gt;Built-in safe AI features&lt;/li&gt;
&lt;li&gt;Launched with 6 second videos&lt;/li&gt;
&lt;li&gt;Will support up to 2 minute videos in the next few months&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Sneak Peak&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Amazon Nova Speech-to-Speech&lt;/strong&gt; - speech to speech model, expected mid next year&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Amazon Nova Any-to-Any&lt;/strong&gt; - any-to-any model, expected mid next year&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  AI for Development
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Amazon Q
&lt;/h3&gt;

&lt;p&gt;Three new autonomous agents for Amazon Q, giving back developers valuable time!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon Q develops and applies unit tests  - available in GA&lt;/li&gt;
&lt;li&gt;Use Amazon Q to create new accurate documentation – for new code or legacy code!  - available in GA&lt;/li&gt;
&lt;li&gt;Use Amazon Q to automatic code review, flag suspicious code packages - available in GA&lt;/li&gt;
&lt;li&gt;After Slack, AWS Console and VSCode integration, now &lt;strong&gt;deep integration with GitLab&lt;/strong&gt; - native support for GitLab Duo workflows! - Available in Preview&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Amazon Q Developer for .NET
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Modernizing Windows gets easier with Amazon Q Developer&lt;/li&gt;
&lt;li&gt;Transform Windows to Linux in a fraction of time, 4x faster!&lt;/li&gt;
&lt;li&gt;Agents support transforming hundreds of apps in parallel&lt;/li&gt;
&lt;li&gt;Cost reduction by 40%&lt;/li&gt;
&lt;li&gt;Available in Preview&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Amazon Q Developer for VMWare
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Modernize VMWare workloads using Amazon Q&lt;/li&gt;
&lt;li&gt;Agents identify dependencies and transform network configs&lt;/li&gt;
&lt;li&gt;Launches agents that can convert on-prem code to Cloud equivalent&lt;/li&gt;
&lt;li&gt;Available in Preview&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Amazon Q Developer for Mainframes
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Q accelerates migration from mainframe to Cloud&lt;/li&gt;
&lt;li&gt;Available in Preview&lt;/li&gt;
&lt;li&gt;Offers code analysis, refactor applications&lt;/li&gt;
&lt;li&gt;Takes legacy code and builds documentation&lt;/li&gt;
&lt;li&gt;Available in Preview&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Operations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Amazon Q Developer (for operations)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Investigate issues across AWS environment in a fraction of time&lt;/li&gt;
&lt;li&gt;Provides guided workflows for investigating issues, by looking at CloudWatch and CloudTrail logs; checks for anomalies (eg: missing IAM permissions)&lt;/li&gt;
&lt;li&gt;Offers possible remediations by referring runbooks and documentation&lt;/li&gt;
&lt;li&gt;Available in Preview&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  PagerDuty Advance with Amazon Q
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;In partnership with PagerDuty&lt;/li&gt;
&lt;li&gt;Offers unified user experience&lt;/li&gt;
&lt;li&gt;Built using Amazon Bedrock and Claude&lt;/li&gt;
&lt;li&gt;Leverages Amazon Bedrock Guardrails&lt;/li&gt;
&lt;li&gt;In addition to resolving issues caused by AI, help reinforce responsible AI policies&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Business Intelligence
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Combining QuickSight and Amazon Q Business Data
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Pull salesforce data into QuickSight &lt;/li&gt;
&lt;li&gt;More powerful than an ordinary BI tool&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ISV integration with Amazon Q index
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;New set of APIs for ISVs to use with Amazon Q index&lt;/li&gt;
&lt;li&gt;Easily access data from multiple applications&lt;/li&gt;
&lt;li&gt;You control permissions to your data&lt;/li&gt;
&lt;li&gt;Better security with a single index&lt;/li&gt;
&lt;li&gt;Now Generally Available&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Amazon Q Business for automating complex workflows
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Coming soon&lt;/li&gt;
&lt;li&gt;Automatically build workflows based on documentation or recordings!&lt;/li&gt;
&lt;li&gt;Navigate workflow changes in real time&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AI in Analytics
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;Next Gen of Amazon SageMaker&lt;/li&gt;
&lt;li&gt;Integrate with most comprehensive set of AI tools&lt;/li&gt;
&lt;li&gt;Offers single view of enterprise data&lt;/li&gt;
&lt;li&gt;Consolidates functionality data scientists and analysts, ML experts use&lt;/li&gt;
&lt;li&gt;Create, share projects that use AI&lt;/li&gt;
&lt;li&gt;Integrated data catalog and governance controls&lt;/li&gt;
&lt;li&gt;Now in preview&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Zero ETL for applications
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Between Amazon Aurora, RDS for MySQL, DynamoDB, Redshift and third party SaaS apps&lt;/li&gt;
&lt;li&gt;Now In GA&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Amazon SageMaker Lakehouse
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Simplifies analytics and AI with an open, unified and secure data lake house&lt;/li&gt;
&lt;li&gt;Unifies access to data across S3, Amazon Redshift, SaaS and federated data sources&lt;/li&gt;
&lt;li&gt;Consistent fine grain access control for data governance&lt;/li&gt;
&lt;li&gt;Apache iceberg compatible lake house&lt;/li&gt;
&lt;li&gt;Access through unified studio or any 3rd party tool  which supports iceberg, using API&lt;/li&gt;
&lt;li&gt;Now Generally available&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Amazon SageMaker is now "Amazon SageMaker AI"
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;No AI was used in the creation of this blog. All information has been manually jotted down by the author during the livestream and published 10 minutes after the livestream ended. No official publications/documentation was referred before publishing this blog. In case you spot a wrong piece of information, please notify the author.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>aws</category>
      <category>reinvent</category>
      <category>techtalks</category>
      <category>cloudcomputing</category>
    </item>
    <item>
      <title>Amplify your web development speed with "AWS Amplify"</title>
      <dc:creator>Tanushree Aggarwal</dc:creator>
      <pubDate>Thu, 21 Nov 2024 07:50:06 +0000</pubDate>
      <link>https://dev.to/tanushree_aggarwal/amplify-your-web-development-speed-with-aws-amplify-48l</link>
      <guid>https://dev.to/tanushree_aggarwal/amplify-your-web-development-speed-with-aws-amplify-48l</guid>
      <description>&lt;h2&gt;
  
  
  Introduction:
&lt;/h2&gt;

&lt;p&gt;We live in the age of THE WEB. Knowing how to host a website is essential in today’s digital age. It empowers individuals and businesses to establish their online presence, share their ideas, and reach broader audiences. It provides full control over how your website operates, looks, and functions, allowing customization to suit personal or professional needs. To many, this may still seem like a daunting task. Gone are the days when you needed to rely on third parties or host your own web servers to be able to publish a website. In this blog I will be demonstrating a way to host a website, just with a few simple clicks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Services :
&lt;/h2&gt;

&lt;h3&gt;
  
  
  AWS &lt;a href="https://aws.amazon.com/amplify/?gclid=CjwKCAiAudG5BhAREiwAWMlSjHPuZNDpsYxoVWbvhw4GynUElFZRU648Fyn_o7OP_ySgqZzU9wF5ZRoCiIQQAvD_BwE&amp;amp;trk=a0465925-8003-4d68-bc59-c7cd4211829e&amp;amp;sc_channel=ps&amp;amp;ef_id=CjwKCAiAudG5BhAREiwAWMlSjHPuZNDpsYxoVWbvhw4GynUElFZRU648Fyn_o7OP_ySgqZzU9wF5ZRoCiIQQAvD_BwE:G:s&amp;amp;s_kwcid=AL!4422!3!647258140449!e!!g!!aws%20amplify!19621397201!145160425349" rel="noopener noreferrer"&gt;Amplify&lt;/a&gt;:
&lt;/h3&gt;

&lt;p&gt;AWS Amplify is everything you need to build web and mobile apps. Easy to start, easy to scale.&lt;br&gt;
If I had to describe AWS Amplify in 3 words, I would say "hosting made simple".&lt;br&gt;
Few reasons why you should make "AWS Amplify" your best friend: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;deploying application frontends with simple Git based workflows&lt;/li&gt;
&lt;li&gt;spinning up multiple environments by connecting branches from Git (or any other version control system)&lt;/li&gt;
&lt;li&gt;support for numerous languages, ranging  from Java to Typescript to React&lt;/li&gt;
&lt;li&gt;built-in CI/CD, eliminating the need for manual code updates/deployment&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Goal:
&lt;/h2&gt;

&lt;p&gt;In this demo, we will be deploying a website using a single AWS service &lt;code&gt;AWS Amplify&lt;/code&gt;, under five minutes and zero dollar spend! We will then modify the website code and see what kind of changes need to be performed to our deployment, in order to reflect the updated code.&lt;/p&gt;
&lt;h2&gt;
  
  
  Pre-requisites :
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;AWS IAM account (do not use root account) having:

&lt;ul&gt;
&lt;li&gt;admin privileges&lt;/li&gt;
&lt;li&gt;access to AWS Management Console&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;A Github (or any other VCS like Bitbucket) account&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Cost :
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;None (if you have an AWS free-tier eligible account). Check AWS Amplify pricing details &lt;a href="https://aws.amazon.com/amplify/pricing/?gclid=CjwKCAiAudG5BhAREiwAWMlSjBOYfneu3hFqVoOgkfscmzCLMBjLOJ6IgiKngxC0BjlXYeSlHWTXyRoCReMQAvD_BwE&amp;amp;trk=a0465925-8003-4d68-bc59-c7cd4211829e&amp;amp;sc_channel=ps&amp;amp;ef_id=CjwKCAiAudG5BhAREiwAWMlSjBOYfneu3hFqVoOgkfscmzCLMBjLOJ6IgiKngxC0BjlXYeSlHWTXyRoCReMQAvD_BwE:G:s&amp;amp;s_kwcid=AL!4422!3!647258140440!e!!g!!aws%20amplify%20pricing!19621397201!145160426149" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Implementation:
&lt;/h2&gt;

&lt;p&gt;Let's begin! &lt;/p&gt;

&lt;p&gt;Before we begin with the AWS bit, let us get our website code ready.&lt;/p&gt;

&lt;p&gt;This does not have to be a fancy website; our aim is to understand the integration, so we will be using a basic HTML file. You can of-course choose to go full Ninja if that is what you prefer!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Login to your Github account and create a new repository.&lt;/li&gt;
&lt;li&gt;Create your website homepage &lt;code&gt;index.html&lt;/code&gt; file. If you are not a HTML wizard (like me), do not panic! I have you covered here!
Simply &lt;code&gt;copy-paste&lt;/code&gt; the following code, and save it as &lt;code&gt;index.html&lt;/code&gt;. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Note: It is mandatory that you name the main file as &lt;code&gt;index.html&lt;/code&gt;.&lt;/strong&gt;&lt;br&gt;
AWS Amplify requires an &lt;code&gt;index.html&lt;/code&gt; file primarily because it acts as the entry point for a web application. &lt;/p&gt;

&lt;p&gt;Optionally save any &lt;code&gt;jpeg&lt;/code&gt; image with the name &lt;code&gt;welcome.jpg&lt;/code&gt; under the same path. (This is just for aesthetic, you can totally skip this step)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Hello World&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Arial&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#000000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#db3f30&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nt"&gt;h2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#da3728&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;300px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nl"&gt;margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Welcome to my AWS Amplify demo website&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"welcome.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Welcome Image"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We are now ready to host this static website using AWS Amplify.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Login to the AWS Management Console as an IAM user, and switch to the region of your choice. In this demo I will be using &lt;code&gt;eu-central-1&lt;/code&gt;, but you can choose one closer to your geographical location.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;From the &lt;code&gt;Services&lt;/code&gt; hamburger menu navigate to &lt;code&gt;AWS Amplify&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo9glos3pgqqwi9xxom99.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%2Fo9glos3pgqqwi9xxom99.png" alt="Image description" width="800" height="610"&gt;&lt;/a&gt;&lt;br&gt;
This will take you to the Amplify homepage.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzgrc4bf3gl9bdrxh5sxl.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%2Fzgrc4bf3gl9bdrxh5sxl.png" alt="Image description" width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;code&gt;Deploy an App&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4y81oj7hg1kmnlkljpi.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%2Fe4y81oj7hg1kmnlkljpi.png" alt="Image description" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Amplify supports integration with a number of Version Control Systems. Select your preferred tool, and click &lt;code&gt;Next&lt;/code&gt;. I will be working with &lt;code&gt;Github&lt;/code&gt; in this demo.&lt;br&gt;
Select &lt;code&gt;Github&lt;/code&gt; and click &lt;code&gt;Next&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frgzjp6os2x1mxmsfoev0.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%2Frgzjp6os2x1mxmsfoev0.png" alt="Image description" width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A pop-up appears on the screen. This may differ from the below screenshot, depending on which version control tool you chose at step-4. Verify your identify and &lt;code&gt;authorize AWS Amplify&lt;/code&gt; to access your VCS system.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8vwnv9goeylnfkwtsv22.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%2F8vwnv9goeylnfkwtsv22.png" alt="Image description" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Next, you will be prompted to select the &lt;code&gt;repositories&lt;/code&gt; you want &lt;code&gt;AWS Amplify&lt;/code&gt; to be able to access.&lt;br&gt;
Click &lt;code&gt;Only selected repositories&lt;/code&gt; and select the desired repository from the drop-down list.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8e6uhyeams52nk5qcd6k.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%2F8e6uhyeams52nk5qcd6k.png" alt="Image description" width="800" height="845"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: As per the security best practice &lt;code&gt;Principle of least privilege&lt;/code&gt;, it is advisable to select specific repositories, and avoid selecting the &lt;code&gt;All repositories&lt;/code&gt; option.&lt;br&gt;
Note: You may be prompted for a MFA code, if you have this security feature enabled for your Github account.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgl1fpdh403479d5bcizc.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%2Fgl1fpdh403479d5bcizc.png" alt="Image description" width="800" height="921"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you granted permissions to multiple repositories, select the relevant repo from the dropdown list at this stage. Additionally, select the &lt;code&gt;repo branch&lt;/code&gt; which has the code for the website. To reiterate, the &lt;code&gt;index.html&lt;/code&gt; needs to be at the repo landing path.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpbf171yn300ljdfmxttl.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%2Fpbf171yn300ljdfmxttl.png" alt="Image description" width="800" height="297"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Give the application a name, and click &lt;code&gt;Next&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flfwxgytsura0dh3ib7tw.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%2Flfwxgytsura0dh3ib7tw.png" alt="Image description" width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Review the details, and click &lt;code&gt;Save and deploy&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fneu1xu2yy4746l2syi0f.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%2Fneu1xu2yy4746l2syi0f.png" alt="Image description" width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now we wait! The deployment may take a few minutes to complete.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9pct7crls0v4xzvvuawr.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%2F9pct7crls0v4xzvvuawr.png" alt="Image description" width="800" height="480"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqlugezt3z3c1rpakupcw.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%2Fqlugezt3z3c1rpakupcw.png" alt="Image description" width="800" height="226"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once the deployment is complete, and you see the &lt;code&gt;deployed&lt;/code&gt; status on your screen, cross your fingers and click &lt;code&gt;Visit deployed URL&lt;/code&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa6taq5fsuw3mgxrw5cph.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%2Fa6taq5fsuw3mgxrw5cph.png" alt="Image description" width="800" height="224"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tada! our website is deployed!&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm84lj6k5efb4dfgpmd2z.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%2Fm84lj6k5efb4dfgpmd2z.png" alt="Image description" width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Impressed?&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus
&lt;/h2&gt;

&lt;p&gt;Hold on! Our demo does not end here!&lt;/p&gt;

&lt;p&gt;In the real world, we seldom deploy the complete website in the first attempt. Often any code goes through multiple iterations, before the final version.&lt;/p&gt;

&lt;p&gt;Suppose this is the case with our demo website as well. To publish the updated code, we do not need to repeat the whole process! &lt;br&gt;
&lt;code&gt;AWS Amplify&lt;/code&gt; is that one best friend, who notices even the slightest change in our mood and adapts accordingly! &lt;/p&gt;

&lt;p&gt;Confused? Let me demonstrate!&lt;/p&gt;

&lt;p&gt;Let us make some modifications to the&lt;code&gt;index.html&lt;/code&gt; in our github repo .&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I have simply added a new &lt;code&gt;h2&lt;/code&gt; to the &lt;code&gt;body&lt;/code&gt; section.&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;Welcome to my AWS Amplify demo website&amp;lt;/h1&amp;gt;
    &amp;lt;h2&amp;gt;Did you like my AWS Amplify demo?&amp;lt;/h2&amp;gt;
    &amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;
    &amp;lt;img src="welcome.jpg" alt="Welcome Image"&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As soon as I click &lt;code&gt;commit&lt;/code&gt; in my Github repo, &lt;code&gt;AWS Amplify&lt;/code&gt; detects the change, and starts a new deployment!&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%2F66a1gu4wx1josz662q03.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%2F66a1gu4wx1josz662q03.png" alt="Image description" width="800" height="242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open the deployment URL when the status changes to &lt;code&gt;deployed&lt;/code&gt;. This may take a few minutes to complete.&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%2Fdvf7nssy1ewo99in1syt.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%2Fdvf7nssy1ewo99in1syt.png" alt="Image description" width="800" height="232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our updated code is reflecting on our website! &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%2Ferxo327twqke3nueoexy.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%2Ferxo327twqke3nueoexy.png" alt="Image description" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This did not require any manual intervention or redeployment!&lt;/li&gt;
&lt;li&gt;The deployment URL remains unchanged after the update&lt;/li&gt;
&lt;li&gt;AND there was ZERO downtime during the upgrade!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you weren't impressed before, I am sure you are NOW!&lt;/p&gt;

&lt;p&gt;So, are you going to AWS Amplify a try? &lt;/p&gt;

&lt;p&gt;The capabilities of AWS Amplify do not end here. In fact, this was just the tip of the iceberg!&lt;br&gt;
In an upcoming blog, I will be demonstrating  how AWS Amplify can be integrated with other AWS services.&lt;/p&gt;

&lt;p&gt;Till then, give AWS Amplify a try and come back for more such content.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  References:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/amplify/getting-started/?gclid=CjwKCAiAudG5BhAREiwAWMlSjHOhoUadAwNJdgWB52CZPYZbG1NaCc7pOWo2RkiyssyecFOZirCnjBoCTFgQAvD_BwE&amp;amp;trk=a0465925-8003-4d68-bc59-c7cd4211829e&amp;amp;sc_channel=ps&amp;amp;ef_id=CjwKCAiAudG5BhAREiwAWMlSjHOhoUadAwNJdgWB52CZPYZbG1NaCc7pOWo2RkiyssyecFOZirCnjBoCTFgQAvD_BwE:G:s&amp;amp;s_kwcid=AL!4422!3!647258140449!e!!g!!aws%20amplify!19621397201!145160425349" rel="noopener noreferrer"&gt;Getting Started with Amplify&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/amplify/?gclid=CjwKCAiAudG5BhAREiwAWMlSjHPuZNDpsYxoVWbvhw4GynUElFZRU648Fyn_o7OP_ySgqZzU9wF5ZRoCiIQQAvD_BwE&amp;amp;trk=a0465925-8003-4d68-bc59-c7cd4211829e&amp;amp;sc_channel=ps&amp;amp;ef_id=CjwKCAiAudG5BhAREiwAWMlSjHPuZNDpsYxoVWbvhw4GynUElFZRU648Fyn_o7OP_ySgqZzU9wF5ZRoCiIQQAvD_BwE:G:s&amp;amp;s_kwcid=AL!4422!3!647258140449!e!!g!!aws%20amplify!19621397201!145160425349" rel="noopener noreferrer"&gt;Development with AWS Amplify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/amplify/faqs/" rel="noopener noreferrer"&gt;AWS Amplify FAQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Banner image and demo-website image are AI generated, using DALL-E &lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>webdev</category>
      <category>aws</category>
      <category>cloudcomputing</category>
    </item>
    <item>
      <title>AWS PartyRock - Anyone can become a developer</title>
      <dc:creator>Tanushree Aggarwal</dc:creator>
      <pubDate>Thu, 16 Nov 2023 18:24:24 +0000</pubDate>
      <link>https://dev.to/aws-builders/aws-partyrock-anyone-can-become-a-developer-2kn5</link>
      <guid>https://dev.to/aws-builders/aws-partyrock-anyone-can-become-a-developer-2kn5</guid>
      <description>&lt;h2&gt;
  
  
  Building apps is a party with Partyrock!
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;PartyRock&lt;/strong&gt;, powered by AI foundation models from the recently released &lt;strong&gt;&lt;a href="https://aws.amazon.com/bedrock/" rel="noopener noreferrer"&gt;Amazon Bedrock&lt;/a&gt;&lt;/strong&gt; is a space where you can build your own AI-generated apps in a matter of minutes! It’s a fast and fun way to learn about generative AI. &lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;Login to &lt;a href="https://partyrock.aws" rel="noopener noreferrer"&gt;PartyRock&lt;/a&gt; for a free trial. Play around till the trial credits run out!&lt;/p&gt;

&lt;h2&gt;
  
  
  Build your own app
&lt;/h2&gt;

&lt;p&gt;There are 3 different ways to create a new PartyRock app.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Start with a prompt&lt;/strong&gt; - the easiest way to start experimenting! Use the &lt;em&gt;app builder&lt;/em&gt; on the welcome page.&lt;br&gt;
Give a detailed description of what you would like your app to do.&lt;br&gt;
click &lt;code&gt;Generate app&lt;/code&gt;&lt;br&gt;
and you are done!&lt;br&gt;
Test your app and edit if necessary!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Remix an existing app&lt;/strong&gt; - Use an existing application and add new features or your personal touch.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This can be an app you created, a Partyrock sample app or an app created by someone else, you feel inspired by&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Start from scratch with an empty app&lt;/strong&gt; - and add your own widgets.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Build a Trivia app with me, in under 5 minutes!&lt;/p&gt;

&lt;p&gt;i. Login to &lt;a href="https://partyrock.aws/" rel="noopener noreferrer"&gt;PartyRock&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;ii. Click &lt;code&gt;Build your own app&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fljfusdbndmpeyy1o33tn.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%2Fljfusdbndmpeyy1o33tn.png" alt="Image description" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;iii. Describe what you would like to build&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%2F6daw6tkoad2hd9cix5mp.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%2F6daw6tkoad2hd9cix5mp.png" alt="Image description" width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;iv. Click &lt;code&gt;Generate app&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;v. Test your app, and edit if necessary. And you are done! &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcyyjkcfm7biij6mbq2nr.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%2Fcyyjkcfm7biij6mbq2nr.png" alt="Image description" width="800" height="372"&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%2Fbm926ydxk3mlwr1nflf6.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%2Fbm926ydxk3mlwr1nflf6.png" alt="Image description" width="800" height="291"&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%2Fn65df2zirjkwscw5jdih.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%2Fn65df2zirjkwscw5jdih.png" alt="Image description" width="800" height="213"&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%2Fzo9pnfcifvlbukmv2o5l.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%2Fzo9pnfcifvlbukmv2o5l.png" alt="Image description" width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;vi. Make the app public and share with your friends!&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%2F9ii36kxacsuwi3h7o6ko.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%2F9ii36kxacsuwi3h7o6ko.png" alt="Image description" width="741" height="144"&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%2Ftykpvx3te9al27etnqbm.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%2Ftykpvx3te9al27etnqbm.png" alt="Image description" width="800" height="420"&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%2Fyr0d8lkea3wgl2ho08q6.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%2Fyr0d8lkea3wgl2ho08q6.png" alt="Image description" width="800" height="405"&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%2Fb7hbgmmvxnasiudf3396.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%2Fb7hbgmmvxnasiudf3396.png" alt="Image description" width="800" height="247"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;The idea behind PartyRock is to make learning GenAI easy and fun!&lt;br&gt;
Let your imagination run wild and create some fun apps!&lt;br&gt;
Don't forget to share your app link in the comment section! Here's &lt;a href="https://partyrock.aws/u/tanushreeaggarwal/NR9vthJUZ/Trivia-Time-Traveler" rel="noopener noreferrer"&gt;mine&lt;/a&gt;!&lt;/p&gt;

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

</description>
      <category>aws</category>
      <category>genai</category>
      <category>partyrockplayground</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Scheduling EC2 start and stop using Eventbridge and Lambda (part 2 of 2)</title>
      <dc:creator>Tanushree Aggarwal</dc:creator>
      <pubDate>Tue, 31 Oct 2023 13:33:07 +0000</pubDate>
      <link>https://dev.to/aws-builders/scheduling-ec2-start-and-stop-using-eventbridge-and-lambda-part-2-of-2-344</link>
      <guid>https://dev.to/aws-builders/scheduling-ec2-start-and-stop-using-eventbridge-and-lambda-part-2-of-2-344</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In our previous &lt;a href="https://dev.to/aws-builders/scheduling-ec2-start-and-stop-using-eventbridge-and-lambda-part-1-of-2-30he"&gt;blog&lt;/a&gt;, we discussed the use case and the architecture. The major steps have already been implemented, and today we will simply be tying everything together by configuring the Eventbridge schedule, that will execute the Lambda functions we created earlier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating an Eventbridge Schedule
&lt;/h2&gt;

&lt;p&gt;1) Login to the &lt;a href="https://aws.amazon.com/console/" rel="noopener noreferrer"&gt;AWS Management Console&lt;/a&gt; and navigate to &lt;code&gt;Amazon EventBridge&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;2) From the Amazon Eventbridge &lt;em&gt;Get started&lt;/em&gt; options, select &lt;code&gt;EventBridge Schedule&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;3) Click &lt;code&gt;Create schedule&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6amqtbv5v6tmf3r7gyf6.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%2F6amqtbv5v6tmf3r7gyf6.png" alt="eventbridge_schedule" width="800" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4) Give the schedule a &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;meaningful description&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3join4efiy1vi1dxl5yj.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%2F3join4efiy1vi1dxl5yj.png" alt="event_name" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5) Select &lt;code&gt;Recurring schedule&lt;/code&gt; and &lt;code&gt;Cron-based schedule&lt;/code&gt; for the &lt;code&gt;Schedule Type&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;6) Enter the &lt;code&gt;Cron&lt;/code&gt; value&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ehn629md0glsri97rmp.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%2F0ehn629md0glsri97rmp.png" alt="cron_schedule" width="800" height="609"&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%2Fwbtr0y1ij0tce9q5yp01.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%2Fwbtr0y1ij0tce9q5yp01.png" alt="flex_schedule" width="800" height="606"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;CRONs are commonly used in Unix based systems to schedule certain jobs/scripts. A CRONjob comprises of 6 space separated fields, which define the execution time of the script.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7r8vmpji234gsum2e3ix.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%2F7r8vmpji234gsum2e3ix.png" alt="understand_cron" width="800" height="458"&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%2Fsml7vtsvvhp5i6k7em2w.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%2Fsml7vtsvvhp5i6k7em2w.png" alt="cron_expression" width="800" height="151"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The &lt;strong&gt;CRON Expression&lt;/strong&gt; &lt;code&gt;00 17 ? * 2-6 *&lt;/code&gt;  indicates that it will execute 0th minute of 17th hour (5PM), 2-6 day of the week, i.e. Mon-Fri. &lt;br&gt;
An asterisk &lt;code&gt;(*)&lt;/code&gt; is used as a wildcard to represent any possible value for that field&lt;br&gt;
A question mark &lt;code&gt;(?)&lt;/code&gt; indicates no specific value.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;7) Select the desired &lt;code&gt;Time zone&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;8) Select the optional values as per your use case. Click &lt;code&gt;Next&lt;/code&gt;&lt;br&gt;
We are leaving these as default.&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%2Fva4mouml9s3u2td3e8bv.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%2Fva4mouml9s3u2td3e8bv.png" alt="optional_values" width="800" height="588"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;9) From the &lt;code&gt;Target&lt;/code&gt; options, select &lt;code&gt;All APIs&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;10) From the &lt;code&gt;All AWS Services&lt;/code&gt; dropdown select &lt;code&gt;Lambda&lt;/code&gt;&lt;br&gt;
Click &lt;code&gt;Next&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fatlyguey8m5nw57xw5.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%2F8fatlyguey8m5nw57xw5.png" alt="target" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;11) From the Lambda API list select &lt;code&gt;Invoke&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4tgxfgonmryxw2xj6vhp.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%2F4tgxfgonmryxw2xj6vhp.png" alt="lambda_API" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;12) For the &lt;code&gt;Invoke&lt;/code&gt; settings, select the Lambda function &lt;code&gt;Stop_EC2_instance&lt;/code&gt; we created in the previous blog.&lt;/p&gt;

&lt;p&gt;13) Leave &lt;code&gt;Configure version/aliases&lt;/code&gt; as the default values.&lt;/p&gt;

&lt;p&gt;14) Since our &lt;code&gt;Lambda function&lt;/code&gt; does not require any parameters/arguments, we can leave the &lt;code&gt;Payload&lt;/code&gt; as blank.&lt;/p&gt;

&lt;p&gt;Click &lt;code&gt;Next&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;15) At the next screen, make sure that &lt;code&gt;Enable schedule&lt;/code&gt; button is toggled to &lt;em&gt;enabled&lt;/em&gt;. This button gives us the option to &lt;em&gt;not enable the schedule&lt;/em&gt; right away. One use case can be to trigger this Eventbridge from another service based on defined conditions.&lt;/p&gt;

&lt;p&gt;16) We have the option to execute a &lt;code&gt;Delete&lt;/code&gt; action after the Eventbridge execution. This is outside the scope of this demo, so can leave it as blank, or select &lt;code&gt;None&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flhp6kubn79mqy7wjxv29.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%2Flhp6kubn79mqy7wjxv29.png" alt="schedule" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;17) Scroll all the way to the bottom, to reach the &lt;code&gt;Permissions&lt;/code&gt; settings.&lt;br&gt;
We need to allow our Eventbridge scheduler access to the Lambda function, lets create an IAM role for this.&lt;br&gt;
Select &lt;code&gt;Create a new role for this schedule&lt;/code&gt;. A IAM role name will be assigned automatically with the relevant permissions.&lt;/p&gt;

&lt;p&gt;Click &lt;code&gt;Next&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb6bfpy8icjimz4jh1lgx.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%2Fb6bfpy8icjimz4jh1lgx.png" alt="select IAM" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Alternately, we can create the IAM Policy and Role from the IAM dashboard. The steps will be similar to those performed while creating the IAM Policy and Role for the Lambda.&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:eu-central-1:&amp;lt;AWS_Account_ID&amp;gt;:function:Stop_EC2_instances:*",
                "arn:aws:lambda:eu-central-1:&amp;lt;AWS_Account_ID&amp;gt;:function:Stop_EC2_instances"
            ]
        }
    ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;18) Review all the configurations and click &lt;code&gt;Create Schedule&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5quvl5yxfvukvm9jdyg6.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%2F5quvl5yxfvukvm9jdyg6.png" alt="review" width="800" height="415"&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%2F6cncwpyqkacusi9mxh80.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%2F6cncwpyqkacusi9mxh80.png" alt="create_schedule" width="800" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tada! Your Eventbridge scheduler is ready!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0y062m6z7g92lx89jt9x.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%2F0y062m6z7g92lx89jt9x.png" alt="eventbridge_configured" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Create Eventbridge schedule for the starting the EC2 instances
&lt;/h2&gt;

&lt;p&gt;Repeat the above steps to create another Eventbridge scheduler to &lt;strong&gt;Start the EC2 instances&lt;/strong&gt;, configuring the &lt;strong&gt;Start_EC2_instances&lt;/strong&gt; Lambda function.&lt;/p&gt;

&lt;p&gt;The CRON entry for 08AM every weekday will be as follows:&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%2Fomkywfb3k69yxn4qczp1.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%2Fomkywfb3k69yxn4qczp1.png" alt="start_cron" width="800" height="370"&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%2F8sico56txudiragisxu5.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%2F8sico56txudiragisxu5.png" alt="start_EC2" width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Verification
&lt;/h2&gt;

&lt;p&gt;We are all set! Our final step is to verify if our Eventbridge schedulers triggered as per schedule and if they were actually able to stop/start our EC2 instances!&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Cloudwatch&lt;/code&gt; metrics indicating that our &lt;code&gt;Start_EC2_instances&lt;/code&gt; Lambda function was invoked at 08:00AM.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa5tuwpyawu83cmoje8s2.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%2Fa5tuwpyawu83cmoje8s2.png" alt="lambda_invocation" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;EC2 instances are in &lt;code&gt;running&lt;/code&gt; state:&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%2Fnmsmyqkz3trxgq2cgdvt.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%2Fnmsmyqkz3trxgq2cgdvt.png" alt="running_ec2_instance" width="800" height="148"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;In this two-part blog we covered a range of AWS services. We understood how different services can be used in conjunction with each other to create unique set of actions.&lt;br&gt;
I hope this blog has ignited some level of curiosity in your mind, for AWS and cloud architecture in general!  &lt;/p&gt;

&lt;p&gt;If you read till the end, Thank you!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Watch out this space for more such articles. Do like and comment if you found this useful! Your feedback is welcome in the comment section.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>serverless</category>
      <category>lambda</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Hacktoberfest2023 - completion!</title>
      <dc:creator>Tanushree Aggarwal</dc:creator>
      <pubDate>Sun, 29 Oct 2023 19:02:45 +0000</pubDate>
      <link>https://dev.to/tanushree_aggarwal/hacktoberfest2023-completion-4pe6</link>
      <guid>https://dev.to/tanushree_aggarwal/hacktoberfest2023-completion-4pe6</guid>
      <description>&lt;p&gt;And just like that..&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%2Fhdx72ij08mldstj2hrxe.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%2Fhdx72ij08mldstj2hrxe.png" alt="Image description" width="520" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Being a first time Hacktoberfest participant, I feel super proud of myself!&lt;br&gt;
Just a few days back I shared my Hacktoberfest goal of submitting 2 valid PRs. To my surprise I was able to submit them very easily, so decided to keep going further!&lt;/p&gt;

&lt;p&gt;Which led me here, having completed the challenge with 4 valid PRs!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://holopin.io/@aggarwaltanushree" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fholopin.me%2Faggarwaltanushree" alt="An image of @aggarwaltanushree's Holopin badges, which is a link to view their full Holopin profile" width="760" height="239"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/inuad/movie-night/pull/4" rel="noopener noreferrer"&gt;Pull Request 1&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/Astha369/CPP_Problems/pull/97" rel="noopener noreferrer"&gt;Pull Request 2&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/Shariar-Hasan/QuoteVerse/pull/82" rel="noopener noreferrer"&gt;Pull Request 3&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/himanshu-03/Python-Data-Structures/pull/134" rel="noopener noreferrer"&gt;Pull Request 4&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While I may not have made a significant contribution to the opensource community with these PRs, this is just the beginning of my opensource journey!&lt;br&gt;
I am already looking forward to participate in next year's Hacktoberfest and make some constructive contributions!&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>hacktoberfest23</category>
      <category>opensource</category>
      <category>hack23contributor</category>
    </item>
  </channel>
</rss>
