<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sahinur</title>
    <description>The latest articles on DEV Community by Sahinur (@sahinur).</description>
    <link>https://dev.to/sahinur</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F575294%2F036e7718-e7f8-48d8-90c8-bcb4e4bd12fd.jpg</url>
      <title>DEV Community: Sahinur</title>
      <link>https://dev.to/sahinur</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sahinur"/>
    <language>en</language>
    <item>
      <title>RDS vs DynamoDB: How I Think About Choosing an AWS Database</title>
      <dc:creator>Sahinur</dc:creator>
      <pubDate>Thu, 17 Sep 2026 18:00:00 +0000</pubDate>
      <link>https://dev.to/sahinur/rds-vs-dynamodb-how-i-think-about-choosing-an-aws-database-7eh</link>
      <guid>https://dev.to/sahinur/rds-vs-dynamodb-how-i-think-about-choosing-an-aws-database-7eh</guid>
      <description>&lt;p&gt;Choosing a database is one of those decisions that can look simple at the beginning of a project.&lt;/p&gt;

&lt;p&gt;You need to store some data, so you pick a database and start building.&lt;/p&gt;

&lt;p&gt;But once you start thinking about &lt;strong&gt;scale, queries, cost, performance, and maintenance&lt;/strong&gt;, the decision becomes much more interesting.&lt;/p&gt;

&lt;p&gt;As a Node.js backend developer, I've mostly worked with MongoDB, but while learning and working with AWS, I've spent more time understanding how AWS database services such as &lt;strong&gt;Amazon RDS&lt;/strong&gt; and &lt;strong&gt;Amazon DynamoDB&lt;/strong&gt; fit into backend architectures.&lt;/p&gt;

&lt;p&gt;They solve very different problems.&lt;/p&gt;

&lt;p&gt;Here's how I approach the decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  The data shape comes first
&lt;/h2&gt;

&lt;p&gt;Before choosing a database, I think about the data and, more importantly, &lt;strong&gt;how the application will access that data&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example, imagine an e-commerce application.&lt;/p&gt;

&lt;p&gt;We might have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Users
Products
Orders
Payments
Reviews
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An order might contain relationships between multiple entities:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
  ↓
Orders
  ↓
Products
  ↓
Payments
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the application requires complex relationships, joins, transactions, and flexible SQL queries, a relational database becomes very attractive.&lt;/p&gt;

&lt;p&gt;That's where RDS can make sense.&lt;/p&gt;

&lt;p&gt;But not every application needs that model.&lt;/p&gt;

&lt;p&gt;Imagine an application where the primary access pattern is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Get user by ID
Get user's notifications
Get latest notifications
Mark notification as read
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If these access patterns are predictable and the application needs massive scalability, DynamoDB becomes an interesting option.&lt;/p&gt;

&lt;p&gt;The key lesson is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't start with the database. Start with the data and access patterns.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What pulls me toward RDS
&lt;/h2&gt;

&lt;p&gt;Amazon RDS provides managed relational databases such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;MySQL&lt;/li&gt;
&lt;li&gt;MariaDB&lt;/li&gt;
&lt;li&gt;Oracle&lt;/li&gt;
&lt;li&gt;SQL Server&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the biggest advantages is the relational model.&lt;/p&gt;

&lt;p&gt;For applications with relationships between entities, SQL can make the data model and queries much easier to reason about.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;
&lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;
    &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1001&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This type of relationship-oriented query is natural in a relational database.&lt;/p&gt;

&lt;p&gt;RDS is particularly attractive when I need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Complex queries&lt;/li&gt;
&lt;li&gt;Relationships&lt;/li&gt;
&lt;li&gt;Joins&lt;/li&gt;
&lt;li&gt;Transactions&lt;/li&gt;
&lt;li&gt;SQL&lt;/li&gt;
&lt;li&gt;Reporting&lt;/li&gt;
&lt;li&gt;Existing relational database expertise&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Another advantage is that many backend developers already understand SQL and relational database design.&lt;/p&gt;

&lt;p&gt;That can significantly reduce the learning curve.&lt;/p&gt;

&lt;h2&gt;
  
  
  What pulls me toward DynamoDB
&lt;/h2&gt;

&lt;p&gt;DynamoDB is fundamentally different.&lt;/p&gt;

&lt;p&gt;Instead of starting with relationships and joins, I think about &lt;strong&gt;access patterns&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GetUserById
GetOrdersByUser
GetLatestOrders
GetOrderById
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The table and indexes are designed around how the application will query the data.&lt;/p&gt;

&lt;p&gt;This approach can be extremely powerful for applications that need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High scalability&lt;/li&gt;
&lt;li&gt;Low-latency access&lt;/li&gt;
&lt;li&gt;Predictable access patterns&lt;/li&gt;
&lt;li&gt;Serverless architectures&lt;/li&gt;
&lt;li&gt;High request volumes&lt;/li&gt;
&lt;li&gt;Automatic scaling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;DynamoDB also removes much of the traditional database server management.&lt;/p&gt;

&lt;p&gt;That makes it particularly interesting when building serverless applications with services such as Lambda and API Gateway.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architectural difference
&lt;/h2&gt;

&lt;p&gt;A traditional RDS-based backend might look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client
   ↓
API
   ↓
Node.js / Express
   ↓
Amazon RDS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application connects to a relational database and performs SQL queries.&lt;/p&gt;

&lt;p&gt;A serverless architecture could look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client
   ↓
API Gateway
   ↓
Lambda
   ↓
DynamoDB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, the database fits naturally into an event-driven or serverless architecture.&lt;/p&gt;

&lt;p&gt;Neither architecture is automatically better.&lt;/p&gt;

&lt;p&gt;The workload determines which one makes more sense.&lt;/p&gt;

&lt;h2&gt;
  
  
  What about MongoDB?
&lt;/h2&gt;

&lt;p&gt;This is especially relevant to me because my backend experience includes &lt;strong&gt;MongoDB&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;MongoDB uses a document-oriented model:&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="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sahinur&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user@example.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;skills&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Node.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Express&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;MongoDB&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;p&gt;This can be very convenient for applications where the data naturally fits into documents.&lt;/p&gt;

&lt;p&gt;It also feels familiar when working with JavaScript and Node.js.&lt;/p&gt;

&lt;p&gt;That experience made me realize something important:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Database choice isn't only about technical specifications.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Developer experience, existing knowledge, application requirements, and team expertise all matter.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I would make the decision
&lt;/h2&gt;

&lt;p&gt;If I were starting a new AWS backend, I'd ask these questions first.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Do I need complex relationships?
&lt;/h3&gt;

&lt;p&gt;If the application heavily depends on relationships and joins, I'd lean toward a relational database such as RDS.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Are my access patterns predictable?
&lt;/h3&gt;

&lt;p&gt;If I know exactly how the application will read and write data and need highly scalable low-latency access, DynamoDB becomes more attractive.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Do I need SQL?
&lt;/h3&gt;

&lt;p&gt;If the team relies heavily on SQL queries, reporting, and relational data analysis, RDS is likely the easier choice.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Is the application serverless?
&lt;/h3&gt;

&lt;p&gt;If I'm building around Lambda and API Gateway, DynamoDB can fit naturally into that architecture.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. What does the team already know?
&lt;/h3&gt;

&lt;p&gt;A technically powerful database isn't useful if the team doesn't understand how to model and operate it effectively.&lt;/p&gt;

&lt;h2&gt;
  
  
  A simple comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Factor&lt;/th&gt;
&lt;th&gt;RDS&lt;/th&gt;
&lt;th&gt;DynamoDB&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Database model&lt;/td&gt;
&lt;td&gt;Relational&lt;/td&gt;
&lt;td&gt;NoSQL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Query model&lt;/td&gt;
&lt;td&gt;SQL&lt;/td&gt;
&lt;td&gt;Key/index based&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Joins&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No traditional joins&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transactions&lt;/td&gt;
&lt;td&gt;Strong relational transactions&lt;/td&gt;
&lt;td&gt;Supported, but different model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scaling&lt;/td&gt;
&lt;td&gt;Managed, but capacity planning still matters&lt;/td&gt;
&lt;td&gt;Designed for large-scale automatic scaling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Schema&lt;/td&gt;
&lt;td&gt;Structured&lt;/td&gt;
&lt;td&gt;Flexible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best fit&lt;/td&gt;
&lt;td&gt;Relational applications&lt;/td&gt;
&lt;td&gt;High-scale access-pattern-driven workloads&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Serverless fit&lt;/td&gt;
&lt;td&gt;Possible&lt;/td&gt;
&lt;td&gt;Excellent&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The biggest lesson
&lt;/h2&gt;

&lt;p&gt;The biggest lesson I've learned while studying different database architectures is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don't choose a database because it's popular. Choose it because its data model matches your application.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A database can be extremely fast and scalable but still be the wrong choice if your application's access patterns don't fit it.&lt;/p&gt;

&lt;p&gt;Similarly, choosing a relational database when your application has simple key-value access patterns can introduce unnecessary complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd do before committing
&lt;/h2&gt;

&lt;p&gt;Before choosing a database, I'd write down the application's most important operations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Create user
2. Get user by ID
3. Get user's orders
4. Create order
5. Update order
6. Get latest orders
7. Generate reports
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I'd evaluate how naturally each database handles those operations.&lt;/p&gt;

&lt;p&gt;This exercise can reveal more than a generic database comparison ever will.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final takeaway
&lt;/h2&gt;

&lt;p&gt;For me, the RDS vs DynamoDB discussion isn't really about which service is better.&lt;/p&gt;

&lt;p&gt;It's about &lt;strong&gt;matching the database model to the application&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If I need relational data, SQL, joins, and complex queries, RDS is a strong candidate.&lt;/p&gt;

&lt;p&gt;If I have predictable access patterns and need highly scalable, low-latency NoSQL access, DynamoDB is worth serious consideration.&lt;/p&gt;

&lt;p&gt;And my experience with MongoDB has reinforced the same principle:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The right database is the one that makes your application's most important operations simple, reliable, and scalable.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's the way I now approach database decisions when designing backend systems on AWS.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>database</category>
      <category>dynamodb</category>
      <category>rds</category>
    </item>
    <item>
      <title>How I Would Structure a Node.js Backend on AWS: EC2 vs Lambda</title>
      <dc:creator>Sahinur</dc:creator>
      <pubDate>Thu, 10 Sep 2026 18:00:00 +0000</pubDate>
      <link>https://dev.to/sahinur/how-i-would-structure-a-nodejs-backend-on-aws-ec2-vs-lambda-44oh</link>
      <guid>https://dev.to/sahinur/how-i-would-structure-a-nodejs-backend-on-aws-ec2-vs-lambda-44oh</guid>
      <description>&lt;p&gt;When building a backend on AWS, one of the first decisions is not which framework to use.&lt;/p&gt;

&lt;p&gt;It's &lt;strong&gt;where and how the backend should run&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;As a Node.js developer, I've worked with Express-based APIs and AWS EC2, and one question that keeps coming up is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should I run my backend on a traditional server, or move toward a serverless architecture such as API Gateway + Lambda?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There isn't one answer for every application.&lt;/p&gt;

&lt;p&gt;The right choice depends on traffic, workload, architecture, team experience, and operational requirements.&lt;/p&gt;

&lt;p&gt;Here's how I think about the decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  The requirement
&lt;/h2&gt;

&lt;p&gt;For a typical Node.js backend, I usually need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;REST APIs&lt;/li&gt;
&lt;li&gt;Authentication and authorization&lt;/li&gt;
&lt;li&gt;MongoDB or another database&lt;/li&gt;
&lt;li&gt;File uploads&lt;/li&gt;
&lt;li&gt;Background processing&lt;/li&gt;
&lt;li&gt;Logging and monitoring&lt;/li&gt;
&lt;li&gt;Reliable deployment&lt;/li&gt;
&lt;li&gt;The ability to handle changing traffic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A simple backend might look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client
   ↓
Node.js + Express API
   ↓
MongoDB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When deploying this to AWS, there are several ways to run it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Options I considered
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Option A: EC2 + Node.js + Express
&lt;/h3&gt;

&lt;p&gt;This is the traditional approach.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client
   ↓
Nginx
   ↓
AWS EC2
   ↓
Node.js + Express
   ↓
MongoDB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The biggest advantage is control.&lt;/p&gt;

&lt;p&gt;I can manage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The operating system&lt;/li&gt;
&lt;li&gt;Node.js process&lt;/li&gt;
&lt;li&gt;PM2&lt;/li&gt;
&lt;li&gt;Nginx&lt;/li&gt;
&lt;li&gt;Networking&lt;/li&gt;
&lt;li&gt;Installed dependencies&lt;/li&gt;
&lt;li&gt;Background processes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's also a straightforward model for developers who already understand traditional server deployment.&lt;/p&gt;

&lt;p&gt;But that control also creates more responsibility.&lt;/p&gt;

&lt;p&gt;I need to think about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Server maintenance&lt;/li&gt;
&lt;li&gt;Scaling&lt;/li&gt;
&lt;li&gt;Memory usage&lt;/li&gt;
&lt;li&gt;Process management&lt;/li&gt;
&lt;li&gt;Security updates&lt;/li&gt;
&lt;li&gt;Monitoring&lt;/li&gt;
&lt;li&gt;High availability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I've seen this firsthand with production Node.js applications: the application itself may be working correctly, but server resources such as memory can become a problem under real traffic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option B: API Gateway + Lambda
&lt;/h3&gt;

&lt;p&gt;The serverless approach changes the architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client
   ↓
API Gateway
   ↓
Lambda
   ↓
Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of keeping a Node.js server running continuously, individual Lambda functions execute in response to requests.&lt;/p&gt;

&lt;p&gt;This can reduce the amount of server infrastructure I need to manage.&lt;/p&gt;

&lt;p&gt;It can also make automatic scaling much easier for workloads that aren't constantly running at high utilization.&lt;/p&gt;

&lt;p&gt;But serverless introduces its own considerations.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cold starts&lt;/li&gt;
&lt;li&gt;Execution limits&lt;/li&gt;
&lt;li&gt;Function design&lt;/li&gt;
&lt;li&gt;Database connection management&lt;/li&gt;
&lt;li&gt;Logging&lt;/li&gt;
&lt;li&gt;Local development&lt;/li&gt;
&lt;li&gt;Vendor-specific architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So serverless isn't automatically "better."&lt;/p&gt;

&lt;h3&gt;
  
  
  Option C: ECS / Fargate
&lt;/h3&gt;

&lt;p&gt;Another option is containerizing the Node.js application:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client
   ↓
Load Balancer
   ↓
ECS / Fargate
   ↓
Node.js + Express
   ↓
MongoDB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gives me many of the benefits of containers without requiring me to manage the underlying EC2 instances directly.&lt;/p&gt;

&lt;p&gt;For larger applications or teams already using Docker, this can be a very attractive middle ground.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture I'd choose
&lt;/h2&gt;

&lt;p&gt;For a small-to-medium Node.js API with predictable traffic, EC2 can still be a practical choice.&lt;/p&gt;

&lt;p&gt;A basic architecture could be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 ┌──────────────┐
                 │    Client    │
                 └──────┬───────┘
                        │
                        ▼
                 ┌──────────────┐
                 │    Nginx     │
                 └──────┬───────┘
                        │
                        ▼
              ┌──────────────────┐
              │     AWS EC2      │
              │                  │
              │ Node.js +        │
              │ Express + PM2    │
              └────────┬─────────┘
                       │
                       ▼
                 ┌──────────────┐
                 │   MongoDB    │
                 └──────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This architecture is simple, familiar, and gives me direct control over the application environment.&lt;/p&gt;

&lt;p&gt;But I wouldn't automatically use it for every new project.&lt;/p&gt;

&lt;p&gt;If the application has highly variable traffic, independent functions, or a strong serverless requirement, I'd seriously consider API Gateway + Lambda.&lt;/p&gt;

&lt;h2&gt;
  
  
  The trade-offs
&lt;/h2&gt;

&lt;p&gt;The interesting part isn't choosing the "most modern" AWS service.&lt;/p&gt;

&lt;p&gt;It's understanding what you're giving up and what you're gaining.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Factor&lt;/th&gt;
&lt;th&gt;EC2&lt;/th&gt;
&lt;th&gt;Lambda&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Server management&lt;/td&gt;
&lt;td&gt;Higher&lt;/td&gt;
&lt;td&gt;Lower&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scaling&lt;/td&gt;
&lt;td&gt;Requires configuration&lt;/td&gt;
&lt;td&gt;Automatic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long-running processes&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cold starts&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Possible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Infrastructure control&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Lower&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment model&lt;/td&gt;
&lt;td&gt;Server/application&lt;/td&gt;
&lt;td&gt;Function-based&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operational complexity&lt;/td&gt;
&lt;td&gt;Higher&lt;/td&gt;
&lt;td&gt;Different, not zero&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best fit&lt;/td&gt;
&lt;td&gt;Persistent services&lt;/td&gt;
&lt;td&gt;Event/API-driven workloads&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is why I don't think &lt;strong&gt;"serverless means no problems."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It means you're moving some operational responsibilities away from servers and taking on a different set of architectural considerations.&lt;/p&gt;

&lt;h2&gt;
  
  
  A lesson from production
&lt;/h2&gt;

&lt;p&gt;One thing that changed how I think about architecture is realizing that application behavior matters just as much as infrastructure choice.&lt;/p&gt;

&lt;p&gt;For example, a Node.js API can run perfectly on a powerful EC2 instance and still have problems if an endpoint loads thousands of MongoDB documents into memory.&lt;/p&gt;

&lt;p&gt;Likewise, moving that endpoint to Lambda wouldn't automatically fix inefficient data processing.&lt;/p&gt;

&lt;p&gt;The architecture can help, but &lt;strong&gt;good application design still matters.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd change next time
&lt;/h2&gt;

&lt;p&gt;If I were starting a new AWS backend today, I'd make the architecture decision based on the workload instead of choosing a service simply because it's popular.&lt;/p&gt;

&lt;p&gt;I'd ask:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How predictable is the traffic?&lt;/li&gt;
&lt;li&gt;Does the application need long-running processes?&lt;/li&gt;
&lt;li&gt;How much infrastructure do we want to manage?&lt;/li&gt;
&lt;li&gt;What are the database access patterns?&lt;/li&gt;
&lt;li&gt;How important is automatic scaling?&lt;/li&gt;
&lt;li&gt;What are the latency requirements?&lt;/li&gt;
&lt;li&gt;Does the team already have experience with containers or serverless?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Only after answering those questions would I choose between EC2, ECS/Fargate, and Lambda.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final takeaway
&lt;/h2&gt;

&lt;p&gt;There is no single AWS architecture that is perfect for every Node.js application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EC2, ECS/Fargate, and Lambda solve different problems.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For me, the important lesson is to start with the application's requirements and workload, then choose the AWS service that fits.&lt;/p&gt;

&lt;p&gt;The goal isn't to use the most services.&lt;/p&gt;

&lt;p&gt;The goal is to build a system that is &lt;strong&gt;reliable, maintainable, scalable, and appropriate for the actual workload.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And that's one of the things I'm continuing to learn as I work deeper with AWS and backend engineering.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>serverless</category>
      <category>architecture</category>
      <category>node</category>
    </item>
    <item>
      <title>A Node.js Backend Memory Issue That Only Showed Up in Production</title>
      <dc:creator>Sahinur</dc:creator>
      <pubDate>Wed, 02 Sep 2026 04:27:15 +0000</pubDate>
      <link>https://dev.to/sahinur/a-nodejs-backend-memory-issue-that-only-showed-up-in-production-2ljf</link>
      <guid>https://dev.to/sahinur/a-nodejs-backend-memory-issue-that-only-showed-up-in-production-2ljf</guid>
      <description>&lt;p&gt;One of the most frustrating backend problems is an issue that works perfectly in development and staging, but starts failing when real production traffic arrives.&lt;/p&gt;

&lt;p&gt;I recently worked with a &lt;strong&gt;Node.js + Express + MongoDB&lt;/strong&gt; backend running on an &lt;strong&gt;AWS EC2 instance&lt;/strong&gt;, where we started seeing unexpected memory usage in production.&lt;/p&gt;

&lt;p&gt;The application was working normally at first. Then, as traffic increased, the server's memory usage kept climbing until the Node.js process eventually crashed.&lt;/p&gt;

&lt;p&gt;Here's how I approached the problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;The backend was built with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Express.js&lt;/li&gt;
&lt;li&gt;MongoDB&lt;/li&gt;
&lt;li&gt;AWS EC2&lt;/li&gt;
&lt;li&gt;PM2 for process management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The basic architecture looked like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client
   ↓
Nginx
   ↓
Node.js + Express
   ↓
MongoDB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application handled API requests normally during development and staging.&lt;/p&gt;

&lt;p&gt;The EC2 instance also had enough resources for the expected workload, so initially there was no obvious reason for the server to run out of memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  What went wrong
&lt;/h2&gt;

&lt;p&gt;After the application had been running under production traffic for some time, memory usage started increasing.&lt;/p&gt;

&lt;p&gt;We noticed the EC2 instance's memory utilization gradually climbing instead of returning to its normal level after requests were completed.&lt;/p&gt;

&lt;p&gt;Eventually, the Node.js process became unstable and crashed.&lt;/p&gt;

&lt;p&gt;A representative error looked like this:&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;--- Last few GCs ---&amp;gt;

FATAL ERROR: Reached heap limit
Allocation failed - JavaScript heap out of memory

Node.js v20.x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At first, increasing the server resources seemed like the easiest solution.&lt;/p&gt;

&lt;p&gt;But that would only hide the actual problem.&lt;/p&gt;

&lt;p&gt;The important question was:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why was the application continuously consuming more memory?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why staging didn't catch it
&lt;/h2&gt;

&lt;p&gt;This was one of the interesting parts of the problem.&lt;/p&gt;

&lt;p&gt;The application worked correctly in staging because the environment was significantly different from production.&lt;/p&gt;

&lt;p&gt;The main differences were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lower traffic&lt;/li&gt;
&lt;li&gt;Fewer concurrent requests&lt;/li&gt;
&lt;li&gt;Smaller datasets&lt;/li&gt;
&lt;li&gt;Shorter test duration&lt;/li&gt;
&lt;li&gt;Less realistic production usage patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A memory problem doesn't necessarily appear immediately.&lt;/p&gt;

&lt;p&gt;An application can use a little more memory after every request without causing any visible problem during a short test.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Request 1  →  500 MB
Request 100 → 550 MB
Request 1,000 → 700 MB
Request 10,000 → 1.2 GB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eventually, the server reaches its available memory limit.&lt;/p&gt;

&lt;p&gt;This made the problem difficult to reproduce in staging.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I investigated the problem
&lt;/h2&gt;

&lt;p&gt;The first thing I did was check the EC2 instance's resource usage.&lt;/p&gt;

&lt;p&gt;I used system-level monitoring to check memory consumption:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;free &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I also checked running processes:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;and inspected the Node.js process managed by PM2:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pm2 status
pm2 monit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important observation was that CPU usage wasn't consistently high.&lt;/p&gt;

&lt;p&gt;Memory usage, however, continued increasing.&lt;/p&gt;

&lt;p&gt;That changed the direction of the investigation.&lt;/p&gt;

&lt;p&gt;Instead of asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Why is the API slow?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I started asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What is keeping objects in memory longer than expected?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Looking at the application
&lt;/h2&gt;

&lt;p&gt;I started reviewing endpoints that processed large amounts of data.&lt;/p&gt;

&lt;p&gt;One suspicious pattern was fetching a large dataset from MongoDB and keeping the entire result in memory before processing it.&lt;/p&gt;

&lt;p&gt;For example:&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;const&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;active&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// process user&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This can become expensive when the collection grows.&lt;/p&gt;

&lt;p&gt;If MongoDB returns thousands or tens of thousands of documents, Node.js has to hold those JavaScript objects in memory.&lt;/p&gt;

&lt;p&gt;The problem becomes worse if multiple requests are doing the same thing concurrently.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix
&lt;/h2&gt;

&lt;p&gt;The first improvement was to avoid loading unnecessary records into memory.&lt;/p&gt;

&lt;p&gt;Instead of retrieving everything, we introduced pagination:&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;const&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;limit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;active&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="nf"&gt;skip&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lean&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the application only processes a limited number of documents per request.&lt;/p&gt;

&lt;p&gt;We also reviewed queries to make sure we weren't returning fields that the API didn't actually need.&lt;/p&gt;

&lt;p&gt;For example:&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;const&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;active&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="nf"&gt;select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name email status&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="nf"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lean&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This reduced unnecessary data being loaded into the Node.js process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Monitoring after the fix
&lt;/h2&gt;

&lt;p&gt;After making the changes, I continued monitoring the application rather than assuming the problem was solved.&lt;/p&gt;

&lt;p&gt;The important thing was to observe memory usage over a longer period under realistic traffic.&lt;/p&gt;

&lt;p&gt;The expected pattern was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Memory
  │
  │       ╭──╮      ╭──╮
  │    ╭──╯  ╰──╮ ╭─╯  ╰──
  │────╯────────╰─╯──────────
  │
  └────────────────────────── Time
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of continuously climbing, memory usage should stabilize within a reasonable range.&lt;/p&gt;

&lt;p&gt;I also kept PM2 monitoring in place so that unexpected process behavior could be detected quickly.&lt;/p&gt;

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

&lt;p&gt;This incident taught me an important lesson:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A backend can work perfectly in development and still have serious resource problems in production.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For Node.js applications, I now pay much more attention to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Large MongoDB queries&lt;/li&gt;
&lt;li&gt;Pagination&lt;/li&gt;
&lt;li&gt;Selecting only required fields&lt;/li&gt;
&lt;li&gt;Processing large datasets&lt;/li&gt;
&lt;li&gt;Concurrent requests&lt;/li&gt;
&lt;li&gt;Memory usage over time&lt;/li&gt;
&lt;li&gt;Production-like load testing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also learned that simply increasing the EC2 instance size isn't always the correct solution.&lt;/p&gt;

&lt;p&gt;More RAM can postpone the crash, but it doesn't necessarily fix the underlying problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd do differently
&lt;/h2&gt;

&lt;p&gt;If I were setting up the same system again, I'd introduce memory monitoring and load testing much earlier.&lt;/p&gt;

&lt;p&gt;I'd also test endpoints with production-sized datasets instead of relying only on small staging datasets.&lt;/p&gt;

&lt;p&gt;The biggest takeaway for me was simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don't just test whether your API works. Test how it behaves after running for a long time under realistic load.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's where some of the most interesting backend problems reveal themselves.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>node</category>
      <category>backend</category>
      <category>debugging</category>
    </item>
    <item>
      <title>Book Review: "Software Development From A to Z" — The Book I Wish I'd Read Before My First Dev Job</title>
      <dc:creator>Sahinur</dc:creator>
      <pubDate>Thu, 20 Aug 2026 09:27:19 +0000</pubDate>
      <link>https://dev.to/sahinur/book-review-software-development-from-a-to-z-the-book-i-wish-id-read-before-my-first-dev-job-299a</link>
      <guid>https://dev.to/sahinur/book-review-software-development-from-a-to-z-the-book-i-wish-id-read-before-my-first-dev-job-299a</guid>
      <description>&lt;p&gt;Most programming books teach you one thing deeply: a language, a framework, a database. Very few explain how all of those things fit together inside an actual team, or why the product manager keeps asking you for estimates, or what the designer is doing for three weeks before you get a single mockup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Software Development From A to Z&lt;/strong&gt; by Olga Filipova and Rui Vilão (Apress, 2018) tries to fill exactly that gap. I finished it recently, and here's my take.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the book is about
&lt;/h2&gt;

&lt;p&gt;The premise is simple: follow one small team building one product, an online learning platform, from "hey, I have an idea" all the way to maintaining it in production. Each chapter is narrated from the seat of a different role:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Having an idea (and turning it into an MVP)&lt;/li&gt;
&lt;li&gt;Roles, responsibilities, Scrum and Kanban&lt;/li&gt;
&lt;li&gt;The product manager: requirements and deadlines&lt;/li&gt;
&lt;li&gt;The designer: user-centered design&lt;/li&gt;
&lt;li&gt;The backend engineer&lt;/li&gt;
&lt;li&gt;The frontend engineer&lt;/li&gt;
&lt;li&gt;The QA engineer&lt;/li&gt;
&lt;li&gt;DevOps: going live&lt;/li&gt;
&lt;li&gt;Maintaining and improving what you shipped&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It's around 300 pages, and it moves fast.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;The running example actually runs.&lt;/strong&gt; A lot of "big picture" books stay abstract. This one doesn't. You watch the requirements table get written, the personas get invented, the Spring Boot backend get scaffolded, the Vue/Nuxt frontend get wired up, and the whole thing get deployed to Heroku through Travis CI. Seeing the same feature (user registration, for example) pass through the hands of five different roles is the single most valuable thing in the book.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's honest about messy reality.&lt;/strong&gt; There's a whole section admitting that role titles mean different things at different companies and that it's normal to be confused. The Scrum-vs-Kanban comparison doesn't pick a winner; it rates each on a strictness scale and then shows the hybrid the authors actually use. That felt refreshingly practical.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The interviews.&lt;/strong&gt; Several chapters include short interviews with a real product manager, designer, and DevOps engineer. The "biggest screw-up / biggest success" questions in particular give the book a human texture that pure tutorials lack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The MVP chapter.&lt;/strong&gt; If you've never internalized the difference between delivering a wheel and delivering a skateboard, chapter 1 will fix that. It's the clearest explanation of "minimum viable" I've read in a book aimed at developers.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I didn't love
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Depth is uneven.&lt;/strong&gt; The backend and frontend chapters go fairly deep into code, while the DevOps chapter stays more conceptual. If you're reading for the technical content, you'll find the engineering chapters meatier than the rest. If you're reading for the big picture, the code may feel like a detour.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The stack is dated.&lt;/strong&gt; Java/Spring Boot and Vue 2 with Nuxt are still perfectly reasonable choices, but Travis CI and Heroku's free tier are not what they were in 2018. Read the tooling chapters for the &lt;em&gt;ideas&lt;/em&gt; (CI on every push, automated deploys from the main branch, platform-as-a-service tradeoffs), not the specific buttons to click.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's an overview, by design.&lt;/strong&gt; No chapter will make you a designer or a DevOps engineer. That's fine, but set expectations accordingly: this is the map, not the territory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who should read it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bootcamp grads and juniors&lt;/strong&gt; about to join their first team. This will decode half the meetings you'll sit in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Career changers&lt;/strong&gt; (QA, support, design, product) who want to understand what engineers actually do all day.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solo founders&lt;/strong&gt; planning to build an MVP and wondering which hats they'll need to wear.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Experienced devs&lt;/strong&gt; who want something to hand to non-technical colleagues. It's approachable without being condescending.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Skip it if you already have a few years on cross-functional teams; you'll nod along but learn little.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verdict
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;4 / 5.&lt;/strong&gt; Not a reference book, and not the place to learn any single technology. But as a guided tour through how software gets made, and especially through how the &lt;em&gt;people&lt;/em&gt; who make it depend on each other, it's one of the better ones out there. I'd put it on the same shelf as &lt;em&gt;The Phoenix Project&lt;/em&gt;, just less narrative and more hands-on.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have you read it? What's your go-to "how teams actually work" book for new developers? Drop it in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>career</category>
      <category>softwaredevelopment</category>
      <category>books</category>
    </item>
    <item>
      <title>Cloud Computing for Beginners: A Simple Guide for Students &amp; New Developers ☁️</title>
      <dc:creator>Sahinur</dc:creator>
      <pubDate>Mon, 12 Jan 2026 12:17:59 +0000</pubDate>
      <link>https://dev.to/sahinur/cloud-computing-for-beginners-a-simple-guide-for-students-new-developers-3hop</link>
      <guid>https://dev.to/sahinur/cloud-computing-for-beginners-a-simple-guide-for-students-new-developers-3hop</guid>
      <description>&lt;p&gt;Cloud computing is no longer just a buzzword — it’s a &lt;strong&gt;core skill&lt;/strong&gt; for modern developers. Whether you’re a student, a beginner, or someone curious about how applications scale globally, understanding cloud basics can open many doors.&lt;/p&gt;

&lt;p&gt;In this article, I’ll explain &lt;strong&gt;cloud computing in simple terms&lt;/strong&gt;, without heavy jargon, and help you take your &lt;strong&gt;first step into the cloud&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Cloud Computing? (In Simple Words)
&lt;/h2&gt;

&lt;p&gt;Cloud computing means &lt;strong&gt;using computing resources over the internet instead of your own computer or physical servers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Buying servers
&lt;/li&gt;
&lt;li&gt;Maintaining hardware
&lt;/li&gt;
&lt;li&gt;Managing storage manually
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You rent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Servers&lt;/li&gt;
&lt;li&gt;Storage&lt;/li&gt;
&lt;li&gt;Databases&lt;/li&gt;
&lt;li&gt;Networking
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 All provided by cloud platforms like &lt;strong&gt;Microsoft Azure, AWS, and Google Cloud&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Think of the cloud like &lt;strong&gt;renting electricity&lt;/strong&gt; instead of building your own power plant.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Should Beginners Learn Cloud Computing?
&lt;/h2&gt;

&lt;p&gt;Here’s why cloud skills matter, even if you’re just starting:&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 High Industry Demand
&lt;/h3&gt;

&lt;p&gt;Most modern applications — from startups to enterprises — run on cloud infrastructure.&lt;/p&gt;

&lt;h3&gt;
  
  
  💼 Career Opportunities
&lt;/h3&gt;

&lt;p&gt;Cloud knowledge is useful for roles like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Software Engineer
&lt;/li&gt;
&lt;li&gt;DevOps Engineer
&lt;/li&gt;
&lt;li&gt;Cloud Engineer
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📈 Easy Scalability
&lt;/h3&gt;

&lt;p&gt;Cloud platforms allow applications to scale from &lt;strong&gt;10 users to millions&lt;/strong&gt; without rebuilding everything.&lt;/p&gt;




&lt;h2&gt;
  
  
  Core Cloud Concepts You Should Know
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1️⃣ Compute
&lt;/h3&gt;

&lt;p&gt;Compute services run your applications and code.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Azure Virtual Machines
&lt;/li&gt;
&lt;li&gt;Azure App Service
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  2️⃣ Storage
&lt;/h3&gt;

&lt;p&gt;Storage services keep files, images, backups, and logs.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Azure Blob Storage
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  3️⃣ Networking
&lt;/h3&gt;

&lt;p&gt;Networking connects cloud resources securely.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Virtual Networks
&lt;/li&gt;
&lt;li&gt;Load Balancers
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  4️⃣ Databases
&lt;/h3&gt;

&lt;p&gt;Managed databases remove the pain of setup and maintenance.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Azure SQL Database
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Cloud Service Models Explained
&lt;/h2&gt;

&lt;p&gt;Understanding these models is &lt;strong&gt;very important&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧱 IaaS – Infrastructure as a Service
&lt;/h3&gt;

&lt;p&gt;You manage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Operating system&lt;/li&gt;
&lt;li&gt;Application software
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cloud provider manages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Physical hardware
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Virtual Machines
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🧩 PaaS – Platform as a Service
&lt;/h3&gt;

&lt;p&gt;You focus on:&lt;/p&gt;

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

&lt;p&gt;Cloud provider manages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Servers&lt;/li&gt;
&lt;li&gt;OS&lt;/li&gt;
&lt;li&gt;Scaling
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Azure App Service
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  ☁️ SaaS – Software as a Service
&lt;/h3&gt;

&lt;p&gt;You simply &lt;strong&gt;use the software&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Microsoft 365
&lt;/li&gt;
&lt;li&gt;Gmail
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why Microsoft Learn Is Perfect for Beginners
&lt;/h2&gt;

&lt;p&gt;Learning cloud from documentation alone can be overwhelming.&lt;br&gt;&lt;br&gt;
That’s why &lt;strong&gt;Microsoft Learn&lt;/strong&gt; is a great starting point:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Free&lt;/li&gt;
&lt;li&gt;✅ Beginner-friendly&lt;/li&gt;
&lt;li&gt;✅ Hands-on learning&lt;/li&gt;
&lt;li&gt;✅ No credit card required
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You learn by &lt;strong&gt;doing&lt;/strong&gt;, not just reading.&lt;/p&gt;

&lt;p&gt;🔗 Start learning here:&lt;br&gt;&lt;br&gt;
&lt;a href="https://learn.microsoft.com?wt.mc_id=studentamb_502522" rel="noopener noreferrer"&gt;https://learn.microsoft.com?wt.mc_id=studentamb_502522&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  A Simple Beginner Learning Path
&lt;/h2&gt;

&lt;p&gt;If you’re starting today, follow this order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cloud fundamentals
&lt;/li&gt;
&lt;li&gt;Azure basics
&lt;/li&gt;
&lt;li&gt;Compute &amp;amp; storage concepts
&lt;/li&gt;
&lt;li&gt;Deploy a simple application
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Consistency matters more than speed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;You don’t need to be an expert to start learning cloud computing.&lt;/p&gt;

&lt;p&gt;All you need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Curiosity
&lt;/li&gt;
&lt;li&gt;Consistency
&lt;/li&gt;
&lt;li&gt;The right learning resources
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every cloud expert was once a beginner.&lt;br&gt;&lt;br&gt;
Start small, stay consistent, and keep building ☁️🚀&lt;/p&gt;




&lt;h2&gt;
  
  
  About the Author
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Sahinur Islam&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Full-Stack Developer | Cloud &amp;amp; DevOps Enthusiast&lt;br&gt;&lt;br&gt;
Microsoft Learn Student Ambassador – Registered Member  &lt;/p&gt;

</description>
      <category>cloud</category>
      <category>azure</category>
      <category>beginners</category>
      <category>developer</category>
    </item>
    <item>
      <title>When Should You Use AWS Lambda? A Beginner's Perspective</title>
      <dc:creator>Sahinur</dc:creator>
      <pubDate>Sun, 11 Jan 2026 11:32:51 +0000</pubDate>
      <link>https://dev.to/sahinur/when-should-you-use-aws-lambda-a-beginners-perspective-2fmd</link>
      <guid>https://dev.to/sahinur/when-should-you-use-aws-lambda-a-beginners-perspective-2fmd</guid>
      <description>&lt;p&gt;If you're new to cloud computing, you've probably heard the buzz around &lt;strong&gt;AWS Lambda&lt;/strong&gt; and &lt;strong&gt;serverless architecture&lt;/strong&gt;. But here's the million-dollar question: &lt;em&gt;When should you actually use it?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In this article, I'll break down AWS Lambda in simple terms, explain when it's the perfect choice, and when you might want to look elsewhere. Let's dive in!&lt;/p&gt;




&lt;h2&gt;
  
  
  🤔 What is AWS Lambda, Anyway?
&lt;/h2&gt;

&lt;p&gt;AWS Lambda is Amazon's &lt;strong&gt;serverless compute service&lt;/strong&gt;. In simple terms:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You write code, upload it to Lambda, and AWS runs it for you — no servers to manage, no infrastructure to worry about.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Lambda only runs your code when something triggers it (like an API request, a file upload, or a database change). When there's nothing to do, Lambda sits idle — and you pay nothing.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Event-driven&lt;/strong&gt;: Runs only when triggered&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-scaling&lt;/strong&gt;: Handles 1 request or 10,000 automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pay-per-use&lt;/strong&gt;: Charged only for execution time (in milliseconds)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero server management&lt;/strong&gt;: AWS handles everything&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ When Should You Use AWS Lambda?
&lt;/h2&gt;

&lt;p&gt;Here are the scenarios where Lambda truly shines:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;API Backends &amp;amp; Microservices&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Building a REST API? Lambda + API Gateway is a killer combo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Simple Lambda function for an API endpoint&lt;/span&gt;
&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathParameters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Fetch user from database&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;statusCode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Perfect for:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mobile app backends&lt;/li&gt;
&lt;li&gt;Web application APIs&lt;/li&gt;
&lt;li&gt;Microservices architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;File Processing&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When users upload files to S3, Lambda can automatically process them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Image resizing/compression&lt;/li&gt;
&lt;li&gt;Video transcoding&lt;/li&gt;
&lt;li&gt;PDF generation&lt;/li&gt;
&lt;li&gt;CSV/Excel data processing
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Triggered when file is uploaded to S3
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;lambda_handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;bucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Records&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s3&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;bucket&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Records&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s3&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;key&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="c1"&gt;# Process the uploaded file
&lt;/span&gt;    &lt;span class="nf"&gt;process_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;statusCode&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. &lt;strong&gt;Scheduled Tasks (Cron Jobs)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Need to run something every hour? Every day at midnight? Lambda + EventBridge is your friend.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Daily database cleanup&lt;/li&gt;
&lt;li&gt;Sending scheduled reports&lt;/li&gt;
&lt;li&gt;Periodic data synchronization&lt;/li&gt;
&lt;li&gt;Health checks
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Using AWS SAM template&lt;/span&gt;
&lt;span class="na"&gt;Events&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;ScheduledEvent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;Type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Schedule&lt;/span&gt;
    &lt;span class="na"&gt;Properties&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;Schedule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;rate(1 hour)&lt;/span&gt;  &lt;span class="c1"&gt;# Runs every hour&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. &lt;strong&gt;Real-time Data Processing&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Process streaming data from Kinesis or DynamoDB Streams.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IoT sensor data processing&lt;/li&gt;
&lt;li&gt;Real-time analytics&lt;/li&gt;
&lt;li&gt;Log aggregation&lt;/li&gt;
&lt;li&gt;Change data capture (CDC)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. &lt;strong&gt;Webhooks &amp;amp; Event Handlers&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Respond to external events instantly.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Payment gateway callbacks (Stripe, PayPal)&lt;/li&gt;
&lt;li&gt;GitHub/GitLab webhooks for CI/CD&lt;/li&gt;
&lt;li&gt;Slack bot commands&lt;/li&gt;
&lt;li&gt;Third-party API integrations&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. &lt;strong&gt;Chatbots &amp;amp; Voice Assistants&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Lambda powers many conversational interfaces.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Amazon Lex (chatbots)&lt;/li&gt;
&lt;li&gt;Alexa Skills&lt;/li&gt;
&lt;li&gt;Telegram/Discord bots&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7. &lt;strong&gt;Authentication &amp;amp; Authorization&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Custom auth logic for your applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JWT token validation&lt;/li&gt;
&lt;li&gt;Custom authorizers for API Gateway&lt;/li&gt;
&lt;li&gt;User signup/signin flows&lt;/li&gt;
&lt;li&gt;OAuth callback handlers&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ❌ When Should You NOT Use AWS Lambda?
&lt;/h2&gt;

&lt;p&gt;Lambda isn't a silver bullet. Here's when you should consider alternatives:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Long-Running Processes&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Lambda has a &lt;strong&gt;15-minute timeout limit&lt;/strong&gt;. If your task takes longer, Lambda isn't the right choice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Better alternatives:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Fargate&lt;/li&gt;
&lt;li&gt;AWS Batch&lt;/li&gt;
&lt;li&gt;EC2 instances&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Consistent High Traffic&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If your application runs 24/7 with consistent high traffic, Lambda might be more expensive than EC2 or containers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rule of thumb:&lt;/strong&gt; Calculate your costs. Lambda charges per millisecond, while EC2 is hourly. For always-on workloads, EC2 or Fargate often wins.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;Stateful Applications&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Lambda functions are &lt;strong&gt;stateless&lt;/strong&gt;. Each invocation is independent with no shared memory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not ideal for:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WebSocket connections (though API Gateway helps)&lt;/li&gt;
&lt;li&gt;Session-based applications&lt;/li&gt;
&lt;li&gt;Applications requiring persistent connections&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. &lt;strong&gt;Latency-Critical Applications&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Cold starts&lt;/strong&gt; can add 100ms to several seconds of latency when Lambda spins up a new container.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Provisioned Concurrency (costs extra)&lt;/li&gt;
&lt;li&gt;Keep functions warm with scheduled pings&lt;/li&gt;
&lt;li&gt;Use smaller deployment packages&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. &lt;strong&gt;Heavy Compute Workloads&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Lambda maxes out at &lt;strong&gt;10GB RAM&lt;/strong&gt; and &lt;strong&gt;6 vCPUs&lt;/strong&gt;. For ML training, video rendering, or heavy computation, look elsewhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Better alternatives:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EC2 with GPU instances&lt;/li&gt;
&lt;li&gt;AWS SageMaker&lt;/li&gt;
&lt;li&gt;AWS Batch&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. &lt;strong&gt;Complex Monolithic Applications&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Lambda works best with small, focused functions. Migrating a large monolithic app to Lambda is painful and often counterproductive.&lt;/p&gt;




&lt;h2&gt;
  
  
  📊 Quick Decision Matrix
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Use Lambda?&lt;/th&gt;
&lt;th&gt;Alternative&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;REST API with variable traffic&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Image processing on upload&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cron jobs (&amp;lt; 15 min)&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Real-time webhooks&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24/7 high-traffic web server&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;EC2, Fargate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ML model training&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;SageMaker, EC2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long-running batch jobs&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;AWS Batch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebSocket game server&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;EC2, Fargate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sub-10ms latency required&lt;/td&gt;
&lt;td&gt;⚠️ Maybe&lt;/td&gt;
&lt;td&gt;EC2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  💰 Understanding Lambda Pricing
&lt;/h2&gt;

&lt;p&gt;Lambda's pricing is simple but can surprise you:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You pay for:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Number of requests&lt;/strong&gt;: $0.20 per 1 million requests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duration&lt;/strong&gt;: Based on memory allocated × execution time&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Free tier (every month):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1 million requests&lt;/li&gt;
&lt;li&gt;400,000 GB-seconds of compute time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example calculation:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Function specs:
- Memory: 512MB
- Avg execution time: 200ms
- Monthly invocations: 5 million

Cost calculation:
- Requests: (5M - 1M free) × $0.20/1M = $0.80
- Compute: 5M × 0.2s × 0.5GB = 500,000 GB-s
- GB-s cost: (500,000 - 400,000 free) × $0.0000166667 = $1.67

Total: ~$2.47/month
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🚀 Getting Started: Your First Lambda Function
&lt;/h2&gt;

&lt;p&gt;Ready to try Lambda? Here's a quick start:&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Create the Function
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// index.js&lt;/span&gt;
&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;queryStringParameters&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;World&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;statusCode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Hello, &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;!`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;toISOString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Deploy Using AWS CLI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Zip your code&lt;/span&gt;
zip &lt;span class="k"&gt;function&lt;/span&gt;.zip index.js

&lt;span class="c"&gt;# Create the function&lt;/span&gt;
aws lambda create-function &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--function-name&lt;/span&gt; HelloWorld &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--runtime&lt;/span&gt; nodejs20.x &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--handler&lt;/span&gt; index.handler &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--role&lt;/span&gt; arn:aws:iam::YOUR_ACCOUNT:role/lambda-role &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--zip-file&lt;/span&gt; fileb://function.zip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Test It
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws lambda invoke &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--function-name&lt;/span&gt; HelloWorld &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--payload&lt;/span&gt; &lt;span class="s1"&gt;'{"queryStringParameters": {"name": "Developer"}}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    response.json

&lt;span class="nb"&gt;cat &lt;/span&gt;response.json
&lt;span class="c"&gt;# Output: {"message":"Hello, Developer!","timestamp":"2024-01-15T10:30:00.000Z"}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🎯 Best Practices for Beginners
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Keep functions small and focused&lt;/strong&gt; — One function, one job&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimize cold starts&lt;/strong&gt; — Use smaller packages, avoid VPC unless necessary&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set appropriate timeouts&lt;/strong&gt; — Don't use 15 minutes if 10 seconds is enough&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use environment variables&lt;/strong&gt; — Never hardcode secrets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor with CloudWatch&lt;/strong&gt; — Set up alarms for errors and duration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Layers for dependencies&lt;/strong&gt; — Share common code across functions&lt;/li&gt;
&lt;/ol&gt;




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

&lt;p&gt;AWS Lambda is a powerful tool, but it's not for everything. Use it when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Your workload is event-driven&lt;/li&gt;
&lt;li&gt;✅ Traffic is variable or unpredictable&lt;/li&gt;
&lt;li&gt;✅ Tasks complete in under 15 minutes&lt;/li&gt;
&lt;li&gt;✅ You want zero infrastructure management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Avoid it when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ You need consistent, high-performance compute&lt;/li&gt;
&lt;li&gt;❌ Tasks run longer than 15 minutes&lt;/li&gt;
&lt;li&gt;❌ Sub-millisecond latency is critical&lt;/li&gt;
&lt;li&gt;❌ You're running a stateful monolith&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Start small, experiment, and you'll quickly discover where Lambda fits in your architecture. The serverless journey is worth it!&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/lambda/" rel="noopener noreferrer"&gt;AWS Lambda Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.serverless.com/" rel="noopener noreferrer"&gt;Serverless Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/serverless/sam/" rel="noopener noreferrer"&gt;AWS SAM (Serverless Application Model)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/alexcasalboni/aws-lambda-power-tuning" rel="noopener noreferrer"&gt;Lambda Power Tuning Tool&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;What's your experience with AWS Lambda? Drop a comment below!&lt;/strong&gt; 👇&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you found this helpful, please ❤️ and follow for more cloud content!&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  aws #lambda #serverless #beginners #cloud
&lt;/h1&gt;

</description>
      <category>aws</category>
      <category>serverless</category>
      <category>beginners</category>
      <category>lambda</category>
    </item>
    <item>
      <title>AWS IAM basics explained with real examples</title>
      <dc:creator>Sahinur</dc:creator>
      <pubDate>Sun, 11 Jan 2026 10:57:07 +0000</pubDate>
      <link>https://dev.to/sahinur/aws-iam-basics-explained-with-real-examples-1gnl</link>
      <guid>https://dev.to/sahinur/aws-iam-basics-explained-with-real-examples-1gnl</guid>
      <description>&lt;p&gt;When you first start working with Amazon Web Services, one of the most critical services you'll encounter is &lt;strong&gt;Identity and Access Management (IAM)&lt;/strong&gt;. Think of IAM as the security guard of your AWS account—it controls who can enter, what rooms they can access, and what actions they can perform.&lt;/p&gt;

&lt;p&gt;In this guide, we'll break down IAM concepts with practical examples that you can immediately apply to your projects.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is AWS IAM?
&lt;/h2&gt;

&lt;p&gt;AWS Identity and Access Management (IAM) is a free service that allows you to securely manage access to AWS resources. With IAM, you can control:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Who&lt;/strong&gt; can access your resources (authentication)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What&lt;/strong&gt; they can do with those resources (authorization)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every interaction with AWS—whether through the console, CLI, or SDK—goes through IAM for permission checks.&lt;/p&gt;




&lt;h2&gt;
  
  
  Core IAM Components
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Users
&lt;/h3&gt;

&lt;p&gt;An IAM user represents a person or application that interacts with AWS. Each user has unique credentials.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real Example: Creating a Developer User&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine you're onboarding a new developer named Sarah to your team. She needs access to deploy applications to EC2 and view logs in CloudWatch.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"UserName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sarah-developer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Tags"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Department"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Engineering"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Role"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Backend Developer"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Best Practice:&lt;/strong&gt; Never use the root account for daily tasks. Create individual IAM users for each team member.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Groups
&lt;/h3&gt;

&lt;p&gt;Groups are collections of users. Instead of attaching policies to each user individually, you attach them to a group, and all members inherit those permissions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real Example: Team-Based Access Structure&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;├── Developers (Group)
│   ├── sarah-developer
│   ├── john-developer
│   └── Policy: DeveloperAccess
│
├── DevOps (Group)
│   ├── mike-devops
│   └── Policy: DevOpsFullAccess
│
└── Finance (Group)
    ├── lisa-finance
    └── Policy: BillingReadOnly
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When Sarah moves from Development to DevOps, you simply remove her from the Developers group and add her to DevOps. No policy changes needed.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Roles
&lt;/h3&gt;

&lt;p&gt;Roles are similar to users but are meant to be &lt;em&gt;assumed&lt;/em&gt; temporarily by users, applications, or AWS services. They don't have permanent credentials.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real Example: EC2 Instance Accessing S3&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your application running on EC2 needs to upload images to an S3 bucket. Instead of storing AWS credentials in your code (a security risk), you create a role:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"RoleName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EC2-S3-Upload-Role"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"AssumeRolePolicyDocument"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Principal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"Service"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ec2.amazonaws.com"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sts:AssumeRole"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The EC2 instance automatically gets temporary credentials to access S3—no hardcoded keys required.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Policies
&lt;/h3&gt;

&lt;p&gt;Policies are JSON documents that define permissions. They specify what actions are allowed or denied on which resources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Policy Structure:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow | Deny"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"service:action"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:service:region:account:resource"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Condition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Real-World Policy Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Example 1: S3 Read-Only Access to a Specific Bucket
&lt;/h3&gt;

&lt;p&gt;A mobile app needs to read images from a bucket called &lt;code&gt;my-app-images&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example 2: Developer Access with Restrictions
&lt;/h3&gt;

&lt;p&gt;Developers can manage EC2 instances but cannot terminate production servers:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example 3: Time-Based Access
&lt;/h3&gt;

&lt;p&gt;Contractors can only access resources during business hours:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"s3:*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Condition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"DateGreaterThan"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"aws:CurrentTime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-01-01T09:00:00Z"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"DateLessThan"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"aws:CurrentTime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-12-31T18:00:00Z"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example 4: Lambda Function Accessing DynamoDB
&lt;/h3&gt;

&lt;p&gt;A Lambda function that reads and writes to a specific DynamoDB table:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"dynamodb:GetItem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"dynamodb:PutItem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"dynamodb:UpdateItem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"dynamodb:Query"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:dynamodb:ap-south-1:123456789012:table/UserProfiles"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"logs:CreateLogGroup"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"logs:CreateLogStream"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"logs:PutLogEvents"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:logs:*:*:*"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Understanding Policy Evaluation
&lt;/h2&gt;

&lt;p&gt;When a request is made, AWS evaluates policies in this order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Explicit Deny&lt;/strong&gt; — If any policy explicitly denies the action, access is denied (highest priority)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explicit Allow&lt;/strong&gt; — If a policy allows the action and nothing denies it, access is granted&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implicit Deny&lt;/strong&gt; — If no policy mentions the action, access is denied by default
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Request → Check Deny → Check Allow → Default Deny
              ↓             ↓              ↓
           DENIED       ALLOWED        DENIED
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Types of IAM Policies
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Policy Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AWS Managed&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Created and maintained by AWS&lt;/td&gt;
&lt;td&gt;Quick setup with common permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Customer Managed&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Created by you&lt;/td&gt;
&lt;td&gt;Custom permissions for your organization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inline&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Embedded directly in a user, group, or role&lt;/td&gt;
&lt;td&gt;Strict one-to-one relationship&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Recommendation:&lt;/strong&gt; Use customer managed policies for reusability and easier maintenance.&lt;/p&gt;




&lt;h2&gt;
  
  
  Security Best Practices
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Enable Multi-Factor Authentication (MFA)
&lt;/h3&gt;

&lt;p&gt;Always enable MFA for the root account and privileged users.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Follow the Principle of Least Privilege
&lt;/h3&gt;

&lt;p&gt;Grant only the permissions required to perform a task—nothing more.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;❌&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Bad:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Too&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;permissive&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;✅&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Good:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Specific&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;limited&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"s3:GetObject"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:s3:::my-bucket/public/*"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Use Roles Instead of Access Keys
&lt;/h3&gt;

&lt;p&gt;For applications running on AWS services, always use IAM roles instead of embedding access keys.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Rotate Credentials Regularly
&lt;/h3&gt;

&lt;p&gt;Set up automatic rotation for access keys and review unused credentials.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Use IAM Access Analyzer
&lt;/h3&gt;

&lt;p&gt;This tool helps identify resources shared with external entities and validates policies.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common IAM Scenarios
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Scenario 1: Cross-Account Access
&lt;/h3&gt;

&lt;p&gt;Your production and development accounts are separate. Developers need to access production S3 for debugging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Create a role in production that developers can assume from the development account.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Principal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AWS"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:iam::DEV_ACCOUNT_ID:root"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sts:AssumeRole"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Condition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Bool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"aws:MultiFactorAuthPresent"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"true"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Scenario 2: Service-Linked Roles
&lt;/h3&gt;

&lt;p&gt;Some AWS services create roles automatically to perform actions on your behalf. For example, when you use Elastic Load Balancing, AWS creates &lt;code&gt;AWSServiceRoleForElasticLoadBalancing&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scenario 3: Federated Access
&lt;/h3&gt;

&lt;p&gt;Your company uses Google Workspace or Microsoft Azure AD. Instead of creating IAM users, you can federate identity:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Corporate Identity Provider → AWS STS → Temporary Credentials → AWS Access
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Debugging IAM Issues
&lt;/h2&gt;

&lt;p&gt;When access is denied, check these areas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Policy Simulator&lt;/strong&gt; — Test policies before applying them&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CloudTrail Logs&lt;/strong&gt; — See exactly what was denied and why&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IAM Access Advisor&lt;/strong&gt; — View which services a user actually accessed&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Common Error:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Debugging Steps:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verify the policy is attached to the user/role&lt;/li&gt;
&lt;li&gt;Check for explicit deny statements&lt;/li&gt;
&lt;li&gt;Ensure the resource ARN matches exactly&lt;/li&gt;
&lt;li&gt;Verify the correct region is specified&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Quick Reference: Common IAM Actions
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Service&lt;/th&gt;
&lt;th&gt;Common Actions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;S3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;s3:GetObject&lt;/code&gt;, &lt;code&gt;s3:PutObject&lt;/code&gt;, &lt;code&gt;s3:DeleteObject&lt;/code&gt;, &lt;code&gt;s3:ListBucket&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;EC2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;ec2:RunInstances&lt;/code&gt;, &lt;code&gt;ec2:StopInstances&lt;/code&gt;, &lt;code&gt;ec2:TerminateInstances&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Lambda&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;lambda:InvokeFunction&lt;/code&gt;, &lt;code&gt;lambda:CreateFunction&lt;/code&gt;, &lt;code&gt;lambda:UpdateFunctionCode&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DynamoDB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;dynamodb:GetItem&lt;/code&gt;, &lt;code&gt;dynamodb:PutItem&lt;/code&gt;, &lt;code&gt;dynamodb:Query&lt;/code&gt;, &lt;code&gt;dynamodb:Scan&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RDS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;rds:CreateDBInstance&lt;/code&gt;, &lt;code&gt;rds:DeleteDBInstance&lt;/code&gt;, &lt;code&gt;rds:DescribeDBInstances&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




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

&lt;p&gt;AWS IAM is the foundation of security in the cloud. By understanding users, groups, roles, and policies, you can build secure applications that follow the principle of least privilege.&lt;/p&gt;

&lt;p&gt;Start with these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create individual users for your team members&lt;/li&gt;
&lt;li&gt;Organize users into groups based on job functions&lt;/li&gt;
&lt;li&gt;Use roles for applications and cross-account access&lt;/li&gt;
&lt;li&gt;Write specific policies that grant only necessary permissions&lt;/li&gt;
&lt;li&gt;Enable MFA and regularly audit your IAM configuration&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Security isn't a one-time setup—it's an ongoing practice. Regularly review your IAM policies and adjust as your application evolves.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Happy building on AWS!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>beginners</category>
      <category>security</category>
    </item>
    <item>
      <title>Complete Guide: Deploying Node.js Application on Ubuntu VPS</title>
      <dc:creator>Sahinur</dc:creator>
      <pubDate>Sun, 11 Jan 2026 10:50:28 +0000</pubDate>
      <link>https://dev.to/sahinur/complete-guide-deploying-nodejs-application-on-ubuntu-vps-1c31</link>
      <guid>https://dev.to/sahinur/complete-guide-deploying-nodejs-application-on-ubuntu-vps-1c31</guid>
      <description>&lt;p&gt;A step-by-step guide to deploy your Node.js application with MongoDB, Nginx reverse proxy, and SSL certificate on a DigitalOcean Droplet or any Ubuntu VPS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A DigitalOcean Droplet (or any Ubuntu VPS)&lt;/li&gt;
&lt;li&gt;A domain name (optional, but required for SSL)&lt;/li&gt;
&lt;li&gt;SSH access to your server&lt;/li&gt;
&lt;li&gt;Your Node.js application hosted on GitHub&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 1: Connect to Your Server
&lt;/h2&gt;

&lt;p&gt;SSH into your droplet using the root user:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh root@YOUR_DROPLET_IP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;YOUR_DROPLET_IP&lt;/code&gt; with your actual server IP address.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Update System Packages
&lt;/h2&gt;

&lt;p&gt;Always start by updating and upgrading your system packages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 3: Install Required Packages
&lt;/h2&gt;

&lt;p&gt;Install Node.js, npm, and Nginx:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; nodejs npm nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 4: Install Node Version Manager (NVM)
&lt;/h2&gt;

&lt;p&gt;NVM allows you to manage multiple Node.js versions easily.&lt;/p&gt;

&lt;h3&gt;
  
  
  Download and install NVM:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-o-&lt;/span&gt; https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Load NVM into current session:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install and configure Node.js 20.10.0:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nvm &lt;span class="nb"&gt;install &lt;/span&gt;20.10.0
nvm use 20.10.0
nvm &lt;span class="nb"&gt;alias &lt;/span&gt;default 20.10.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Verify installation:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node &lt;span class="nt"&gt;--version&lt;/span&gt;
npm &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 5: Install MongoDB
&lt;/h2&gt;

&lt;p&gt;MongoDB is a popular NoSQL database for Node.js applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Import the public key:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://www.mongodb.org/static/pgp/server-7.0.asc | &lt;span class="nb"&gt;sudo &lt;/span&gt;gpg &lt;span class="nt"&gt;-o&lt;/span&gt; /usr/share/keyrings/mongodb-server-7.0.gpg &lt;span class="nt"&gt;--dearmor&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Create the list file for Ubuntu 22.04:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse"&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/mongodb-org-7.0.list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Update packages and install MongoDB:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; mongodb-org
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Start and enable MongoDB:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start mongod
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;mongod
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl status mongod
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For complete MongoDB installation instructions, refer to the &lt;a href="https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-ubuntu/" rel="noopener noreferrer"&gt;official documentation&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 6: Setup SSH Key for GitHub
&lt;/h2&gt;

&lt;p&gt;Generate an SSH key to clone your private repositories:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; rsa &lt;span class="nt"&gt;-b&lt;/span&gt; 4096 &lt;span class="nt"&gt;-C&lt;/span&gt; &lt;span class="s2"&gt;"your-email@example.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Press Enter to accept default file location and optionally set a passphrase.&lt;/p&gt;

&lt;h3&gt;
  
  
  Display your public key:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.ssh/id_rsa.pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Add the key to GitHub:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Copy the entire output&lt;/li&gt;
&lt;li&gt;Go to GitHub → Settings → SSH and GPG keys&lt;/li&gt;
&lt;li&gt;Click "New SSH key"&lt;/li&gt;
&lt;li&gt;Paste your key and save&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Step 7: Clone Your Repository
&lt;/h2&gt;

&lt;p&gt;Navigate to your preferred directory and clone your repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /var/www
git clone git@github.com:username/repository.git
&lt;span class="nb"&gt;cd &lt;/span&gt;repository
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install dependencies:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 8: Configure Nginx as Reverse Proxy
&lt;/h2&gt;

&lt;p&gt;Nginx will handle incoming HTTP requests and forward them to your Node.js application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create a new Nginx configuration file:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/nginx/sites-available/your-app-name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Add the following configuration:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;YOUR_DOMAIN_OR_IP&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://localhost:3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_http_version&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Upgrade&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Connection&lt;/span&gt; &lt;span class="s"&gt;'upgrade'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Host&lt;/span&gt; &lt;span class="nv"&gt;$host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Real-IP&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-For&lt;/span&gt; &lt;span class="nv"&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-Proto&lt;/span&gt; &lt;span class="nv"&gt;$scheme&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_cache_bypass&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;YOUR_DOMAIN_OR_IP&lt;/code&gt; with your domain name or server IP address.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enable the configuration:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; /etc/nginx/sites-available/your-app-name /etc/nginx/sites-enabled/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Test Nginx configuration:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nginx &lt;span class="nt"&gt;-t&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Reload Nginx:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl reload nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 9: Managing Your App with Tmux
&lt;/h2&gt;

&lt;p&gt;Tmux keeps your application running even after you disconnect from SSH.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tmux Commands Reference:
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tmux new -s session_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Create a new session&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tmux attach -t session_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Attach to existing session&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tmux ls&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List all sessions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tmux kill-session -t session_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Kill a session&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tmux rename-session -t old_name new_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Rename a session&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;Ctrl+B&lt;/code&gt; then &lt;code&gt;D&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Detach from current session&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Start your application:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tmux new &lt;span class="nt"&gt;-s&lt;/span&gt; myapp
&lt;span class="nb"&gt;cd&lt;/span&gt; /var/www/repository
npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Press &lt;code&gt;Ctrl+B&lt;/code&gt; then &lt;code&gt;D&lt;/code&gt; to detach and leave it running.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 10: Configure Firewall (UFW)
&lt;/h2&gt;

&lt;p&gt;Enable and configure the firewall:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw &lt;span class="nb"&gt;enable
sudo &lt;/span&gt;ufw allow &lt;span class="s1"&gt;'Nginx Full'&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow OpenSSH
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 11: Install SSL Certificate (HTTPS)
&lt;/h2&gt;

&lt;p&gt;Secure your application with a free SSL certificate from Let's Encrypt.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install Certbot:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;certbot python3-certbot-nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Obtain SSL certificate:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;certbot &lt;span class="nt"&gt;--nginx&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; example.com &lt;span class="nt"&gt;-d&lt;/span&gt; www.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;example.com&lt;/code&gt; with your actual domain name.&lt;/p&gt;

&lt;p&gt;Certbot will automatically configure Nginx for HTTPS and set up auto-renewal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Test auto-renewal:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;certbot renew &lt;span class="nt"&gt;--dry-run&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Quick Reference Commands
&lt;/h2&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Restart Nginx&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart nginx

&lt;span class="c"&gt;# Check Nginx status&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl status nginx

&lt;span class="c"&gt;# View Nginx error logs&lt;/span&gt;
&lt;span class="nb"&gt;sudo tail&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /var/log/nginx/error.log

&lt;span class="c"&gt;# Restart MongoDB&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart mongod

&lt;span class="c"&gt;# Check MongoDB status&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl status mongod
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Pull latest changes&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; /var/www/repository
git pull origin main

&lt;span class="c"&gt;# Install new dependencies&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Restart application (inside tmux session)&lt;/span&gt;
tmux attach &lt;span class="nt"&gt;-t&lt;/span&gt; myapp
&lt;span class="c"&gt;# Press Ctrl+C to stop, then npm start&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Alternative: Using PM2 (Recommended for Production)
&lt;/h2&gt;

&lt;p&gt;PM2 is a production process manager for Node.js applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install PM2:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; pm2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Start your application:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pm2 start app.js &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="s2"&gt;"your-app-name"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  PM2 Commands:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pm2 list              &lt;span class="c"&gt;# List all processes&lt;/span&gt;
pm2 restart app-name  &lt;span class="c"&gt;# Restart application&lt;/span&gt;
pm2 stop app-name     &lt;span class="c"&gt;# Stop application&lt;/span&gt;
pm2 logs              &lt;span class="c"&gt;# View logs&lt;/span&gt;
pm2 startup           &lt;span class="c"&gt;# Configure PM2 to start on boot&lt;/span&gt;
pm2 save              &lt;span class="c"&gt;# Save current process list&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;h3&gt;
  
  
  Application not accessible:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Check if the app is running: &lt;code&gt;tmux attach -t myapp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Verify Nginx config: &lt;code&gt;sudo nginx -t&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Check firewall: &lt;code&gt;sudo ufw status&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Review Nginx logs: &lt;code&gt;sudo tail -f /var/log/nginx/error.log&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  MongoDB connection issues:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Check if MongoDB is running: &lt;code&gt;sudo systemctl status mongod&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Review MongoDB logs: &lt;code&gt;sudo tail -f /var/log/mongodb/mongod.log&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  SSL certificate issues:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Ensure domain DNS points to your server IP&lt;/li&gt;
&lt;li&gt;Check Certbot logs: &lt;code&gt;sudo certbot certificates&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Renew manually: &lt;code&gt;sudo certbot renew&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;




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

&lt;p&gt;Your Node.js application is now deployed with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Latest Node.js version via NVM&lt;/li&gt;
&lt;li&gt;✅ MongoDB database&lt;/li&gt;
&lt;li&gt;✅ Nginx reverse proxy&lt;/li&gt;
&lt;li&gt;✅ SSL/HTTPS encryption&lt;/li&gt;
&lt;li&gt;✅ Firewall protection&lt;/li&gt;
&lt;li&gt;✅ Process management with Tmux or PM2&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For production applications, consider implementing additional security measures, setting up automated backups, and configuring monitoring tools.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Last updated: January 2026&lt;/em&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>devops</category>
      <category>ubuntu</category>
      <category>aws</category>
    </item>
    <item>
      <title>Getting Started with AWS in 2026 – A Practical Beginner's Guide 🚀</title>
      <dc:creator>Sahinur</dc:creator>
      <pubDate>Sun, 11 Jan 2026 06:14:20 +0000</pubDate>
      <link>https://dev.to/sahinur/getting-started-with-aws-in-2026-a-practical-beginners-guide-2i9h</link>
      <guid>https://dev.to/sahinur/getting-started-with-aws-in-2026-a-practical-beginners-guide-2i9h</guid>
      <description>&lt;h1&gt;
  
  
  Getting Started with AWS in 2026 – The Practical Way for Developers
&lt;/h1&gt;

&lt;p&gt;Hey DEV community! 👋  &lt;/p&gt;

&lt;p&gt;If you're a developer looking to level up in 2026, &lt;strong&gt;AWS (Amazon Web Services)&lt;/strong&gt; is still the #1 cloud platform — powering everything from startups to giants like Netflix, Airbnb, and Spotify.  &lt;/p&gt;

&lt;p&gt;But AWS can feel overwhelming with &lt;strong&gt;200+ services&lt;/strong&gt;. Where do you even start?  &lt;/p&gt;

&lt;p&gt;This guide is for &lt;strong&gt;absolute beginners&lt;/strong&gt; who want a clear, practical path — not just theory. We'll cover account creation (with security!), the most important services for developers, the famous Free Tier, and your first experiments.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Why Learn AWS in 2026? (Quick Reality Check)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pay-as-you-go&lt;/strong&gt; → No huge upfront costs — pay only for what you use&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Massive scalability&lt;/strong&gt; → Go from 1 to 1 million users overnight&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Global reach&lt;/strong&gt; → Deploy apps in regions close to your users&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free Tier&lt;/strong&gt; → Still very generous in 2026 (12 months of limited free usage on many services)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Huge job market&lt;/strong&gt; → AWS skills = better opportunities in backend, DevOps, full-stack, AI/ML&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generative AI boom&lt;/strong&gt; → Services like Amazon Bedrock make it easier than ever to build AI apps&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Create Your AWS Account (Do It Right!)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://aws.amazon.com/" rel="noopener noreferrer"&gt;https://aws.amazon.com/&lt;/a&gt; and click &lt;strong&gt;Create an AWS Account&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Use a &lt;strong&gt;real email&lt;/strong&gt; (you'll need it for recovery)&lt;/li&gt;
&lt;li&gt;Choose the &lt;strong&gt;basic support plan&lt;/strong&gt; (free)&lt;/li&gt;
&lt;li&gt;Enter your payment info → AWS requires a card even for Free Tier (they charge $1 then refund it for verification)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Very important&lt;/strong&gt; — Verify your phone number&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Security First (Don't Skip This in 2026!)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After signup, immediately:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable &lt;strong&gt;MFA&lt;/strong&gt; on your root account (use authenticator app like Google Authenticator)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never use root account&lt;/strong&gt; for daily work → Create an IAM user with admin rights instead&lt;/li&gt;
&lt;li&gt;Follow least-privilege principle from day 1&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pro tip: Use &lt;strong&gt;AWS Organizations&lt;/strong&gt; later if you plan to create multiple accounts (dev/test/prod).&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Understand the AWS Free Tier (What’s Actually Free?)
&lt;/h2&gt;

&lt;p&gt;AWS Free Tier in 2026 still gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;750 hours/month&lt;/strong&gt; of t3.micro or t2.micro EC2 instances (~1 year)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;5 GB&lt;/strong&gt; of Amazon S3 standard storage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;750 hours/month&lt;/strong&gt; of RDS (db.t3.micro or similar)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1 million&lt;/strong&gt; Lambda requests/month&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;400,000 GB-seconds&lt;/strong&gt; of Lambda compute&lt;/li&gt;
&lt;li&gt;Many other services free forever (DynamoDB, SNS, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Warning&lt;/strong&gt;: Always delete resources after experimenting — forgotten EC2/RDS instances can cost money after free tier expires!&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Core AWS Services Every Developer Should Know (2026 Edition)
&lt;/h2&gt;

&lt;p&gt;Here are the &lt;strong&gt;must-know services&lt;/strong&gt; for most developers:&lt;/p&gt;

&lt;h3&gt;
  
  
  Compute
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Amazon EC2&lt;/strong&gt; → Virtual servers (your Linux/Windows machines in the cloud)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Lambda&lt;/strong&gt; → Serverless — run code without managing servers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Elastic Beanstalk&lt;/strong&gt; → Easy deployment (upload your app and AWS handles the rest)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Storage
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Amazon S3&lt;/strong&gt; → Object storage (think unlimited Dropbox for apps)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon EBS&lt;/strong&gt; → Block storage (like SSD for your EC2 instances)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Databases
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Amazon RDS&lt;/strong&gt; → Managed SQL databases (MySQL, PostgreSQL, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon DynamoDB&lt;/strong&gt; → NoSQL — super fast and scalable&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Networking &amp;amp; Security
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Amazon VPC&lt;/strong&gt; → Your private network in AWS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS IAM&lt;/strong&gt; → Control who can do what (super important!)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS CloudTrail&lt;/strong&gt; → Audit logs (who did what)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Developer Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AWS CodeCommit&lt;/strong&gt; → Git repositories&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS CodePipeline&lt;/strong&gt; → CI/CD&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS CodeBuild&lt;/strong&gt; → Build your code&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Bonus (Hot in 2026): Generative AI
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Amazon Bedrock&lt;/strong&gt; → Build AI apps with foundation models (Claude, Llama, Stable Diffusion, etc.) — no need to manage your own GPUs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 4: Your First Hands-On Challenge (Do This Today!)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Log into the &lt;strong&gt;AWS Management Console&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;EC2&lt;/strong&gt; → Launch Instance

&lt;ul&gt;
&lt;li&gt;Choose &lt;strong&gt;Amazon Linux 2023&lt;/strong&gt; (free tier eligible)&lt;/li&gt;
&lt;li&gt;t3.micro instance&lt;/li&gt;
&lt;li&gt;Create a new key pair (save the .pem file!)&lt;/li&gt;
&lt;li&gt;Allow SSH traffic (port 22)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Connect via SSH (use your key)&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;sudo yum update -y&lt;/code&gt; and play around&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terminate&lt;/strong&gt; the instance when done (very important!)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Bonus: Upload a file to &lt;strong&gt;S3&lt;/strong&gt; using the console — create bucket → upload → make it public → view in browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Beginner Mistakes to Avoid
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Using root account for everything → Security risk!&lt;/li&gt;
&lt;li&gt;Forgetting to terminate instances → Surprise bill&lt;/li&gt;
&lt;li&gt;Making buckets public without thinking → Data leaks&lt;/li&gt;
&lt;li&gt;Not using &lt;strong&gt;tags&lt;/strong&gt; on resources → Hard to manage later&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next Steps After This Guide
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Complete &lt;strong&gt;AWS Cloud Practitioner Essentials&lt;/strong&gt; (free on AWS Skill Builder)&lt;/li&gt;
&lt;li&gt;Try &lt;strong&gt;AWS Cloud Quest&lt;/strong&gt; — gamified learning (free badges!)&lt;/li&gt;
&lt;li&gt;Build a small project: Static website on S3 + CloudFront&lt;/li&gt;
&lt;li&gt;Aim for &lt;strong&gt;AWS Certified Cloud Practitioner&lt;/strong&gt; → Great first cert&lt;/li&gt;
&lt;li&gt;Explore &lt;strong&gt;AWS Amplify&lt;/strong&gt; if you're a frontend/full-stack developer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AWS is a journey, not a race. Start small, break things (safely), and have fun!  &lt;/p&gt;

&lt;p&gt;What’s your first AWS project going to be? Drop a comment below — I’d love to hear! 💬&lt;/p&gt;

&lt;p&gt;Happy clouding! ☁️✨&lt;/p&gt;

&lt;h1&gt;
  
  
  AWS #CloudComputing #Beginners #DevOps
&lt;/h1&gt;

</description>
      <category>aws</category>
      <category>cloudcomputing</category>
      <category>beginners</category>
      <category>devops</category>
    </item>
    <item>
      <title>🚀 20 Must-Know GitHub Repositories for Developers!</title>
      <dc:creator>Sahinur</dc:creator>
      <pubDate>Sat, 08 Mar 2025 09:59:57 +0000</pubDate>
      <link>https://dev.to/sahinur/20-must-know-github-repositories-for-developers-in-2025-57a8</link>
      <guid>https://dev.to/sahinur/20-must-know-github-repositories-for-developers-in-2025-57a8</guid>
      <description>&lt;p&gt;💡 Introduction&lt;br&gt;
GitHub is a treasure trove of free resources, tools, and learning materials for developers. Whether you’re a beginner or an experienced coder, these repositories will help you level up your skills in web development, AI, system design, and coding interviews.&lt;/p&gt;

&lt;p&gt;Let’s explore 20 must-know GitHub repositories that can help you learn, code, and build better projects!&lt;/p&gt;

&lt;p&gt;🔥 Top 20 GitHub Repositories Every Developer Should Know&lt;br&gt;
1️⃣ Free Programming Books 📚&lt;br&gt;
📌 &lt;a href="https://github.com/EbookFoundation/free-programming-books" rel="noopener noreferrer"&gt;https://github.com/EbookFoundation/free-programming-books&lt;/a&gt;&lt;br&gt;
A legendary collection of free programming books covering AI, web development, Python, JavaScript, and more!&lt;/p&gt;

&lt;p&gt;2️⃣ Developer Roadmap 🛤️&lt;br&gt;
📌 &lt;a href="https://github.com/kamranahmedse/developer-roadmap" rel="noopener noreferrer"&gt;https://github.com/kamranahmedse/developer-roadmap&lt;/a&gt;&lt;br&gt;
A structured roadmap for learning Frontend, Backend, DevOps, and more with the latest technologies.&lt;/p&gt;

&lt;p&gt;3️⃣ Build Your Own X 🔨&lt;br&gt;
📌 &lt;a href="https://github.com/codecrafters-io/build-your-own-x" rel="noopener noreferrer"&gt;https://github.com/codecrafters-io/build-your-own-x&lt;/a&gt;&lt;br&gt;
A fantastic repository that teaches you how to build browsers, databases, OS, blockchain, and more from scratch!&lt;/p&gt;

&lt;p&gt;4️⃣ 30 Seconds of Code ⚡&lt;br&gt;
📌 &lt;a href="https://github.com/30-seconds/30-seconds-of-code" rel="noopener noreferrer"&gt;https://github.com/30-seconds/30-seconds-of-code&lt;/a&gt;&lt;br&gt;
Short, powerful JavaScript, Python, and React snippets to speed up your development.&lt;/p&gt;

&lt;p&gt;5️⃣ Awesome GitHub Repos 🌟&lt;br&gt;
📌 &lt;a href="https://github.com/sindresorhus/awesome" rel="noopener noreferrer"&gt;https://github.com/sindresorhus/awesome&lt;/a&gt;&lt;br&gt;
A curated list of amazing GitHub repositories covering various programming topics.&lt;/p&gt;

&lt;p&gt;6️⃣ JavaScript Algorithms and Data Structures 🧠&lt;br&gt;
📌 &lt;a href="https://github.com/trekhleb/javascript-algorithms" rel="noopener noreferrer"&gt;https://github.com/trekhleb/javascript-algorithms&lt;/a&gt;&lt;br&gt;
A collection of JavaScript-based algorithms and data structures with explanations.&lt;/p&gt;

&lt;p&gt;7️⃣ The Algorithms 📊&lt;br&gt;
📌 &lt;a href="https://github.com/TheAlgorithms/Python" rel="noopener noreferrer"&gt;https://github.com/TheAlgorithms/Python&lt;/a&gt;&lt;br&gt;
A massive collection of algorithm implementations in Python.&lt;/p&gt;

&lt;p&gt;8️⃣ System Design Primer 🏗️&lt;br&gt;
📌 &lt;a href="https://github.com/donnemartin/system-design-primer" rel="noopener noreferrer"&gt;https://github.com/donnemartin/system-design-primer&lt;/a&gt;&lt;br&gt;
Learn system design concepts with real-world case studies and interview prep materials.&lt;/p&gt;

&lt;p&gt;9️⃣ CS50x: Harvard’s Computer Science Course 💻&lt;br&gt;
📌 &lt;a href="https://github.com/cs50" rel="noopener noreferrer"&gt;https://github.com/cs50&lt;/a&gt;&lt;br&gt;
Harvard’s official CS50 computer science course, available for free!&lt;/p&gt;

&lt;p&gt;🔟 Frontend Developer Interview Questions 🎤&lt;br&gt;
📌 &lt;a href="https://github.com/h5bp/Front-end-Developer-Interview-Questions" rel="noopener noreferrer"&gt;https://github.com/h5bp/Front-end-Developer-Interview-Questions&lt;/a&gt;&lt;br&gt;
A collection of real frontend developer interview questions to prepare for job interviews.&lt;/p&gt;

&lt;p&gt;1️⃣1️⃣ Practical Machine Learning 📈&lt;br&gt;
📌 &lt;a href="https://github.com/ageron/handson-ml" rel="noopener noreferrer"&gt;https://github.com/ageron/handson-ml&lt;/a&gt;&lt;br&gt;
Hands-on Machine Learning with Scikit-Learn, Keras, and TensorFlow.&lt;/p&gt;

&lt;p&gt;1️⃣2️⃣ Free Code Camp Curriculum 🎓&lt;br&gt;
📌 &lt;a href="https://github.com/freeCodeCamp/freeCodeCamp" rel="noopener noreferrer"&gt;https://github.com/freeCodeCamp/freeCodeCamp&lt;/a&gt;&lt;br&gt;
A free interactive coding platform with real-world projects.&lt;/p&gt;

&lt;p&gt;1️⃣3️⃣ LeetCode Solutions 🏆&lt;br&gt;
📌 &lt;a href="https://github.com/azl397985856/leetcode" rel="noopener noreferrer"&gt;https://github.com/azl397985856/leetcode&lt;/a&gt;&lt;br&gt;
A collection of LeetCode solutions to prepare for FAANG interviews.&lt;/p&gt;

&lt;p&gt;1️⃣4️⃣ Node.js Best Practices 🚀&lt;br&gt;
📌 &lt;a href="https://github.com/goldbergyoni/nodebestpractices" rel="noopener noreferrer"&gt;https://github.com/goldbergyoni/nodebestpractices&lt;/a&gt;&lt;br&gt;
Best practices for building scalable and efficient Node.js applications.&lt;/p&gt;

&lt;p&gt;1️⃣5️⃣ Coding Interview University 🎯&lt;br&gt;
📌 &lt;a href="https://github.com/jwasham/coding-interview-university" rel="noopener noreferrer"&gt;https://github.com/jwasham/coding-interview-university&lt;/a&gt;&lt;br&gt;
A complete self-study guide to crack FAANG interviews.&lt;/p&gt;

&lt;p&gt;1️⃣6️⃣ Project-Based Learning 🔨&lt;br&gt;
📌 &lt;a href="https://github.com/practical-tutorials/project-based-learning" rel="noopener noreferrer"&gt;https://github.com/practical-tutorials/project-based-learning&lt;/a&gt;&lt;br&gt;
A collection of hands-on projects to improve your coding skills.&lt;/p&gt;

&lt;p&gt;1️⃣7️⃣ The Art of Command Line 🖥️&lt;br&gt;
📌 &lt;a href="https://github.com/jlevy/the-art-of-command-line" rel="noopener noreferrer"&gt;https://github.com/jlevy/the-art-of-command-line&lt;/a&gt;&lt;br&gt;
Master the Linux command line with this detailed guide.&lt;/p&gt;

&lt;p&gt;1️⃣8️⃣ Web Developer Resources 🌎&lt;br&gt;
📌 &lt;a href="https://github.com/bradtraversy/webdev-resources" rel="noopener noreferrer"&gt;https://github.com/bradtraversy/webdev-resources&lt;/a&gt;&lt;br&gt;
A curated list of frontend &amp;amp; backend development resources.&lt;/p&gt;

&lt;p&gt;1️⃣9️⃣ Public APIs 📡&lt;br&gt;
📌 &lt;a href="https://github.com/public-apis/public-apis" rel="noopener noreferrer"&gt;https://github.com/public-apis/public-apis&lt;/a&gt;&lt;br&gt;
A list of free APIs for web development, data, and AI applications.&lt;/p&gt;

&lt;p&gt;2️⃣0️⃣ Design Resources for Developers 🎨&lt;br&gt;
📌 &lt;a href="https://github.com/bradtraversy/design-resources-for-developers" rel="noopener noreferrer"&gt;https://github.com/bradtraversy/design-resources-for-developers&lt;/a&gt;&lt;br&gt;
Free design tools, UI kits, and CSS frameworks for developers.&lt;/p&gt;

&lt;p&gt;🎯 Conclusion&lt;br&gt;
🚀 Staying up-to-date with the latest resources and tools is key to growing as a developer. These GitHub repositories offer educational materials, coding challenges, and project-based learning opportunities to help you excel in your career.&lt;/p&gt;

&lt;p&gt;Whether you’re preparing for interviews, learning new skills, or looking for project ideas, these repositories will boost your programming journey!&lt;/p&gt;

&lt;p&gt;📌 Which GitHub repo is your favorite? Let me know in the comments! 👇&lt;/p&gt;

&lt;p&gt;🔥 Don't forget to star your favorite repositories on GitHub and share this post with other developers!&lt;/p&gt;

</description>
      <category>github</category>
      <category>programming</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
    <item>
      <title>Introducing Exciting New Git Features: A Boost for Your Development Workflow</title>
      <dc:creator>Sahinur</dc:creator>
      <pubDate>Mon, 20 May 2024 09:28:25 +0000</pubDate>
      <link>https://dev.to/sahinur/introducing-exciting-new-git-features-a-boost-for-your-development-workflow-3f45</link>
      <guid>https://dev.to/sahinur/introducing-exciting-new-git-features-a-boost-for-your-development-workflow-3f45</guid>
      <description>&lt;p&gt;Hello Dev community! 🌟&lt;/p&gt;

&lt;p&gt;As developers, we continually seek tools and features that streamline our workflows and make coding more efficient and enjoyable. Git, the widely-used version control system, has recently introduced some new features that promise to enhance our development experience even further. In this blog post, we’ll explore these new Git features and how they can improve your workflow. Let’s dive in!&lt;/p&gt;

&lt;h2&gt;
  
  
  1. &lt;strong&gt;Sparse Checkout&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Sparse checkout is a game-changer for large repositories. It allows you to check out only a subset of the repository, reducing the load on your local environment and improving performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Use Sparse Checkout
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Initialize Sparse-Checkout Mode&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Define the Sparse-Checkout Patterns&lt;/strong&gt;:
Specify the directories or files you want to include.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git sparse-checkout &lt;span class="nb"&gt;set&lt;/span&gt; &amp;lt;directory-or-file&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Benefits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reduced Disk Usage&lt;/strong&gt;: Only necessary files are checked out, saving space.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improved Performance&lt;/strong&gt;: Faster operations due to fewer files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Focused Development&lt;/strong&gt;: Work on specific parts of the repository without distractions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. &lt;strong&gt;Built-in File System Monitor (FSMonitor)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;FSMonitor is a built-in file system monitor that speeds up Git commands by keeping track of file changes in real-time, eliminating the need to scan the entire working directory.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Enable FSMonitor
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Enable FSMonitor&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git config core.fsmonitor &lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Benefits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Faster Commands&lt;/strong&gt;: Commands like &lt;code&gt;git status&lt;/code&gt; execute significantly faster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-Time Updates&lt;/strong&gt;: Immediate awareness of file changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. &lt;strong&gt;Git Maintenance&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Git Maintenance automates routine maintenance tasks, such as repacking and cleaning up unnecessary files, to keep your repository performant and healthy.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Configure Git Maintenance
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Configure Maintenance Tasks&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git maintenance start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Schedule Specific Tasks&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git maintenance run &lt;span class="nt"&gt;--task&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;task-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Benefits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automated Upkeep&lt;/strong&gt;: Set and forget maintenance tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced Performance&lt;/strong&gt;: Regular maintenance ensures optimal repository performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduced Manual Intervention&lt;/strong&gt;: Focus on coding while Git handles the housekeeping.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. &lt;strong&gt;Background Pre-fetching&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Git now supports background pre-fetching of commits, allowing you to stay up-to-date with remote branches without blocking your workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Enable Background Pre-fetching
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Configure Pre-fetching&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git config fetch.auto &lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Benefits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Non-blocking Updates&lt;/strong&gt;: Fetch updates in the background while you work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stay Synchronized&lt;/strong&gt;: Always have the latest changes from remote branches.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. &lt;strong&gt;Improved Merge Conflict Resolution&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Git’s new merge conflict resolution features provide a more intuitive and user-friendly way to handle conflicts, making it easier to integrate changes from different branches.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Use the Improved Merge Tools
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Invoke the Merge Tool&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git mergetool
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Benefits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simplified Conflict Resolution&lt;/strong&gt;: Enhanced tools and interfaces to resolve conflicts efficiently.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better Visual Guidance&lt;/strong&gt;: Improved visualization of conflicts and changes.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;These new Git features are designed to make your development workflow faster, more efficient, and more enjoyable. Whether you’re dealing with large repositories, frequent file changes, or complex merge conflicts, these enhancements have got you covered.&lt;/p&gt;

&lt;p&gt;Give these features a try and see how they can transform your Git experience. Happy coding, and let’s keep pushing the boundaries of what we can achieve with Git!&lt;/p&gt;

&lt;p&gt;Feel free to share your thoughts and experiences with these new features in the comments below. 🚀&lt;/p&gt;




&lt;p&gt;Thank you for reading! If you enjoyed this post, don’t forget to give it a ❤️ and follow for more updates on the latest in software development. Happy coding! 👩‍💻👨‍💻&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Unlock Your Code's Potential: 5 Powerful GitHub Copilot Alternatives</title>
      <dc:creator>Sahinur</dc:creator>
      <pubDate>Sun, 17 Dec 2023 03:48:42 +0000</pubDate>
      <link>https://dev.to/sahinur/unlock-your-codes-potential-5-powerful-github-copilot-alternatives-27nf</link>
      <guid>https://dev.to/sahinur/unlock-your-codes-potential-5-powerful-github-copilot-alternatives-27nf</guid>
      <description>&lt;p&gt;GitHub Copilot, developed by Microsoft, is an innovative AI-driven collaboration tool designed to enhance developers' coding efficiency and accuracy. By leveraging its contextual awareness of the file being worked on and its connections to related files, Copilot offers autocomplete-style suggestions that streamline the coding process. Although Copilot is a prominent AI tool, there are also other alternatives available. This article will introduce you to five additional options to consider.&lt;br&gt;
Getting started with GitHub Copilot is effortless. You can utilize this powerful tool by either typing the code you need or describing your desired functionality in natural language within your text editor. Copilot will then carefully analyze the context and provide relevant suggestions to aid you in your coding process.&lt;br&gt;
Moreover, GitHub Copilot conveniently integrates with various popular IDEs such as Visual Studio Code, Visual Studio, NeoVim, and the JetBrains suite. To begin utilizing Copilot, simply install the extension in your preferred IDE and start benefiting from its capabilities.&lt;br&gt;
While GitHub Copilot is a useful tool for developers, there are also several alternatives available that offer similar code completion features. Let’s now consider five of those, so you can decide what to use.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Codeium
&lt;/h2&gt;

&lt;p&gt;Codeium is an AI-powered programming tool that seamlessly integrates with popular code editors and IDEs like Visual Studio Code, PyCharm, JetBrains, IntelliJ, Vim, Android Studio, and more. Its primary purpose is to empower developers to expedite code development through its advanced code suggestion feature. Moreover, it offers extensive support for multiple programming languages, including Python and JavaScript.&lt;br&gt;
When you start typing a code fragment in Codeium, it instantly generates multiple code suggestions. If one of the suggestions aligns with your desired outcome, simply press the Tab button to automatically insert it into your code block. In case the suggested code appears different from what you intend, Codeium offers an impressive feature that enables you to cycle through various code suggestions. By hovering over the beginning of the suggested code block, you can access a Next and Previous toggle, allowing you to explore different suggestions and select the one that best fits your specific requirements.&lt;/p&gt;

&lt;p&gt;The pros of Codeium include the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Multiple programming language support&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fast suggestions and a provision to cycle between alternate coding patterns&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. CodeGeex AI
&lt;/h2&gt;

&lt;p&gt;CodeGeex AI is an AI-based multilingual development tool with code suggestions, auto-complete features, and code translations. It is an AI assistant that works alongside you to ensure you ship codes easier and faster. It is not restricted by programming languages, as it can convert your code into a different programming language.&lt;/p&gt;

&lt;p&gt;Pros of CodeGeex AI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;CodeGeex is powered by large code repositories of up to 20 programming languages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It also provides developers with a translation feature to convert code written in one programming language, to another.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Code Whisperer
&lt;/h2&gt;

&lt;p&gt;Code Whisperer, developed by AWS, is a powerful tool designed to enhance developers' coding experiences with a range of features. This comprehensive tool includes AI-powered autocomplete, code documentation, and refactoring capabilities, providing developers with a robust coding environment.&lt;br&gt;
With Code Whisperer, developers can seamlessly integrate Amazon Web Services (AWS) functionalities into their code. This includes leveraging AWS services like S3 buckets, containers, and more. The tool offers code suggestions and auto-completion tailored specifically for working with AWS, enabling developers to write code more efficiently and accurately when utilizing AWS resources.&lt;/p&gt;

&lt;p&gt;Pros of Code Whisperer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Code Whisperer comes with an AWS toolkit extension, which in addition to Code Whisperer’s coding assistant feature, also provides you with easy access to view, modify and deploy AWS resources.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code Whisperer provides support for a wide range of programming languages.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cons of Code Whisperer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generally, it is a great alternative; it has no cons.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Tabnine
&lt;/h2&gt;

&lt;p&gt;Tabnine revolutionizes the coding experience with its cutting-edge AI autocomplete functionality. As one of the early pioneers in the market, Tabnine's code completion tool offers a seamless integration with your preferred code editor. It empowers you to effortlessly complete code in any programming language, library, or framework of your choice.&lt;br&gt;
What sets Tabnine apart from other AI models is its unique approach to data privacy. It exclusively trains its algorithms using open-source and permissive code, ensuring that your proprietary code remains confidential and secure.&lt;br&gt;
By leveraging artificial intelligence, Tabnine analyzes the code you've written and intelligently suggests relevant words or phrases to assist you in your coding process. It seamlessly integrates with popular code editors such as Visual Studio Code, Sublime Text, and IntelliJ, allowing you to enjoy its exceptional capabilities across different environments. Moreover, Tabnine is highly adaptable and can be personalized to match your specific coding style.&lt;br&gt;
Depending on your requirements and desired features, you have the option to choose between a free version or a paid subscription of Tabnine.&lt;/p&gt;

&lt;p&gt;Pros of Tabnine :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Tabnine can predict your next line of code and give you suggestions based on it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It comes with not only auto-complete features but also improved code quality because of its AI power.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It covers almost all programming languages, from the most popular ones by coders to the more used ones in the tech industry.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cons of Tabnine :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Sometimes, it doesn’t give the exact suggestions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Beginners in coding might find it not easy to use at first.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Based on its AI learning from code written, it might sometimes mix up one code for the other.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But in all, it is very awesome and useful. It has its cons due to its AI assistant having to learn from the code being written in the editor. Everyone learns, even AI,, so let’s not fault it.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Blackbox
&lt;/h2&gt;

&lt;p&gt;Blackbox is an exceptional Visual Studio Code extension that provides advanced code completion and suggestions. What sets it apart is its remarkable ability to transform your coding questions into actual code within your editor. This unique feature allows you to seamlessly convert your queries into executable code snippets.&lt;/p&gt;

&lt;p&gt;What makes Blackbox even more impressive is its wide compatibility with multiple programming languages. It intelligently adapts to the syntax and structure of each supported language, ensuring accurate and reliable code generation.&lt;/p&gt;

&lt;p&gt;With Blackbox, you can confidently ask coding questions directly within your editor and witness them effortlessly transformed into functional code. It empowers developers to streamline their coding process and enhance productivity, all within the familiar environment of Visual Studio Code.&lt;/p&gt;

&lt;p&gt;Pros of BlackBox:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;When coding, if you need a specific coding function and you don’t know how to implement it, ask Blackbox, and its AI will get the implementation of the coding function for you.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It works with all programming languages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It has a feature that allows you to copy code from videos you watch, which is useful while learning.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cons of Blackbox:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Like every other alternative to GitHub Copilot, you don’t expect every suggestion to be what you wanted.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;In their quest for alternatives to GitHub Copilot, developers can explore a range of code completion tools that offer valuable features and capabilities. It's important to note that most of these tools harness the power of AI, but it's essential to manage expectations as they may not always produce the exact desired outcome. Nevertheless, these tools prove to be valuable companions during the coding process, offering assistance and enhancing productivity&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
