<?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: Vijaya Laxmi Kadham</title>
    <description>The latest articles on DEV Community by Vijaya Laxmi Kadham (@kadhamvj23).</description>
    <link>https://dev.to/kadhamvj23</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%2F953442%2F47de73bc-77dd-4dd2-8660-343feb285d87.png</url>
      <title>DEV Community: Vijaya Laxmi Kadham</title>
      <link>https://dev.to/kadhamvj23</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kadhamvj23"/>
    <language>en</language>
    <item>
      <title>🐾 PawTrack: A Daily Activity &amp; Wellness Tracker for Your Dog</title>
      <dc:creator>Vijaya Laxmi Kadham</dc:creator>
      <pubDate>Sun, 16 Aug 2026 13:08:10 +0000</pubDate>
      <link>https://dev.to/kadhamvj23/pawtrack-a-daily-activity-wellness-tracker-for-your-dog-1djn</link>
      <guid>https://dev.to/kadhamvj23/pawtrack-a-daily-activity-wellness-tracker-for-your-dog-1djn</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-08-13"&gt;Weekend Challenge: Dog Days Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;For the Dog Days Edition challenge, I built &lt;strong&gt;PawTrack&lt;/strong&gt;, a simple daily companion for dog owners.&lt;/p&gt;

&lt;p&gt;The idea was to turn everyday dog-care activities into something easy and fun to track.&lt;/p&gt;

&lt;p&gt;PawTrack lets users record:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🚶 Walk time&lt;/li&gt;
&lt;li&gt;🍖 Meals&lt;/li&gt;
&lt;li&gt;💧 Water&lt;/li&gt;
&lt;li&gt;🎾 Play time&lt;/li&gt;
&lt;li&gt;🧠 Training time&lt;/li&gt;
&lt;li&gt;😊 Daily mood&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Based on these activities, PawTrack calculates a &lt;strong&gt;Paw Score from 0–100&lt;/strong&gt; and gives the owner a simple message about how their dog's day went.&lt;/p&gt;

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

&lt;p&gt;⭐ Superstar Pup!&lt;br&gt;&lt;br&gt;
🐶 Great Day!&lt;br&gt;&lt;br&gt;
🐾 Good Start!&lt;br&gt;&lt;br&gt;
🌱 Getting There!&lt;br&gt;&lt;br&gt;
🦴 Let's Get Moving!&lt;/p&gt;

&lt;p&gt;The application also keeps a &lt;strong&gt;rolling 15-day activity history&lt;/strong&gt;, allowing users to look back at their dog's recent activity.&lt;/p&gt;

&lt;p&gt;I wanted to keep the project simple enough to use immediately while still making it feel like a real small application rather than just a static webpage.&lt;/p&gt;

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

&lt;p&gt;🐾 &lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://kadhamvj23.github.io/pawtrack/" rel="noopener noreferrer"&gt;Try PawTrack Live&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The application includes two main pages:&lt;/p&gt;

&lt;h3&gt;
  
  
  🐶 Daily Tracker
&lt;/h3&gt;

&lt;p&gt;Users can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a dog profile&lt;/li&gt;
&lt;li&gt;Record daily activities&lt;/li&gt;
&lt;li&gt;Select their dog's mood&lt;/li&gt;
&lt;li&gt;See a live Paw Score&lt;/li&gt;
&lt;li&gt;Save the day's activity&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📊 PawTrack Dashboard
&lt;/h3&gt;

&lt;p&gt;The dashboard provides an overview of recent activity, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Average Paw Score&lt;/li&gt;
&lt;li&gt;Best Score&lt;/li&gt;
&lt;li&gt;Days Tracked&lt;/li&gt;
&lt;li&gt;Latest Score&lt;/li&gt;
&lt;li&gt;Average walk time&lt;/li&gt;
&lt;li&gt;Average meals&lt;/li&gt;
&lt;li&gt;Average water&lt;/li&gt;
&lt;li&gt;Average play time&lt;/li&gt;
&lt;li&gt;Average training time&lt;/li&gt;
&lt;li&gt;15-day activity history&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The dashboard can be accessed directly from the main PawTrack page.&lt;/p&gt;

&lt;h2&gt;
  
  
  📸 Screenshots
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🐾 Daily Tracker
&lt;/h3&gt;

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

&lt;h3&gt;
  
  
  📊 Dashboard
&lt;/h3&gt;

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




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

&lt;p&gt;🐙 &lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/KadhamVj23/pawtrack" rel="noopener noreferrer"&gt;View PawTrack on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is completely open and built using basic web technologies.&lt;/p&gt;




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

&lt;p&gt;I intentionally kept the technical architecture simple.&lt;/p&gt;

&lt;p&gt;The application was built using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HTML5&lt;/strong&gt; – page structure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSS3&lt;/strong&gt; – responsive UI and styling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JavaScript&lt;/strong&gt; – Paw Score calculation, validation, mood selection, and dashboard logic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;localStorage&lt;/strong&gt; – storing the dog profile, daily activities, mood, score, and activity history&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Git &amp;amp; GitHub&lt;/strong&gt; – source control and project hosting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Pages&lt;/strong&gt; – deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏗️ Application Flow
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    🐶 Dog Profile
                          │
                          ▼
                 🏃 Daily Activities
                          │
                          ▼
                    😊 Dog Mood
                          │
                          ▼
                   🐾 Paw Score
                          │
                          ▼
                    💾 localStorage
                          │
                          ▼
                📈 15-Day Activity History
                          │
                          ▼
                   📊 Dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🐾 Paw Score
&lt;/h3&gt;

&lt;p&gt;The Paw Score is calculated from five daily activities:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Activity&lt;/th&gt;
&lt;th&gt;Maximum Points&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🚶 Walk&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🍖 Meals&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💧 Water&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🎾 Play&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧠 Training&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The score updates live as activities are entered, giving the user immediate feedback before saving the day's activity.&lt;/p&gt;

&lt;p&gt;When the user saves the day's activities, the record is added to the activity history.&lt;/p&gt;




&lt;h3&gt;
  
  
  📈 15-Day History
&lt;/h3&gt;

&lt;p&gt;Rather than requiring a database or backend, PawTrack uses browser &lt;code&gt;localStorage&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Each saved day contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📅 Date&lt;/li&gt;
&lt;li&gt;😊 Mood&lt;/li&gt;
&lt;li&gt;🚶 Walk&lt;/li&gt;
&lt;li&gt;🍖 Meals&lt;/li&gt;
&lt;li&gt;💧 Water&lt;/li&gt;
&lt;li&gt;🎾 Play&lt;/li&gt;
&lt;li&gt;🧠 Training&lt;/li&gt;
&lt;li&gt;🐾 Paw Score&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application keeps the &lt;strong&gt;15 most recent records&lt;/strong&gt;. When a new record pushes the history beyond 15 entries, the oldest record is automatically removed.&lt;/p&gt;

&lt;p&gt;This allowed me to create a useful history feature without introducing unnecessary backend complexity for a weekend project.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔒 Why localStorage?
&lt;/h3&gt;

&lt;p&gt;I chose &lt;code&gt;localStorage&lt;/code&gt; because PawTrack is designed as a lightweight browser-based application.&lt;/p&gt;

&lt;p&gt;This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No backend server is required&lt;/li&gt;
&lt;li&gt;No database is required&lt;/li&gt;
&lt;li&gt;No user account is required&lt;/li&gt;
&lt;li&gt;Data stays in the user's browser&lt;/li&gt;
&lt;li&gt;The application can be deployed as a static website&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;This challenge was a great opportunity to build something small from start to finish within a limited amount of time.&lt;/p&gt;

&lt;p&gt;I worked on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Structuring a complete web application&lt;/li&gt;
&lt;li&gt;Building an interactive UI with HTML and CSS&lt;/li&gt;
&lt;li&gt;Writing JavaScript for application logic&lt;/li&gt;
&lt;li&gt;Validating user input&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;localStorage&lt;/code&gt; for persistent browser data&lt;/li&gt;
&lt;li&gt;Creating a rolling activity history&lt;/li&gt;
&lt;li&gt;Building a separate dashboard&lt;/li&gt;
&lt;li&gt;Connecting multiple pages together&lt;/li&gt;
&lt;li&gt;Deploying the application with GitHub Pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the biggest lessons was that a project doesn't need a complicated backend or many external services to be useful.&lt;/p&gt;

&lt;p&gt;Sometimes a focused idea, a simple implementation, and a good user experience are enough to turn a small weekend project into something enjoyable to use.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;I am &lt;strong&gt;not submitting PawTrack for a specific prize category&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The project is being submitted for the &lt;strong&gt;overall challenge&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I chose to focus on building a complete, functional, and easy-to-use dog activity tracker rather than adding a prize-category technology just for the sake of using it.&lt;/p&gt;




&lt;h1&gt;
  
  
  🐾 Final Thoughts
&lt;/h1&gt;

&lt;p&gt;PawTrack started with a simple question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if taking care of your dog's daily activities could feel a little more fun?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The result is a small application that turns everyday activities into a simple Paw Score and gives dog owners a quick way to look back at their dog's recent routine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Track • Play • Train • Celebrate 🐶&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
    </item>
    <item>
      <title>AWS CloudWatch For Beginners – Monitoring, Metrics, Alarms &amp; with Default Metrics Demo</title>
      <dc:creator>Vijaya Laxmi Kadham</dc:creator>
      <pubDate>Sun, 16 Aug 2026 09:48:41 +0000</pubDate>
      <link>https://dev.to/kadhamvj23/aws-cloudwatch-for-beginners-monitoring-metrics-alarms-with-default-metrics-demo-30c8</link>
      <guid>https://dev.to/kadhamvj23/aws-cloudwatch-for-beginners-monitoring-metrics-alarms-with-default-metrics-demo-30c8</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Amazon CloudWatch&lt;/strong&gt; is an Amazon monitoring and observability service that helps us to collect, visualize, monitor and respond to information generated by AWS Resources, applications and services.&lt;/p&gt;

&lt;p&gt;In simple terms:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;CloudWatch helps us understand what is happening inside our AWS environment and alerts us when something requires attention.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For example, imagine we have an EC2 instance running an application.&lt;/p&gt;

&lt;p&gt;If the server's CPU becomes very high, we don't have to wait until the users start complaining.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EC2 Instance
     |
     | CPU Utilization
     ↓
CloudWatch
     |
     | Threshold exceeded
     ↓
CloudWatch Alarm
     |
     ↓
Amazon SNS
     |
     ↓
Email Notification
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CloudWatch can monitor AWS provided metrics as well as that we publish ourselves as custom metrics.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Problem does CloudWatch Solve?
&lt;/h2&gt;

&lt;p&gt;Without monitoring, we might have to manually log into servers and check their health.&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;Server
  ↓
Is CPU high?
  ↓
Is memory high?
  ↓
Are requests increasing?
  ↓
Are errors occurring?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This doesn't scale well.&lt;/p&gt;

&lt;p&gt;CloudWatch provides a centralized place to monitor AWS resources and applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Without CloudWatch&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;EC2
 ↓
No monitoring
 ↓
Problem occurs
 ↓
Users report problem
 ↓
Engineer investigates
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;With CloudWatch&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;EC2
 ↓
CloudWatch Metrics
 ↓
Threshold exceeded
 ↓
CloudWatch Alarm
 ↓
SNS Notification
 ↓
Engineer gets alert
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows problems to be detected earlier.&lt;/p&gt;




&lt;h2&gt;
  
  
  Major CloudWatch Features
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;**1. Metrics&lt;/em&gt;*: Metrics are numerical measurements collected over time.&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;CPUUtilization = 72%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NetworkIn = 10 MB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A metric is essentially a time series of values.&lt;/p&gt;

&lt;p&gt;For an EC2 instance, CloudWatch can provide metrics such as CPU utilization, network traffic and status checks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Alarms&lt;/strong&gt;: CloudWatch alarms monitor metrics and compare them against conditions that we define.&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;CPUUtilization &amp;gt;= 50%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the condition is met, the alarm can enter the &lt;code&gt;ALARM&lt;/code&gt; state and trigger an action such as an SNS notification. AWS supports alarms based on individual metrics and other CloudWatch data sources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Logs&lt;/strong&gt;: CloudWatch log allows application and AWS resources to send log information to CloudWatch.&lt;/p&gt;

&lt;p&gt;Think of a:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Log Group = Folder of related logs&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Logstream = Individual stream of log events inside that group.&lt;/p&gt;
&lt;/blockquote&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;CloudWatch Logs
     |
     └── /application/my-app
            |
            ├── Instance-1
            ├── Instance-2
            └── Instance-3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The current CloudWatch console may show this functionality under &lt;strong&gt;Log -&amp;gt; Log Management&lt;/strong&gt;, rather than the exact "Log Groups" menu.&lt;/p&gt;




&lt;h2&gt;
  
  
  CloudWatch Metrics Concepts
&lt;/h2&gt;

&lt;p&gt;Before doing the hands-on, it is important to understand a few terms.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Metric: A metric is the measurement we want to monitor.&lt;/li&gt;
&lt;/ol&gt;

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

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

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Data Point: A data point is an individual value recorded for a metric at a particular time.&lt;/li&gt;
&lt;/ol&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;10:00 → 15%
10:05 → 18%
10:10 → 42%
10:15 → 63%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These values form a time series.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Namespace: A namespace groups related metrics.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For EC2, the namespace is:&lt;/p&gt;

&lt;p&gt;AWS/EC2&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;AWS/EC2
   |
   ├── CPUUtilization
   ├── NetworkIn
   ├── NetworkOut
   └── StatusCheckFailed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;A dimension helps identify what a metric belongs to.&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;Metric:
CPUUtilization

Dimension:
InstanceId = i-0123456789abcdef
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is why CloudWatch may display your EC2 instance ID rather than the friendly EC2 Name tag.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Statistic: Statistics tell CloudWatch how to summarize metric values.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Common statistics include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Average&lt;/li&gt;
&lt;li&gt;Minimum&lt;/li&gt;
&lt;li&gt;Maximum&lt;/li&gt;
&lt;li&gt;Sum&lt;/li&gt;
&lt;li&gt;Sample count&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For CPU utilization, Average is usually an intuitive choice for a basic monitoring alarm.&lt;/p&gt;

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

&lt;p&gt;The period defines the amount of time represented by each data point used for evaluation.&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;Period = 5 minutes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;means CloudWatch evaluates the metric over five-minute periods.&lt;/p&gt;




&lt;h2&gt;
  
  
  CloudWatch Architecture for the Project
&lt;/h2&gt;

&lt;p&gt;Our project will Have 2 demonstrations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Demo 1 - AWS Default Metric
&lt;/h3&gt;

&lt;p&gt;We will monitor&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EC2 CPUUtilization
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                AWS
                 |
        +--------+--------+
        |                 |
       EC2            CloudWatch
        |                 |
        | CPU metric      |
        +----------------&amp;gt;|
                          |
                    CPUUtilization
                          |
                          ↓
                   CloudWatch Alarm
                          |
                          ↓
                         SNS
                          |
                          ↓
                    Email Alert
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Demo - Monitor EC2 CPU Utilization
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Objective
&lt;/h3&gt;

&lt;p&gt;In this demo we will:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create an EC2 instance&lt;/li&gt;
&lt;li&gt;View its default CloudWatch metrics&lt;/li&gt;
&lt;li&gt;Understand CPU Utilization&lt;/li&gt;
&lt;li&gt;Create a CloudWatch alarm.&lt;/li&gt;
&lt;li&gt;Configure the SNS email notification.&lt;/li&gt;
&lt;li&gt;Generate controlled CPU activity on the EC2 instance.&lt;/li&gt;
&lt;li&gt;Trigger the alarm.
Receive the alarm.&lt;/li&gt;
&lt;li&gt;Receive an email notification&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Step 1: Create the EC2 Instance
&lt;/h2&gt;

&lt;p&gt;Go to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS Console -&amp;gt; EC2 -&amp;gt; Instances -&amp;gt; launch Instance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use a name such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cloudwatch-demo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure the required keypair and networking.&lt;/p&gt;

&lt;p&gt;Also make sure we have public IP enabled for IPv4 so that we can SSH directly to the instance.&lt;/p&gt;

&lt;p&gt;Then click on &lt;strong&gt;Launch Instance&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;Wait until all the checks are completed and it is in running state.&lt;/p&gt;




&lt;h2&gt;
  
  
  step 2 - Open CloudWatch
&lt;/h2&gt;

&lt;p&gt;Go to:&lt;br&gt;
&lt;strong&gt;AWS Console → CloudWatch&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On the left hand side select &lt;strong&gt;Metrics -&amp;gt; Classic Metrics&lt;/strong&gt;&lt;/p&gt;

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


&lt;h2&gt;
  
  
  Step 3 - Find EC2 Metrics
&lt;/h2&gt;

&lt;p&gt;Inside:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CloudWatch → Metrics → Classic metrics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;look for &lt;strong&gt;EC2&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then select the EC2 metric category such as per-instance metrics(Because for now I have only one EC2 instance, usually in production we should select the overall Instance metrics).&lt;/p&gt;

&lt;p&gt;Select your instance by checking the Instance Id.&lt;/p&gt;

&lt;p&gt;Select &lt;strong&gt;CPUUtilization&lt;/strong&gt;&lt;/p&gt;

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


&lt;h2&gt;
  
  
  Understanding CPU Utilization
&lt;/h2&gt;

&lt;p&gt;It represents the percentage of compute capacity being used by the EC2 Instance.&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;CPUUtilization = 10%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;means the instance is lightly loaded.&lt;/p&gt;

&lt;p&gt;Whereas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CPUUtilization = 90%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;indiciates that the instance is under significantly heavier CPU load.&lt;/p&gt;

&lt;p&gt;A high CPU value isn't automatically a problem.&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;CPU = 90%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;could be perfectly normal if we intentionally have a batch job running.&lt;/p&gt;

&lt;p&gt;That's why monitoring usually involves:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Metric
+
Threshold
+
Time period
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;rather than simply saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;CPU is high, therefore something is wrong.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Step 4 - Create the CloudWatch Alarm
&lt;/h2&gt;

&lt;p&gt;From the CPU metric, choose &lt;strong&gt;Create Alarm&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Select Metric: &lt;strong&gt;CPUUtilization&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use static: &lt;strong&gt;Average&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;for a learning exmaple, we can use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Period: 1 minute
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;and&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Threshold: &amp;gt;=50%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;The logic becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IF 
Average CPUUtilization &amp;gt;= 50%

THEN

Alarm -&amp;gt; ALARM state
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click on &lt;strong&gt;Next&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5 – Configure SNS Notification
&lt;/h2&gt;

&lt;p&gt;For the alarm action, choose:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Alarm State Trigger = In Alarm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then configure an SNS notification.&lt;/p&gt;

&lt;p&gt;Create a new topic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cloudwatch-demo-alerts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click on &lt;strong&gt;Create Topic&lt;/strong&gt; -&amp;gt; Click on &lt;strong&gt;Next&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;AWS will send an SNS subscription confirmation email.&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inbox&lt;/li&gt;
&lt;li&gt;Spam&lt;/li&gt;
&lt;li&gt;Junk&lt;/li&gt;
&lt;li&gt;Promotions/Other folders&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then click:&lt;/p&gt;

&lt;p&gt;Confirm subscription&lt;/p&gt;

&lt;p&gt;Why is this required?&lt;/p&gt;

&lt;p&gt;SNS needs to verify that the email address actually wants to receive notifications.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 6 – Name the Alarm
&lt;/h2&gt;

&lt;p&gt;Use a descriptive name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cloudwatch-demo-high-cpu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Description:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# ALERT
Hello Team,

CPU Utilization is **25% or more**

**PLEASE CHECK AND ACT ON IT**
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Then Click on Next -&amp;gt; Create Alarm.&lt;/p&gt;

&lt;p&gt;Now we need to test whether our alarm actually works.&lt;/p&gt;

&lt;p&gt;For that purpose we have a CPU-spike script in python language it will spike the CPU for a certain amount of time then it will bring back to the normal stage.&lt;/p&gt;

&lt;p&gt;Before going to the next step, we will first enable to monitor in the EC2 instance.&lt;/p&gt;

&lt;p&gt;Go to AWS Console -&amp;gt; EC2 -&amp;gt; Select the EC2 you created.&lt;/p&gt;

&lt;p&gt;Here scroll down you will find the &lt;strong&gt;Monitoring&lt;/strong&gt; tab click on it.&lt;/p&gt;

&lt;p&gt;Select the &lt;strong&gt;Managed Detailed Monitoring&lt;/strong&gt; option -&amp;gt; Click on &lt;strong&gt;ENABLE&lt;/strong&gt; -&amp;gt; Confirm.&lt;/p&gt;

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




&lt;h2&gt;
  
  
  Step 7 - Connect to the EC2 Instance
&lt;/h2&gt;

&lt;p&gt;The architecture is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Company Laptop 
| 
| 
SSH 
↓ 
AWS EC2 Instance 
| 
| 
Python workload 
↓ 
CPU utilization increases 
| ↓ CloudWatch 
| 
↓ CloudWatch Alarm 
| 
↓ 
SNS 
| 
↓ 
Email Notification
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Connect to the EC2 instance using SSH:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ssh -i your-key.pem ubuntu@YOUR_PUBLIC_IP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;your-key.pem with the name/path of your key pair&lt;/li&gt;
&lt;li&gt;YOUR_PUBLIC_IP with the public IPv4 address of your EC2 instance&lt;/li&gt;
&lt;/ul&gt;

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




&lt;h2&gt;
  
  
  Step 8 – Check Python
&lt;/h2&gt;

&lt;p&gt;Before creating our program, verify that Python 3 is available.&lt;/p&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3 --version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see something similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Python 3.x.x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;If Python 3 is available, we can continue or install the python3.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 9 – Create the Python File
&lt;/h2&gt;

&lt;p&gt;Create a new file called:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cpu_load_demo.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create the file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vim cpu_load_demo.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This opens the Vim editor.&lt;/p&gt;

&lt;p&gt;When Vim opens, press:&lt;strong&gt;i&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The i key puts Vim into Insert Mode, which allows us to type or paste the Python code.&lt;/p&gt;

&lt;p&gt;Add the following code:&lt;br&gt;
&lt;/p&gt;

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

&lt;span class="n"&gt;DURATION&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Starting CPU load test...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CPU workload will run for 2 minutes.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;start_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;start_time&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;DURATION&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1_000_000&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;

    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CPU load test completed.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;KeyboardInterrupt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;CPU load test stopped manually.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Understanding the Python Code
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Import the Time Module
&lt;/h3&gt;

&lt;p&gt;import time&lt;/p&gt;

&lt;p&gt;The time module allows the program to keep track of how long it has been running.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Set the Duration
&lt;/h3&gt;

&lt;p&gt;DURATION = 120&lt;/p&gt;

&lt;p&gt;The value 120 represents:&lt;/p&gt;

&lt;p&gt;120 seconds = 2 minutes&lt;/p&gt;

&lt;p&gt;This means the CPU test is designed to stop automatically after approximately two minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Record the Starting Time
&lt;/h3&gt;

&lt;p&gt;start_time = time.time()&lt;/p&gt;

&lt;p&gt;This records the time when the program starts.&lt;/p&gt;

&lt;p&gt;The program can then compare the current time against the starting time.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Run the CPU Workload
&lt;/h3&gt;

&lt;p&gt;while time.time() - start_time &amp;lt; DURATION:&lt;/p&gt;

&lt;p&gt;This keeps the program running while the elapsed time is less than 120 seconds.&lt;/p&gt;

&lt;p&gt;In simple terms:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Start
  ↓
Has 2 minutes passed?
  ↓
No → Continue CPU workload
  ↓
Check again
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once two minutes have passed:&lt;/p&gt;

&lt;p&gt;2 minutes reached&lt;br&gt;
       ↓&lt;br&gt;
Stop CPU workload&lt;/p&gt;
&lt;h3&gt;
  
  
  5. Perform Calculations
&lt;/h3&gt;

&lt;p&gt;for number in range(1, 1_000_000):&lt;br&gt;
    result += number * number&lt;/p&gt;

&lt;p&gt;This repeatedly performs calculations.&lt;/p&gt;

&lt;p&gt;The purpose isn't to perform a useful business calculation.&lt;/p&gt;

&lt;p&gt;The purpose of this learning exercise is to create temporary CPU activity so that we can observe the change in the EC2 &lt;code&gt;CPUUtilization&lt;/code&gt; metric in CloudWatch.&lt;/p&gt;
&lt;h3&gt;
  
  
  6. Handle Manual Interruption
&lt;/h3&gt;

&lt;p&gt;except KeyboardInterrupt:&lt;br&gt;
    print("\nCPU load test stopped manually.")&lt;/p&gt;

&lt;p&gt;If we press:&lt;/p&gt;

&lt;p&gt;Ctrl + C&lt;/p&gt;

&lt;p&gt;the program can stop gracefully.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 10 - Save the File in Vim
&lt;/h2&gt;

&lt;p&gt;After entering the code, press:&lt;/p&gt;

&lt;p&gt;Esc&lt;/p&gt;

&lt;p&gt;This exits Insert Mode.&lt;/p&gt;

&lt;p&gt;Then type:&lt;/p&gt;

&lt;p&gt;:wq&lt;/p&gt;

&lt;p&gt;and press:&lt;/p&gt;

&lt;p&gt;Enter&lt;br&gt;
Vim commands used&lt;br&gt;
i       → Enter Insert Mode&lt;br&gt;
Esc     → Exit Insert Mode&lt;br&gt;
:wq     → Save and quit&lt;/p&gt;

&lt;p&gt;The terminal should return after the file is saved.&lt;/p&gt;

&lt;p&gt;Run &lt;strong&gt;ls&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You should see: &lt;code&gt;cpu_load_demo.py&lt;/code&gt;&lt;/p&gt;

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


&lt;h2&gt;
  
  
  Step 11 - Run the CPU Load Test
&lt;/h2&gt;

&lt;p&gt;Now execute the Python program:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;python3 cpu_load_demo.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You should see:&lt;/p&gt;

&lt;p&gt;Starting CPU load test...&lt;br&gt;
CPU workload will run for 2 minutes.&lt;/p&gt;

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

&lt;p&gt;The Python program is now generating CPU activity on the EC2 instance.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;NOTE: MAKE SURE YOU ARE RUNNING THIS FILE INSIDE THE EC2 INSTANCE AND NOT IN YOUR COMPUTER.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Important: The CPU activity is happening on the AWS EC2 instance. It is not consuming the CPU of the company laptop or your personal laptop.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Step 12 - Check CloudWatch CPUUtilization
&lt;/h2&gt;

&lt;p&gt;Now return to the AWS Console:&lt;/p&gt;

&lt;p&gt;Go to CloudWatch -&amp;gt; Metrics -&amp;gt; Classic Metrics -&amp;gt; EC2 -&amp;gt; Per-Instance Metrics&lt;/p&gt;

&lt;p&gt;Select the CPUUtilization metric for the EC2 instance.&lt;/p&gt;

&lt;p&gt;You should eventually see the CPU utilization increases on the CloudWatch graph.&lt;/p&gt;

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

&lt;p&gt;You can also check the Monitoring in EC2.&lt;/p&gt;

&lt;p&gt;Go the EC2 &lt;strong&gt;Instance&lt;/strong&gt; -&amp;gt; Click on &lt;strong&gt;Monitoring tab&lt;/strong&gt;&lt;/p&gt;

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


&lt;h2&gt;
  
  
  Step 13 - Check the SNS Email
&lt;/h2&gt;

&lt;p&gt;The alarm enters in the &lt;code&gt;ALARM&lt;/code&gt; state, and Amazon SNS should sned the notification to the email address that was subscribed to the SNS topic.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Inbox&lt;/li&gt;
&lt;li&gt;Spam/Junk folder&lt;/li&gt;
&lt;li&gt;Promotions/other folder&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The notification confirms that the CloudWatch alarm changed state.&lt;/p&gt;

&lt;p&gt;You will get the message like below:&lt;/p&gt;

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

&lt;p&gt;This demonstrates how CloudWatch can automatically notify an administrator when a monitored resource exceeds a configured threshold.&lt;/p&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;NOTE: I TRIED TO MAKE IT FOR 50% OR MORE BUT MY EC2 CPU CONSUMPTION WASN'T GOING THAT HIGH, SO I EDITED THE CPUUtilization TO &amp;gt;=25% IN ALARMS.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Complete Project Workflow
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    AWS CLOUD
                        |
                        v
                +---------------+
                |      EC2      |
                | cloudwatch-   |
                |     demo      |
                +-------+-------+
                        |
                        | CPUUtilization
                        v
                +---------------+
                |  CloudWatch   |
                |    Metrics    |
                +-------+-------+
                        |
                        | CPU &amp;gt;= 25%
                        v
                +---------------+
                |  CloudWatch   |
                |     Alarm     |
                +-------+-------+
                        |
                        | ALARM State
                        v
                +---------------+
                |      SNS      |
                |     Topic     |
                +-------+-------+
                        |
                        | Email
                        v
                +---------------+
                | Email Alert   |
                | Notification  |
                +---------------+


              CPU LOAD TESTING FLOW

                EC2 Instance
                     |
                     v
            cpu_load_demo.py
                     |
                     | Runs for ~2 minutes
                     v
              CPU Usage Rises
                     |
                     v
             CloudWatch Metric
                     |
                     v
              Alarm Threshold
                  &amp;gt;= 25%
                     |
                     v
              Alarm = ALARM
                     |
                     v
                    SNS
                     |
                     v
              Email Received
                     |
                     v
            Python Script Stops
                     |
                     v
              CPU Decreases
                     |
                     v
              Alarm = OK
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Final Flow
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EC2
 ↓
CPUUtilization
 ↓
CloudWatch Metrics
 ↓
CloudWatch Alarm (&amp;gt;= 25%)
 ↓
SNS
 ↓
Email Notification
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;p&gt;In this article, we learned how to monitor an &lt;strong&gt;AWS-provided metric&lt;/strong&gt; using Amazon CloudWatch.&lt;/p&gt;

&lt;p&gt;We monitored:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EC2 → CPUUtilization → CloudWatch Alarm → SNS → Email
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;In the next article we will learn about the AWS Lambda Functions and with the Cloud Optimization hands-on Demo to understand it better.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>aws</category>
      <category>cloudwatch</category>
    </item>
    <item>
      <title>Preparing for AWS CI/CD Hands-On Project - Prerequisites</title>
      <dc:creator>Vijaya Laxmi Kadham</dc:creator>
      <pubDate>Fri, 31 Jul 2026 22:42:55 +0000</pubDate>
      <link>https://dev.to/kadhamvj23/preparing-for-aws-cicd-hands-on-project-prerequisites-3h5o</link>
      <guid>https://dev.to/kadhamvj23/preparing-for-aws-cicd-hands-on-project-prerequisites-3h5o</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;In the previous article, we learned how AWS CodePipeline automates the software delivery process.&lt;/p&gt;

&lt;p&gt;Before we start building our AWS CI/CD pipeline, we need one more important tool: &lt;strong&gt;Docker&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Modern applications are rarely deployed directly from the source code. Instead, they are packaged into Docker images, making them portable and consistent across different environments.&lt;/p&gt;

&lt;p&gt;In this article, we will prepare everything required for our CI/CD project by creating a Docker account and understanding how Docker images work.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why Do We Need Docker?
&lt;/h1&gt;

&lt;p&gt;Imagine you are developing an application on your laptop.&lt;/p&gt;

&lt;p&gt;It works perfectly on your machine.&lt;/p&gt;

&lt;p&gt;But when another developer runs the same application, it suddenly fails because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A different Python version is installed.&lt;/li&gt;
&lt;li&gt;Some libraries are missing.&lt;/li&gt;
&lt;li&gt;The operating system is different.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a very common problem.&lt;/p&gt;

&lt;p&gt;Docker solves it by packaging everything the application needs into a single unit called a &lt;strong&gt;Docker image&lt;/strong&gt;.&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;It works on my machine.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can simply share the Docker image, and it works the same everywhere.&lt;/p&gt;




&lt;h1&gt;
  
  
  What is Docker Hub?
&lt;/h1&gt;

&lt;p&gt;Docker Hub is similar to GitHub, but instead of storing source code, it stores Docker images.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Upload Docker images.&lt;/li&gt;
&lt;li&gt;Download images.&lt;/li&gt;
&lt;li&gt;Share images.&lt;/li&gt;
&lt;li&gt;Use images in your CI/CD pipelines.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it like this:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;GitHub&lt;/th&gt;
&lt;th&gt;Docker Hub&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Stores source code&lt;/td&gt;
&lt;td&gt;Stores Docker images&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Git repositories&lt;/td&gt;
&lt;td&gt;Docker repositories&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h1&gt;
  
  
  Create a Docker Hub Account
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Open your browser.&lt;/li&gt;
&lt;li&gt;Visit &lt;strong&gt;&lt;a href="https://hub.docker.com/" rel="noopener noreferrer"&gt;https://hub.docker.com/&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Sign Up&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Create a free account.&lt;/li&gt;
&lt;li&gt;Verify your email address.&lt;/li&gt;
&lt;li&gt;Sign in to Docker Hub.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Congratulations! Your Docker Hub account is ready.&lt;/p&gt;




&lt;p&gt;Till now we have learned that AWS CodePipeline automates the software delivery process and how Docker helps package applications into portable Docker images.&lt;/p&gt;

&lt;p&gt;But one important question still remains.&lt;/p&gt;

&lt;p&gt;When a developer pushes code to GitHub:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who actually builds the application?&lt;/li&gt;
&lt;li&gt;Who compiles the code?&lt;/li&gt;
&lt;li&gt;Who runs the tests?&lt;/li&gt;
&lt;li&gt;Who creates the Docker image?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The answer is &lt;strong&gt;AWS CodeBuild&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  What is AWS CodeBuild?
&lt;/h1&gt;

&lt;p&gt;AWS CodeBuild is a fully managed build service that automatically builds and tests your application whenever new code is pushed.&lt;/p&gt;

&lt;p&gt;Instead of manually running the build commands on your laptop, CodeBuild creates a temporary build environment in AWS and performs all required tasks.&lt;/p&gt;

&lt;p&gt;Think of CodeBuild as a robot builder.&lt;/p&gt;

&lt;p&gt;You simply tell it what to do, and it performs the work automatically.&lt;/p&gt;




&lt;h1&gt;
  
  
  Where Does CodeBuild Fit?
&lt;/h1&gt;

&lt;p&gt;Let's look at the complete flow.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer
   ⬇️
Push Code
   ⬇️
GitHub
   ⬇️
AWS CodePipeline
   ⬇️
AWS CodeBuild
   ⬇️
Docker Hub / Amazon ECR
   ⬇️
AWS CodeDeploy
   ⬇️
EC2 / ECS / EKS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice something important.&lt;/p&gt;

&lt;p&gt;CodePipeline doesn't build your application.&lt;/p&gt;

&lt;p&gt;It simply coordinates the workflow.&lt;/p&gt;

&lt;p&gt;The actual build work is done by CodeBuild.&lt;/p&gt;




&lt;h1&gt;
  
  
  What Happens Inside CodeBuild?
&lt;/h1&gt;

&lt;p&gt;Whenever CodeBuild starts, it performs a series of automated steps.&lt;/p&gt;

&lt;p&gt;A typical workflow looks 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;Download Source Code
        ⬇️
Install Dependencies
        ⬇️
Compile / Build Application
        ⬇️
Run Unit Tests
        ⬇️
Run Code Quality Checks
        ⬇️
Build Docker Image
        ⬇️
Push Docker Image
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each project may have different steps depending on the application.&lt;/p&gt;




&lt;h1&gt;
  
  
  What is a Build Environment?
&lt;/h1&gt;

&lt;p&gt;CodeBuild doesn't use your local computer.&lt;/p&gt;

&lt;p&gt;Instead, AWS creates a temporary build server whenever a build starts.&lt;/p&gt;

&lt;p&gt;This temporary environment includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Operating system&lt;/li&gt;
&lt;li&gt;CPU and memory&lt;/li&gt;
&lt;li&gt;Required programming language&lt;/li&gt;
&lt;li&gt;Build tools&lt;/li&gt;
&lt;li&gt;Runtime&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once the build completes, AWS automatically removes the environment.&lt;/p&gt;

&lt;p&gt;This means you don't need to manage build servers yourself.&lt;/p&gt;




&lt;h1&gt;
  
  
  What is a &lt;code&gt;buildspec.yml&lt;/code&gt; File?
&lt;/h1&gt;

&lt;p&gt;One of the most important parts of CodeBuild is the &lt;code&gt;buildspec.yml&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;Think of it as an instruction manual for CodeBuild.&lt;/p&gt;

&lt;p&gt;It tells AWS exactly what commands should be executed during the build.&lt;/p&gt;

&lt;p&gt;For example, it may contain instructions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install dependencies.&lt;/li&gt;
&lt;li&gt;Run tests.&lt;/li&gt;
&lt;li&gt;Build the application.&lt;/li&gt;
&lt;li&gt;Build the Docker image.&lt;/li&gt;
&lt;li&gt;Push the image to Docker Hub.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without a &lt;code&gt;buildspec.yml&lt;/code&gt; file, CodeBuild wouldn't know what to do.&lt;/p&gt;

&lt;p&gt;We will create and understand this file in our upcoming hands-on article.&lt;/p&gt;




&lt;h1&gt;
  
  
  Real-World Example
&lt;/h1&gt;

&lt;p&gt;Imagine a company developing an online banking application.&lt;/p&gt;

&lt;p&gt;A developer fixes a bug and pushes the code to GitHub.&lt;/p&gt;

&lt;p&gt;Immediately:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub notifies AWS CodePipeline.&lt;/li&gt;
&lt;li&gt;CodePipeline starts the workflow.&lt;/li&gt;
&lt;li&gt;CodeBuild downloads the latest code.&lt;/li&gt;
&lt;li&gt;It builds the application.&lt;/li&gt;
&lt;li&gt;It runs automated tests.&lt;/li&gt;
&lt;li&gt;It creates a Docker image.&lt;/li&gt;
&lt;li&gt;The Docker image is uploaded to Docker Hub.&lt;/li&gt;
&lt;li&gt;CodeDeploy deploys the new version.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of this happens automatically without manual intervention.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why Use AWS CodeBuild?
&lt;/h1&gt;

&lt;p&gt;AWS CodeBuild offers several advantages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fully Managed
&lt;/h2&gt;

&lt;p&gt;AWS manages the build infrastructure for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automatic Scaling
&lt;/h2&gt;

&lt;p&gt;Multiple builds can run simultaneously without requiring manual setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pay Only for What You Use
&lt;/h2&gt;

&lt;p&gt;You are billed only for the build time used.&lt;/p&gt;

&lt;h2&gt;
  
  
  Easy Integration
&lt;/h2&gt;

&lt;p&gt;CodeBuild integrates seamlessly with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub&lt;/li&gt;
&lt;li&gt;AWS CodePipeline&lt;/li&gt;
&lt;li&gt;Docker Hub&lt;/li&gt;
&lt;li&gt;Amazon ECR&lt;/li&gt;
&lt;li&gt;CodeDeploy&lt;/li&gt;
&lt;li&gt;Amazon S3&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  No Build Server Maintenance
&lt;/h2&gt;

&lt;p&gt;There is no need to install or update build servers.&lt;/p&gt;

&lt;p&gt;AWS handles everything behind the scenes.&lt;/p&gt;




&lt;h1&gt;
  
  
  What's Next?
&lt;/h1&gt;

&lt;p&gt;In the next article, we will start our hands-on implementation of the entire CI/CD process.&lt;/p&gt;

&lt;p&gt;We will divide it into &lt;strong&gt;3 to 4 articles&lt;/strong&gt; to make it easier to understand and keep the content clean and well organized.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cicd</category>
      <category>beginners</category>
    </item>
    <item>
      <title>AWS CodePipeline Explained for Beginners | Understanding CI/CD on AWS</title>
      <dc:creator>Vijaya Laxmi Kadham</dc:creator>
      <pubDate>Fri, 31 Jul 2026 22:40:31 +0000</pubDate>
      <link>https://dev.to/kadhamvj23/aws-codepipeline-explained-for-beginners-understanding-cicd-on-aws-okk</link>
      <guid>https://dev.to/kadhamvj23/aws-codepipeline-explained-for-beginners-understanding-cicd-on-aws-okk</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;In the previous article, we learned about AWS CodeCommit, AWS's managed Git repository service.&lt;/p&gt;

&lt;p&gt;Although CodeCommit can store source code, simply storing code is not enough.&lt;/p&gt;

&lt;p&gt;Every time developers make changes to an application, someone still needs to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build the application&lt;/li&gt;
&lt;li&gt;Test it&lt;/li&gt;
&lt;li&gt;Package it&lt;/li&gt;
&lt;li&gt;Deploy it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Imagine a company with 200 developers.&lt;/p&gt;

&lt;p&gt;If every deployment had to be done manually, software releases would become slow and error-prone.&lt;/p&gt;

&lt;p&gt;This is why CI/CD pipelines are important.&lt;/p&gt;

&lt;p&gt;In this article, we will learn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What CI/CD is&lt;/li&gt;
&lt;li&gt;How a traditional CI/CD pipeline works&lt;/li&gt;
&lt;li&gt;What AWS CodePipeline is&lt;/li&gt;
&lt;li&gt;How CodePipeline works with other AWS services&lt;/li&gt;
&lt;li&gt;Why AWS provides its own CI/CD service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By the end of this article, we will understand where CodePipeline fits into the software delivery process.&lt;/p&gt;




&lt;h1&gt;
  
  
  What is CI/CD?
&lt;/h1&gt;

&lt;p&gt;CI/CD stands for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Continuous Integration (CI)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Continuous Delivery / Continuous Deployment (CD)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of CI/CD as an automated assembly line for software.&lt;/p&gt;

&lt;p&gt;Instead of manually building and deploying the application every time code changes, the pipeline performs those tasks automatically.&lt;/p&gt;

&lt;p&gt;Without CI/CD, the process might look 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;Developer
      ↓
Writes Code
      ↓
Builds Application
      ↓
Tests It
      ↓
Deploys It
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every step is done manually.&lt;/p&gt;

&lt;p&gt;With CI/CD, the process becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer
      ↓
Push Code
      ↓
Pipeline Runs Automatically
      ↓
Application is Deployed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This saves time, reduces mistakes, and provides faster feedback.&lt;/p&gt;




&lt;h1&gt;
  
  
  How Does CI/CD Usually Work?
&lt;/h1&gt;

&lt;p&gt;Before understanding AWS CodePipeline, let's see how CI/CD is commonly implemented in many organizations.&lt;/p&gt;

&lt;p&gt;A typical setup looks 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;Developer
    ⬇️
GitHub / GitLab
    ⬇️
Jenkins
    ⬇️
Docker Registry
    ⬇️
Kubernetes / EC2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What Happens Here?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A developer pushes code to GitHub.&lt;/li&gt;
&lt;li&gt;GitHub notifies Jenkins using a webhook.&lt;/li&gt;
&lt;li&gt;Jenkins starts the pipeline.&lt;/li&gt;
&lt;li&gt;Jenkins builds and tests the application.&lt;/li&gt;
&lt;li&gt;Jenkins creates a Docker image.&lt;/li&gt;
&lt;li&gt;The image is stored in a container registry.&lt;/li&gt;
&lt;li&gt;The application is deployed to Kubernetes or EC2.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This process is completely automated.&lt;/p&gt;




&lt;h1&gt;
  
  
  What is a Jenkins Pipeline?
&lt;/h1&gt;

&lt;p&gt;A Jenkins pipeline is a series of automated steps that Jenkins executes whenever new code is pushed.&lt;/p&gt;

&lt;p&gt;A pipeline may include stages such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Checkout source code&lt;/li&gt;
&lt;li&gt;Compile the application&lt;/li&gt;
&lt;li&gt;Run unit tests&lt;/li&gt;
&lt;li&gt;Perform code quality checks&lt;/li&gt;
&lt;li&gt;Scan for security vulnerabilities&lt;/li&gt;
&lt;li&gt;Build a Docker image&lt;/li&gt;
&lt;li&gt;Push the image to a container registry&lt;/li&gt;
&lt;li&gt;Deploy the application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each stage runs automatically in the defined order.&lt;/p&gt;




&lt;h1&gt;
  
  
  What is Continuous Integration (CI)?
&lt;/h1&gt;

&lt;p&gt;Continuous Integration focuses on validating code changes as early as possible.&lt;/p&gt;

&lt;p&gt;Whenever developers push new code, the CI system automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Downloads the latest code&lt;/li&gt;
&lt;li&gt;Builds the application&lt;/li&gt;
&lt;li&gt;Runs automated tests&lt;/li&gt;
&lt;li&gt;Checks code quality&lt;/li&gt;
&lt;li&gt;Detects bugs early&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to identify problems before the application reaches production.&lt;/p&gt;

&lt;p&gt;A simple CI flow looks 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;Developer
    ⬇️
Push Code
    ⬇️
Checkout Code
    ⬇️
Build
    ⬇️
Run Tests
    ⬇️
Scan Code
    ⬇️
Build Docker Image
    ⬇️
Push Image
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  What is Continuous Delivery (CD)?
&lt;/h1&gt;

&lt;p&gt;Once CI completes successfully, the application is ready to be deployed.&lt;/p&gt;

&lt;p&gt;Continuous Delivery (CD) automates the deployment process.&lt;/p&gt;

&lt;p&gt;Instead of manually copying files to servers, the deployment tool automatically releases the new version.&lt;/p&gt;

&lt;p&gt;Typical deployment targets include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon EC2&lt;/li&gt;
&lt;li&gt;Amazon ECS&lt;/li&gt;
&lt;li&gt;Kubernetes (AWS EKS)&lt;/li&gt;
&lt;li&gt;AWS Lambda&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  How Does AWS Solve This Problem?
&lt;/h1&gt;

&lt;p&gt;Instead of using separate third-party tools, AWS provides its own managed CI/CD services.&lt;/p&gt;

&lt;p&gt;These services work together to build a complete CI/CD pipeline.&lt;/p&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;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AWS CodeCommit&lt;/td&gt;
&lt;td&gt;Stores source code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS CodePipeline&lt;/td&gt;
&lt;td&gt;Orchestrates the workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS CodeBuild&lt;/td&gt;
&lt;td&gt;Builds and tests the application&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS CodeDeploy&lt;/td&gt;
&lt;td&gt;Deploys the application&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Together, these services automate the software delivery process.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; In our next hands-on article, we will use &lt;strong&gt;GitHub&lt;/strong&gt; instead of &lt;strong&gt;AWS CodeCommit&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  What is AWS CodePipeline?
&lt;/h1&gt;

&lt;p&gt;AWS CodePipeline is a fully managed service that automates the entire software release process.&lt;/p&gt;

&lt;p&gt;Instead of manually performing every deployment step, CodePipeline coordinates each stage automatically.&lt;/p&gt;

&lt;p&gt;Think of CodePipeline as the project manager of your entire CI/CD workflow.&lt;/p&gt;

&lt;p&gt;It decides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When to start the pipeline&lt;/li&gt;
&lt;li&gt;Which stage runs next&lt;/li&gt;
&lt;li&gt;Whether the stages should continue&lt;/li&gt;
&lt;li&gt;Whether the deployment succeeds or fails&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CodePipeline itself doesn't build or deploy applications.&lt;/p&gt;

&lt;p&gt;Instead, it connects different AWS services together.&lt;/p&gt;




&lt;h1&gt;
  
  
  How AWS CodePipeline Works
&lt;/h1&gt;

&lt;p&gt;A typical AWS CodePipeline looks 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;Developer
    ⬇️
GitHub
(Source Code)
    ⬇️
AWS CodePipeline
    ⬇️
AWS CodeBuild
    ⬇️
AWS CodeDeploy
    ⬇️
EC2 / ECS / EKS / Lambda
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each AWS service has a specific responsibility.&lt;/p&gt;




&lt;h1&gt;
  
  
  What Happens Inside CodeBuild?
&lt;/h1&gt;

&lt;p&gt;CodeBuild performs CI tasks.&lt;/p&gt;

&lt;p&gt;Typical stages include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Checkout the source code&lt;/li&gt;
&lt;li&gt;Build the application&lt;/li&gt;
&lt;li&gt;Run unit tests&lt;/li&gt;
&lt;li&gt;Perform code quality checks&lt;/li&gt;
&lt;li&gt;Scan for vulnerabilities&lt;/li&gt;
&lt;li&gt;Build Docker images&lt;/li&gt;
&lt;li&gt;Push images to Amazon ECR&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once these steps complete successfully, CodePipeline moves to the deployment stage.&lt;/p&gt;




&lt;h1&gt;
  
  
  What Does CodeDeploy Do?
&lt;/h1&gt;

&lt;p&gt;CodeDeploy handles the Continuous Delivery (CD) process.&lt;/p&gt;

&lt;p&gt;It automatically deploys the latest version of the application to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon EC2&lt;/li&gt;
&lt;li&gt;Amazon ECS&lt;/li&gt;
&lt;li&gt;AWS Lambda&lt;/li&gt;
&lt;li&gt;On-premises servers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This removes the need for manual deployments.&lt;/p&gt;




&lt;h1&gt;
  
  
  Real-World Example
&lt;/h1&gt;

&lt;p&gt;Imagine an online shopping application.&lt;/p&gt;

&lt;p&gt;A developer fixes code in the checkout page and pushes the changes to GitHub.&lt;/p&gt;

&lt;p&gt;Immediately:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CodePipeline detects the changes.&lt;/li&gt;
&lt;li&gt;CodeBuild compiles the application.&lt;/li&gt;
&lt;li&gt;Automated tests run.&lt;/li&gt;
&lt;li&gt;If everything passes, CodeDeploy deploys the new version.&lt;/li&gt;
&lt;li&gt;Customers receive the updated application without any manual intervention.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The entire process happens automatically.&lt;/p&gt;




&lt;h1&gt;
  
  
  Jenkins vs AWS CodePipeline
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Jenkins&lt;/th&gt;
&lt;th&gt;AWS CodePipeline&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Installation Required&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Server Management&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scaling&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;td&gt;Automatic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS Integration&lt;/td&gt;
&lt;td&gt;Plugins Required&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maintenance&lt;/td&gt;
&lt;td&gt;User Managed&lt;/td&gt;
&lt;td&gt;AWS Managed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Jenkins offers greater flexibility, while CodePipeline provides a simpler, fully managed experience within AWS.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cicd</category>
      <category>beginners</category>
    </item>
    <item>
      <title>AWS CI/CD Explained for Beginners | Understanding AWS CodeCommit, CodePipeline, CodeBuild &amp; CodeDeploy</title>
      <dc:creator>Vijaya Laxmi Kadham</dc:creator>
      <pubDate>Fri, 31 Jul 2026 22:38:03 +0000</pubDate>
      <link>https://dev.to/kadhamvj23/aws-cicd-explained-for-beginners-understanding-aws-codecommit-codepipeline-codebuild--1j3e</link>
      <guid>https://dev.to/kadhamvj23/aws-cicd-explained-for-beginners-understanding-aws-codecommit-codepipeline-codebuild--1j3e</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Over the past few articles, we have learned how to create AWS infrastructure manually using services like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon EC2&lt;/li&gt;
&lt;li&gt;Amazon S3&lt;/li&gt;
&lt;li&gt;VPC&lt;/li&gt;
&lt;li&gt;Route 53&lt;/li&gt;
&lt;li&gt;CloudFormation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But once an application is developed, another question arises.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do we automatically deploy a new version of our application whenever developers make changes?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine a company with 100 developers.&lt;/p&gt;

&lt;p&gt;Every day developers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix bugs&lt;/li&gt;
&lt;li&gt;Add new features&lt;/li&gt;
&lt;li&gt;Improve the application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If an operations engineer had to manually deploy every change, it would:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Take a lot of time&lt;/li&gt;
&lt;li&gt;Be error-prone&lt;/li&gt;
&lt;li&gt;Slow down software delivery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where &lt;strong&gt;CI/CD&lt;/strong&gt; comes into the picture.&lt;/p&gt;




&lt;h1&gt;
  
  
  What We Will Learn
&lt;/h1&gt;

&lt;p&gt;In this article, we will cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is CI/CD&lt;/li&gt;
&lt;li&gt;Why CI/CD is so important&lt;/li&gt;
&lt;li&gt;Common CI/CD tools used in the industry&lt;/li&gt;
&lt;li&gt;AWS Developer Tools&lt;/li&gt;
&lt;li&gt;What is AWS CodeCommit&lt;/li&gt;
&lt;li&gt;Advantages and Disadvantages of CodeCommit&lt;/li&gt;
&lt;li&gt;Hands-on: Creating your first CodeCommit repository&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  What is CI/CD?
&lt;/h1&gt;

&lt;p&gt;CI/CD stands for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Continuous Integration (CI)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Continuous Delivery / Continuous Deployment (CD)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These practices help development teams deliver software faster, more reliably, and with fewer manual steps.&lt;/p&gt;

&lt;p&gt;Instead of manually copying application files to servers every time there is a change, CI/CD automates the entire process.&lt;/p&gt;

&lt;p&gt;Think of it like an assembly line in a factory.&lt;/p&gt;

&lt;p&gt;As soon as one step is completed, the product automatically moves to the next step until it's ready for the customer.&lt;/p&gt;

&lt;p&gt;Software delivery works in a similar way.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why Do We Need CI/CD?
&lt;/h1&gt;

&lt;p&gt;Imagine you are developing an online shopping application.&lt;/p&gt;

&lt;p&gt;Every day, developers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix bugs&lt;/li&gt;
&lt;li&gt;Add new features&lt;/li&gt;
&lt;li&gt;Improve performance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If every update had to be deployed manually, someone would need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy the latest code&lt;/li&gt;
&lt;li&gt;Build the application&lt;/li&gt;
&lt;li&gt;Test it&lt;/li&gt;
&lt;li&gt;Deploy it to servers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Doing this manually every day becomes repetitive and increases the chances of mistakes.&lt;/p&gt;

&lt;p&gt;CI/CD automates these repetitive tasks so that software can be delivered quickly and consistently.&lt;/p&gt;




&lt;h1&gt;
  
  
  Common CI/CD Tools Used in the Industry
&lt;/h1&gt;

&lt;p&gt;Before AWS introduced its own developer tools, companies were already using several popular CI/CD platforms.&lt;/p&gt;

&lt;p&gt;Some of the most common ones are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Actions&lt;/li&gt;
&lt;li&gt;Jenkins&lt;/li&gt;
&lt;li&gt;GitLab CI/CD&lt;/li&gt;
&lt;li&gt;Azure DevOps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tools work with almost every cloud provider and are widely used in the industry.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;GitHub Actions integrates directly with GitHub repositories.&lt;/li&gt;
&lt;li&gt;Jenkins is highly customizable using plugins.&lt;/li&gt;
&lt;li&gt;GitLab CI/CD is built into GitLab.&lt;/li&gt;
&lt;li&gt;Azure DevOps provides a complete DevOps platform.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Many organizations continue to use these tools even when deploying applications to AWS.&lt;/p&gt;




&lt;h1&gt;
  
  
  Then Why Does AWS Provide Its Own CI/CD Services?
&lt;/h1&gt;

&lt;p&gt;AWS wanted to provide a fully managed CI/CD solution that integrates seamlessly with other AWS services.&lt;/p&gt;

&lt;p&gt;Instead of installing, configuring, updating, and maintaining your own CI/CD tools, AWS manages everything for you.&lt;/p&gt;

&lt;p&gt;This reduces operational overhead and allows you to focus on building applications rather than managing infrastructure.&lt;/p&gt;

&lt;p&gt;AWS provides four main services for building CI/CD pipelines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS CodeCommit&lt;/li&gt;
&lt;li&gt;AWS CodeBuild&lt;/li&gt;
&lt;li&gt;AWS CodeDeploy&lt;/li&gt;
&lt;li&gt;AWS CodePipeline&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together these services can automate the complete software delivery process.&lt;/p&gt;




&lt;h1&gt;
  
  
  Understanding AWS CI/CD Workflow
&lt;/h1&gt;

&lt;p&gt;A typical AWS CI/CD pipeline looks 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;Developer
   ⬇️
AWS CodeCommit
(Source Code)
   ⬇️
AWS CodeBuild
(Build &amp;amp; Test)
   ⬇️
AWS CodeDeploy
(Deploy Application)
   ⬇️
EC2 / ECS / Lambda
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AWS CodePipeline sits on top of these services and automates the entire workflow.&lt;/p&gt;




&lt;h1&gt;
  
  
  Overview of AWS Developer Tools
&lt;/h1&gt;

&lt;h2&gt;
  
  
  AWS CodeCommit
&lt;/h2&gt;

&lt;p&gt;AWS CodeCommit is a fully managed Git repository service.&lt;/p&gt;

&lt;p&gt;It provides a secure place to store source code, similar to GitHub or GitLab.&lt;/p&gt;

&lt;p&gt;Developers can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Push code&lt;/li&gt;
&lt;li&gt;Pull code&lt;/li&gt;
&lt;li&gt;Create branches&lt;/li&gt;
&lt;li&gt;Merge changes&lt;/li&gt;
&lt;li&gt;Track commit history&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;without managing their own Git servers.&lt;/p&gt;




&lt;h2&gt;
  
  
  AWS CodeBuild
&lt;/h2&gt;

&lt;p&gt;CodeBuild automatically compiles source code, installs dependencies, runs tests, and prepares application artifacts.&lt;/p&gt;

&lt;p&gt;Instead of building applications on your machine, AWS performs the build process for you.&lt;/p&gt;




&lt;h2&gt;
  
  
  AWS CodeDeploy
&lt;/h2&gt;

&lt;p&gt;CodeDeploy automates application deployments.&lt;/p&gt;

&lt;p&gt;It can deploy applications to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon EC2&lt;/li&gt;
&lt;li&gt;AWS Lambda&lt;/li&gt;
&lt;li&gt;Amazon ECS&lt;/li&gt;
&lt;li&gt;On-premises servers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This helps reduce manual deployment effort.&lt;/p&gt;




&lt;h2&gt;
  
  
  AWS CodePipeline
&lt;/h2&gt;

&lt;p&gt;CodePipeline connects all the services together.&lt;/p&gt;

&lt;p&gt;Whenever developers push code, CodePipeline automatically triggers the next stage such as building, testing, and deployment.&lt;/p&gt;

&lt;p&gt;It acts as the automation engine for the entire CI/CD process.&lt;/p&gt;




&lt;h1&gt;
  
  
  Today's Focus: AWS CodeCommit
&lt;/h1&gt;

&lt;p&gt;In today's article, we will focus on the first service in the pipeline: &lt;strong&gt;AWS CodeCommit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Think of CodeCommit as AWS's version of GitHub.&lt;/p&gt;

&lt;p&gt;Just like GitHub stores Git repositories, CodeCommit stores Git repositories inside your AWS account.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why Did AWS Create CodeCommit?
&lt;/h1&gt;

&lt;p&gt;Many organizations prefer to keep their code inside AWS rather than using third-party platforms.&lt;/p&gt;

&lt;p&gt;AWS created CodeCommit so customers could have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fully managed Git repositories&lt;/li&gt;
&lt;li&gt;High availability&lt;/li&gt;
&lt;li&gt;Automatic scaling&lt;/li&gt;
&lt;li&gt;Tight integration with AWS services&lt;/li&gt;
&lt;li&gt;No Git server maintenance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of installing and managing your own Git server, AWS takes care of everything behind the scenes.&lt;/p&gt;




&lt;h1&gt;
  
  
  Advantages of AWS CodeCommit
&lt;/h1&gt;

&lt;p&gt;Some benefits include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fully managed by AWS&lt;/li&gt;
&lt;li&gt;No Git server administration&lt;/li&gt;
&lt;li&gt;Highly available&lt;/li&gt;
&lt;li&gt;Automatically scalable&lt;/li&gt;
&lt;li&gt;Secure integration with AWS IAM&lt;/li&gt;
&lt;li&gt;Data encrypted at rest and in transit&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Limitations of AWS CodeCommit
&lt;/h1&gt;

&lt;p&gt;Although CodeCommit is a good managed Git service, it has some limitations.&lt;/p&gt;

&lt;p&gt;Compared to GitHub, it offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fewer collaboration features&lt;/li&gt;
&lt;li&gt;Smaller ecosystem&lt;/li&gt;
&lt;li&gt;Fewer third-party integrations&lt;/li&gt;
&lt;li&gt;Less community adoption&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because of this, many organizations prefer GitHub or GitLab as their source code repositories while still using AWS CodeBuild, CodeDeploy, and CodePipeline.&lt;/p&gt;




&lt;h1&gt;
  
  
  Important Note
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;We are learning CodeCommit to understand the AWS Developer Tools ecosystem and how it fits into a CI/CD pipeline.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In future articles, we will use GitHub as the source repository because it's the most commonly used platform in the industry.&lt;/p&gt;




&lt;h1&gt;
  
  
  Hands-on: Create Your First CodeCommit Repository
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Open the AWS Console.&lt;/li&gt;
&lt;li&gt;Search for &lt;strong&gt;CodeCommit&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Repository&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;Enter a repository name.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;(Optional)&lt;/em&gt; Add a description.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Repository&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;Explore the repository dashboard, including:

&lt;ul&gt;
&lt;li&gt;Commits&lt;/li&gt;
&lt;li&gt;Branches&lt;/li&gt;
&lt;li&gt;Pull Requests&lt;/li&gt;
&lt;li&gt;Settings&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Upload a file through the AWS Console.&lt;/li&gt;
&lt;li&gt;Later, clone the repository using Git and push files from your local machine.&lt;/li&gt;
&lt;/ol&gt;




&lt;h1&gt;
  
  
  Why We Will Use GitHub in Future Articles
&lt;/h1&gt;

&lt;p&gt;Although AWS provides CodeCommit, most organizations today use GitHub or GitLab as their source code repositories because they offer richer collaboration features, better integrations, and a larger ecosystem.&lt;/p&gt;

&lt;p&gt;For that reason, our upcoming CI/CD articles will continue using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub&lt;/li&gt;
&lt;li&gt;AWS CodeBuild&lt;/li&gt;
&lt;li&gt;AWS CodeDeploy&lt;/li&gt;
&lt;li&gt;AWS CodePipeline&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This reflects a common real-world setup used by many development teams.&lt;/p&gt;




&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;In this article, we learned the fundamentals of CI/CD and explored the AWS Developer Tools ecosystem.&lt;/p&gt;

&lt;p&gt;We also understood where AWS CodeCommit fits into the CI/CD pipeline, its advantages, and its limitations compared to modern Git hosting platforms.&lt;/p&gt;

&lt;p&gt;In the next article, we will move beyond source code management and learn how AWS CodePipeline automates the entire software delivery process by connecting source code, build, testing, and deployment into a single workflow.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>beginners</category>
      <category>cicd</category>
      <category>devops</category>
    </item>
    <item>
      <title>AWS CI/CD Explained for Beginners | PART 1 | Understanding AWS CodeCommit</title>
      <dc:creator>Vijaya Laxmi Kadham</dc:creator>
      <pubDate>Fri, 31 Jul 2026 22:37:42 +0000</pubDate>
      <link>https://dev.to/kadhamvj23/aws-cicd-explained-for-beginners-part-1-understanding-aws-codecommit-1f47</link>
      <guid>https://dev.to/kadhamvj23/aws-cicd-explained-for-beginners-part-1-understanding-aws-codecommit-1f47</guid>
      <description>&lt;h1&gt;
  
  
  AWS CI/CD Explained for Beginners | Understanding AWS CodeCommit, CodePipeline, CodeBuild &amp;amp; CodeDeploy
&lt;/h1&gt;

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

&lt;p&gt;Over the past few articles, we have learned how to create AWS infrastructure manually using services like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon EC2&lt;/li&gt;
&lt;li&gt;Amazon S3&lt;/li&gt;
&lt;li&gt;VPC&lt;/li&gt;
&lt;li&gt;Route 53&lt;/li&gt;
&lt;li&gt;CloudFormation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But once an application is developed, another question arises.&lt;/p&gt;

&lt;p&gt;How do we automatically deploy a new version of our application whenever developers make changes?&lt;/p&gt;

&lt;p&gt;Imagine a company with 100 developers.&lt;/p&gt;

&lt;p&gt;Every day developers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix bugs&lt;/li&gt;
&lt;li&gt;Add new features&lt;/li&gt;
&lt;li&gt;Improve the application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If an operations engineer had to manually deploy every change, it would:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Take a lot of time&lt;/li&gt;
&lt;li&gt;Be error prone&lt;/li&gt;
&lt;li&gt;Slow down software delivery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where &lt;strong&gt;CI/CD&lt;/strong&gt; comes into the picture.&lt;/p&gt;




&lt;h2&gt;
  
  
  What We Will Learn
&lt;/h2&gt;

&lt;p&gt;In this article, we will cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is CI/CD&lt;/li&gt;
&lt;li&gt;Why CI/CD is so important&lt;/li&gt;
&lt;li&gt;Common CI/CD tools used in the industry&lt;/li&gt;
&lt;li&gt;AWS Developer Tools&lt;/li&gt;
&lt;li&gt;What is AWS CodeCommit&lt;/li&gt;
&lt;li&gt;Advantages and Disadvantages of CodeCommit&lt;/li&gt;
&lt;li&gt;Hands-on: Creating your first CodeCommit repository&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What is CI/CD?
&lt;/h2&gt;

&lt;p&gt;CI/CD stands for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Continuous Integration (CI)&lt;/li&gt;
&lt;li&gt;Continuous Delivery / Continuous Deployment (CD)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These practices help development teams deliver software faster, more reliably, and with fewer manual steps.&lt;/p&gt;

&lt;p&gt;Instead of manually copying application files to servers every time there is a change, CI/CD automates the entire process.&lt;/p&gt;

&lt;p&gt;Think of it like an assembly line in a factory.&lt;/p&gt;

&lt;p&gt;As soon as one step is completed, the product automatically moves to the next step until it's ready for the customer.&lt;/p&gt;

&lt;p&gt;Software delivery works in a similar way.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Do We Need CI/CD?
&lt;/h2&gt;

&lt;p&gt;Imagine you are developing an online shopping application.&lt;/p&gt;

&lt;p&gt;Every day, developers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix bugs&lt;/li&gt;
&lt;li&gt;Add new features&lt;/li&gt;
&lt;li&gt;Improve performance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If every update had to be deployed manually, someone would need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy the latest code&lt;/li&gt;
&lt;li&gt;Build the application&lt;/li&gt;
&lt;li&gt;Test it&lt;/li&gt;
&lt;li&gt;Deploy it to servers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Doing this manually every day becomes repetitive and increases the chances of mistakes.&lt;/p&gt;

&lt;p&gt;CI/CD automates these repetitive tasks so that software can be delivered quickly and consistently.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common CI/CD Tools Used in the Industry
&lt;/h2&gt;

&lt;p&gt;Before AWS introduced its own developer tools, companies were already using several popular CI/CD platforms.&lt;/p&gt;

&lt;p&gt;Some of the most common ones are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Actions&lt;/li&gt;
&lt;li&gt;Jenkins&lt;/li&gt;
&lt;li&gt;GitLab CI/CD&lt;/li&gt;
&lt;li&gt;Azure DevOps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tools work with almost every cloud provider and are widely used in the industry.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;GitHub Actions integrates directly with GitHub repositories.&lt;/li&gt;
&lt;li&gt;Jenkins is highly customizable using plugins.&lt;/li&gt;
&lt;li&gt;GitLab CI/CD is built into GitLab.&lt;/li&gt;
&lt;li&gt;Azure DevOps provides a complete DevOps platform.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Many organizations continue to use these tools even when deploying applications to AWS.&lt;/p&gt;




&lt;h3&gt;
  
  
  Then Why Does AWS Provide Its Own CI/CD Services?
&lt;/h3&gt;

&lt;p&gt;AWS wanted to provide a fully managed CI/CD solution that integrates seamlessly with other AWS services.&lt;/p&gt;

&lt;p&gt;Instead of installing, configuring, updating and maintaining your own CI/CD tools, AWS manages everything for you.&lt;/p&gt;

&lt;p&gt;This reduces operational overhead and allows you to focus on building applications rather than managing infrastructure.&lt;/p&gt;

&lt;p&gt;AWS provides four main services for building CI/CD pipelines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS CodeCommit&lt;/li&gt;
&lt;li&gt;AWS CodeBuild&lt;/li&gt;
&lt;li&gt;AWS CodeDeploy&lt;/li&gt;
&lt;li&gt;AWS CodePipeline&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together these services can automate the complete software delivery process.&lt;/p&gt;




&lt;h2&gt;
  
  
  Understanding AWS CI/CD Workflow
&lt;/h2&gt;

&lt;p&gt;A typical AWS CI/CD pipeline looks 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;Developer
    │
    ▼
AWS CodeCommit
(Source Code)
    │
    ▼
AWS CodeBuild
(Build &amp;amp; Test)
    │
    ▼
AWS CodeDeploy
(Deploy Application)
    │
    ▼
EC2 / ECS / Lambda
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AWS CodePipeline sits on top of these services and automates the entire workflow.&lt;/p&gt;




&lt;h2&gt;
  
  
  Overview of AWS Developer Tools
&lt;/h2&gt;

&lt;h3&gt;
  
  
  AWS CodeCommit
&lt;/h3&gt;

&lt;p&gt;AWS CodeCommit is a fully managed Git repository service.&lt;/p&gt;

&lt;p&gt;It provides a secure place to store source code, similar to GitHub or GitLab.&lt;/p&gt;

&lt;p&gt;Developers can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Push Code&lt;/li&gt;
&lt;li&gt;Pull Code&lt;/li&gt;
&lt;li&gt;Create branches&lt;/li&gt;
&lt;li&gt;Merge Changes&lt;/li&gt;
&lt;li&gt;Track Commit History&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;without managing their own Git servers.&lt;/p&gt;




&lt;h3&gt;
  
  
  AWS CodeBuild
&lt;/h3&gt;

&lt;p&gt;CodeBuild automatically compiles source code, installs dependencies, runs tests and prepares application artifacts.&lt;/p&gt;

&lt;p&gt;Instead of building applications on your machine, AWS performs the build process for you.&lt;/p&gt;




&lt;h3&gt;
  
  
  AWS CodeDeploy
&lt;/h3&gt;

&lt;p&gt;CodeDeploy automates application deployments.&lt;/p&gt;

&lt;p&gt;It can deploy applications to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon EC2&lt;/li&gt;
&lt;li&gt;AWS Lambda&lt;/li&gt;
&lt;li&gt;Amazon ECS&lt;/li&gt;
&lt;li&gt;On-premises servers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This helps reduce manual deployment effort.&lt;/p&gt;




&lt;h3&gt;
  
  
  AWS CodePipeline
&lt;/h3&gt;

&lt;p&gt;CodePipeline connects all the services together.&lt;/p&gt;

&lt;p&gt;Whenever developers push code, CodePipeline automatically triggers the next stage such as building, testing and deployment.&lt;/p&gt;

&lt;p&gt;It acts as the automation engine for the entire CI/CD process.&lt;/p&gt;




&lt;h3&gt;
  
  
  Today's Focus: AWS CodeCommit
&lt;/h3&gt;

&lt;p&gt;In today's article, we will focus on the first service in the pipeline: &lt;strong&gt;AWS CodeCommit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Think of CodeCommit as AWS's version of GitHub.&lt;/p&gt;

&lt;p&gt;Just like GitHub stores Git repositories, CodeCommit stores Git repositories inside your AWS account.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why did AWS Create CodeCommit?
&lt;/h3&gt;

&lt;p&gt;Many organizations prefer to keep their code inside AWS rather than using third-party platforms.&lt;/p&gt;

&lt;p&gt;AWS created CodeCommit so customers could have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fully managed Git repositories&lt;/li&gt;
&lt;li&gt;High availability&lt;/li&gt;
&lt;li&gt;Automatic scaling&lt;/li&gt;
&lt;li&gt;Tight integration with AWS services&lt;/li&gt;
&lt;li&gt;No Git server maintenance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of installing and managing your own Git server, AWS takes care of everything behind the scenes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Advantages of AWS CodeCommit
&lt;/h2&gt;

&lt;p&gt;Some benefits include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fully managed by AWS&lt;/li&gt;
&lt;li&gt;No Git server administration&lt;/li&gt;
&lt;li&gt;Highly available&lt;/li&gt;
&lt;li&gt;Automatically scalable&lt;/li&gt;
&lt;li&gt;Secure integration with AWS IAM&lt;/li&gt;
&lt;li&gt;Data encrypted at rest and in transit&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Limitations of AWS CodeCommit
&lt;/h2&gt;

&lt;p&gt;Although CodeCommit is a good managed Git service, it has some limitations.&lt;/p&gt;

&lt;p&gt;Compared to GitHub, it offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fewer collaboration features&lt;/li&gt;
&lt;li&gt;Smaller ecosystem&lt;/li&gt;
&lt;li&gt;Fewer third-party integrations&lt;/li&gt;
&lt;li&gt;Less community adoption&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because of this, many organizations prefer GitHub or GitLab as their source code repositories while still using AWS CodeBuild, CodeDeploy and CodePipeline.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important Note&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We are learning CodeCommit to understand the AWS Developer Tools ecosystem and how it fits into a CI/CD pipeline.&lt;/p&gt;

&lt;p&gt;In future articles, we will use GitHub as the source repository because it's the most commonly used platform in the industry.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Hands-on: Create Your First CodeCommit Repository
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Open the AWS Console.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Search for &lt;strong&gt;CodeCommit&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Create Repository&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Enter a repository name.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;(Optional) Add a Description.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Create Repository&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;After the repository is created, explore the repository dashboard, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Commits&lt;/li&gt;
&lt;li&gt;Branches&lt;/li&gt;
&lt;li&gt;Pull Requests&lt;/li&gt;
&lt;li&gt;Settings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Upload a file through the AWS Console.&lt;/p&gt;

&lt;p&gt;Later, clone the repository using Git, and push files from your local machine.&lt;/p&gt;




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

&lt;p&gt;In this article, we learned the fundamentals of CI/CD and explored the AWS Developer Tools ecosystem.&lt;/p&gt;

&lt;p&gt;We also understood where AWS CodeCommit fits into the CI/CD pipeline, its advantages, and its limitations compared to modern Git hosting platforms.&lt;/p&gt;

&lt;p&gt;In the next article, we will move beyond source code management and learn how AWS CodePipeline automates the entire software delivery process by connecting source code, build, testing and deployment into a single workflow.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ Understand what CI/CD is and why it is important.&lt;/li&gt;
&lt;li&gt;✅ Learn the common CI/CD tools used in the industry.&lt;/li&gt;
&lt;li&gt;✅ Explore the AWS Developer Tools ecosystem.&lt;/li&gt;
&lt;li&gt;✅ Understand the role of AWS CodeCommit in a CI/CD pipeline.&lt;/li&gt;
&lt;li&gt;✅ Learn the advantages and limitations of AWS CodeCommit.&lt;/li&gt;
&lt;li&gt;✅ Create your first CodeCommit repository.&lt;/li&gt;
&lt;li&gt;✅ Prepare for building complete CI/CD pipelines using AWS services.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;In the next article, we will learn about &lt;strong&gt;AWS CodePipeline&lt;/strong&gt; and understand how it automates the complete software delivery lifecycle by connecting source code, build, testing and deployment into a single CI/CD workflow.&lt;/p&gt;

&lt;p&gt;We will also see how CodePipeline integrates with services like &lt;strong&gt;GitHub&lt;/strong&gt;, &lt;strong&gt;AWS CodeBuild&lt;/strong&gt;, and &lt;strong&gt;AWS CodeDeploy&lt;/strong&gt; to automate deployments from source code to production.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>aws</category>
      <category>cicd</category>
    </item>
    <item>
      <title>AWS CloudFormation Hands-on | Build Your First Infrastructure Using YAML</title>
      <dc:creator>Vijaya Laxmi Kadham</dc:creator>
      <pubDate>Thu, 09 Jul 2026 20:19:49 +0000</pubDate>
      <link>https://dev.to/kadhamvj23/aws-cloudformation-hands-on-build-your-first-infrastructure-using-yaml-1n0</link>
      <guid>https://dev.to/kadhamvj23/aws-cloudformation-hands-on-build-your-first-infrastructure-using-yaml-1n0</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In the previous article, we learned what Infrastructure as Code (IaC) is and why AWS CloudFormation is used to automate infrastructure creation.&lt;/p&gt;

&lt;p&gt;Instead of manually creating AWS resources through the AWS Management Console every time, CloudFormation allows us to define our infrastructure in a template and let AWS create everything for us.&lt;/p&gt;

&lt;p&gt;Now it's time to put those concepts into practice.&lt;/p&gt;

&lt;p&gt;In this hands-on guide, we will write our first CloudFormation template, deploy it as a CloudFormation Stack, verify that AWS creates the resources automatically, update the infrastructure, and finally clean everything up.&lt;/p&gt;

&lt;p&gt;By the end of this article, you will have a solid understanding of the basic CloudFormation workflow.&lt;/p&gt;




&lt;h2&gt;
  
  
  What We will Build
&lt;/h2&gt;

&lt;p&gt;In this lab, we will create:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One Amazon S3 Bucket&lt;/li&gt;
&lt;li&gt;A CloudFormation Stack&lt;/li&gt;
&lt;li&gt;Update the Stack&lt;/li&gt;
&lt;li&gt;Delete the Stack&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Although we are creating only an S3 bucket, the same process is used to create much larger infrastructure such as VPCs, EC2 instances, Load Balancers and Auto Scaling Groups.&lt;/p&gt;




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

&lt;p&gt;Before starting, make sure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An AWS account&lt;/li&gt;
&lt;li&gt;IAM User with Administrator Access&lt;/li&gt;
&lt;li&gt;Basic understanding of S3&lt;/li&gt;
&lt;li&gt;Basic understanding of CloudFormation (covered in the previous article)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Step 1: Open CloudFormation
&lt;/h3&gt;

&lt;p&gt;Login to the AWS Management Console.&lt;/p&gt;

&lt;p&gt;In the search bar, search for:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Open the CloudFormation service.&lt;/p&gt;

&lt;p&gt;You will see the CloudFormation dashboard.&lt;/p&gt;

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




&lt;h3&gt;
  
  
  Step 2: Understand What We Need
&lt;/h3&gt;

&lt;p&gt;Before creating anything, let's understand how CloudFormation works.&lt;/p&gt;

&lt;p&gt;CloudFormation doesn't create resources directly from button clicks.&lt;/p&gt;

&lt;p&gt;Instead, it reads a Template.&lt;/p&gt;

&lt;p&gt;Think of the template as a blueprint.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You Write Template
        ↓
CloudFormation Reads It
        ↓
AWS Creates Resources
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our first task is to create this template.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 3: Create a YAML Template
&lt;/h3&gt;

&lt;p&gt;Open any text editor.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;VS Code&lt;/li&gt;
&lt;li&gt;Notepad++&lt;/li&gt;
&lt;li&gt;Sublime Text&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Create a new file named:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;s3-bucket.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paste the following template:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;AWSTemplateFormatVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;2010-09-09'&lt;/span&gt;

&lt;span class="na"&gt;Description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Creates an S3 Bucket using AWS CloudFormation&lt;/span&gt;

&lt;span class="na"&gt;Resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;MyS3Bucket&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;AWS::S3::Bucket&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;BucketName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-demo-cloudformation-bucket&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; S3 bucket names must be globally unique. Replace &lt;code&gt;my-demo-cloudformation-bucket&lt;/code&gt; with your own unique bucket name.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Save the file.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 4: Understanding the Template
&lt;/h3&gt;

&lt;p&gt;Let's understand every part of this template.&lt;/p&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;AWSTemplateFormatVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;2010-09-09'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This specifies the version of the CloudFormation template format.&lt;/p&gt;

&lt;p&gt;You don't usually need to change this value.&lt;/p&gt;




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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;Description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This simply describes what the template does.&lt;/p&gt;

&lt;p&gt;Think of it like comments for humans.&lt;/p&gt;




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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;Resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the most important section.&lt;/p&gt;

&lt;p&gt;Everything AWS creates is defined under &lt;strong&gt;Resources&lt;/strong&gt;.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;EC2&lt;/li&gt;
&lt;li&gt;VPC&lt;/li&gt;
&lt;li&gt;IAM&lt;/li&gt;
&lt;li&gt;S3&lt;/li&gt;
&lt;li&gt;Lambda&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All are created inside this section.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Logical Resource Name
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;MyS3Bucket&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the logical name inside CloudFormation.&lt;/p&gt;

&lt;p&gt;AWS uses this name internally.&lt;/p&gt;

&lt;p&gt;It doesn't become the actual bucket name.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Resource Type
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;Type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;AWS::S3::Bucket&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This tells AWS what service to create.&lt;/p&gt;

&lt;p&gt;Different services have different resource types.&lt;/p&gt;

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

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;AWS Service&lt;/th&gt;
&lt;th&gt;Resource Type&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;S3&lt;/td&gt;
&lt;td&gt;AWS::S3::Bucket&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EC2&lt;/td&gt;
&lt;td&gt;AWS::EC2::Instance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VPC&lt;/td&gt;
&lt;td&gt;AWS::EC2::VPC&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  6. Properties
&lt;/h3&gt;

&lt;p&gt;Properties define how the resource should be configured.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;BucketName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here we provide the actual bucket name.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 5: Create the Stack
&lt;/h3&gt;

&lt;p&gt;Return to AWS CloudFormation.&lt;/p&gt;

&lt;p&gt;Click on &lt;strong&gt;Create Stack&lt;/strong&gt; → Select &lt;strong&gt;Choose an existing template&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Click on &lt;strong&gt;Choose file&lt;/strong&gt; and upload:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;s3-bucket.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click on &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;

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




&lt;h3&gt;
  
  
  Step 6: Stack Details
&lt;/h3&gt;

&lt;p&gt;Provide a Stack Name, 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;demo-s3-stack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click on &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You can leave all the options as default for this lab.&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 7: Review
&lt;/h3&gt;

&lt;p&gt;Review the Configuration.&lt;/p&gt;

&lt;p&gt;Click on &lt;strong&gt;Submit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;CloudFormation now starts creating the resources.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 8: Watch the Events
&lt;/h3&gt;

&lt;p&gt;This is one of the most useful tabs.&lt;/p&gt;

&lt;p&gt;Open &lt;strong&gt;Events&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You will notice CloudFormation showing each action.&lt;/p&gt;

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

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

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

&lt;/div&gt;



&lt;p&gt;Instead of guessing what AWS is doing, you can monitor every step here.&lt;/p&gt;

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




&lt;h3&gt;
  
  
  Step 9: Verify the Resource
&lt;/h3&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWS S3
    ↓
Buckets
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should now see the bucket that CloudFormation created.&lt;/p&gt;

&lt;p&gt;Notice something interesting.&lt;/p&gt;

&lt;p&gt;We never manually clicked &lt;strong&gt;Create Bucket&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;CloudFormation created it automatically.&lt;/p&gt;

&lt;p&gt;This is the power of &lt;strong&gt;Infrastructure as Code (IaC).&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 10: Update the Stack
&lt;/h3&gt;

&lt;p&gt;Infrastructure changes over time.&lt;/p&gt;

&lt;p&gt;Instead of deleting everything and recreating it, CloudFormation allows us to update existing resources.&lt;/p&gt;

&lt;p&gt;Let's update our bucket by enabling versioning.&lt;/p&gt;

&lt;p&gt;Modify the template.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;AWSTemplateFormatVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;2010-09-09'&lt;/span&gt;

&lt;span class="na"&gt;Description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Creates an S3 Bucket using AWS CloudFormation&lt;/span&gt;

&lt;span class="na"&gt;Resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;MyS3Bucket&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;AWS::S3::Bucket&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;BucketName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-demo-cloudformation-bucket-12345&lt;/span&gt;

      &lt;span class="na"&gt;VersioningConfiguration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

        &lt;span class="na"&gt;Status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Enabled&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the file.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 11: Update CloudFormation
&lt;/h3&gt;

&lt;p&gt;Go back to CloudFormation.&lt;/p&gt;

&lt;p&gt;Select your Stack.&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Update&lt;/strong&gt;, choose:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Replace Current Template
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Upload the modified YAML file.&lt;/p&gt;

&lt;p&gt;Click:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next → Next → Submit&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 12: Verify Versioning
&lt;/h3&gt;

&lt;p&gt;Go back to the S3 Bucket.&lt;/p&gt;

&lt;p&gt;Open &lt;strong&gt;Properties&lt;/strong&gt; and scroll down.&lt;/p&gt;

&lt;p&gt;You should now see &lt;strong&gt;Bucket Versioning&lt;/strong&gt; enabled.&lt;/p&gt;

&lt;p&gt;Notice that CloudFormation updated the existing resource rather than creating a new bucket.&lt;/p&gt;

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




&lt;h3&gt;
  
  
  Step 13: Delete the Stack
&lt;/h3&gt;

&lt;p&gt;CloudFormation also makes cleanup easy.&lt;/p&gt;

&lt;p&gt;Instead of deleting every resource manually,&lt;/p&gt;

&lt;p&gt;simply select the stack.&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Delete&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;CloudFormation automatically deletes all the resources that belong to that Stack.&lt;/p&gt;

&lt;p&gt;This is one of the biggest advantages of &lt;strong&gt;Infrastructure as Code&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Understanding the CloudFormation Workflow
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Write YAML Template
        ↓
Upload Template
        ↓
Create Stack
        ↓
AWS Creates Resources
        ↓
Update Template
        ↓
Update Stack
        ↓
Delete Stack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;ul&gt;
&lt;li&gt;Store your CloudFormation templates in Git.&lt;/li&gt;
&lt;li&gt;Use meaningful stack names.&lt;/li&gt;
&lt;li&gt;Add descriptions to templates.&lt;/li&gt;
&lt;li&gt;Start with small templates before building large infrastructures.&lt;/li&gt;
&lt;li&gt;Delete unused stacks to avoid unnecessary AWS charges.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;CloudFormation uses templates to define infrastructure.&lt;/li&gt;
&lt;li&gt;A Stack is a collection of AWS resources created from a template.&lt;/li&gt;
&lt;li&gt;You can create, update and delete infrastructure using the same template.&lt;/li&gt;
&lt;li&gt;CloudFormation reduces manual work and helps maintain consistency across environments.&lt;/li&gt;
&lt;li&gt;Infrastructure as Code is a fundamental skill for DevOps and Cloud Engineers.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;In this hands-on lab, we created our first AWS CloudFormation template using YAML and used it to deploy an S3 bucket without manually creating resources through the AWS Console.&lt;/p&gt;

&lt;p&gt;We also learned how CloudFormation manages infrastructure through Stacks, how to update existing resources by modifying the template and how to clean up everything by deleting the stack.&lt;/p&gt;

&lt;p&gt;Although this example used a simple S3 bucket, the same workflow is used in real-world environments to provision complex infrastructure consisting of VPCs, EC2 instances, Load Balancers, Auto Scaling Groups, RDS databases, and much more.&lt;/p&gt;




&lt;p&gt;🎉 &lt;strong&gt;Congratulations!&lt;/strong&gt; You have successfully:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Written your first CloudFormation template&lt;/li&gt;
&lt;li&gt;Created an AWS resource using Infrastructure as Code&lt;/li&gt;
&lt;li&gt;Updated an existing CloudFormation Stack&lt;/li&gt;
&lt;li&gt;Deleted a Stack and cleaned up resources&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You now understand the complete CloudFormation workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Write Template
      ↓
Create Stack
      ↓
AWS Creates Resources
      ↓
Update Template
      ↓
Update Stack
      ↓
Delete Stack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This workflow is the foundation for deploying production infrastructure on AWS using Infrastructure as Code.&lt;/p&gt;




</description>
      <category>aws</category>
      <category>beginners</category>
      <category>cloudformation</category>
    </item>
    <item>
      <title>AWS CloudFormation Explained for Beginners | Infrastructure as Code (IaC) Made Simple</title>
      <dc:creator>Vijaya Laxmi Kadham</dc:creator>
      <pubDate>Wed, 08 Jul 2026 19:54:05 +0000</pubDate>
      <link>https://dev.to/kadhamvj23/aws-cloudformation-explained-for-beginners-infrastructure-as-code-iac-made-simple-pkp</link>
      <guid>https://dev.to/kadhamvj23/aws-cloudformation-explained-for-beginners-infrastructure-as-code-iac-made-simple-pkp</guid>
      <description>&lt;h1&gt;
  
  
  AWS CloudFormation Explained for Beginners | Infrastructure as Code (IaC) Made Simple
&lt;/h1&gt;

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

&lt;p&gt;In the previous article, we learned how to use the AWS CLI to interact with AWS services from the command line.&lt;/p&gt;

&lt;p&gt;The AWS CLI is great for performing quick tasks such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Listing S3 buckets&lt;/li&gt;
&lt;li&gt;Launching an EC2 Instance&lt;/li&gt;
&lt;li&gt;Creating a VPC&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, imagine that you need to build an entire production environment consisting of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A VPC&lt;/li&gt;
&lt;li&gt;Public and Private Subnets&lt;/li&gt;
&lt;li&gt;Internet Gateway&lt;/li&gt;
&lt;li&gt;NAT Gateway&lt;/li&gt;
&lt;li&gt;Route Tables&lt;/li&gt;
&lt;li&gt;Security Groups&lt;/li&gt;
&lt;li&gt;EC2 Instances&lt;/li&gt;
&lt;li&gt;Load Balancer&lt;/li&gt;
&lt;li&gt;Auto Scaling Group&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Creating all these resources manually every time would be slow, repetitive and prone to mistakes.&lt;/p&gt;

&lt;p&gt;This is where &lt;strong&gt;Infrastructure as Code (IaC)&lt;/strong&gt; comes in.&lt;/p&gt;

&lt;p&gt;AWS provides a service called &lt;strong&gt;CloudFormation&lt;/strong&gt; that allows us to create infrastructure using code instead of clicking through the AWS Console.&lt;/p&gt;

&lt;p&gt;In this article, we will understand the basics of CloudFormation and why it is one of the most important services for AWS and DevOps engineers.&lt;/p&gt;




&lt;h2&gt;
  
  
  What We Will Learn
&lt;/h2&gt;

&lt;p&gt;In this article, we will learn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is Infrastructure as Code (IaC)?&lt;/li&gt;
&lt;li&gt;Why CloudFormation is needed&lt;/li&gt;
&lt;li&gt;Problems with manual infrastructure&lt;/li&gt;
&lt;li&gt;What is CloudFormation?&lt;/li&gt;
&lt;li&gt;Templates&lt;/li&gt;
&lt;li&gt;Stacks&lt;/li&gt;
&lt;li&gt;Stack Updates&lt;/li&gt;
&lt;li&gt;Stack Deletion&lt;/li&gt;
&lt;li&gt;Benefits&lt;/li&gt;
&lt;li&gt;Real-world examples&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Imagine this Scenario
&lt;/h3&gt;

&lt;p&gt;Suppose you work for an online learning platform.&lt;/p&gt;

&lt;p&gt;Every new customer gets their own AWS environment.&lt;/p&gt;

&lt;p&gt;Each environment needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1 VPC&lt;/li&gt;
&lt;li&gt;2 Public Subnets&lt;/li&gt;
&lt;li&gt;2 Private Subnets&lt;/li&gt;
&lt;li&gt;Internet Gateway&lt;/li&gt;
&lt;li&gt;NAT Gateway&lt;/li&gt;
&lt;li&gt;Security Groups&lt;/li&gt;
&lt;li&gt;EC2 Instances&lt;/li&gt;
&lt;li&gt;Load Balancer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now imagine creating this manually for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customer A&lt;/li&gt;
&lt;li&gt;Customer B&lt;/li&gt;
&lt;li&gt;Customer C&lt;/li&gt;
&lt;li&gt;Customer D&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every single week.&lt;/p&gt;

&lt;p&gt;It would become repetitive and time-consuming.&lt;/p&gt;

&lt;p&gt;Even worse, one small mistake could cause production issues.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Problem with Manual Infrastructure
&lt;/h3&gt;

&lt;p&gt;Creating infrastructure manually has several drawbacks.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Time consuming&lt;/li&gt;
&lt;li&gt;Human errors&lt;/li&gt;
&lt;li&gt;Difficult to recreate&lt;/li&gt;
&lt;li&gt;Hard to maintain&lt;/li&gt;
&lt;li&gt;No version control&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of writing a long document.&lt;/p&gt;

&lt;p&gt;Would you rather rewrite the document every time, or simply save it and reuse it whenever needed?&lt;/p&gt;

&lt;p&gt;Infrastructure works the same way.&lt;/p&gt;

&lt;p&gt;Instead of rebuilding everything manually, we write the infrastructure once and reuse it whenever required.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is Infrastructure as Code (IaC)?
&lt;/h2&gt;

&lt;p&gt;Infrastructure as Code means defining your infrastructure using code instead of manually creating resources through the AWS Console.&lt;/p&gt;

&lt;p&gt;Instead of clicking buttons every time, we write instructions inside a file.&lt;/p&gt;

&lt;p&gt;AWS reads those instructions and creates the required resources automatically.&lt;/p&gt;

&lt;p&gt;Think of it like following a recipe.&lt;/p&gt;

&lt;p&gt;Rather than preparing a dish from memory every time, you write the recipe once and anyone can recreate the same dish by following those instructions.&lt;/p&gt;

&lt;p&gt;CloudFormation works in a similar way.&lt;/p&gt;

&lt;p&gt;You write the infrastructure once, and AWS builds it whenever needed.&lt;/p&gt;




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

&lt;p&gt;AWS CloudFormation is a service that allows you to create, update and manage AWS infrastructure using code.&lt;/p&gt;

&lt;p&gt;Instead of manually creating resources, you write a template describing what you want.&lt;/p&gt;

&lt;p&gt;AWS reads the template and creates all the required resources for you.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer
     │
Writes Template
     │
     ▼
CloudFormation
     │
Creates Resources
     │
 ┌───────────────┐
 │ VPC           │
 │ Subnets       │
 │ EC2           │
 │ S3            │
 │ IAM           │
 │ Load Balancer │
 └───────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  What is a CloudFormation Template?
&lt;/h2&gt;

&lt;p&gt;A Template is simply a blueprint of your infrastructure.&lt;/p&gt;

&lt;p&gt;It contains instructions describing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What resources should be created&lt;/li&gt;
&lt;li&gt;Configuration&lt;/li&gt;
&lt;li&gt;Dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it as a house blueprint.&lt;/p&gt;

&lt;p&gt;The blueprint doesn't build the house.&lt;/p&gt;

&lt;p&gt;It simply describes how the house should be built.&lt;/p&gt;

&lt;p&gt;CloudFormation uses the blueprint to create the infrastructure.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is a Stack?
&lt;/h2&gt;

&lt;p&gt;When CloudFormation reads your template and creates the resources, AWS groups all those resources into something called a &lt;strong&gt;Stack&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Think of a Stack as a project folder.&lt;/p&gt;

&lt;p&gt;Instead of managing resources individually, AWS manages them together.&lt;/p&gt;

&lt;p&gt;For example, your Stack may contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VPC&lt;/li&gt;
&lt;li&gt;EC2&lt;/li&gt;
&lt;li&gt;Security Group&lt;/li&gt;
&lt;li&gt;S3 Bucket&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Deleting the Stack deletes all those resources together.&lt;/p&gt;




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

&lt;p&gt;Imagine a company with separate environments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Development&lt;/li&gt;
&lt;li&gt;Testing&lt;/li&gt;
&lt;li&gt;Production&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of creating infrastructure manually three times, the DevOps engineer writes one CloudFormation template.&lt;/p&gt;

&lt;p&gt;Then they deploy it three times:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dev Stack&lt;/li&gt;
&lt;li&gt;Test Stack&lt;/li&gt;
&lt;li&gt;Production Stack&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same code.&lt;/p&gt;

&lt;p&gt;Different environments, much easier.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Companies Use CloudFormation
&lt;/h2&gt;

&lt;p&gt;Companies use CloudFormation because it provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automation&lt;/li&gt;
&lt;li&gt;Consistency&lt;/li&gt;
&lt;li&gt;Version Control&lt;/li&gt;
&lt;li&gt;Faster Deployments&lt;/li&gt;
&lt;li&gt;Easy Recovery&lt;/li&gt;
&lt;li&gt;Repeatability&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  CloudFormation vs Manual AWS Console
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Manual AWS Console&lt;/th&gt;
&lt;th&gt;CloudFormation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Click every resource&lt;/td&gt;
&lt;td&gt;Write once&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slow&lt;/td&gt;
&lt;td&gt;Fast&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Human mistakes&lt;/td&gt;
&lt;td&gt;Consistent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hard to repeat&lt;/td&gt;
&lt;td&gt;Easily reusable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No version control&lt;/td&gt;
&lt;td&gt;Git friendly&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  CloudFormation Supports Almost Every AWS Service
&lt;/h3&gt;

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

&lt;ul&gt;
&lt;li&gt;EC2&lt;/li&gt;
&lt;li&gt;VPC&lt;/li&gt;
&lt;li&gt;IAM&lt;/li&gt;
&lt;li&gt;S3&lt;/li&gt;
&lt;li&gt;Route 53&lt;/li&gt;
&lt;li&gt;Lambda&lt;/li&gt;
&lt;li&gt;DynamoDB&lt;/li&gt;
&lt;li&gt;RDS&lt;/li&gt;
&lt;li&gt;CloudFront&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  A Simple Flow
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Write Template
       │
       ▼
Upload to CloudFormation
       │
       ▼
Create Stack
       │
       ▼
AWS Creates Resources
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;p&gt;In this article, we learned the theory behind AWS CloudFormation and Infrastructure as Code.&lt;/p&gt;

&lt;p&gt;We explored why manually creating AWS resources becomes difficult as environments grow and how CloudFormation solves this problem by allowing us to define infrastructure using code.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;In the next article, we will put these concepts into practice by creating our first CloudFormation template, launching resources using a Stack and understanding how CloudFormation manages infrastructure automatically.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>beginners</category>
      <category>devops</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title>AWS CLI for Beginners | Automating AWS without using the Console</title>
      <dc:creator>Vijaya Laxmi Kadham</dc:creator>
      <pubDate>Mon, 29 Jun 2026 09:03:40 +0000</pubDate>
      <link>https://dev.to/kadhamvj23/aws-cli-for-beginners-automating-aws-without-using-the-console-5h9n</link>
      <guid>https://dev.to/kadhamvj23/aws-cli-for-beginners-automating-aws-without-using-the-console-5h9n</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Until now, we have been creating resources such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VPCs&lt;/li&gt;
&lt;li&gt;EC2 Instances&lt;/li&gt;
&lt;li&gt;S3 Buckets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;using AWS Console.&lt;/p&gt;

&lt;p&gt;While the AWS Console is easy for beginners, it becomes difficult when we need to create many resources repeatedly.&lt;/p&gt;

&lt;p&gt;Imagine manually creating:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;20 VPCs&lt;/li&gt;
&lt;li&gt;20 S3 buckets&lt;/li&gt;
&lt;li&gt;15 EC2 Instances&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Doing this from the UI every time would be slow and inefficient.&lt;/p&gt;

&lt;p&gt;This is where AWS CLI becomes useful.&lt;/p&gt;




&lt;h3&gt;
  
  
  What we will Learn
&lt;/h3&gt;

&lt;p&gt;In this article, we will learn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What AWS CLI is&lt;/li&gt;
&lt;li&gt;Why AWS CLI is useful&lt;/li&gt;
&lt;li&gt;How AWS CLI communicates with AWS&lt;/li&gt;
&lt;li&gt;Installing AWS CLI&lt;/li&gt;
&lt;li&gt;Configuring AWS CLI&lt;/li&gt;
&lt;li&gt;Running our first AWS CLI command&lt;/li&gt;
&lt;li&gt;Finding AWS CLI documentation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why Do We Need AWS CLI?
&lt;/h2&gt;

&lt;p&gt;AWS provides APIs(Application Programming Interfaces) for all its services.&lt;/p&gt;

&lt;p&gt;These APIs allow us to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create resources&lt;/li&gt;
&lt;li&gt;Update resources&lt;/li&gt;
&lt;li&gt;Delete resources&lt;/li&gt;
&lt;li&gt;Manage infrastructure programmatically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of clicking on buttons in AWS Console, we can send commands directly to AWS.&lt;/p&gt;

&lt;p&gt;Think of it 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;AWS Console
    ↓
Manual Operations

AWS CLI
    ↓
Command Based Operations
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Real Life Example
&lt;/h2&gt;

&lt;p&gt;Suppose your company asks you to create:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;50 S3 buckets&lt;/li&gt;
&lt;li&gt;20 EC2 Instances&lt;/li&gt;
&lt;li&gt;Multiple VPCs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Doing this manually from the AWS Console would take time.&lt;/p&gt;

&lt;p&gt;Using AWS CLI we can automate these operations through commands and scripts.&lt;/p&gt;




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

&lt;p&gt;AWS CLI stands for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWS Command Line Interface
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It is tool that allows us to manage AWS services directly from terminal.&lt;/p&gt;

&lt;p&gt;AWS CLI acts as a bridge between users and AWS APIs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
  ↓
AWS CLI
  ↓
AWS API
  ↓
AWS Services
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The AWS CLI itself is developed by AWS and internally sends API requests to AWS services.&lt;/p&gt;

&lt;p&gt;The good part is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We don't need programming knowledge to start using AWS CLI&lt;/li&gt;
&lt;li&gt;We only need to understand commands and documentation.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  AWS CLI vs AWS Console
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;AWS Console&lt;/th&gt;
&lt;th&gt;AWS CLI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;td&gt;Command Line Interface&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Beginner fridenly&lt;/td&gt;
&lt;td&gt;Automation friendly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slower for repetitive tasks&lt;/td&gt;
&lt;td&gt;Faster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Requires clicking&lt;/td&gt;
&lt;td&gt;Requires commands&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Suitable for learning&lt;/td&gt;
&lt;td&gt;Suitable for automation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  AWS CLI vs Terraform vs Cloud Formation
&lt;/h2&gt;

&lt;p&gt;Many beginners ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If AWS CLI can create resources, why do we need Terraform or CloudFormation?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The answer is simple.&lt;/p&gt;

&lt;p&gt;AWS CLI is best for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quick actions&lt;/li&gt;
&lt;li&gt;testing&lt;/li&gt;
&lt;li&gt;Small automation tasks&lt;/li&gt;
&lt;li&gt;Learning AWS services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CloudFormation is best for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reusable infrastructure&lt;/li&gt;
&lt;li&gt;AWs native infrastructure as a Code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Terraform is best for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Large production environments&lt;/li&gt;
&lt;li&gt;Multi-cloud infrastructure&lt;/li&gt;
&lt;li&gt;Infrastructure as Code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AWS CDK is best for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developers who prefer programming languages.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Hands-On: Installing AWS CLI
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Method 1: Install AWS CLI using Git Bash
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Install Git Bash
&lt;/h3&gt;

&lt;p&gt;Open your browser and search:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Git Bash Download
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Download and install Git Bash.&lt;/p&gt;

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

&lt;p&gt;After installation, open:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Git Bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Step 2: Install AWS CLI
&lt;/h3&gt;

&lt;p&gt;In your browser search for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWS CLI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open the official AWS Documentation.&lt;/p&gt;

&lt;p&gt;Navigate to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Guide → Get Started → Install/Update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Select the Linux CLI installer and copy the path and paste it in the Git Bash terminal.&lt;/p&gt;

&lt;p&gt;Then you will see AWS CLI is installing.&lt;/p&gt;

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

&lt;p&gt;After installation, verify:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;You will see something like this in the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aws-cli/2.x Python/3.x Windows
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Step 3: Configure AWS CLI
&lt;/h3&gt;

&lt;h2&gt;
  
  
  Why Does AWS CLI Need Configuration?
&lt;/h2&gt;

&lt;p&gt;AWS CLI needs to know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which AWS account to use&lt;/li&gt;
&lt;li&gt;Which region to use&lt;/li&gt;
&lt;li&gt;Which credentials belong to us&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is done using:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Provide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Access Key ID&lt;/li&gt;
&lt;li&gt;AWS Secret Access Key&lt;/li&gt;
&lt;li&gt;Default Region&lt;/li&gt;
&lt;li&gt;Output Format (json)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You will get the Access Key ID from your AWS account.&lt;/p&gt;

&lt;p&gt;Go to your AWS Console.&lt;/p&gt;

&lt;p&gt;Click on the account name on the right-side corner → Select &lt;strong&gt;Security Credentials&lt;/strong&gt;.&lt;/p&gt;

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

&lt;p&gt;Scroll to &lt;strong&gt;Access Keys&lt;/strong&gt; → Click on &lt;strong&gt;Create Access Key&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;AWS generates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access Key ID&lt;/li&gt;
&lt;li&gt;Secret Access Key&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Save these credentials securely.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;NEVER SHARE YOUR SECRET ACCESS KEY&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWS Access Key ID: AKIAxxxxxxxx
AWS Secret Access Key: ********
Default Region Name: ap-south-1
Default Output Format: json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why JSON?
&lt;/h2&gt;

&lt;p&gt;AWS returns responses in JSON format because it is easy for applications and scripts to process.&lt;/p&gt;




&lt;h2&gt;
  
  
  Method 2: Using AWS CloudShell (What I Used)
&lt;/h2&gt;

&lt;p&gt;Since I was using a managed laptop where installing software was restricted, I used AWS CloudShell.&lt;/p&gt;

&lt;p&gt;CloudShell already comes with AWS CLI pre-installed, making it convenient for learning and experimentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Open AWS Console
&lt;/h3&gt;

&lt;p&gt;In the search bar type:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;and wait for the terminal to open.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 2: Verify AWS CLI
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;p&gt;You will get an output 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;aws-cli/2.x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; CloudShell automatically uses the credentials of the currently logged-in IAM user.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Therefore, unlike local installation, there is no need to run:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;






&lt;h2&gt;
  
  
  Running our First AWS CLI Command
&lt;/h2&gt;

&lt;p&gt;Now let's check whether AWS CLI can access our resources.&lt;/p&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws s3 &lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;means:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;List all S3 buckets available in my AWS account
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example output will be 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;2025-11-02  my-learning-notes-example
2025-11-03  demo-cli-bucket
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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




&lt;h2&gt;
  
  
  Exploring AWS CLI Documentation
&lt;/h2&gt;

&lt;p&gt;AWS provides documentation for every service.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWS CLI S3 reference
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here you will see a bunch of available commands and how to use them in detail.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  List Buckets
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws s3 &lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Create Bucket
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws s3 mb s3://mydemo-s3-bucket-for-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;One of the best ways to become comfortable with AWS CLI is by exploring the official documentation and trying commands on your own.&lt;/p&gt;

&lt;p&gt;AWS provides CLI references for almost every service.&lt;/p&gt;

&lt;p&gt;For example, if you want to learn EC2 commands, search:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWS CLI EC2 Reference
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Spend some time browsing the documentation and try commands in your environment.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;p&gt;In this article, we learned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ What AWS CLI is&lt;/li&gt;
&lt;li&gt;✅ Why AWS CLI is useful&lt;/li&gt;
&lt;li&gt;✅ How AWS APIs work&lt;/li&gt;
&lt;li&gt;✅ Installing AWS CLI&lt;/li&gt;
&lt;li&gt;✅ Creating Access Keys&lt;/li&gt;
&lt;li&gt;✅ Configuring AWS CLI&lt;/li&gt;
&lt;li&gt;✅ Running our first commands&lt;/li&gt;
&lt;li&gt;✅ Exploring AWS CLI documentation&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;AWS CLI makes managing AWS resources faster and easier.&lt;/p&gt;

&lt;p&gt;Instead of repeatedly performing manual tasks through the AWS Console, we can interact with AWS services directly from the terminal.&lt;/p&gt;

&lt;p&gt;AWS CLI is excellent for quick actions and small automation tasks.&lt;/p&gt;

&lt;p&gt;However, as infrastructure grows larger, managing resources using individual commands becomes difficult.&lt;/p&gt;

&lt;p&gt;This is where Infrastructure as Code (IaC) tools become extremely useful.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;In the next article, we will begin exploring Infrastructure as Code (IaC) and understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is AWS CloudFormation (CFT)?&lt;/li&gt;
&lt;li&gt;CloudFormation vs Terraform&lt;/li&gt;
&lt;li&gt;Tips and Tricks for Writing CloudFormation Templates&lt;/li&gt;
&lt;li&gt;Why production teams prefer Infrastructure as Code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From this point onward, we will start moving from individual commands to managing complete infrastructure using code. 🚀&lt;/p&gt;

</description>
      <category>automation</category>
      <category>aws</category>
      <category>beginners</category>
      <category>cli</category>
    </item>
    <item>
      <title>AWS S3 Hands-On Project | Buckets, Versioning, Permissions and Static Website Hosting</title>
      <dc:creator>Vijaya Laxmi Kadham</dc:creator>
      <pubDate>Sat, 20 Jun 2026 12:53:51 +0000</pubDate>
      <link>https://dev.to/kadhamvj23/aws-s3-hands-on-project-buckets-versioning-permissions-and-static-website-hosting-4p2d</link>
      <guid>https://dev.to/kadhamvj23/aws-s3-hands-on-project-buckets-versioning-permissions-and-static-website-hosting-4p2d</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In the previous article, we learned the theory behind Amazon S3.&lt;/p&gt;

&lt;p&gt;Now it is time to see Amazon S3 in action.&lt;/p&gt;

&lt;p&gt;In this hands-on project, we will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create an S3 bucket&lt;/li&gt;
&lt;li&gt;Upload files&lt;/li&gt;
&lt;li&gt;Understand Objects inside S3&lt;/li&gt;
&lt;li&gt;Enable Bucket Versioning&lt;/li&gt;
&lt;li&gt;Create IAM User&lt;/li&gt;
&lt;li&gt;Control access using Bucket Policies&lt;/li&gt;
&lt;li&gt;Host a Static Website using S3&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By the end of this article, we will understand some of the most commonly used Amazon S3 features.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Create an S3 Bucket
&lt;/h2&gt;

&lt;p&gt;Login to AWS Console.&lt;/p&gt;

&lt;p&gt;Search for &lt;strong&gt;S3&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Open the dashboard.&lt;/p&gt;

&lt;p&gt;Click on &lt;strong&gt;Create Bucket&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Provide:&lt;/p&gt;

&lt;h3&gt;
  
  
  Bucket Name
&lt;/h3&gt;

&lt;p&gt;Give your bucket a name, 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;my-learning-notes-example
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Bucket names must be globally unique.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;For now, leave all the remaining settings as default.&lt;/p&gt;

&lt;p&gt;Click on &lt;strong&gt;Create Bucket&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Explore the Bucket
&lt;/h2&gt;

&lt;p&gt;Open the bucket you just created.&lt;/p&gt;

&lt;p&gt;Initially, you will notice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Objects (0)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;because the bucket is empty.&lt;/p&gt;

&lt;p&gt;Think of a bucket as a folder that stores files.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Upload Your First Object
&lt;/h2&gt;

&lt;p&gt;Click on:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



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

&lt;p&gt;Then click:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Choose any file.&lt;/p&gt;

&lt;p&gt;Click:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



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

&lt;p&gt;After the upload finishes, you will see the file inside the bucket.&lt;/p&gt;

&lt;p&gt;In Amazon S3, every uploaded file is called an &lt;strong&gt;Object&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Now if you look inside the bucket, you will notice that Objects are no longer zero because we have uploaded a file.&lt;/p&gt;

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




&lt;h2&gt;
  
  
  Step 4: Explore Object Options
&lt;/h2&gt;

&lt;p&gt;Click on the uploaded Object.&lt;/p&gt;

&lt;p&gt;Explore the options:&lt;/p&gt;

&lt;h3&gt;
  
  
  Open
&lt;/h3&gt;

&lt;p&gt;Select the file and click &lt;strong&gt;Open&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It will display the contents of the file.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Download
&lt;/h3&gt;

&lt;p&gt;Select the file and click &lt;strong&gt;Download&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The file will be downloaded to your system.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Delete
&lt;/h3&gt;

&lt;p&gt;If you select &lt;strong&gt;Delete&lt;/strong&gt;, AWS will ask for confirmation before deleting the object.&lt;/p&gt;

&lt;p&gt;This helps you understand how S3 manages objects.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: Enable Bucket Versioning
&lt;/h2&gt;

&lt;p&gt;Suppose you upload:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;demo-learning-s3.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Later, you modify the file and upload it again.&lt;/p&gt;

&lt;p&gt;Without versioning, the old file gets overwritten.&lt;/p&gt;

&lt;p&gt;Versioning allows you to preserve previous versions.&lt;/p&gt;

&lt;p&gt;Go to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bucket → Properties
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Scroll to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bucket Versioning
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



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

&lt;p&gt;Choose:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Click:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Save Changes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now if you check the bucket properties, you can see that versioning is enabled.&lt;/p&gt;

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




&lt;h2&gt;
  
  
  Step 6: Upload a New Version
&lt;/h2&gt;

&lt;p&gt;Modify your file.&lt;/p&gt;

&lt;h3&gt;
  
  
  Before
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWS S3 Notes version 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  After
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWS S3 Notes version 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Upload the file again using the same filename.&lt;/p&gt;

&lt;p&gt;Now open the Object.&lt;/p&gt;

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

&lt;p&gt;Click:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



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

&lt;p&gt;You will see multiple versions.&lt;/p&gt;

&lt;p&gt;This is similar to maintaining history in Git.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 7: Create an IAM User
&lt;/h2&gt;

&lt;p&gt;In AWS Console, search for:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Go to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IAM → Users → Create User
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Give a name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;demo-s3-user
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Assign a password.&lt;/p&gt;

&lt;p&gt;Click:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create User
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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




&lt;h2&gt;
  
  
  Step 8: Verify Permissions
&lt;/h2&gt;

&lt;p&gt;Open an Incognito browser.&lt;/p&gt;

&lt;p&gt;Login using the IAM user credentials.&lt;/p&gt;

&lt;p&gt;Try accessing the Amazon S3 bucket.&lt;/p&gt;

&lt;p&gt;Also try creating a bucket.&lt;/p&gt;

&lt;p&gt;Initially, you will receive permission errors.&lt;/p&gt;

&lt;p&gt;This happens because the user has no S3 permissions.&lt;/p&gt;

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




&lt;h2&gt;
  
  
  Step 9: Grant S3 Permissions
&lt;/h2&gt;

&lt;p&gt;Login as the root/Admin user.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IAM → Users → demo-s3-user
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add Permissions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Attach:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Click:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



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

&lt;p&gt;Now refresh the IAM user session.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;demo-s3-user&lt;/code&gt; can now access S3.&lt;/p&gt;

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




&lt;h2&gt;
  
  
  Step 10: Explore Bucket Permissions
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;S3 → Bucket → Permissions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will notice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bucket Policies&lt;/li&gt;
&lt;li&gt;Block Public Access&lt;/li&gt;
&lt;li&gt;Access Control&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;These settings provide an additional security layer.&lt;/p&gt;

&lt;p&gt;Even if IAM permissions are accidentally misconfigured, Bucket Policies can still protect your bucket.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 11: Enable Static Website Hosting
&lt;/h2&gt;

&lt;p&gt;Create a simple &lt;code&gt;index.html&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;Upload this file to your bucket.&lt;/p&gt;

&lt;p&gt;Now go to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bucket → Properties
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Scroll to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Static Website Hosting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Enable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Static Website Hosting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Index Document: index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Save Changes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AWS will generate a website endpoint.&lt;/p&gt;

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

&lt;p&gt;Try accessing the website endpoint URL.&lt;/p&gt;

&lt;p&gt;You will notice that you still cannot access it even if you have S3 Full Access.&lt;/p&gt;

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

&lt;p&gt;This happens because there are still S3 permissions blocking public access.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 12: Remove Public Access Block
&lt;/h2&gt;

&lt;p&gt;Go to:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Locate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Block Public Access
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



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

&lt;p&gt;Disable public access.&lt;/p&gt;

&lt;p&gt;Confirm the warning.&lt;/p&gt;

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

&lt;p&gt;When you try to access the URL again, you may still receive:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;403 Forbidden
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Although Static Website Hosting is enabled, the files inside the bucket are still private.&lt;/p&gt;

&lt;p&gt;AWS requires explicit permission before users on the internet can read objects inside an S3 bucket.&lt;/p&gt;

&lt;p&gt;To solve this, we need to create a Bucket Policy.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 13: Add Bucket Policy for Public Read
&lt;/h2&gt;

&lt;p&gt;Go to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Permissions → Bucket Policy → Edit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Click:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add New Statement
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Initially, AWS provides a template similar to:&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;"Sid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Statement1"&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;"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="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="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;We need to fill these values.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Fields
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Sid
&lt;/h3&gt;

&lt;p&gt;Used to identify the policy statement.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Principal
&lt;/h3&gt;

&lt;p&gt;Defines who the rule applies to.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;*&lt;/code&gt; means anyone on the internet.&lt;/p&gt;

&lt;h3&gt;
  
  
  Effect
&lt;/h3&gt;

&lt;p&gt;Specifies whether AWS should allow or deny the action.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"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="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Action
&lt;/h3&gt;

&lt;p&gt;Defines which permission we are granting.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"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="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows users to read objects inside the bucket.&lt;/p&gt;

&lt;h3&gt;
  
  
  Resource
&lt;/h3&gt;

&lt;p&gt;Specifies which bucket objects the rule applies to.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"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:::YOUR_BUCKET_NAME/*"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;YOUR_BUCKET_NAME&lt;/code&gt; with your actual bucket name.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;/*&lt;/code&gt; means apply the rule to all objects inside the bucket.&lt;/p&gt;




&lt;p&gt;My bucket name is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-learning-notes-example
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Therefore, the policy becomes:&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;"Sid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Statement1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Principal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"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-learning-notes-example/*"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Save Changes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Replace &lt;code&gt;my-learning-notes-example&lt;/code&gt; with your own bucket name.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Step 14: Access the Website
&lt;/h2&gt;

&lt;p&gt;Go back to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bucket → Properties
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Scroll down to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Static Website Hosting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy the:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bucket Website Endpoint URL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paste it into your browser.&lt;/p&gt;

&lt;p&gt;Now, instead of receiving the &lt;code&gt;403 Forbidden&lt;/code&gt; error, your webpage should load successfully.&lt;/p&gt;

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




&lt;p&gt;Congratulations 🎉&lt;/p&gt;

&lt;p&gt;You have successfully hosted your first static website using Amazon S3.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;p&gt;In this hands-on project, we learned how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Create an S3 bucket&lt;/li&gt;
&lt;li&gt;✅ Upload objects&lt;/li&gt;
&lt;li&gt;✅ Understand bucket and object concepts&lt;/li&gt;
&lt;li&gt;✅ Enable versioning&lt;/li&gt;
&lt;li&gt;✅ Create IAM users&lt;/li&gt;
&lt;li&gt;✅ Understand permissions&lt;/li&gt;
&lt;li&gt;✅ Explore bucket policies&lt;/li&gt;
&lt;li&gt;✅ Host a static website&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;In the next article, we will explore another important AWS service and continue building our cloud learning journey.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>beginners</category>
      <category>s3</category>
    </item>
    <item>
      <title>AWS S3 Basics for Beginners</title>
      <dc:creator>Vijaya Laxmi Kadham</dc:creator>
      <pubDate>Sat, 20 Jun 2026 12:24:59 +0000</pubDate>
      <link>https://dev.to/kadhamvj23/aws-s3-basics-for-beginners-4o27</link>
      <guid>https://dev.to/kadhamvj23/aws-s3-basics-for-beginners-4o27</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In the previous articles, we explored AWS networking concepts like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VPC&lt;/li&gt;
&lt;li&gt;Subnets&lt;/li&gt;
&lt;li&gt;Internet Gateway&lt;/li&gt;
&lt;li&gt;Security Groups&lt;/li&gt;
&lt;li&gt;Route 53&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, let's move to one of the most popular AWS services:&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon S3 (Simple Storage Service)
&lt;/h2&gt;

&lt;p&gt;Amazon S3 is one of the easiest AWS services to learn and one of the most widely used services in real-world applications.&lt;/p&gt;

&lt;p&gt;Almost every application stores some kind of data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Images&lt;/li&gt;
&lt;li&gt;Videos&lt;/li&gt;
&lt;li&gt;Documents&lt;/li&gt;
&lt;li&gt;Log files&lt;/li&gt;
&lt;li&gt;Backups&lt;/li&gt;
&lt;li&gt;Static websites&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Amazon S3 helps us store and retrieve these files securely from anywhere in the world.&lt;/p&gt;

&lt;p&gt;In this article, we will understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What Amazon S3 is&lt;/li&gt;
&lt;li&gt;Buckets and Objects&lt;/li&gt;
&lt;li&gt;Benefits of S3&lt;/li&gt;
&lt;li&gt;Storage Classes&lt;/li&gt;
&lt;li&gt;Versioning&lt;/li&gt;
&lt;li&gt;Basic security concepts&lt;/li&gt;
&lt;li&gt;Static website hosting overview&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why Do We Need Storage?
&lt;/h2&gt;

&lt;p&gt;Imagine you are running an online photo-sharing application.&lt;/p&gt;

&lt;p&gt;Users upload:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Profile pictures&lt;/li&gt;
&lt;li&gt;Photos&lt;/li&gt;
&lt;li&gt;Videos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Where should these files be stored?&lt;/p&gt;

&lt;p&gt;Keeping them directly inside application servers is not a good idea because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Storage is limited.&lt;/li&gt;
&lt;li&gt;Scaling becomes difficult.&lt;/li&gt;
&lt;li&gt;Replacing servers may cause data loss.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where Amazon S3 helps.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is Amazon S3?
&lt;/h2&gt;

&lt;p&gt;Amazon S3 stands for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Simple Storage Service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It is a cloud-based object storage service provided by AWS.&lt;/p&gt;

&lt;p&gt;S3 allows us to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Store data&lt;/li&gt;
&lt;li&gt;Retrieve data&lt;/li&gt;
&lt;li&gt;Manage data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;from anywhere using the internet.&lt;/p&gt;

&lt;p&gt;Amazon S3 is designed to be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Highly available&lt;/li&gt;
&lt;li&gt;Durable&lt;/li&gt;
&lt;li&gt;Scalable&lt;/li&gt;
&lt;li&gt;Secure&lt;/li&gt;
&lt;li&gt;Cost-effective&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;Think of Amazon S3 as a digital warehouse.&lt;/p&gt;

&lt;p&gt;Suppose you own an e-commerce company.&lt;/p&gt;

&lt;p&gt;Inside your warehouse, you store:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product images&lt;/li&gt;
&lt;li&gt;Invoices&lt;/li&gt;
&lt;li&gt;Customer documents&lt;/li&gt;
&lt;li&gt;Videos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Similarly, Amazon S3 stores digital files safely in the cloud.&lt;/p&gt;




&lt;h2&gt;
  
  
  Buckets and Objects
&lt;/h2&gt;

&lt;p&gt;Amazon S3 stores data using two concepts:&lt;/p&gt;

&lt;h3&gt;
  
  
  Bucket
&lt;/h3&gt;

&lt;p&gt;A bucket is a container used to store files.&lt;/p&gt;

&lt;p&gt;Think of a bucket like a folder.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;company-documents
customer-images
application-logs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bucket names must be globally unique.&lt;/p&gt;




&lt;h3&gt;
  
  
  Object
&lt;/h3&gt;

&lt;p&gt;Anything stored inside a bucket is called an &lt;strong&gt;Object&lt;/strong&gt;.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;invoice.pdf
profile.jpg
backup.zip
video.mp4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Objects can contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Images&lt;/li&gt;
&lt;li&gt;Videos&lt;/li&gt;
&lt;li&gt;HTML files&lt;/li&gt;
&lt;li&gt;CSV files&lt;/li&gt;
&lt;li&gt;JSON files&lt;/li&gt;
&lt;li&gt;Log files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Almost any file type can be stored in S3.&lt;/p&gt;




&lt;h3&gt;
  
  
  Real-Life Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cupboard (Bucket)
    ↓
Files and Documents (Objects)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Similarly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;S3 Bucket
    ↓
Objects
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Benefits of Amazon S3
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. High Durability
&lt;/h3&gt;

&lt;p&gt;Amazon S3 is famous for its durability.&lt;/p&gt;

&lt;p&gt;AWS provides:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;99.999999999%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;durability.&lt;/p&gt;

&lt;p&gt;This is often called:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Eleven 9's of Durability
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AWS automatically keeps multiple copies of your data to prevent data loss.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. High Availability
&lt;/h3&gt;

&lt;p&gt;S3 is designed to remain accessible even if some infrastructure components fail.&lt;/p&gt;

&lt;p&gt;Applications can continue accessing files without interruption.&lt;/p&gt;




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

&lt;p&gt;You don't need to estimate storage in advance.&lt;/p&gt;

&lt;p&gt;Whether you store:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;10 files&lt;/li&gt;
&lt;li&gt;10 million files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Amazon S3 automatically scales.&lt;/p&gt;




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

&lt;p&gt;AWS provides multiple security mechanisms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IAM Policies&lt;/li&gt;
&lt;li&gt;Bucket Policies&lt;/li&gt;
&lt;li&gt;Encryption&lt;/li&gt;
&lt;li&gt;Access Control&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These help protect sensitive data.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Cost Effective
&lt;/h3&gt;

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

&lt;ul&gt;
&lt;li&gt;Storage used&lt;/li&gt;
&lt;li&gt;Requests made&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is no need to purchase storage hardware.&lt;/p&gt;




&lt;h3&gt;
  
  
  6. High Performance
&lt;/h3&gt;

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

&lt;ul&gt;
&lt;li&gt;Parallel uploads&lt;/li&gt;
&lt;li&gt;Multipart uploads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This improves performance for large files.&lt;/p&gt;




&lt;h2&gt;
  
  
  S3 Storage Classes
&lt;/h2&gt;

&lt;p&gt;Not every file needs the same level of access.&lt;/p&gt;

&lt;p&gt;AWS provides different storage classes.&lt;/p&gt;




&lt;h3&gt;
  
  
  S3 Standard
&lt;/h3&gt;

&lt;p&gt;Used for frequently accessed files.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Website images&lt;/li&gt;
&lt;li&gt;Application assets&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  S3 Standard-IA
&lt;/h3&gt;

&lt;p&gt;IA stands for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Infrequent Access
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Used for files accessed occasionally.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Monthly reports&lt;/li&gt;
&lt;li&gt;Older documents&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  One Zone-IA
&lt;/h3&gt;

&lt;p&gt;Stores data in a single Availability Zone.&lt;/p&gt;

&lt;p&gt;Cheaper but less resilient.&lt;/p&gt;

&lt;p&gt;Suitable for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Backup copies&lt;/li&gt;
&lt;li&gt;Temporary files&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  S3 Glacier
&lt;/h3&gt;

&lt;p&gt;Used for long-term archival storage.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Old backups&lt;/li&gt;
&lt;li&gt;Compliance records&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Retrieval is slower but storage cost is very low.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is Versioning?
&lt;/h2&gt;

&lt;p&gt;Suppose today you upload:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;report.csv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tomorrow, you modify the same file and upload it again.&lt;/p&gt;

&lt;p&gt;What if you later discover that yesterday's version was correct?&lt;/p&gt;

&lt;p&gt;Versioning helps solve this problem.&lt;/p&gt;

&lt;p&gt;When versioning is enabled:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Old versions are preserved.&lt;/li&gt;
&lt;li&gt;New uploads create new versions.&lt;/li&gt;
&lt;li&gt;Previous files can be restored.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Real-Life Example
&lt;/h3&gt;

&lt;p&gt;Think about Git.&lt;/p&gt;

&lt;p&gt;Every commit stores history.&lt;/p&gt;

&lt;p&gt;Similarly, S3 Versioning stores file history.&lt;/p&gt;




&lt;h2&gt;
  
  
  Static Website Hosting
&lt;/h2&gt;

&lt;p&gt;Amazon S3 can also host static websites.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Portfolio websites&lt;/li&gt;
&lt;li&gt;Documentation sites&lt;/li&gt;
&lt;li&gt;Landing pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Files like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;index.html
style.css
logo.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;can be served directly from S3.&lt;/p&gt;

&lt;p&gt;Because static websites do not require servers, S3 hosting is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple&lt;/li&gt;
&lt;li&gt;Fast&lt;/li&gt;
&lt;li&gt;Low cost&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Understanding S3 Security
&lt;/h2&gt;

&lt;p&gt;AWS provides multiple layers of security.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  IAM Policies
&lt;/h3&gt;

&lt;p&gt;Control what users can do.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bucket Policies
&lt;/h3&gt;

&lt;p&gt;Control who can access a bucket.&lt;/p&gt;

&lt;h3&gt;
  
  
  Encryption
&lt;/h3&gt;

&lt;p&gt;Protects stored data.&lt;/p&gt;

&lt;p&gt;Even if IAM permissions are accidentally configured incorrectly, bucket policies can provide an additional security layer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common Use Cases of Amazon S3
&lt;/h2&gt;

&lt;p&gt;Amazon S3 is used for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Image storage&lt;/li&gt;
&lt;li&gt;Video storage&lt;/li&gt;
&lt;li&gt;Backup and recovery&lt;/li&gt;
&lt;li&gt;Application logs&lt;/li&gt;
&lt;li&gt;Static website hosting&lt;/li&gt;
&lt;li&gt;Data archival&lt;/li&gt;
&lt;li&gt;Data lakes&lt;/li&gt;
&lt;li&gt;Big data workloads&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Official AWS Documentation
&lt;/h2&gt;

&lt;p&gt;If you'd like to explore S3 in more detail, AWS provides excellent documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon S3 Documentation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Amazon S3 Overview
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://aws.amazon.com/s3/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;p&gt;Amazon S3 is one of the most important AWS services and is widely used in almost every cloud application.&lt;/p&gt;

&lt;p&gt;In this article, we learned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What Amazon S3 is&lt;/li&gt;
&lt;li&gt;Buckets and Objects&lt;/li&gt;
&lt;li&gt;Benefits of S3&lt;/li&gt;
&lt;li&gt;Storage Classes&lt;/li&gt;
&lt;li&gt;Versioning&lt;/li&gt;
&lt;li&gt;Security concepts&lt;/li&gt;
&lt;li&gt;Static website hosting overview&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the next article, we will perform hands-on exercises and:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create S3 buckets&lt;/li&gt;
&lt;li&gt;Upload files&lt;/li&gt;
&lt;li&gt;Enable versioning&lt;/li&gt;
&lt;li&gt;Configure permissions&lt;/li&gt;
&lt;li&gt;Create IAM users&lt;/li&gt;
&lt;li&gt;Host a static website using Amazon S3&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>s3</category>
      <category>beginners</category>
    </item>
    <item>
      <title>AWS S3 Basics for Beginners</title>
      <dc:creator>Vijaya Laxmi Kadham</dc:creator>
      <pubDate>Wed, 17 Jun 2026 12:27:17 +0000</pubDate>
      <link>https://dev.to/kadhamvj23/aws-s3-basics-for-beginners-3k8m</link>
      <guid>https://dev.to/kadhamvj23/aws-s3-basics-for-beginners-3k8m</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In the previous articles, we explored AWS networking concepts like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VPC&lt;/li&gt;
&lt;li&gt;Subnets&lt;/li&gt;
&lt;li&gt;Internet Gateway&lt;/li&gt;
&lt;li&gt;Security Groups&lt;/li&gt;
&lt;li&gt;Route 53&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, let's move to one of the most popular AWS services:&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon S3 (Simple Storage Service)
&lt;/h2&gt;

&lt;p&gt;Amazon S3 is one of the easiest AWS services to learn and one of the most widely used services in real-world applications.&lt;/p&gt;

&lt;p&gt;Almost every application stores some kind of data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Images&lt;/li&gt;
&lt;li&gt;Videos&lt;/li&gt;
&lt;li&gt;Documents&lt;/li&gt;
&lt;li&gt;Log files&lt;/li&gt;
&lt;li&gt;Backups&lt;/li&gt;
&lt;li&gt;Static websites&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Amazon S3 helps us store and retrieve these files securely from anywhere in the world.&lt;/p&gt;

&lt;p&gt;In this article, we will understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What Amazon S3 is&lt;/li&gt;
&lt;li&gt;Buckets and Objects&lt;/li&gt;
&lt;li&gt;Benefits of S3&lt;/li&gt;
&lt;li&gt;Storage Classes&lt;/li&gt;
&lt;li&gt;Versioning&lt;/li&gt;
&lt;li&gt;Basic security concepts&lt;/li&gt;
&lt;li&gt;Static website hosting overview&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why Do We Need Storage?
&lt;/h2&gt;

&lt;p&gt;Imagine you are running an online photo-sharing application.&lt;/p&gt;

&lt;p&gt;Users upload:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Profile pictures&lt;/li&gt;
&lt;li&gt;Photos&lt;/li&gt;
&lt;li&gt;Videos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Where should these files be stored?&lt;/p&gt;

&lt;p&gt;Keeping them directly inside application servers is not a good idea because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Storage is limited.&lt;/li&gt;
&lt;li&gt;Scaling becomes difficult.&lt;/li&gt;
&lt;li&gt;Replacing servers may cause data loss.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where Amazon S3 helps.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is Amazon S3?
&lt;/h2&gt;

&lt;p&gt;Amazon S3 stands for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Simple Storage Service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It is a cloud-based object storage service provided by AWS.&lt;/p&gt;

&lt;p&gt;S3 allows us to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Store data&lt;/li&gt;
&lt;li&gt;Retrieve data&lt;/li&gt;
&lt;li&gt;Manage data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;from anywhere using the internet.&lt;/p&gt;

&lt;p&gt;Amazon S3 is designed to be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Highly available&lt;/li&gt;
&lt;li&gt;Durable&lt;/li&gt;
&lt;li&gt;Scalable&lt;/li&gt;
&lt;li&gt;Secure&lt;/li&gt;
&lt;li&gt;Cost-effective&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;Think of Amazon S3 as a digital warehouse.&lt;/p&gt;

&lt;p&gt;Suppose you own an e-commerce company.&lt;/p&gt;

&lt;p&gt;Inside your warehouse, you store:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product images&lt;/li&gt;
&lt;li&gt;Invoices&lt;/li&gt;
&lt;li&gt;Customer documents&lt;/li&gt;
&lt;li&gt;Videos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Similarly, Amazon S3 stores digital files safely in the cloud.&lt;/p&gt;




&lt;h2&gt;
  
  
  Buckets and Objects
&lt;/h2&gt;

&lt;p&gt;Amazon S3 stores data using two concepts:&lt;/p&gt;

&lt;h3&gt;
  
  
  Bucket
&lt;/h3&gt;

&lt;p&gt;A bucket is a container used to store files.&lt;/p&gt;

&lt;p&gt;Think of a bucket like a folder.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;company-documents
customer-images
application-logs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bucket names must be globally unique.&lt;/p&gt;




&lt;h3&gt;
  
  
  Object
&lt;/h3&gt;

&lt;p&gt;Anything stored inside a bucket is called an &lt;strong&gt;Object&lt;/strong&gt;.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;invoice.pdf
profile.jpg
backup.zip
video.mp4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Objects can contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Images&lt;/li&gt;
&lt;li&gt;Videos&lt;/li&gt;
&lt;li&gt;HTML files&lt;/li&gt;
&lt;li&gt;CSV files&lt;/li&gt;
&lt;li&gt;JSON files&lt;/li&gt;
&lt;li&gt;Log files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Almost any file type can be stored in S3.&lt;/p&gt;




&lt;h3&gt;
  
  
  Real-Life Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cupboard (Bucket)
    ↓
Files and Documents (Objects)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Similarly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;S3 Bucket
    ↓
Objects
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Benefits of Amazon S3
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. High Durability
&lt;/h3&gt;

&lt;p&gt;Amazon S3 is famous for its durability.&lt;/p&gt;

&lt;p&gt;AWS provides:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;99.999999999%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;durability.&lt;/p&gt;

&lt;p&gt;This is often called:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Eleven 9's of Durability
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AWS automatically keeps multiple copies of your data to prevent data loss.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. High Availability
&lt;/h3&gt;

&lt;p&gt;S3 is designed to remain accessible even if some infrastructure components fail.&lt;/p&gt;

&lt;p&gt;Applications can continue accessing files without interruption.&lt;/p&gt;




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

&lt;p&gt;You don't need to estimate storage in advance.&lt;/p&gt;

&lt;p&gt;Whether you store:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;10 files&lt;/li&gt;
&lt;li&gt;10 million files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Amazon S3 automatically scales.&lt;/p&gt;




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

&lt;p&gt;AWS provides multiple security mechanisms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IAM Policies&lt;/li&gt;
&lt;li&gt;Bucket Policies&lt;/li&gt;
&lt;li&gt;Encryption&lt;/li&gt;
&lt;li&gt;Access Control&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These help protect sensitive data.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Cost Effective
&lt;/h3&gt;

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

&lt;ul&gt;
&lt;li&gt;Storage used&lt;/li&gt;
&lt;li&gt;Requests made&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is no need to purchase storage hardware.&lt;/p&gt;




&lt;h3&gt;
  
  
  6. High Performance
&lt;/h3&gt;

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

&lt;ul&gt;
&lt;li&gt;Parallel uploads&lt;/li&gt;
&lt;li&gt;Multipart uploads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This improves performance for large files.&lt;/p&gt;




&lt;h2&gt;
  
  
  S3 Storage Classes
&lt;/h2&gt;

&lt;p&gt;Not every file needs the same level of access.&lt;/p&gt;

&lt;p&gt;AWS provides different storage classes.&lt;/p&gt;




&lt;h3&gt;
  
  
  S3 Standard
&lt;/h3&gt;

&lt;p&gt;Used for frequently accessed files.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Website images&lt;/li&gt;
&lt;li&gt;Application assets&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  S3 Standard-IA
&lt;/h3&gt;

&lt;p&gt;IA stands for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Infrequent Access
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Used for files accessed occasionally.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Monthly reports&lt;/li&gt;
&lt;li&gt;Older documents&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  One Zone-IA
&lt;/h3&gt;

&lt;p&gt;Stores data in a single Availability Zone.&lt;/p&gt;

&lt;p&gt;Cheaper but less resilient.&lt;/p&gt;

&lt;p&gt;Suitable for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Backup copies&lt;/li&gt;
&lt;li&gt;Temporary files&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  S3 Glacier
&lt;/h3&gt;

&lt;p&gt;Used for long-term archival storage.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Old backups&lt;/li&gt;
&lt;li&gt;Compliance records&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Retrieval is slower but storage cost is very low.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is Versioning?
&lt;/h2&gt;

&lt;p&gt;Suppose today you upload:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;report.csv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tomorrow, you modify the same file and upload it again.&lt;/p&gt;

&lt;p&gt;What if you later discover that yesterday's version was correct?&lt;/p&gt;

&lt;p&gt;Versioning helps solve this problem.&lt;/p&gt;

&lt;p&gt;When versioning is enabled:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Old versions are preserved.&lt;/li&gt;
&lt;li&gt;New uploads create new versions.&lt;/li&gt;
&lt;li&gt;Previous files can be restored.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Real-Life Example
&lt;/h3&gt;

&lt;p&gt;Think about Git.&lt;/p&gt;

&lt;p&gt;Every commit stores history.&lt;/p&gt;

&lt;p&gt;Similarly, S3 Versioning stores file history.&lt;/p&gt;




&lt;h2&gt;
  
  
  Static Website Hosting
&lt;/h2&gt;

&lt;p&gt;Amazon S3 can also host static websites.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Portfolio websites&lt;/li&gt;
&lt;li&gt;Documentation sites&lt;/li&gt;
&lt;li&gt;Landing pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Files like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;index.html
style.css
logo.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;can be served directly from S3.&lt;/p&gt;

&lt;p&gt;Because static websites do not require servers, S3 hosting is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple&lt;/li&gt;
&lt;li&gt;Fast&lt;/li&gt;
&lt;li&gt;Low cost&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Understanding S3 Security
&lt;/h2&gt;

&lt;p&gt;AWS provides multiple layers of security.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  IAM Policies
&lt;/h3&gt;

&lt;p&gt;Control what users can do.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bucket Policies
&lt;/h3&gt;

&lt;p&gt;Control who can access a bucket.&lt;/p&gt;

&lt;h3&gt;
  
  
  Encryption
&lt;/h3&gt;

&lt;p&gt;Protects stored data.&lt;/p&gt;

&lt;p&gt;Even if IAM permissions are accidentally configured incorrectly, bucket policies can provide an additional security layer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common Use Cases of Amazon S3
&lt;/h2&gt;

&lt;p&gt;Amazon S3 is used for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Image storage&lt;/li&gt;
&lt;li&gt;Video storage&lt;/li&gt;
&lt;li&gt;Backup and recovery&lt;/li&gt;
&lt;li&gt;Application logs&lt;/li&gt;
&lt;li&gt;Static website hosting&lt;/li&gt;
&lt;li&gt;Data archival&lt;/li&gt;
&lt;li&gt;Data lakes&lt;/li&gt;
&lt;li&gt;Big data workloads&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Official AWS Documentation
&lt;/h2&gt;

&lt;p&gt;If you'd like to explore S3 in more detail, AWS provides excellent documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon S3 Documentation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Amazon S3 Overview
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://aws.amazon.com/s3/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;p&gt;Amazon S3 is one of the most important AWS services and is widely used in almost every cloud application.&lt;/p&gt;

&lt;p&gt;In this article, we learned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What Amazon S3 is&lt;/li&gt;
&lt;li&gt;Buckets and Objects&lt;/li&gt;
&lt;li&gt;Benefits of S3&lt;/li&gt;
&lt;li&gt;Storage Classes&lt;/li&gt;
&lt;li&gt;Versioning&lt;/li&gt;
&lt;li&gt;Security concepts&lt;/li&gt;
&lt;li&gt;Static website hosting overview&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the next article, we will perform hands-on exercises and:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create S3 buckets&lt;/li&gt;
&lt;li&gt;Upload files&lt;/li&gt;
&lt;li&gt;Enable versioning&lt;/li&gt;
&lt;li&gt;Configure permissions&lt;/li&gt;
&lt;li&gt;Create IAM users&lt;/li&gt;
&lt;li&gt;Host a static website using Amazon S3&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>s3</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
