<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Yashvi Kothari</title>
    <description>The latest articles on Forem by Yashvi Kothari (@yashvikothari).</description>
    <link>https://forem.com/yashvikothari</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%2F545159%2F6e7005fb-7ff7-4bfb-a57e-2101c9269c00.jpeg</url>
      <title>Forem: Yashvi Kothari</title>
      <link>https://forem.com/yashvikothari</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/yashvikothari"/>
    <language>en</language>
    <item>
      <title>AWS Storage Gateway(Hybrid Storage Solution)</title>
      <dc:creator>Yashvi Kothari</dc:creator>
      <pubDate>Sun, 04 Jan 2026 04:59:22 +0000</pubDate>
      <link>https://forem.com/aws-builders/aws-storage-gatewayhybrid-storage-solution-4c2k</link>
      <guid>https://forem.com/aws-builders/aws-storage-gatewayhybrid-storage-solution-4c2k</guid>
      <description>&lt;p&gt;AWS Storage Gateway and its architecture&lt;/p&gt;

&lt;p&gt;Which type of storage gateway to use for your use case, and &lt;/p&gt;

&lt;p&gt;How to create a storage gateway using the EC2 platform &lt;/p&gt;

&lt;h2&gt;
  
  
  Using AWS Storage Gateway(Hybrid Storage Solution)
&lt;/h2&gt;

&lt;p&gt;AWS Storage Gateway is a powerful service that enables hybrid cloud storage by seamlessly connecting on-premises environments with AWS cloud storage. In this blog, we’ll explore AWS Storage Gateway and its architecture, helping you understand how it works and how it fits into modern cloud and hybrid infrastructures.&lt;/p&gt;

&lt;p&gt;We’ll also break down the different types of AWS Storage Gateway—File Gateway, Volume Gateway, and Tape Gateway—and discuss which gateway type to choose based on your specific use case.&lt;/p&gt;

&lt;p&gt;To make things practical, the blog will walk you through creating and deploying an AWS Storage Gateway using the Amazon EC2 platform, demonstrating how to set up and configure the gateway step by step.&lt;/p&gt;

&lt;p&gt;Prerequisites&lt;/p&gt;

&lt;p&gt;To get the most out of this guide, you should have a solid understanding of AWS storage services, including:&lt;/p&gt;

&lt;p&gt;Amazon S3&lt;/p&gt;

&lt;p&gt;Amazon FSx&lt;/p&gt;

&lt;p&gt;Amazon EBS&lt;/p&gt;

&lt;p&gt;Amazon Glacier&lt;/p&gt;

&lt;p&gt;Basic familiarity with Amazon EC2 is also recommended, as it will help you better understand the deployment and configuration steps covered in the hands-on sections.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;The AWS Storage Gateway: The Missing Bridge Between On‑Prem and Cloud Fluency&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Every hybrid cloud story begins at the same line: “We still have data on‑prem.”&lt;br&gt;&lt;br&gt;
But the real question AWS architects ask isn’t &lt;em&gt;why&lt;/em&gt; — it’s &lt;em&gt;how cleanly can we bridge that world to S3, FSx, or Glacier?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There’s a reason the &lt;strong&gt;AWS Well‑Architected Framework&lt;/strong&gt; flags data movement and hybrid storage patterns in almost every cost and operations review. When on‑prem systems start talking to AWS, you either build a bridge — or a bottleneck.&lt;/p&gt;




&lt;h3&gt;
  
  
  What the Storage Gateway Really Is
&lt;/h3&gt;

&lt;p&gt;Storage Gateway isn’t just a connector. It’s a &lt;strong&gt;translator layer&lt;/strong&gt; that turns your local protocols — NFS, SMB, iSCSI — into native AWS storage semantics.&lt;/p&gt;

&lt;p&gt;At its core, it’s a lightweight virtual machine or a hardware appliance that establishes a &lt;em&gt;secure, encrypted data path&lt;/em&gt; to AWS. You can deploy it in three ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;As a VM&lt;/strong&gt; on VMware ESXi, Microsoft Hyper‑V, or Linux KVM — ideal for existing datacenter setups.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;As a hardware appliance&lt;/strong&gt;, pre‑configured and shipped by AWS for plug‑and‑play deployment.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;As an EC2 instance&lt;/strong&gt; inside your VPC or within VMware Cloud on AWS — perfect for hybrid use cases with cloud‑resident workloads.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once deployed, the gateway allocates ~150 MB of local disk space for caching. This cache doesn’t just stage uploads — it works as a low‑latency read buffer, shaving milliseconds off retrieval time for your most frequently accessed objects.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Four Personalities of Storage Gateway
&lt;/h3&gt;

&lt;p&gt;Each gateway type reflects a &lt;strong&gt;different file access pattern&lt;/strong&gt;, not a marketing SKU.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;S3 File Gateway&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Talk SMB or NFS. Store natively in S3. Perfect for backup workloads, shared datasets, or applications that don’t speak API‑native S3.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;FSx File Gateway&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Serve SMB workloads that demand &lt;em&gt;Windows‑native semantics&lt;/em&gt; — think ACLs, DFS namespaces, and domain integration — backed by FSx for Windows File Server.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tape Gateway&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The quiet killer of legacy tape libraries. It abstracts your physical tape system into &lt;strong&gt;iSCSI‑based virtual tapes&lt;/strong&gt;, with automatic tiering into Amazon S3 Glacier Flexible Retrieval or Deep Archive.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Volume Gateway&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The bridge for block‑based applications. It exports iSCSI block volumes backed by EBS snapshots or S3. Great for backup targets or lift‑and‑shift migrations.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ask yourself: which protocol do your on‑prem workloads truly speak — files, blocks, or tapes?&lt;br&gt;&lt;br&gt;
That one question reveals your gateway type.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Economics That Actually Matter
&lt;/h3&gt;

&lt;p&gt;AWS pricing psychology: you’re not paying for the box. You’re paying for &lt;strong&gt;where your bits live and how they move&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Three line items drive your AWS Storage Gateway cost model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Storage pricing&lt;/strong&gt; — Mirrors the backing service (S3, FSx, etc.).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Request pricing&lt;/strong&gt; — Matches the standard S3 or FSx operation costs.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data transfer pricing&lt;/strong&gt; — Free inbound to AWS, but outbound traffic &lt;em&gt;to on‑prem&lt;/em&gt; is billed per terabyte transferred.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pro tip: moving data out of AWS through the Storage Gateway has the same economics as any AWS data egress — so architect for &lt;strong&gt;data gravity&lt;/strong&gt;, not convenience.&lt;/p&gt;




&lt;h3&gt;
  
  
  When to Use It — and When to Rethink It
&lt;/h3&gt;

&lt;p&gt;If your workload can’t or won’t move fully to the cloud (yet), the Storage Gateway gives you hybrid leverage without rearchitecting everything overnight.&lt;br&gt;&lt;br&gt;
But if every request ends up bouncing between S3 and on‑prem, you may need to rethink &lt;em&gt;placement&lt;/em&gt;, not performance.&lt;/p&gt;

&lt;p&gt;The best use cases we see in the wild:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Archival storage for compliance-heavy workloads.
&lt;/li&gt;
&lt;li&gt;Hybrid file shares across geographies.
&lt;/li&gt;
&lt;li&gt;Tape backup elimination projects.
&lt;/li&gt;
&lt;li&gt;Gradual cloud adoption: data first, compute later.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Thought
&lt;/h3&gt;

&lt;p&gt;Every cloud architect eventually realizes this truth: &lt;strong&gt;hybrid isn’t transitional — it’s strategic&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The AWS Storage Gateway exists not to extend your datacenter, but to &lt;strong&gt;teach it cloud fluency&lt;/strong&gt; — one NFS mount, one SMB share, one iSCSI target at a time.&lt;/p&gt;




&lt;h2&gt;
  
  
  Choosing the Right AWS Storage Gateway — A Principal Engineer’s Take
&lt;/h2&gt;

&lt;p&gt;Most hybrid storage decisions don’t fail in architecture. They fail in clarity.&lt;br&gt;
The AWS console gives you four gateway types — S3 File, FSx File, Tape, and Volume. But behind each type lies a philosophy of data motion: how your workloads talk to AWS, how latency collapses, and how cost behaves over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Storage Gateway Exists
&lt;/h2&gt;

&lt;p&gt;AWS built Storage Gateway for one quiet but urgent reason: most enterprises aren't cloud‑only — they're latency‑bound.&lt;br&gt;
They need to keep data gravity close to compute without giving up cloud durability or cost efficiency.&lt;/p&gt;

&lt;p&gt;Storage Gateway bridges that gap. It speaks on‑premises languages (NFS, SMB, iSCSI) while translating natively to AWS storage APIs (S3, FSx, EBS, Glacier).&lt;br&gt;
Think of it as a bilingual edge device — fluent in both legacy infrastructure and cloud semantics.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scenario 1: Backups and Archives That Refuse to Die On‑Prem
&lt;/h2&gt;

&lt;p&gt;You’ve got Hadoop clusters and SQL databases sitting in your datacenter.&lt;br&gt;
You want backups in the cloud. You don’t want to rebuild your entire pipeline.&lt;/p&gt;

&lt;p&gt;Here’s your moment of clarity:&lt;/p&gt;

&lt;p&gt;Use S3 File Gateway when you want object control. Use FSx File Gateway when you want Windows consistency. Use Volume Gateway when you want disaster recovery agility.&lt;/p&gt;

&lt;p&gt;The trade‑offs are architectural, not cosmetic.&lt;/p&gt;

&lt;p&gt;S3 File Gateway:&lt;/p&gt;

&lt;p&gt;Stores data natively in S3, with direct access to S3 Object Lock, versioning, and lifecycle management.&lt;br&gt;
Ideal for large files, logs, and database backups that can benefit from cost tiering into Glacier.&lt;br&gt;
Local cache (up to 64 TB) keeps active data hot — ideal for low‑latency reads in analytics or backup workloads.&lt;br&gt;
FSx File Gateway:&lt;/p&gt;

&lt;p&gt;Joins your Microsoft Active Directory and feels like any other SMB file system.&lt;br&gt;
Optimized for multi‑user, mixed file workloads — project shares, home directories, or Exchange backups.&lt;br&gt;
Plays well when your org runs Windows clients or third‑party tools expecting full NTFS parity (shadow copies, permissions, DFS).&lt;br&gt;
Volume Gateway:&lt;/p&gt;

&lt;p&gt;Perfect for structured data in block storage form.&lt;br&gt;
Lets you back up volumes as EBS snapshots, which you can later restore to EC2 for cloud migration or disaster recovery.&lt;br&gt;
Comes in two flavors:&lt;br&gt;
Cached volumes: Primary data in AWS, frequent reads cached locally.&lt;br&gt;
Stored volumes: Primary data on‑prem, async backups to AWS. (Think “DR‑first architecture.”)&lt;br&gt;
You can decide which to deploy based on one question:&lt;br&gt;
Do you need object features, file semantics, or block storage integration?&lt;/p&gt;

&lt;h2&gt;
  
  
  Scenario 2: The Tape Archive Nobody Wants to Touch
&lt;/h2&gt;

&lt;p&gt;Here’s the truth every sysadmin quietly knows: tapes die faster than budgets get renewed.&lt;/p&gt;

&lt;p&gt;Tape Gateway solves this elegantly. Not with buzzwords — with compatibility.&lt;/p&gt;

&lt;p&gt;It creates a virtual tape library (VTL) that plugs directly into your existing backup software (CommVault, NetBackup, IBM, etc.) over iSCSI. For the backup tool, nothing changes. But instead of shipping tapes to dusty warehouses, you’re sending them to Amazon S3 and auto‑archiving to S3 Glacier.&lt;/p&gt;

&lt;p&gt;This is hybrid done right: zero cultural resistance, immediate operational gain.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to Choose Each
&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%2Fea8vs4b853n24ottm55s.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%2Fea8vs4b853n24ottm55s.png" alt=" " width="800" height="176"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hidden “Why Now”
&lt;/h2&gt;

&lt;p&gt;Once your backup data lives in AWS, you’ve quietly unlocked optionality.&lt;br&gt;
Today, it’s backup. Tomorrow, it’s pipeline input for analytics or ML.&lt;br&gt;
That’s the real value — AWS turns what used to be retained data into active data.&lt;/p&gt;

&lt;p&gt;If your hybrid architecture still treats storage as passive, you’re leaving compounding value on the table.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;Each gateway type reflects a philosophy of transition — from legacy to leverage.&lt;br&gt;
The best AWS builders know that hybrid isn't a stopgap; it’s a design state.&lt;br&gt;
Storage Gateway doesn’t replace your infrastructure. It teaches it to speak cloud fluently.&lt;/p&gt;

&lt;h2&gt;
  
  
  To Do: Hands-On
&lt;/h2&gt;

&lt;p&gt;Configure an AWS S3 File Storage Gateway to test end to end.&lt;/p&gt;

&lt;p&gt;Connect an EC2-based NFS file system to an Amazon S3 bucket and verify that files created on EC2 are automatically stored in S3.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Storage Gateway Configuration&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Opened AWS Storage Gateway from the AWS Console&lt;/p&gt;

&lt;p&gt;Created a new gateway named sgw-demo&lt;/p&gt;

&lt;p&gt;Selected S3 File Gateway&lt;/p&gt;

&lt;p&gt;Chose Amazon EC2 as the hosting platform&lt;/p&gt;

&lt;p&gt;Selected the appropriate time zone&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Gateway Deployment on EC2&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Launched an EC2 instance for the gateway:&lt;/p&gt;

&lt;p&gt;Instance name: sgw-demo-instance&lt;/p&gt;

&lt;p&gt;Instance type: m5.xlarge (as recommended)&lt;/p&gt;

&lt;p&gt;Public IP enabled&lt;/p&gt;

&lt;p&gt;Configured a security group with required ports:&lt;/p&gt;

&lt;p&gt;22 (SSH)&lt;/p&gt;

&lt;p&gt;80 (Gateway activation)&lt;/p&gt;

&lt;p&gt;2049, 111, 20048 (NFS)&lt;/p&gt;

&lt;p&gt;Added an extra EBS volume (150 GiB+) for cache storage&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Gateway Activation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Used the public IP address of the EC2 instance to activate the gateway&lt;/p&gt;

&lt;p&gt;Selected public internet connectivity&lt;/p&gt;

&lt;p&gt;Disabled CloudWatch logs and alarms to reduce cost&lt;/p&gt;

&lt;p&gt;Allocated cache storage successfully&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;NFS File Share Creation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Created a new NFS file share&lt;/p&gt;

&lt;p&gt;Linked it to an existing S3 bucket (sgw-bucket-99)&lt;/p&gt;

&lt;p&gt;Selected S3 Standard as the storage class&lt;/p&gt;

&lt;p&gt;Left cache and permission settings as default&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mounting the File Share&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Connected to a separate EC2 instance (application server)&lt;/p&gt;

&lt;p&gt;Created a mount directory: /web-files&lt;/p&gt;

&lt;p&gt;Mounted the NFS file share using the provided Linux mount command&lt;/p&gt;

&lt;p&gt;Verified the mount using df -h&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Testing the Setup&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Created a file index.html inside /web-files&lt;/p&gt;

&lt;p&gt;Added sample content to the file&lt;/p&gt;

&lt;p&gt;Checked the S3 bucket and confirmed the file appeared there&lt;/p&gt;

&lt;p&gt;Downloaded the file from S3 to verify the content&lt;/p&gt;

&lt;p&gt;✅ Final Outcome&lt;/p&gt;

&lt;p&gt;The NFS file share and S3 bucket were successfully linked&lt;/p&gt;

&lt;p&gt;Any file created on the EC2-mounted file system was automatically stored in Amazon S3&lt;/p&gt;

&lt;p&gt;This confirms a 1:1 mapping between the NFS file system and the S3 bucket&lt;/p&gt;

&lt;p&gt;In simple terms:&lt;br&gt;
Files written on EC2 using NFS were transparently backed up to Amazon S3 using AWS Storage Gateway.&lt;/p&gt;

&lt;p&gt;Flow:&lt;/p&gt;

&lt;p&gt;On‑prem data (files, volumes, or backups) flows to the Storage Gateway.&lt;/p&gt;

&lt;p&gt;The gateway caches frequently accessed data locally for low‑latency access.&lt;/p&gt;

&lt;p&gt;Data is securely transferred to AWS storage services (S3, FSx, Glacier, or EBS).&lt;/p&gt;

&lt;p&gt;AWS maintains scalable, durable storage and offers lifecycle management, versioning, or snapshotting depending on gateway type.&lt;/p&gt;

&lt;p&gt;Administrators monitor and control the entire setup through the AWS Management Console or APIs.&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%2F53a1kqs6gewx6evplmer.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%2F53a1kqs6gewx6evplmer.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Image Credits Alana Layton&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%2Fzqasjoec7608f0gltu9i.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%2Fzqasjoec7608f0gltu9i.png" alt=" " width="520" height="396"&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%2Ffcy59ue2fu8pbntm937i.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%2Ffcy59ue2fu8pbntm937i.png" alt=" " width="792" height="519"&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%2Fq7k3ktjhgn4653ddd535.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%2Fq7k3ktjhgn4653ddd535.png" alt=" " width="800" height="525"&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%2Fmzbrutfj4gh7b1ncfik2.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%2Fmzbrutfj4gh7b1ncfik2.png" alt=" " width="560" height="521"&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%2Fewvxet5k08q267701upk.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%2Fewvxet5k08q267701upk.png" alt=" " width="800" height="422"&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%2Fxvvh30dm7zz99hlwh1np.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%2Fxvvh30dm7zz99hlwh1np.png" alt=" " width="800" height="391"&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%2Fd2x8x2jpy01xyja27db3.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%2Fd2x8x2jpy01xyja27db3.png" alt=" " width="578" height="400"&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%2Fv037m67mem4a37aj6zcj.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%2Fv037m67mem4a37aj6zcj.png" alt=" " width="540" height="431"&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%2Fpvzt247wxx4nl8fvs7he.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%2Fpvzt247wxx4nl8fvs7he.png" alt=" " width="614" height="417"&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%2Fkdrnlfd7lixqfc7mjg0q.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%2Fkdrnlfd7lixqfc7mjg0q.png" alt=" " width="547" height="352"&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%2Fvuw13uv25un5aynutrhv.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%2Fvuw13uv25un5aynutrhv.png" alt=" " width="530" height="241"&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%2F4iglavdtgykesi4izygo.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%2F4iglavdtgykesi4izygo.png" alt=" " width="534" height="286"&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%2Fdo5s8gzgj04u5wqnawpj.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%2Fdo5s8gzgj04u5wqnawpj.png" alt=" " width="544" height="169"&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%2F9ps74n24qkou6q0b1pau.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%2F9ps74n24qkou6q0b1pau.png" alt=" " width="525" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;enable FIPS&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%2F4pf9svkwkwh57xajxqfl.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%2F4pf9svkwkwh57xajxqfl.png" alt=" " width="800" height="376"&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%2Fugm097b52qxl7uvm1gft.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%2Fugm097b52qxl7uvm1gft.png" alt=" " width="631" height="342"&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%2Fj4t952ofofyq0mm8p2yi.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%2Fj4t952ofofyq0mm8p2yi.png" alt=" " width="504" height="394"&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%2F4ipjfmznplg21adfqaj0.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%2F4ipjfmznplg21adfqaj0.png" alt=" " width="621" height="185"&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%2Fjr5u1p5gd1qu8tsu1ky6.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%2Fjr5u1p5gd1qu8tsu1ky6.png" alt=" " width="793" height="356"&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%2Feudn9x3kt74ojl6fb0x1.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%2Feudn9x3kt74ojl6fb0x1.png" alt=" " width="576" height="253"&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%2Fuyw6qe439olrkhzorj77.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%2Fuyw6qe439olrkhzorj77.png" alt=" " width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;connect ssh and copy that example command&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%2F1b4rm4dr30irjcm1fhmj.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%2F1b4rm4dr30irjcm1fhmj.png" alt=" " width="800" height="327"&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%2Fjsvqykx5jlnj8xdn23h4.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%2Fjsvqykx5jlnj8xdn23h4.png" alt=" " width="138" height="31"&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%2F7kdkv071zc1cy2464425.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%2F7kdkv071zc1cy2464425.png" alt=" " width="552" height="25"&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%2Fyt9exers4b1hgklr6z64.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%2Fyt9exers4b1hgklr6z64.png" alt=" " width="82" height="16"&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%2Fvydm2em25xo136kqwk3b.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%2Fvydm2em25xo136kqwk3b.png" alt=" " width="735" height="139"&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%2F0efq3tf9uccieyhat6t8.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%2F0efq3tf9uccieyhat6t8.png" alt=" " width="696" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>storage</category>
      <category>aws</category>
      <category>gateway</category>
      <category>onprem</category>
    </item>
    <item>
      <title>Secure Identity and Access Management with AWS IAM</title>
      <dc:creator>Yashvi Kothari</dc:creator>
      <pubDate>Thu, 25 Dec 2025 14:11:14 +0000</pubDate>
      <link>https://forem.com/aws-builders/secure-identity-and-access-management-with-aws-iam-2c8g</link>
      <guid>https://forem.com/aws-builders/secure-identity-and-access-management-with-aws-iam-2c8g</guid>
      <description>&lt;p&gt;Understand what is meant identity and access management and the difference between authentication, authorization, and access control&lt;/p&gt;

&lt;p&gt;Learn the components of IAM as well as its reporting features&lt;/p&gt;

&lt;p&gt;Intended Audience&lt;br&gt;
AWS Administrators&lt;br&gt;
Security Engineers&lt;br&gt;
Security Architects&lt;br&gt;
Anyone who is looking to increase their knowledge of the IAM service in preparation for an AWS certification&lt;/p&gt;

&lt;h2&gt;
  
  
  The First Rule of Infrastructure: Identity is the Perimeter
&lt;/h2&gt;

&lt;p&gt;Most teams treat &lt;strong&gt;AWS Identity and Access Management (IAM)&lt;/strong&gt; as a configuration hurdle. They see it as a series of checkboxes to get a service running.&lt;/p&gt;

&lt;p&gt;They are wrong.&lt;/p&gt;

&lt;p&gt;In a cloud-native world, the network perimeter is a ghost. Your real firewall isn't an IP range; it’s your IAM policy. If you haven't mastered the distinction between &lt;strong&gt;who&lt;/strong&gt; a user is and &lt;strong&gt;what&lt;/strong&gt; they can do, you aren't managing an environment—you're managing a liability.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Two Pillars: Authentication vs. Authorization
&lt;/h3&gt;

&lt;p&gt;Confusion here is the root of most "Access Denied" loops. Let’s strip the jargon.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Identity Management (The "Who")
&lt;/h4&gt;

&lt;p&gt;Authentication is the process of proving you exist.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Claim:&lt;/strong&gt; You provide a unique identifier (a username). IAM ensures this is a singleton within your account; there is no room for ambiguity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Proof:&lt;/strong&gt; You verify that claim. Usually, this is a password. In high-trust environments, it’s a password plus &lt;strong&gt;MFA&lt;/strong&gt;. If you aren't using MFA, you don't have a security policy; you have a suggestion.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2. Access Management (The "What")
&lt;/h4&gt;

&lt;p&gt;Once we know who you are, authorization determines your reach.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Permission:&lt;/strong&gt; This is the logic that lives in your JSON policies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Scope:&lt;/strong&gt; Does this identity need &lt;code&gt;FullAccess&lt;/code&gt; to EC2, or just &lt;code&gt;ReadOnly&lt;/code&gt; to a specific RDS instance?&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Status Signal:&lt;/strong&gt; Principal Engineers don’t grant permissions to "make it work." They grant permissions to make it &lt;em&gt;secure&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  The Mechanics of Control
&lt;/h3&gt;

&lt;p&gt;Access control is the delivery vehicle for your security logic. It’s how the "Who" meets the "What." You have three primary levers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Standard Credentials:&lt;/strong&gt; The basic handshake of username and password.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Factor Authentication (MFA):&lt;/strong&gt; The second layer that turns a stolen password from a catastrophe into a non-event.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Federation:&lt;/strong&gt; The hallmark of a mature enterprise. Why manage 500 IAM users when you can delegate trust to an external Identity Provider (IdP)? You don't want more identities; you want better ones.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Why This Matters for the Long Game
&lt;/h3&gt;

&lt;p&gt;IAM is the nervous system of your AWS account. It governs, manages, and audits every heartbeat of your infrastructure.&lt;/p&gt;

&lt;p&gt;What if your scaling issues aren’t about capacity, but about throttled IAM calls or misconfigured roles? What if your biggest security risk isn't an external hacker, but an internal developer with &lt;code&gt;AdministratorAccess&lt;/code&gt; and a leaked API key?&lt;/p&gt;

&lt;p&gt;There’s a reason the &lt;strong&gt;AWS Well-Architected Framework&lt;/strong&gt; starts with Identity. If you get the foundation wrong, the rest of the house is just waiting for a reason to fall.&lt;/p&gt;

&lt;p&gt;Build for the identity you need, not the convenience you want.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architect’s Burden: Why IAM is Your Only Real Firewall
&lt;/h2&gt;

&lt;p&gt;In the cloud, distance is an illusion. Your resources aren't "somewhere else"—they are behind an API.&lt;/p&gt;

&lt;p&gt;If you aren't managing your &lt;strong&gt;Identity and Access Management (IAM)&lt;/strong&gt; with surgical precision, you aren't running an infrastructure; you’re running a risk. Without IAM, your AWS account is an open room in a crowded city. With it, it’s a vault. But here is the truth: &lt;strong&gt;AWS provides the vault; you provide the combination.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There’s a reason the &lt;strong&gt;AWS Well-Architected Framework&lt;/strong&gt; treats Security as its second pillar. The responsibility for "tight" security is yours alone. It’s the difference between a system that scales and a system that leaks.&lt;/p&gt;




&lt;h3&gt;
  
  
  1. The Dashboard: Your Command Center
&lt;/h3&gt;

&lt;p&gt;When you step into the IAM Console, you aren't just looking at settings; you're looking at your security posture in a single pane of glass.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Sign-In URL:&lt;/strong&gt; This is your front door. Customizing it isn't just about branding—it’s about operational clarity. In a multi-account environment, knowing exactly which door you’re standing at prevents the kind of "oops" that ends up on the morning news.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Resource Summary:&lt;/strong&gt; A lean, high-level heartbeat. How many users? How many roles? If these numbers are climbing without a known project, you have an &lt;strong&gt;IAM sprawl&lt;/strong&gt; problem.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  2. The Identity Stack: Users, Groups, and Roles
&lt;/h3&gt;

&lt;p&gt;Most engineers confuse these three. Principals do not.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Users (The Permanent):&lt;/strong&gt; Objects representing a person or an application. They have long-term credentials. Use them sparingly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Groups (The Logical):&lt;/strong&gt; You don't give permissions to people; you give permissions to &lt;em&gt;functions&lt;/em&gt;. Put the user in the "SRE" group, and let the group hold the policy. It’s cleaner, it’s faster, it’s more of simplicity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Roles (The Temporal):&lt;/strong&gt; This is the gold standard. Roles use &lt;strong&gt;STS (Security Token Service)&lt;/strong&gt; to grant temporary, rotating credentials. Why manage a password that can be stolen when you can use a token that expires in an hour?&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  3. Policies: The Logic of Permission
&lt;/h3&gt;

&lt;p&gt;IAM policies are written in JSON. They are the "code" in "Infrastructure as Code."&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Managed Policies:&lt;/strong&gt; Your library. Use &lt;strong&gt;AWS Managed Policies&lt;/strong&gt; for speed, but pivot to &lt;strong&gt;Customer Managed Policies&lt;/strong&gt; for the Principle of Least Privilege.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inline Policies:&lt;/strong&gt; The "strictly local" option. Harder to manage, harder to audit. Ask yourself: if this policy is so special it only applies to one user, is your architecture too complex?&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  4. Advanced Guardrails: SCPs and Access Analysis
&lt;/h3&gt;

&lt;p&gt;As your organization grows, manual reviews become impossible. You need automated governance.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Service Control Policies (SCPs):&lt;/strong&gt; These are the "Maximum Permissions." Think of them as a fence. If the SCP says "No S3," it doesn't matter if an IAM user has &lt;code&gt;AdministratorAccess&lt;/code&gt;—they are blocked. &lt;strong&gt;SCPs don't grant; they restrict.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access Analyzer:&lt;/strong&gt; Your silent auditor. It flags resources—like S3 buckets or IAM roles—that are accessible from outside your "Zone of Trust."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Credential Report:&lt;/strong&gt; A simple CSV that tells a story. When was the last time &lt;code&gt;Dev-Account-1&lt;/code&gt; was used? If it’s been 90 days, why does it still exist?&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  The Mastery Shift
&lt;/h3&gt;

&lt;p&gt;What if your security bottlenecks aren't caused by "too much security," but by an outdated understanding of how IAM flows?&lt;/p&gt;

&lt;p&gt;Once those &lt;strong&gt;IAM roles&lt;/strong&gt; are assumed, misconfigured trust relationships become silent attack vectors. It’s not about having &lt;em&gt;more&lt;/em&gt; rules; it’s about having the &lt;em&gt;right&lt;/em&gt; ones.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>aws</category>
      <category>security</category>
    </item>
    <item>
      <title>Manage Message Queues Using Amazon SQS</title>
      <dc:creator>Yashvi Kothari</dc:creator>
      <pubDate>Wed, 24 Dec 2025 17:05:46 +0000</pubDate>
      <link>https://forem.com/aws-builders/manage-message-queues-using-amazon-sqs-1dcd</link>
      <guid>https://forem.com/aws-builders/manage-message-queues-using-amazon-sqs-1dcd</guid>
      <description>&lt;p&gt;Queues are where your architecture tells the truth.&lt;br&gt;
Not in the slide deck, not in the Jira ticket. In the SQS queue quietly filling up while everyone assumes “the system is fine.&lt;/p&gt;

&lt;p&gt;If you work in support or ops, you have already met this queue.&lt;br&gt;
A spike in errors, a delayed order, a Lambda that “randomly” retries for hours, a batch job that never finishes. Someone opens CloudWatch, someone else opens SQS, and suddenly there are ten thousand messages waiting for a consumer that is already at one hundred percent CPU.&lt;/p&gt;

&lt;p&gt;There is a reason AWS Well Architected keeps repeating the same pattern decouple, buffer, retry, isolate failures. SQS is the boring primitive that quietly makes that possible.&lt;/p&gt;

&lt;p&gt;This guide is not another “click here, then here” tour of the console.&lt;br&gt;
You will build one queue, send one message, receive it, and delete it. But the real goal is different you will understand what is actually happening to that message in between those click.&lt;/p&gt;

&lt;p&gt;By the end you will know&lt;/p&gt;

&lt;p&gt;Why SQS exists when you already have HTTP, events, and direct database writes.&lt;br&gt;
​&lt;/p&gt;

&lt;p&gt;When to reach for a Standard queue and when a FIFO queue is the only safe option.&lt;br&gt;
​&lt;/p&gt;

&lt;p&gt;How the message lifecycle really works send, store, visibility timeout, retry, delete and where bugs usually hide.&lt;br&gt;
​&lt;/p&gt;

&lt;p&gt;What the console lab is teaching you under the hood so you can later switch to CLI or SDK without feeling lost.&lt;br&gt;
​&lt;/p&gt;

&lt;p&gt;If you are used to Windows, GUIs, and “next, next, finish” wizards, think of this as your first real conversation with a cloud native queue.&lt;br&gt;
The console is just the training wheels. The mental model is what you keep&lt;/p&gt;

&lt;h2&gt;
  
  
  Goal
&lt;/h2&gt;

&lt;p&gt;Create Amazon SQS queues&lt;/p&gt;

&lt;p&gt;Send messages to an SQS queue&lt;/p&gt;

&lt;p&gt;Retrieve and delete messages using the AWS Management Console&lt;/p&gt;

&lt;h2&gt;
  
  
  Pre-requisite
&lt;/h2&gt;

&lt;p&gt;following background knowledge is helpful but not required:&lt;/p&gt;

&lt;p&gt;Basic familiarity with the AWS Management Console&lt;br&gt;
OR&lt;/p&gt;

&lt;p&gt;Basic understanding of the AWS CLI&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction to Amazon Simple Queue Service (SQS)
&lt;/h2&gt;

&lt;p&gt;Amazon Simple Queue Service (Amazon SQS) is a fully managed message queuing service that enables you to build fast, reliable, and scalable distributed applications. It allows different components of an application to communicate with each other asynchronously by sending, storing, and receiving messages—without requiring those components to be available at the same time.&lt;/p&gt;

&lt;p&gt;At its core, an SQS queue acts as a temporary message repository. Messages remain in the queue until they are successfully processed and deleted, ensuring that no data is lost even if a component fails or is temporarily unavailable. This makes Amazon SQS a powerful tool for decoupling application components and improving fault tolerance and scalability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating SQS Queue and Publishing Messages
&lt;/h2&gt;

&lt;p&gt;Amazon Simple Queue Service (Amazon SQS) is a fully managed messaging service that provides fast, reliable, and scalable queues for storing messages. It enables seamless communication between distributed components of an application, allowing each component to perform different tasks independently without losing messages or requiring constant availability.&lt;/p&gt;

&lt;p&gt;An SQS queue acts as a temporary repository for messages that are waiting to be processed. It serves as a buffer between the component that produces and sends data and the component that receives and processes it. This buffering capability helps resolve common challenges, such as when a producer generates data faster than a consumer can handle, or when either component is intermittently connected to the network.&lt;/p&gt;

&lt;p&gt;Amazon SQS guarantees that each message is delivered at least once and supports multiple producers and consumers accessing the same queue simultaneously. A single queue can be safely shared by many distributed application components without requiring them to coordinate with one another, making it an ideal solution for building loosely coupled and highly scalable systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Guide: Creating and Sending Messages to an Amazon SQS Queue
&lt;/h2&gt;

&lt;p&gt;Follow the steps below to create an Amazon SQS queue and send your first message using the AWS Management Console.&lt;/p&gt;

&lt;p&gt;Step 1: Open Amazon SQS&lt;/p&gt;

&lt;p&gt;In the search bar at the top of the AWS Management Console, type SQS.&lt;br&gt;
Under Services, select Simple Queue Service.&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%2F2c29s4iagtiyd9e736g3.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%2F2c29s4iagtiyd9e736g3.png" alt=" " width="800" height="255"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 2: Create a New Queue&lt;/p&gt;

&lt;p&gt;On the SQS dashboard, click Create queue.&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%2Fwsldyux15jwrb65s4d4l.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%2Fwsldyux15jwrb65s4d4l.png" alt=" " width="800" height="326"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 3: Configure Queue Settings&lt;/p&gt;

&lt;p&gt;Enter q-labs as the Queue name&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%2Fkvhfcq14x7y98ertp2m8.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%2Fkvhfcq14x7y98ertp2m8.png" alt=" " width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Leave all other settings at their default values&lt;/p&gt;

&lt;p&gt;You will notice two available queue types:&lt;/p&gt;

&lt;p&gt;Standard&lt;/p&gt;

&lt;p&gt;FIFO (First-In, First-Out)&lt;/p&gt;

&lt;p&gt;For now, keep Standard selected. Although Standard queues provide weaker guarantees for message order and delivery compared to FIFO queues, they are more cost-effective and support the highest throughput.&lt;/p&gt;

&lt;p&gt;Step 4: Create the Queue&lt;/p&gt;

&lt;p&gt;Scroll to the bottom of the page and click Create queue.&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%2Fam8ezv4q9d36lz6j6zib.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%2Fam8ezv4q9d36lz6j6zib.png" alt=" " width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After a short moment, a page will load displaying the details of your newly created queue.&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%2Fl41tvovnfpodm20k760c.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%2Fl41tvovnfpodm20k760c.png" alt=" " width="800" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 5: Return to the Queue List&lt;/p&gt;

&lt;p&gt;At the top of the page, click Queues in the breadcrumb navigation to return to the main queue 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%2Fbppzckz6in5mmmuyczys.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%2Fbppzckz6in5mmmuyczys.png" alt=" " width="320" height="220"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 6: Send a Message&lt;/p&gt;

&lt;p&gt;Select the q-labs queue and click Send and receive messages.&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%2Fikgpx8jigs8bsjnvzxnj.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%2Fikgpx8jigs8bsjnvzxnj.png" alt=" " width="800" height="215"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An SQS message consists of:&lt;/p&gt;

&lt;p&gt;A message body&lt;/p&gt;

&lt;p&gt;Optional message attributes&lt;/p&gt;

&lt;p&gt;The message body can be plain text or structured data such as JSON.&lt;/p&gt;

&lt;p&gt;Step 7: Enter the Message Body&lt;/p&gt;

&lt;p&gt;In the Message body field, enter:&lt;/p&gt;

&lt;p&gt;This is my first message!&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%2Fftycima1xhrds7ythym7.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%2Fftycima1xhrds7ythym7.png" alt=" " width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 8: Add Message Attributes&lt;/p&gt;

&lt;p&gt;Expand the Message attributes section and add the following:&lt;/p&gt;

&lt;p&gt;Name: WorkerId&lt;/p&gt;

&lt;p&gt;Type: Number&lt;/p&gt;

&lt;p&gt;Value: 123456&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%2Foyf50dxs8wi3rz7emw8n.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%2Foyf50dxs8wi3rz7emw8n.png" alt=" " width="800" height="245"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 9: Send the Message&lt;/p&gt;

&lt;p&gt;In the top-right corner of the page, click Send message.&lt;/p&gt;

&lt;p&gt;A confirmation notification will appear indicating the message was successfully sent.&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%2Fv8vfzjgfr4dqkrmzr2nn.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%2Fv8vfzjgfr4dqkrmzr2nn.png" alt=" " width="800" height="102"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 10: View Message Details&lt;/p&gt;

&lt;p&gt;Click View details to see:&lt;/p&gt;

&lt;p&gt;The SQS message identifier&lt;/p&gt;

&lt;p&gt;MD5 checksums for the message body and attributes&lt;/p&gt;

&lt;p&gt;These MD5 hashes allow publishers to verify message integrity. When messages are sent programmatically, publishers can compare their locally generated hashes with those returned by Amazon SQS to detect data corruption or tampering—an important feature in regulated or high-compliance environments.&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%2Fkinp3nxod5ri4bvnr9br.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%2Fkinp3nxod5ri4bvnr9br.png" alt=" " width="800" height="166"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 11: Close Message Details&lt;/p&gt;

&lt;p&gt;Click Done to close the message details window.&lt;/p&gt;

&lt;p&gt;Now, you successfully created an Amazon SQS queue using the AWS Management Console and sent your first message with custom attributes. &lt;br&gt;
This demonstrates how SQS enables reliable message-based communication between distributed application components.&lt;/p&gt;

&lt;h2&gt;
  
  
  Polling for SQS Messages and Deleting Messages
&lt;/h2&gt;

&lt;p&gt;Use the AWS Management Console to poll for messages from an Amazon Simple Queue Service (SQS) queue. You will review message details and then delete the message after processing it.&lt;/p&gt;

&lt;p&gt;Instructions: Polling and Deleting SQS Messages&lt;br&gt;
Step 1: Poll for Messages&lt;/p&gt;

&lt;p&gt;To retrieve messages from the queue, click Poll for messages.&lt;/p&gt;

&lt;p&gt;If a message is available, it will appear in the messages list.&lt;/p&gt;

&lt;p&gt;Note: When requesting messages from an SQS queue, you cannot specify which message to retrieve. Instead, you specify the maximum number of messages to receive (up to 10), and Amazon SQS returns up to that number. Because Amazon SQS is a distributed system, the response may sometimes be empty—especially when the queue contains only a small number of messages.&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%2F7bjhgc5ocx5zalq1gmhl.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%2F7bjhgc5ocx5zalq1gmhl.png" alt=" " width="800" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 2: Open Message Details&lt;/p&gt;

&lt;p&gt;Click the Message ID located on the far left of the message entry in the queue.&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%2Fodnin3huuovx89m1a8cm.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%2Fodnin3huuovx89m1a8cm.png" alt=" " width="800" height="273"&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%2Fxhv6va0uevjceexrsf7x.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%2Fxhv6va0uevjceexrsf7x.png" alt=" " width="800" height="338"&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%2Fmy4lf1p8x1n9ga04gk8y.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%2Fmy4lf1p8x1n9ga04gk8y.png" alt=" " width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 3: Review Message Properties&lt;/p&gt;

&lt;p&gt;In the Message Details modal, review the available information by clicking through the different tabs.&lt;/p&gt;

&lt;p&gt;You will see details similar to those observed when the message was sent. Notice that the Details section includes a Sender account ID. Amazon SQS queues are often used across AWS accounts, allowing message publishers and consumers to operate in different accounts.&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%2F8eqxwuyjjmdgwmgfs7b0.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%2F8eqxwuyjjmdgwmgfs7b0.png" alt=" " width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 4: Close the Message Details Window&lt;/p&gt;

&lt;p&gt;Click Done to close the message details modal.&lt;/p&gt;

&lt;p&gt;Step 5: Delete the Message&lt;/p&gt;

&lt;p&gt;Select the message in the Messages table and click Delete.&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%2Fktdv27engteyzlhiouti.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%2Fktdv27engteyzlhiouti.png" alt=" " width="800" height="229"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 6: Confirm Deletion&lt;/p&gt;

&lt;p&gt;In the Delete Messages confirmation dialog box, click Delete.&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%2Fy5fkww0q98vy5j557a2k.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%2Fy5fkww0q98vy5j557a2k.png" alt=" " width="800" height="285"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will be returned to the Send and receive messages page, where a notification confirms that the message has been successfully deleted.&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%2Fouemla6gjxn6jy1zdx8h.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%2Fouemla6gjxn6jy1zdx8h.png" alt=" " width="800" height="187"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, you successfully polled an Amazon SQS queue for messages, reviewed detailed message properties, and deleted the message after processing. This demonstrates the full lifecycle of receiving and managing messages in an SQS queue using the AWS Management Console.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Message Lifecycle Nobody Explains
&lt;/h2&gt;

&lt;p&gt;Every message you just sent follows an invisible lifecycle that breaks most first timers.&lt;br&gt;
Send it. SQS stores it with a visibility timeout (default 30 seconds). Poll it. Process it. Delete it explicitly, or it reappears for the next consumer.&lt;br&gt;
​&lt;/p&gt;

&lt;p&gt;Miss the delete, and you get duplicates. Set visibility too low, and retries overlap into chaos. AWS Well Architected calls this out because one forgotten delete turns a queue into a memory leak.&lt;br&gt;
​&lt;/p&gt;

&lt;p&gt;What if your consumer crashes mid process? The message reverts to the queue automatically. No data loss. That's SQS quietly earning trust while your Lambda or ECS task restarts.&lt;br&gt;
​&lt;/p&gt;

&lt;h2&gt;
  
  
  Dead Letter Queues: Your Debug Lifeline
&lt;/h2&gt;

&lt;p&gt;Support tickets spike when queues fill with "poison messages" that no consumer can process.&lt;br&gt;
Enter Dead Letter Queues (DLQ). Set max receives to 3. Fourth failure moves it to DLQ automatically. Your main queue stays clean.&lt;br&gt;
​&lt;br&gt;
​&lt;/p&gt;

&lt;p&gt;In the console lab above, add a DLQ now. Edit queue. Dead letter queue section. Target another queue. Set receive limit to 2. Send a malformed JSON message. Watch it migrate after two polls.&lt;br&gt;
​&lt;/p&gt;

&lt;p&gt;Reality check: 80% of production SQS issues trace back to unmonitored DLQs. Check them daily. They surface the malformed payloads, bad IAM, and deserialization bugs before customers notice.&lt;br&gt;
​&lt;/p&gt;

&lt;h2&gt;
  
  
  Standard vs FIFO: When Order Breaks You
&lt;/h2&gt;

&lt;p&gt;Your q-labs queue used Standard. At scale, order means nothing. Messages might arrive shuffled. Throughput hits millions per second. Cost: fractions of a penny.&lt;br&gt;
​&lt;/p&gt;

&lt;p&gt;FIFO queues guarantee order and exactly once delivery. Use them for payment confirmations or inventory decrements. Limit: 300 TPS unless you pay for high throughput mode.&lt;br&gt;
​&lt;/p&gt;

&lt;h2&gt;
  
  
  Question for you:
&lt;/h2&gt;

&lt;p&gt;Does shuffled order break your app, or is eventual consistency fine? Most support workloads pick Standard and save the complexity. AWS flags FIFO in Well Architected only when sequencing is non negotiable.&lt;br&gt;
​&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Integrations Beyond the Console
&lt;/h2&gt;

&lt;p&gt;SQS rarely runs solo. Lambda polls it natively. ECS tasks batch receive 10 at a time. Connect to EventBridge for fanout. All without custom polling loops.&lt;br&gt;
​&lt;/p&gt;

&lt;h2&gt;
  
  
  Common trap:
&lt;/h2&gt;

&lt;p&gt;Forgetting idempotency. Same message ID might hit your handler twice. Check message deduplication ID on receive. Delete only after your business logic commits.&lt;br&gt;
​&lt;/p&gt;

&lt;p&gt;Next time CloudWatch alarms on queue depth, you know the fix: Scale consumers, not producers. Add DLQ. Switch to long polling (20 seconds). Costs drop 40%. Reliability climbs.&lt;/p&gt;

</description>
      <category>queue</category>
      <category>sqs</category>
      <category>aws</category>
      <category>pubsub</category>
    </item>
    <item>
      <title>Lego City: How to Build Anything Without It Falling Over</title>
      <dc:creator>Yashvi Kothari</dc:creator>
      <pubDate>Sat, 20 Dec 2025 12:38:04 +0000</pubDate>
      <link>https://forem.com/yashvikothari/lego-city-how-to-build-anything-without-it-falling-over-4c01</link>
      <guid>https://forem.com/yashvikothari/lego-city-how-to-build-anything-without-it-falling-over-4c01</guid>
      <description>&lt;p&gt;Modern software is too complex to be managed by human memory alone. If you want to build a system that can book tickets to Mars, you don’t need more developers—you need a better factory.&lt;/p&gt;

&lt;p&gt;DevOps is the art of taking an idea from your brain to a user’s hand without human error getting in the way. If you want to explain this to a child (or a CEO), don't talk about "kernels" and "runtimes." Talk about Legos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Magic Lego Factory&lt;/strong&gt;&lt;br&gt;
Imagine you have a great idea for a Lego castle.&lt;/p&gt;

&lt;p&gt;The Workshop (Development): You build it on your bedroom floor. It looks great, but if you shut down your laptop (turn off the lights), no one can see it.&lt;/p&gt;

&lt;p&gt;Museum (Production): You want to show it to the world, so you move it to a special display case in the city square that stays lit 24/7.&lt;/p&gt;

&lt;p&gt;Instructions (Git): Your friends want to help. If you all grab the same bricks at once, you’ll fight. So, you use Git. It helps everyone work on the same castle at the same time and resolve conflicts efficiently.&lt;/p&gt;

&lt;p&gt;Robot Builder (CI/CD): Moving the castle piece-by-piece to the museum is slow and you might drop a brick. You build a Robot (Jenkins/GitHub Actions). Every time you finish a new tower, the robot automatically builds it, tests it, and puts it in the museum for you.&lt;/p&gt;

&lt;p&gt;Magic Boxes (Docker): Sometimes a brick fits at home but falls off at the museum because the table is different. You put your set inside a Clear Plastic Box (Container). If it works inside the box at home, it will work inside the box anywhere.&lt;/p&gt;

&lt;p&gt;City Architect (Kubernetes): Now you have 1,000 boxes. You need a Super-Manager to stack them, replace broken ones, and add more tables when more people come to watch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DevOps Lifecycle&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the real world, we aren't moving plastic bricks; we are moving code.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Version Control: The Source of Truth&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tools: Git, GitHub, GitLab.&lt;/p&gt;

&lt;p&gt;The Reality: Developers write code in text format (VS Code/PyCharm) and push it to a central hub. Git enables versioning and collaboration so teams don't step on each other's toes.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;CI/CD: The Automation Engine&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tools: Jenkins, GitHub Actions, GitLab CI/CD.&lt;/p&gt;

&lt;p&gt;The Reality: "Building" converts text code into an executable or binary. CI/CD pipelines automate the manual tasks of pulling code, building it, testing it for bugs, and deploying it to production. This allows you to ship features faster with less manual effort.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Containerization: The Shipping Container&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tools: Docker.&lt;/p&gt;

&lt;p&gt;The Reality: Applications need specific libraries and runtimes (Python, Java) to run. Docker packages the app and these dependencies into an "image". This ensures the software behaves the same on a developer's laptop as it does on a production server.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Orchestration: The Fleet Manager&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tools: Kubernetes.&lt;/p&gt;

&lt;p&gt;The Reality: When users increase, you need more "containers". Kubernetes manages these instances, ensures they are healthy, and auto-scales the underlying infrastructure based on need.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Infrastructure as Code (IaC): The Blueprint&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tools: Terraform, Ansible.&lt;/p&gt;

&lt;p&gt;The Reality: Setting up servers manually via a cloud GUI leads to human error. Terraform allows you to define virtual machines and storage in a "manifest file"—treating your infrastructure exactly like code. Ansible then handles post-configuration, like installing specific software on those servers.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Observability: The Vital Signs&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tools: Prometheus, Grafana.&lt;/p&gt;

&lt;p&gt;The Reality: You must monitor CPU utilization and memory consumption to take preventive measures. Prometheus collects these metrics, and Grafana visualizes them into charts and graphs so you can make sense of the data.&lt;/p&gt;




&lt;p&gt;They Laughed When I Sat Down At My Laptop;But Then My Code Deployed Itself." The secret to high-quality software isn't more hours. It's better systems.&lt;/p&gt;




&lt;p&gt;Don't tell your users you have a 'highly-available microservices architecture.' Tell them you have a system so reliable, they can book a ticket to Mars while you're asleep.&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%2Fy98pikiw792yo5nxm272.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%2Fy98pikiw792yo5nxm272.png" alt=" " width="800" height="709"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>webdev</category>
      <category>security</category>
      <category>devops</category>
    </item>
    <item>
      <title>KalaKraft Workplace Office in CSS Art Form</title>
      <dc:creator>Yashvi Kothari</dc:creator>
      <pubDate>Sun, 27 Jul 2025 12:24:11 +0000</pubDate>
      <link>https://forem.com/yashvikothari/kalakraft-dreamy-office-in-css-art-2ahm</link>
      <guid>https://forem.com/yashvikothari/kalakraft-dreamy-office-in-css-art-2ahm</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend/axero"&gt;Frontend Challenge: Office Edition, CSS Art: Office Culture&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspiration
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;You don’t remember offices by the shape of their chairs.You remember because the stories whispered at the desk, the streak of sunlight at 4PM, and the hum of teamwork in the background.&lt;br&gt;
Why I Code my dream Office?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Once I started with backend engineering,I started seeing CSS as a basic tool—a way to make buttons blue and borders round.&lt;/p&gt;

&lt;p&gt;The Idea&lt;/p&gt;

&lt;p&gt;Where most see “code vs. art,” office culture is both:- a living, breathing web of personalities behind every semi-colon.&lt;/p&gt;

&lt;p&gt;Later I thought to experiment with AI prompts and then I realised for Frontend human creativity and optimization at depth still matters a lot.&lt;/p&gt;

&lt;p&gt;We spend half our waking hours in offices, virtual and real. Why not make them art?&lt;br&gt;
So tried what if I could turn it into a paintbrush, capturing the messy magic of real work and real relationships with AI prompting?&lt;/p&gt;

&lt;p&gt;Inside every line of code, there’s a story waiting to be drawn.&lt;/p&gt;

&lt;p&gt;Any Office is den of personalities:&lt;/p&gt;

&lt;p&gt;1.keyboard warrior type&lt;/p&gt;

&lt;p&gt;2.Team/Group at the coffee machine for gossip after their daily scrum.&lt;/p&gt;

&lt;p&gt;3.Desk Decor type with motivation or sticky notes with work item list.&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/kothari_yashvi/embed/qEOqJBO?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;html&amp;gt; &amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I tried to make imagination live today with software engineers, a gifting segment, poets, and a content team, the environment and dynamics would bring a vibrant mix of technology, creativity.&lt;/p&gt;

&lt;p&gt;listed itemwise ideas to pick:-&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%2Fn94namt36ry78vhhivad.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%2Fn94namt36ry78vhhivad.png" alt="KalaKraft Digital Den landing page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Phasewise&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%2F0e1c75lgot1waag66b7a.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%2F0e1c75lgot1waag66b7a.png" alt="desk, and glowing 'Enter the Digital Den' button in CSS"&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%2Fok1eleoo8y7l1tfagrmt.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%2Fok1eleoo8y7l1tfagrmt.png" alt="pods—Inspiration, Creative Studio, Tech Den, and Security Hub: mycrxn,digimad.me,tadkafy,cloudsecurity"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;With AI prompting,there were headaches—pixels misaligned, z-index mishaps, creative blocks. But that’s office life too, right? Every little bug became a new “war story” to share.&lt;/p&gt;

&lt;p&gt;Idea:-&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%2Fnrronysm9tipqp0hgmtm.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%2Fnrronysm9tipqp0hgmtm.png" alt="team lounge, interactive office plant, water cooler, and celebration confetti—showcasing office culture features in pure CSS art"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Live Link:&lt;br&gt;
&lt;a href="https://yashvikothari.github.io/kalakraft_officeview_css" rel="noopener noreferrer"&gt;https://yashvikothari.github.io/kalakraft_officeview_css&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;OR&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/kothari_yashvi/embed/jEbVebe?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Source Code:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/yashvikothari/yashvikothari.github.io/tree/master/kalakraft_officeview_css" rel="noopener noreferrer"&gt;https://github.com/yashvikothari/yashvikothari.github.io/tree/master/kalakraft_officeview_css&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;Art isn’t just what you see. It’s what you feel when you know you’re part of something bigger—a team, a story, a culture.&lt;/p&gt;

&lt;p&gt;In a world moving remote and asynchronous, code can be more than code.&lt;/p&gt;

&lt;p&gt;It can be a snapshot of our office tribes, a tribute to our rituals, a call to turn every day at the desk into something worth remembering.&lt;/p&gt;

&lt;p&gt;What detail of office life would YOU code?&lt;/p&gt;

&lt;p&gt;Feel free to comment below, remix my experiment, or share your own story—because in the end, office culture is always a work in progress.&lt;/p&gt;

</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>css</category>
      <category>workplace</category>
    </item>
    <item>
      <title>Amazon Q in Action ! Pacman Inspired game deployed</title>
      <dc:creator>Yashvi Kothari</dc:creator>
      <pubDate>Fri, 27 Jun 2025 18:19:02 +0000</pubDate>
      <link>https://forem.com/aws-builders/amazon-q-in-action-pacman-inspired-game-deployed-555m</link>
      <guid>https://forem.com/aws-builders/amazon-q-in-action-pacman-inspired-game-deployed-555m</guid>
      <description>&lt;h1&gt;
  
  
  Building a Pac-Man Inspired Game with Amazon Q CLI
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;By Yashvi Kothari&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Published: June 27, 2024&lt;/em&gt;&lt;/p&gt;


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

&lt;p&gt;amazon q&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%2Fap9nxo19ww378lmxj7n5.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%2Fap9nxo19ww378lmxj7n5.png" alt="Image description" width="493" height="177"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It turns out a simple, 200-line Pac-Man demo into a full-fledged, 2000+ line game using Amazon Q CLI. Along the way, I learned how AI can speed up development, sharpen prompting skills, and shape the future of coding.&lt;/p&gt;
&lt;h2&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%2Fainlo1da89xu79jx5xd7.gif" alt="Image description" width="1024" height="1024"&gt;
&lt;/h2&gt;
&lt;h2&gt;
  
  
  Why Pac-Man?
&lt;/h2&gt;

&lt;p&gt;Inspiration: &lt;a href="https://community.aws/content/2y6egGcPAGQs8EwtQUM9KAONojz/build-games-challenge-build-classics-with-amazon-q-developer-cli?trk=b3ed9c83-eb20-4f68-b5b4-ffdc878e85c6&amp;amp;sc_channel=em&amp;amp;bb=237784" rel="noopener noreferrer"&gt;https://community.aws/content/2y6egGcPAGQs8EwtQUM9KAONojz/build-games-challenge-build-classics-with-amazon-q-developer-cli?trk=b3ed9c83-eb20-4f68-b5b4-ffdc878e85c6&amp;amp;sc_channel=em&amp;amp;bb=237784&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.aws/content/2vlITBGRfv8slpeU1UlTrpT4bBI/vibe-coding-in-practice-building-a-super-mario-game-with-amazon-q-developer-cli" rel="noopener noreferrer"&gt;https://community.aws/content/2vlITBGRfv8slpeU1UlTrpT4bBI/vibe-coding-in-practice-building-a-super-mario-game-with-amazon-q-developer-cli&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Complexity in layers—from basic movement to ghost AI.
&lt;/li&gt;
&lt;li&gt;Real-time needs: 60 FPS, collision checks, responsive controls.
&lt;/li&gt;
&lt;li&gt;Familiar rules make it easy to judge quality.
&lt;/li&gt;
&lt;li&gt;Clear specs help shape prompts.&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%2Fkn5bz020kd3k3o5bm6xj.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%2Fkn5bz020kd3k3o5bm6xj.gif" alt="Image description" width="1024" height="1024"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Core Challenges
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Rendering with HTML5 Canvas
&lt;/li&gt;
&lt;li&gt;Collision detection (walls, ghosts, dots)
&lt;/li&gt;
&lt;li&gt;Ghost pathfinding and behaviors
&lt;/li&gt;
&lt;li&gt;State management (levels, lives, scores)
&lt;/li&gt;
&lt;li&gt;Audio via Web Audio API
&lt;/li&gt;
&lt;li&gt;Performance tuning&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%2F51l7bfngul9yrnqrqmlu.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%2F51l7bfngul9yrnqrqmlu.png" alt="Image description" width="492" height="475"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Mastering AI Prompting
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://youtube.com/shorts/ALgU6YR8Kkc" rel="noopener noreferrer"&gt;https://youtube.com/shorts/ALgU6YR8Kkc&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  From Broad to Precise
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Too vague:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;"Create a Pac-Man game"&lt;/code&gt;&lt;br&gt;&lt;br&gt;
→ Minimal output&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;More detail:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   "Make an 800×440 Canvas game with:
   - Grid movement
   - Wall collisions
   - Dot collection
   - Score tracking"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;→ Working prototype&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Contextual ask:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   "Add four ghost AIs:
   - Blinky (chases Pac-Man)
   - Pinky (ambushes ahead)
   - Inky (patrols)
   - Clyde (random)
   Ensure proper pathfinding."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;→ Distinct ghost behaviors&lt;/p&gt;
&lt;h3&gt;
  
  
  Prompting Tips
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Iterate:&lt;/strong&gt; Build feature by feature.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep context:&lt;/strong&gt; Refer to earlier code.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Break problems down:&lt;/strong&gt; Solve movement → input buffering → corner turns.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Be specific:&lt;/strong&gt; Provide dimensions, rates, algorithms.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Tackling Key Problems
&lt;/h2&gt;

&lt;p&gt;Youtube Video | Hindi-ENglish (Hinglish)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=iMuAm4wQ2vE" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=iMuAm4wQ2vE&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Working as per AI but not even ready for local/test setup
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;try to first verify what commands fall under root permissions&lt;/li&gt;
&lt;li&gt;verify port is up &amp;amp; running&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%2Ffu8fokmdcn5wmrdo5xlz.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%2Ffu8fokmdcn5wmrdo5xlz.png" alt="Image description" width="375" height="349"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Collision Detection
&lt;/h3&gt;

&lt;p&gt;AI generated both:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;checkCollision&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="err"&gt;…&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;    &lt;span class="c1"&gt;// Circle vs. circle&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;checkWallCollision&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;dir&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="err"&gt;…&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;// Grid-based&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Ghost AI Behaviors
&lt;/h3&gt;

&lt;p&gt;State machine per personality:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;switch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ghost&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aggressive&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pacman&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ambush&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;    &lt;span class="nx"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ambushPos&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="err"&gt;…&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;ghost&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pathfind&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Performance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Object pooling for particles
&lt;/li&gt;
&lt;li&gt;Dirty-rectangle rendering
&lt;/li&gt;
&lt;li&gt;Frame-limited loop with &lt;code&gt;requestAnimationFrame&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Automating Development
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tests
&lt;/h3&gt;

&lt;p&gt;AI wrote unit and integration tests:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;collect dot&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="err"&gt;…&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ghost collision&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="err"&gt;…&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Docs &amp;amp; Assets
&lt;/h3&gt;

&lt;p&gt;Generated API docs and CSS animations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@keyframes&lt;/span&gt; &lt;span class="n"&gt;pacman-chomp&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="err"&gt;…&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  When AI Surprises
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Audio System
&lt;/h3&gt;

&lt;p&gt;Full Web Audio API class without prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AudioSystem&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;generateTone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;freq&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;dur&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="err"&gt;…&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nf"&gt;play&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dot&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Input Buffering
&lt;/h3&gt;

&lt;p&gt;Handles rapid inputs and old entries:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;inputBuffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;dir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nf"&gt;processBuffer&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Testing &amp;amp; Bug Fixes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Manual&lt;/strong&gt;: Unit → integration → UX tests.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated&lt;/strong&gt;: AI-generated test suites.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bug fixes&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Hidden loading screen
&lt;/li&gt;
&lt;li&gt;Pause button state issues
&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%2F9ice4m8uvw06gs3ohrn3.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%2F9ice4m8uvw06gs3ohrn3.png" alt="Image description" width="457" height="188"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Product
&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%2Frdrsieo0wydq66js7etx.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%2Frdrsieo0wydq66js7etx.png" alt="Image description" width="511" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code&lt;/strong&gt;: 2000+ lines, 15+ files
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Features&lt;/strong&gt;: Ghost AI, particle effects, achievements, mobile support
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance&lt;/strong&gt;: Steady 60 FPS on major browsers
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment&lt;/strong&gt;: Live on GitHub Pages
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Live URLs (After Deployment):**&lt;br&gt;
• &lt;strong&gt;Main Game&lt;/strong&gt;: &lt;a href="https://yashvikothari.github.io/pacman" rel="noopener noreferrer"&gt;https://yashvikothari.github.io/pacman&lt;/a&gt;&lt;br&gt;
• &lt;strong&gt;Original Version&lt;/strong&gt;: &lt;a href="https://yashvikothari.github.io/pacman/versions/v0.1/" rel="noopener noreferrer"&gt;https://yashvikothari.github.io/pacman/versions/v0.1/&lt;/a&gt;&lt;br&gt;
• &lt;strong&gt;Working Version&lt;/strong&gt;: &lt;a href="https://yashvikothari.github.io/pacman/versions/v2.0.1-working/" rel="noopener noreferrer"&gt;https://yashvikothari.github.io/pacman/versions/v2.0.1-working/&lt;/a&gt;&lt;br&gt;
• &lt;strong&gt;Flexible Version&lt;/strong&gt;: &lt;a href="https://yashvikothari.github.io/pacman/versions/v2.0.1-flexible/" rel="noopener noreferrer"&gt;https://yashvikothari.github.io/pacman/versions/v2.0.1-flexible/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Audio &amp;amp; other version is not deployed here !&lt;/p&gt;




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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;AI multiplies, not replaces&lt;/strong&gt;, your skills.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompting is an art&lt;/strong&gt;—detail and context matter.
&lt;/li&gt;
&lt;li&gt;AI handles boilerplate, tests, docs well.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human oversight&lt;/strong&gt; is key for architecture, UX, and performance.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  What I’d Do Differently next time
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Better upfront architecture planning
&lt;/li&gt;
&lt;li&gt;Test-driven prompts
&lt;/li&gt;
&lt;li&gt;Smaller, frequent commits with feature branches
&lt;/li&gt;
&lt;li&gt;Living documentation alongside code
&lt;/li&gt;
&lt;li&gt;integrate with git first&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&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%2F30ol5d6gywii1j5nl1ps.png" alt="Image description" width="240" height="888"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Recommendation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Yes&lt;/strong&gt;, for prototyping, learning, and solo projects—if you:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Practice prompting
&lt;/li&gt;
&lt;li&gt;Understand generated code
&lt;/li&gt;
&lt;li&gt;Review performance
&lt;/li&gt;
&lt;li&gt;Pair AI with your own creativity&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;This Pac-Man project shows how AI can help you go from a rough demo to a polished game in hours. Treat AI as a coding partner, iterate often, and combine your creativity with AI efficiency to build amazing things faster than ever.&lt;/p&gt;

</description>
      <category>amazonqcli</category>
      <category>gamechallenge</category>
      <category>awschallenge</category>
      <category>q</category>
    </item>
    <item>
      <title>Using Pulumi IaC to deploy NextJs static website with AWS S3 and EC2</title>
      <dc:creator>Yashvi Kothari</dc:creator>
      <pubDate>Sat, 05 Apr 2025 19:28:35 +0000</pubDate>
      <link>https://forem.com/aws-builders/using-pulumi-iac-to-deploy-nextjs-static-website-with-aws-s3-and-ec2-50n9</link>
      <guid>https://forem.com/aws-builders/using-pulumi-iac-to-deploy-nextjs-static-website-with-aws-s3-and-ec2-50n9</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/pulumi"&gt;Pulumi Deploy and Document Challenge&lt;/a&gt;: Fast Static Website Deployment&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Reference: &lt;a href="https://www.pulumi.com/templates/static-website/aws/" rel="noopener noreferrer"&gt;https://www.pulumi.com/templates/static-website/aws/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Static Website Deployment Next JS Framework publish to s3 and ec2using Pulumi IaC&lt;/p&gt;

&lt;h2&gt;
  
  
  Live Demo Link
&lt;/h2&gt;

&lt;p&gt;&amp;lt;!-- Share a link to your project. --&amp;gt; NA&lt;/p&gt;

&lt;p&gt;Before&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%2Fnlz5efdba87bif2vy3rp.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%2Fnlz5efdba87bif2vy3rp.png" alt="Image description" width="432" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After&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%2Fswvk3lyjh71zeigaedw6.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%2Fswvk3lyjh71zeigaedw6.png" alt="Image description" width="432" height="381"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Project Repo
&lt;/h2&gt;

&lt;p&gt;&amp;lt;!-- Embed your project repo here. Be sure to include a thorough README. --&amp;gt; NA&lt;/p&gt;
&lt;h2&gt;
  
  
  My Journey
&lt;/h2&gt;



&lt;p&gt;I had face issue related to my hardening envt and restriction based sandbox due to security reasons normal production replica:-&lt;br&gt;
1.aws linux 2 flavor with no option to migrate to latest(legacy servers)&lt;br&gt;
2.not using latest nextjs,ts,npm,node version(legacy codebase)&lt;br&gt;
3.unable to create new ec2&lt;br&gt;
4.having s3 public access blocked&lt;br&gt;
5.IAM limited scope and putpolicy for s3 not given&lt;/p&gt;
&lt;h2&gt;
  
  
  Using Pulumi
&lt;/h2&gt;







&lt;p&gt;install pulumi&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%2Fuwzli9h6p0psiet35aai.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%2Fuwzli9h6p0psiet35aai.png" alt="Image description" width="800" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;verify pulumi&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%2F1ean8mkwmuchy6n1bro7.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%2F1ean8mkwmuchy6n1bro7.png" alt="Image description" width="680" height="89"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;verify pulumi specific version&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%2F9vryg6de3k87znud2hhk.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%2F9vryg6de3k87znud2hhk.png" alt="Image description" width="690" height="65"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;configure Pulumi to use a local backend for 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%2Fwz42r7kbz0ujsud6jc7f.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%2Fwz42r7kbz0ujsud6jc7f.png" alt="Image description" width="800" height="40"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;before launching pulumi check node and npm version&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%2F0mgn4g8nzm1kt3i8suvp.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%2F0mgn4g8nzm1kt3i8suvp.png" alt="Image description" width="547" height="111"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Amazon Linux EC2 /RHEL Based&lt;/p&gt;

&lt;p&gt;curl -fsSL &lt;a href="https://rpm.nodesource.com/setup_16.x" rel="noopener noreferrer"&gt;https://rpm.nodesource.com/setup_16.x&lt;/a&gt; | sudo bash -&lt;br&gt;
sudo yum install -y nodejs&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%2Fpdchgz9w6kv81by04tu1.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%2Fpdchgz9w6kv81by04tu1.gif" alt="Image description" width="1024" height="1024"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;now check node -version (i came across this while troubleshooting)&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%2Fm76dh4vztymca8i0hbvf.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%2Fm76dh4vztymca8i0hbvf.png" alt="Image description" width="691" height="130"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;create new directory&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%2F7huukt8qlo1jbkgbx2za.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%2F7huukt8qlo1jbkgbx2za.png" alt="Image description" width="765" height="90"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;only in empty directory pulumi project can be created&lt;br&gt;
pulumi new aws-typescript&lt;br&gt;
now enter values one by one&lt;/p&gt;

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

&lt;p&gt;project name: webserver&lt;br&gt;
project description: Yashvi Deploying on AWS using Pulumi IaC&lt;br&gt;
stack name: Press enter to accept the default dev&lt;br&gt;
passphrase to protect config/secrets: Enter Secret123 (you will be prompted to enter this two times)&lt;br&gt;
aws:region: us-west-2 &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%2Fhmkq6vicf5d9hun5z09d.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%2Fhmkq6vicf5d9hun5z09d.png" alt="Image description" width="800" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pulumi installed dependencies and Now project ready&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%2Fb36jhtzyno8v3b9nga8d.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%2Fb36jhtzyno8v3b9nga8d.png" alt="Image description" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now Pulumi to use the IAM role attached to your EC2 instance for AWS authentication&lt;/p&gt;

&lt;p&gt;pulumi config set aws:skipMetadataApiCheck false&lt;/p&gt;

&lt;p&gt;You can Refer to the [AWS Classic Pulumi package documentation ]&lt;/p&gt;

&lt;p&gt;Now to avoid repeated passphrase prompts in Pulumi, set a Bash environment variable:&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%2Fl8f3xycj6emxegadn4nc.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%2Fl8f3xycj6emxegadn4nc.png" alt="Image description" width="800" height="55"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now to retrieve the public IP address of EC2 instance, execute&lt;/p&gt;

&lt;p&gt;curl &lt;a href="https://checkip.amazonaws.com" rel="noopener noreferrer"&gt;https://checkip.amazonaws.com&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%2Funegrjzkz2yy45oagvc3.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%2Funegrjzkz2yy45oagvc3.png" alt="Image description" width="800" height="42"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, Open a new browser tab and paste the following URL into the address bar, replacing  with the IP address 54.218.250.5&lt;/p&gt;

&lt;p&gt;&lt;a href="http://54.218.250.5:3000" rel="noopener noreferrer"&gt;http://54.218.250.5:3000&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%2Fuv65mol0phsg2l6fkvu3.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%2Fuv65mol0phsg2l6fkvu3.gif" alt="Image description" width="760" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Trying to add website content and IaC for creating s3&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%2F59nnub2aav88nrzns967.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%2F59nnub2aav88nrzns967.png" alt="Image description" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now by 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%2Fdpzuwbstwicywud6vj5q.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%2Fdpzuwbstwicywud6vj5q.png" alt="Image description" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As we intent Static Website Deployment as per our project submission so i can  have nextjs demo app live&lt;/p&gt;

&lt;p&gt;Replace this part in index.ts&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
import * as awsx from "@pulumi/awsx";

// Create an AWS resource (S3 Bucket)
const bucket = new aws.s3.BucketV2("my-bucket");

// Export the name of the bucket
export const bucketName = bucket.id;

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

&lt;/div&gt;



&lt;p&gt;with&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
import * as fs from "fs";
import * as path from "path";

// 1. Build Next.js app (generates 'out' folder)
const nextjsBuildDir = path.join(process.cwd(), "../nextjs-app");
if (!fs.existsSync(nextjsBuildDir)) {
    throw new Error("Next.js app not found at ../nextjs-app");
}
// Simulate build process (run this manually first)
// pulumi.log.info("Run 'npm run build' in your Next.js app first!");

// 2. Create S3 bucket with website hosting
const siteBucket = new aws.s3.Bucket("nextjs-site", {
    website: {
        indexDocument: "index.html",
        errorDocument: "404.html",
    },
    acl: "public-read",
});

// 3. Upload static export files from Next.js
const outDir = path.join(nextjsBuildDir, "out");
if (fs.existsSync(outDir)) {
    const uploadFile = (filePath: string) =&amp;gt; {
        const relativePath = path.relative(outDir, filePath);
        new aws.s3.BucketObject(relativePath, {
            bucket: siteBucket.id,
            source: new pulumi.asset.FileAsset(filePath),
            contentType: getContentType(filePath),
            acl: "public-read",
        });
    };

    // Recursively upload files
    const walkDir = (dir: string) =&amp;gt; {
        fs.readdirSync(dir).forEach(file =&amp;gt; {
            const fullPath = path.join(dir, file);
            if (fs.statSync(fullPath).isDirectory()) {
                walkDir(fullPath);
            } else {
                uploadFile(fullPath);
            }
        });
    };
    walkDir(outDir);
} else {
    // Fallback demo content if Next.js app isn't built
    new aws.s3.BucketObject("index.html", {
        bucket: siteBucket.id,
        content: "&amp;lt;h1&amp;gt;Next.js Static Site (Demo)&amp;lt;/h1&amp;gt;&amp;lt;p&amp;gt;Run 'npm run build' in your Next.js app!&amp;lt;/p&amp;gt;",
        contentType: "text/html",
        acl: "public-read",
    });
}

// Helper to detect MIME types
function getContentType(filePath: string): string {
    const ext = path.extname(filePath);
    switch (ext) {
        case ".html": return "text/html";
        case ".css": return "text/css";
        case ".js": return "application/javascript";
        case ".json": return "application/json";
        case ".png": return "image/png";
        case ".jpg": case ".jpeg": return "image/jpeg";
        default: return "application/octet-stream";
    }
}

// 4. Export URLs
export const websiteUrl = siteBucket.websiteEndpoint;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Structure (making nexjs app folder sibling one)&lt;/p&gt;

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

&lt;p&gt;Pulumi code in webserver/index.ts should correctly reference the sibling ../nextjs-app folder is must&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%2Fwnr0pjjv3cnriyud7pcw.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%2Fwnr0pjjv3cnriyud7pcw.png" alt="Image description" width="800" height="253"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I tried for Pulumi IaC for S3 and for EC2 (legacy system and troubleshooting :) )&lt;/p&gt;

&lt;p&gt;pulumi up&lt;/p&gt;

&lt;p&gt;keep doing yes by y&lt;/p&gt;

&lt;p&gt;Now bucket website URL is final output of website deployment&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>pulumichallenge</category>
      <category>webdev</category>
      <category>cloud</category>
    </item>
    <item>
      <title>WeCoded Landing Page Celebrate in Code</title>
      <dc:creator>Yashvi Kothari</dc:creator>
      <pubDate>Mon, 31 Mar 2025 13:56:03 +0000</pubDate>
      <link>https://forem.com/yashvikothari/wecoded-landing-page-celebrate-in-code-1f9o</link>
      <guid>https://forem.com/yashvikothari/wecoded-landing-page-celebrate-in-code-1f9o</guid>
      <description>&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%2Fh79ue2ldurgyjq3elt1y.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%2Fh79ue2ldurgyjq3elt1y.png" alt="Image description" width="800" height="400"&gt;&lt;/a&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/wecoded"&gt;WeCoded Challenge&lt;/a&gt;: Celebrate in Code&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My WeCoded Landing Page
&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%2F5rwgfjwtiyfkm0p1kzww.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%2F5rwgfjwtiyfkm0p1kzww.png" alt="Image description" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://wecodedyashvi.netlify.app/" rel="noopener noreferrer"&gt;https://wecodedyashvi.netlify.app/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;Used DEV Article API, fetched tag to achieve WeCoded stories and SheCoded Stories and created sorting and filter functionality.&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%2F1y6d3dp92tk81r50nfyu.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%2F1y6d3dp92tk81r50nfyu.png" alt="Image description" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Source Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/yashvikothari/wecoded_page" rel="noopener noreferrer"&gt;https://github.com/yashvikothari/wecoded_page&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>wecoded</category>
      <category>dei</category>
      <category>webdev</category>
    </item>
    <item>
      <title>EC2 Key Pair Generate</title>
      <dc:creator>Yashvi Kothari</dc:creator>
      <pubDate>Mon, 17 Mar 2025 17:56:50 +0000</pubDate>
      <link>https://forem.com/aws-builders/ec2-key-pair-generate-3dpo</link>
      <guid>https://forem.com/aws-builders/ec2-key-pair-generate-3dpo</guid>
      <description>&lt;h2&gt;
  
  
  Activity: Create Key Pair
&lt;/h2&gt;

&lt;p&gt;ABC Company is in the process of migrating part of their infrastructure to AWS.&lt;br&gt;
1.Break down migration into smaller tasks, &lt;br&gt;
2.Align as per Company ABC to maintain control and optimize resources effectively.&lt;br&gt;
Manager be like make sure Yashvi ABC have smooth transition with minimal disruptions in phase rollout wise manner.&lt;/p&gt;
&lt;h2&gt;
  
  
  KEY_PAIR Basics
&lt;/h2&gt;

&lt;p&gt;Imagine Alice and Bob are two friends who want to send secret messages to each other, but they don’t trust the postal system to keep their messages private. So, they come up with a lock-and-key system:&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%2F3un0hd01rbfsn9otr006.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%2F3un0hd01rbfsn9otr006.png" alt="Image description" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Public Key = Open Lock
&lt;/h2&gt;

&lt;p&gt;(Lock A or Lock B)&lt;/p&gt;

&lt;p&gt;Alice and Bob each have their own unique lock (public key) that they share with everyone.&lt;br&gt;
These locks are special: once locked, they can only be unlocked with the matching private key.&lt;/p&gt;
&lt;h2&gt;
  
  
  Private Key = Secret Key
&lt;/h2&gt;

&lt;p&gt;(Lock B or Lock A’s Key)&lt;/p&gt;

&lt;p&gt;Alice and Bob each keep a private key that can open only their own lock.&lt;br&gt;
This private key must never be shared.&lt;/p&gt;
&lt;h2&gt;
  
  
  How Messages are Sent Securely
&lt;/h2&gt;

&lt;p&gt;Bob wants to send Alice a secret message.&lt;br&gt;
He takes Alice’s open lock (public key) and locks a box containing the message.&lt;br&gt;
Once locked, only Alice’s private key can unlock and read the message.&lt;br&gt;
Similarly, Alice can use Bob’s public lock to send him a secure message.&lt;/p&gt;
&lt;h2&gt;
  
  
  How Digital Signatures Work
&lt;/h2&gt;

&lt;p&gt;Imagine Alice wants to prove she sent a message.&lt;br&gt;
Instead of locking the message, she locks a signature using her private key.&lt;br&gt;
Bob can verify the authenticity of the signature by using Alice’s public lock (public key).&lt;br&gt;
If the lock opens, he knows the message really came from Alice!&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%2Fjrroxf4x4e45y6pn6kx7.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%2Fjrroxf4x4e45y6pn6kx7.png" alt="Image description" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Key Pair Name: given as per naming convention in ABC Company&lt;br&gt;
Key Pair Type: rsa&lt;br&gt;
Region: us-east-1&lt;/p&gt;

&lt;p&gt;Yashvi will collect AWS Console credentials and 12 digit account number/login link&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Method1: UI Console steps after using credentials to login&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;1.Navigate to EC2 Dashboard:&lt;/p&gt;

&lt;p&gt;2.Ensure you are in the us-east-1 region(as per architecture requirement).&lt;/p&gt;

&lt;p&gt;3.Create Key Pair:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Select Key Pairs from the left-hand menu under Network &amp;amp; Security.&lt;br&gt;
Click on Create Key Pair.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enter the Key Pair Name as givenname-kp.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Have rsa as the Key Pair Type.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on Create Key Pair.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;4.Download Key Pair:&lt;br&gt;
-The key pair givenname-kp.pem will be automatically downloaded to your local machine.&lt;br&gt;
-Store this key pair securely as it is required for SSH access to your instances.&lt;/p&gt;



&lt;p&gt;You don’t understand anything until you learn it more than one way.&lt;/p&gt;

&lt;p&gt;– Marvin Minsky&lt;/p&gt;



&lt;p&gt;** Method 2: Have it simple na Yashvi with CLI ? not fan of UI/Click Ops&lt;br&gt;
**&lt;/p&gt;

&lt;p&gt;Here's the catch -prerequistes:&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%2F3b2fxsoo8fb9p6401qzi.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%2F3b2fxsoo8fb9p6401qzi.png" alt="Image description" width="770" height="221"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;IAM user (yashvi-kothari-1234) should have permission around create EC2 key pairs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sample policy is attached to user yashvi-kothari-1234&lt;/p&gt;

&lt;p&gt;&lt;code&gt;{&lt;br&gt;
    "Version": "2012-10-17",&lt;br&gt;
    "Statement": [&lt;br&gt;
        {&lt;br&gt;
            "Effect": "Allow",&lt;br&gt;
            "Action": [&lt;br&gt;
                "ec2:CreateKeyPair",&lt;br&gt;
                "ec2:DescribeKeyPairs"&lt;br&gt;
            ],&lt;br&gt;
            "Resource": "*"&lt;br&gt;
        }&lt;br&gt;
    ]&lt;br&gt;
}&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
2.Install AWS CLI on machine&lt;/p&gt;

&lt;p&gt;macOS/Linux: &lt;br&gt;
download package using curl command &amp;amp; run/install&lt;/p&gt;

&lt;p&gt;Windows:&lt;br&gt;
&lt;a href="https://awscli.amazonaws.com/AWSCLIV2.msi" rel="noopener noreferrer"&gt;https://awscli.amazonaws.com/AWSCLIV2.msi&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Verify Installation:&lt;br&gt;
aws --version&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%2Fi92dzo5mo2aq0j1so3cu.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%2Fi92dzo5mo2aq0j1so3cu.png" alt="Image description" width="711" height="55"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Now before configuring AWS CLI,generate creds for AWS CLI&lt;/p&gt;

&lt;p&gt;1.Create a new user with programmatic access, or use your own or request existing user to generate access keys.&lt;br&gt;
2.Navigate to Users, select the user (here yashvi exists) or create a new one for cli, and then go to the Security credentials tab.&lt;br&gt;
3.Under Access keys, click on Create access key and note down the Access Key ID and Secret Access Key.&lt;/p&gt;

&lt;p&gt;5.Configure AWS CLI&lt;br&gt;
Open your terminal and configure the AWS CLI using the generated credentials.&lt;br&gt;
&lt;code&gt;aws configure&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now enter in prompt&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%2Fovwtqz0x91043v1x200n.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%2Fovwtqz0x91043v1x200n.png" alt="Image description" width="450" height="124"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.Key-Pair using command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aws ec2 create-key-pair --key-name givenname-kp --key-type rsa --region us-east-1 --query 'KeyMaterial' --output text &amp;gt; givenname-kp.pem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Short Summary&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%2Fifs5pt6lyhh5z3ng53d6.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%2Fifs5pt6lyhh5z3ng53d6.png" alt="Image description" width="800" height="159"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>ec2</category>
      <category>keypair</category>
      <category>pem</category>
    </item>
    <item>
      <title>AWS S3 System Design Concepts</title>
      <dc:creator>Yashvi Kothari</dc:creator>
      <pubDate>Sun, 12 Jan 2025 19:10:23 +0000</pubDate>
      <link>https://forem.com/aws-builders/aws-s3-system-design-concepts-49n6</link>
      <guid>https://forem.com/aws-builders/aws-s3-system-design-concepts-49n6</guid>
      <description>&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%2Fnef05lbz4gc8kuqttkpf.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%2Fnef05lbz4gc8kuqttkpf.png" alt="Image description" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AWS S3 (Simple Storage Service) is a cornerstone of cloud storage, offering a vast, scalable, and highly durable object storage service. This deep dive will explore the system design considerations, key components, and trade-offs involved in building a system like S3.&lt;/p&gt;

&lt;h2&gt;Object Store&lt;/h2&gt;

&lt;h3&gt;High-Level Design (HLD)&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Stores data as **objects (key-value pairs)** where the key is the object's unique identifier (e.g., "image.jpg") and the value is the actual data.&lt;/li&gt;
  &lt;li&gt;Provides a **flat namespace** within a bucket.&lt;/li&gt;
  &lt;li&gt;Supports **metadata** associated with each object.&lt;/li&gt;
  &lt;li&gt;Highly scalable and designed for **large datasets**.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Low-Level Design (LLD)&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;**Metadata Storage:**
    &lt;ul&gt;
      &lt;li&gt;**Consistent Hashing** (e.g., Consistent Hashing) to distribute metadata across multiple servers for high availability and scalability.&lt;/li&gt;
      &lt;li&gt;**Replicate metadata** across multiple availability zones for fault tolerance.&lt;/li&gt;
      &lt;li&gt;Use a distributed database (like **Cassandra** or **DynamoDB**) for efficient metadata storage and retrieval.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;**Object Storage:**
    &lt;ul&gt;
      &lt;li&gt;Store object data in **chunks** across multiple servers within an availability zone.&lt;/li&gt;
      &lt;li&gt;Utilize **erasure coding techniques** (like Reed-Solomon) to provide data redundancy and fault tolerance.&lt;/li&gt;
      &lt;li&gt;Implement efficient **data placement algorithms** to optimize read/write performance and minimize data transfer.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;File Store&lt;/h2&gt;

&lt;h3&gt;High-Level Design (HLD)&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Stores data in a **hierarchical structure** (directories and files) similar to a traditional file system.&lt;/li&gt;
  &lt;li&gt;Supports operations like create, read, write, delete, and move files and directories.&lt;/li&gt;
  &lt;li&gt;Provides a more familiar interface for users accustomed to file systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Low-Level Design (LLD)&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;**Metadata Storage:**
    &lt;ul&gt;
      &lt;li&gt;Utilize a distributed file system (like **HDFS**) to store metadata (file names, directories, permissions).&lt;/li&gt;
      &lt;li&gt;Implement a **metadata server** to handle metadata operations and maintain data consistency.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;**Data Storage:**
    &lt;ul&gt;
      &lt;li&gt;Store data in chunks across multiple servers.&lt;/li&gt;
      &lt;li&gt;Implement **data replication** and **fault tolerance mechanisms**.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Block Store&lt;/h2&gt;

&lt;h3&gt;High-Level Design (HLD)&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Stores data as a collection of **blocks** (fixed-size units of data).&lt;/li&gt;
  &lt;li&gt;Provides low-level storage abstraction for building higher-level storage services (e.g., file systems, databases).&lt;/li&gt;
  &lt;li&gt;Offers high performance for random read/write operations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Low-Level Design (LLD)&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;**Data Storage:**
    &lt;ul&gt;
      &lt;li&gt;Divide the storage into logical units (e.g., 4KB blocks).&lt;/li&gt;
      &lt;li&gt;Assign each block to a specific storage device (e.g., **SSD**, **HDD**) based on performance and cost requirements.&lt;/li&gt;
      &lt;li&gt;Implement **data striping** and **replication** across multiple devices for fault tolerance and performance.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;AWS S3: A Deeper Dive&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;**Bucket:** A fundamental unit of storage in S3. Each bucket has a globally unique name.&lt;/li&gt;
  &lt;li&gt;**Object:** A data unit within a bucket. Objects can be any type of data (images, videos, documents, etc.).&lt;/li&gt;
  &lt;li&gt;**URI:** A unique identifier for an object within S3 (e.g., `s3://bucket-name/object-key`).&lt;/li&gt;
  &lt;li&gt;**Durability:** S3 offers industry-leading durability (99.999999999%) with data replicated across multiple availability zones.&lt;/li&gt;
  &lt;li&gt;**Availability:** S3 provides high availability with multiple availability zones and redundant infrastructure.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;AWS Ecosystem&lt;/h2&gt;

&lt;p&gt;S3 seamlessly integrates with other AWS services, such as:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;**EC2:** For running applications that interact with S3.&lt;/li&gt;
  &lt;li&gt;**Lambda:** For serverless functions that process data stored in S3.&lt;/li&gt;
  &lt;li&gt;**Glacier:** For archiving infrequently accessed data.&lt;/li&gt;
  &lt;li&gt;**EBS:** For persistent storage for EC2 instances.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>s3</category>
      <category>systemdesign</category>
      <category>data</category>
    </item>
    <item>
      <title>Monitor Your Static App memory usage EC2 Instances with Prometheus and Grafana</title>
      <dc:creator>Yashvi Kothari</dc:creator>
      <pubDate>Sun, 12 Jan 2025 18:57:30 +0000</pubDate>
      <link>https://forem.com/aws-builders/monitor-your-static-app-memory-usage-ec2-instances-with-prometheus-and-grafana-21ln</link>
      <guid>https://forem.com/aws-builders/monitor-your-static-app-memory-usage-ec2-instances-with-prometheus-and-grafana-21ln</guid>
      <description>&lt;p&gt;This blog post will guide you through setting up Prometheus and Grafana on a launched Ubuntu EC2 instance to monitor CPU and memory utilization metrics, and then visualize them in Grafana dashboards for effective resource allocation / optimization. &lt;/p&gt;

&lt;p&gt;Prerequisites:&lt;/p&gt;

&lt;p&gt;1.An AWS account with an EC2 instance launched and running Ubuntu.&lt;br&gt;
2.SSH access to your EC2 instance with a PEM key file.&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%2Fbhszqps7b9i7qgr2597d.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%2Fbhszqps7b9i7qgr2597d.png" alt="Image description" width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔍 Objective:&lt;/p&gt;

&lt;p&gt;1.Configure Prometheus to scrape metrics from EC2 instances&lt;/p&gt;

&lt;p&gt;2.Set up Grafana to visualize CPU and memory utilization metrics&lt;/p&gt;

&lt;p&gt;3.Create dashboards in Grafana for monitoring and analysis&lt;/p&gt;

&lt;p&gt;4.Optimize resource allocation based on monitoring data&lt;/p&gt;

&lt;p&gt;Step 1: Launch an Ubuntu EC2 Instance&lt;/p&gt;

&lt;p&gt;Log in to your AWS Management Console and navigate to the EC2 service.&lt;br&gt;
Click on "Launch Instance".&lt;br&gt;
Choose an Ubuntu AMI (Amazon Machine Image).&lt;br&gt;
Select an appropriate instance type based on your requirements.&lt;br&gt;
Configure instance details like storage, security group, and networking.&lt;br&gt;
Launch the instance.&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%2Fw89t42belstn3q50ktyu.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%2Fw89t42belstn3q50ktyu.png" alt="Image description" width="800" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 2: Install and Configure Prometheus&lt;/p&gt;

&lt;p&gt;Connect to your EC2 instance using SSH with your PEM key file.&lt;/p&gt;

&lt;p&gt;`&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
ssh -i "yashvikotharivm1_pem_key.pem" ubuntu@&amp;lt;your_public_ip_address.awsamazon.com&amp;gt;&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;br&gt;
`&lt;/p&gt;

&lt;p&gt;Update the package lists:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt update&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Install Prometheus:&lt;br&gt;
&lt;code&gt;&lt;br&gt;
sudo apt install prometheus&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Edit the Prometheus configuration file (/etc/prometheus/prometheus.yml):&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo nano /etc/prometheus/prometheus.yml&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Add the following configuration snippet to scrape metrics from NodeExporter (a Prometheus exporter that collects system metrics):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;YAML

scrape_configs:
  - job_name: node_exporter
    static_configs:
      - targets: ["localhost:9101"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note: The default port for Prometheus scraping targets is 9090, but NodeExporter uses a different port (9101) to avoid conflicts.&lt;/p&gt;

&lt;p&gt;Save the changes and restart Prometheus:&lt;br&gt;
&lt;code&gt;sudo systemctl restart prometheus&lt;/code&gt;&lt;br&gt;
Step 3: Install and Configure Grafana`&lt;/p&gt;

&lt;p&gt;Install Grafana:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt install grafana&lt;/code&gt;&lt;br&gt;
Configure security groups to allow inbound traffic on port 3000 (Grafana's default web interface port).&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%2Frlir0rvr6j31x5ewjqi4.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%2Frlir0rvr6j31x5ewjqi4.png" alt="Image description" width="800" height="203"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Restart Grafana:&lt;br&gt;
&lt;code&gt;sudo systemctl restart grafana&lt;br&gt;
&lt;/code&gt;Access the Grafana web interface:&lt;br&gt;
http://:3000&lt;/p&gt;

&lt;p&gt;Step 4: Add Prometheus as a Data Source in Grafana&lt;/p&gt;

&lt;p&gt;Log in to Grafana using the default credentials (username: admin, password: admin).&lt;br&gt;
Navigate to "Configuration" &amp;gt; "Data Sources".&lt;br&gt;
Click "Add data source".&lt;br&gt;
Select "Prometheus" as the type.&lt;br&gt;
Enter the URL of your Prometheus instance (&lt;a href="http://localhost:9090" rel="noopener noreferrer"&gt;http://localhost:9090&lt;/a&gt;) in the "URL" field.&lt;br&gt;
Click "Save &amp;amp; Test" to establish the connection.&lt;br&gt;
Step 5: Create a Dashboard in Grafana&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%2Fj0kwo04b92ftd5tz1vo4.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%2Fj0kwo04b92ftd5tz1vo4.png" alt="Image description" width="800" height="516"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on "Dashboards" and then "New dashboard".&lt;br&gt;
Give your dashboard a name (e.g., "EC2 Instance Monitoring").&lt;br&gt;
Click "Add panel" and select "Graph" as the panel type.&lt;br&gt;
In the "Title" field, enter "CPU Usage".&lt;br&gt;
In the "Metrics" tab, select "Prometheus" as the data source.&lt;br&gt;
In the "Query" box, paste the following query to visualize CPU usage:&lt;br&gt;
rate(node_exporter_cpu_usage{job="node_exporter"}[1m])&lt;br&gt;
Click "Save" to save the panel.&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%2Fgzra91tv4gnfnqz3sxbp.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%2Fgzra91tv4gnfnqz3sxbp.png" alt="Image description" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repeat steps 5-7 to create additional panels for memory utilization or other metrics you want to monitor.&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%2F041exyt5jhs5ob4tg7bj.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%2F041exyt5jhs5ob4tg7bj.png" alt="Image description" width="800" height="235"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can customize the panels with different visualizations (e.g., line graphs, heatmaps) and adjust the time range to view&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%2Fe4i4d1ln1v1l0lueqpjq.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%2Fe4i4d1ln1v1l0lueqpjq.png" alt="Image description" width="800" height="232"&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%2Fwnmwino4blqr4ozecpmn.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%2Fwnmwino4blqr4ozecpmn.png" alt="Image description" width="800" height="232"&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%2Ftm69hljaus6vu6tw5leu.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%2Ftm69hljaus6vu6tw5leu.png" alt="Image description" width="800" height="588"&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%2Fcq5vwxbx4x6djubx3ad0.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%2Fcq5vwxbx4x6djubx3ad0.png" alt="Image description" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More details available as below in github&lt;br&gt;
(Complete Live project notes will be provided soon):-&lt;/p&gt;

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

</description>
      <category>aws</category>
      <category>prometheus</category>
      <category>monitoring</category>
      <category>grafana</category>
    </item>
    <item>
      <title>IAM Deep Dive: AWS Security SCS-C02 Exam Prep 1</title>
      <dc:creator>Yashvi Kothari</dc:creator>
      <pubDate>Sun, 29 Sep 2024 20:10:10 +0000</pubDate>
      <link>https://forem.com/aws-builders/iam-deep-dive-aws-security-scs-c02-exam-prep-1-5e33</link>
      <guid>https://forem.com/aws-builders/iam-deep-dive-aws-security-scs-c02-exam-prep-1-5e33</guid>
      <description>&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  1. What is Identity and Access Management?
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
A service/system that protects your valuable AWS resources.&lt;/p&gt;

&lt;h3&gt;
  
  
  Definition IAM
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;who can access your AWS account &lt;/li&gt;
&lt;li&gt;what they can do.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  IAM itself
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Identity Management:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;who can access your AWS account. &lt;/li&gt;
&lt;li&gt;IAM uses unique usernames to identify individuals within your account, preventing duplicate user accounts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Authentication:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;identified user is who they claim to be. &lt;/li&gt;
&lt;li&gt;involves providing a username and password.
OR 
also use Multi-Factor Authentication (MFA) for extra security.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Access Management
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;what resources an authenticated user can access.&lt;/li&gt;
&lt;li&gt;grant granular permissions, such as "Full Access" to EC2 or "Read Only" to RDS.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Access Control
&lt;/h3&gt;

&lt;h4&gt;
  
  
  method used to grant access:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;username/password&lt;/li&gt;
&lt;li&gt;Traditional method&lt;/li&gt;
&lt;li&gt;Basic security &lt;/li&gt;
&lt;li&gt;&lt;p&gt;While effective for simple setups, it's vulnerable to password breaches.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MFA&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;MFA significantly reduces the risk of unauthorized access, even if credentials are compromised.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Time-based One-Time Password (TOTP): Generates a unique code that expires after a short time.&lt;br&gt;
Push notifications: Sends a notification to a registered device, requiring user confirmation.&lt;br&gt;
Hardware tokens: Physical devices that generate unique codes.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;federated access&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;simplifies user management and provides seamless login experience.&lt;/li&gt;
&lt;li&gt;use security measures of the external identity provider.&lt;/li&gt;
&lt;li&gt;External identity provider: Allows users outside your AWS account to access resources using credentials from a trusted external identity provider.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Single sign-on (SSO): Enables users to log in to multiple applications with a single set of credentials.&lt;br&gt;
Social login: Allows users to sign in using their existing accounts from social media platforms (e.g., Google, Facebook).&lt;br&gt;
Enterprise identity providers: Integrates with your organization's existing identity management systems (e.g., Active Directory)&lt;/p&gt;

&lt;h3&gt;
  
  
  Why IAM ?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Minimize risks: Restrict access to resources, preventing unauthorized individuals from causing damage.&lt;/li&gt;
&lt;li&gt;Enhance compliance: Meet industry standards and regulations by adhering to secure access protocols.&lt;/li&gt;
&lt;li&gt;Improve manageability: Simplify user access and resource management within your AWS account.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2.AWS IAM Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Access Management:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Users&lt;/strong&gt;: &lt;br&gt;
individual identities (people or applications) needing access to AWS resources. &lt;br&gt;
Each user has a unique ARN (Amazon Resource Name). &lt;br&gt;
User have Multi-Factor Authentication (MFA) for enhanced security.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;IAM User Groups&lt;/strong&gt;: &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;add IAM users. &lt;br&gt;
Attached Policies to grant or deny access to resources. &lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Roles&lt;/strong&gt;: &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Temporary credentials used by users, other AWS services, or applications to access resources. &lt;br&gt;
Roles don't have passwords but can be assumed by authorized identities.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Policies (JSON documents)&lt;/strong&gt;: 
Define what resources can be accessed (or denied) and by whom.
Policies can be attached to users, groups, or roles. &lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Account Settings:&lt;/strong&gt; Enforce password policies with minimum security requirements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security Token Service (STS)&lt;/strong&gt;: &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Provides temporary, limited-privilege credentials for IAM and federated users. &lt;br&gt;
Regional endpoints are available for lower latency.&lt;/p&gt;

&lt;h3&gt;
  
  
  Access Reports:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Access Analyzer&lt;/strong&gt;: &lt;br&gt;
Identifies policies granting access to resources from outside your trusted zone (e.g., cross-account access). &lt;br&gt;
Helps identify potential security risks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Credential Report&lt;/strong&gt;: &lt;/p&gt;

&lt;p&gt;Generates a CSV file listing all IAM users with details like last used date, password change history, and MFA status.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Organization Activity (for AWS Organizations users)&lt;/strong&gt;: &lt;/p&gt;

&lt;p&gt;Shows service activity for the past year within an account or organizational unit (OU). &lt;br&gt;
Identifies active users and services accessed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Service Control Policies (SCPs)&lt;/strong&gt;: &lt;br&gt;
Set boundaries for permissions across AWS accounts within Organizations. SCPs can override identity-based policies for stricter control.&lt;/p&gt;

&lt;p&gt;Eg:&lt;br&gt;
If a user has full access to S3, RDS, and EC2 through an IAM policy, but the Service Control Policy (SCP) denies access to S3, the user will only be able to access RDS and EC2. The SCP takes precedence and limits the maximum permissions allowed.&lt;/p&gt;

</description>
      <category>iam</category>
      <category>awsiam</category>
      <category>awssecurity</category>
      <category>scsc02</category>
    </item>
  </channel>
</rss>
