<?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: Oluwatobi</title>
    <description>The latest articles on DEV Community by Oluwatobi (@ooluwatobi_o).</description>
    <link>https://dev.to/ooluwatobi_o</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1151663%2Fe5011157-9ffb-4168-bf88-fc8e41583acc.jpg</url>
      <title>DEV Community: Oluwatobi</title>
      <link>https://dev.to/ooluwatobi_o</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ooluwatobi_o"/>
    <language>en</language>
    <item>
      <title>How to Deploy a Static Website with S3 and CloudFront on AWS</title>
      <dc:creator>Oluwatobi</dc:creator>
      <pubDate>Tue, 27 May 2025 18:25:41 +0000</pubDate>
      <link>https://dev.to/ooluwatobi_o/how-to-deploy-a-static-website-with-s3-and-cloudfront-on-aws-1lnj</link>
      <guid>https://dev.to/ooluwatobi_o/how-to-deploy-a-static-website-with-s3-and-cloudfront-on-aws-1lnj</guid>
      <description>&lt;p&gt;Want to host a fast, secure, and globally distributed website with &lt;strong&gt;no backend server&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;In this hands-on guide, I’ll walk you through how to host a &lt;strong&gt;static website&lt;/strong&gt; using &lt;strong&gt;Amazon S3&lt;/strong&gt; and &lt;strong&gt;CloudFront&lt;/strong&gt; — perfect for portfolios, documentation, or product landing pages.&lt;/p&gt;




&lt;h2&gt;
  
  
  What You’ll Need
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ An AWS Account (free tier works)&lt;/li&gt;
&lt;li&gt;✅ A static website (HTML, CSS, JS files)&lt;/li&gt;
&lt;li&gt;✅ Optional: Custom domain + SSL&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step-by-Step Guide
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Step 1: Create an S3 Bucket
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt; Go to S3 in AWS Console.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt; Click &lt;strong&gt;"Create Bucket"&lt;/strong&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.amazonaws.com%2Fuploads%2Farticles%2Fes9yg9ba7nh4vh6786zu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fes9yg9ba7nh4vh6786zu.png" alt="Image description" width="800" height="567"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name it &lt;em&gt;exactly&lt;/em&gt; as your domain name (e.g. &lt;code&gt;mywebsite.com&lt;/code&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.amazonaws.com%2Fuploads%2Farticles%2Fnph82a1u5uduk6ykgvg3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnph82a1u5uduk6ykgvg3.png" alt="Image description" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Uncheck &lt;strong&gt;Block all public access&lt;/strong&gt; ✅ (you’ll change permissions later)&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt; Create Bucket &amp;gt; click on the created bucket &amp;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.amazonaws.com%2Fuploads%2Farticles%2F77lkqpggw3wl77cb248l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F77lkqpggw3wl77cb248l.png" alt="Image description" width="800" height="138"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Enable static website hosting:&lt;/li&gt;
&lt;li&gt;Under "Properties" &amp;gt; Static Website Hosting&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Select: &lt;strong&gt;Enable&lt;/strong&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.amazonaws.com%2Fuploads%2Farticles%2Fftr4p46gcwjjgh78b6hy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fftr4p46gcwjjgh78b6hy.png" alt="Image description" width="800" height="178"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Enter your &lt;code&gt;index.html&lt;/code&gt; and &lt;code&gt;error.html&lt;/code&gt; file names&lt;/li&gt;
&lt;/ul&gt;

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




&lt;h3&gt;
  
  
  🔹 Step 2: Upload Your Website Files
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Upload your &lt;code&gt;index.html&lt;/code&gt;, &lt;code&gt;styles.css&lt;/code&gt;, and other static files into the bucket.&lt;/li&gt;
&lt;/ul&gt;

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

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




&lt;h3&gt;
  
  
  🔹 Step 3: Set Bucket Policy for Public Read
&lt;/h3&gt;

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

&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;Permissions &amp;gt; Bucket Policy&lt;/strong&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.amazonaws.com%2Fuploads%2Farticles%2Fzq56s7r2si47e4xz1xqu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzq56s7r2si47e4xz1xqu.png" alt="Image description" width="800" height="694"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and paste this (update your bucket name):&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;"PublicReadGetObject"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Principal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="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;"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:::your-bucket-name/*"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

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

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

&lt;p&gt;🔹 Step 4: Set Up CloudFront&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to CloudFront &amp;gt; Create Distribution&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Under Origin domain, choose your S3 bucket&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Set Viewer Protocol Policy to Redirect HTTP to HTTPS&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Enable Custom Error Responses (optional)&lt;/li&gt;
&lt;li&gt;Leave other defaults or fine-tune caching rules&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;🔹 Step 5: Connect a Custom Domain (Optional)&lt;br&gt;
If you have a domain (from Route 53 or elsewhere):&lt;/p&gt;

&lt;p&gt;Add an alternate domain name (CNAME) to CloudFront&lt;/p&gt;

&lt;p&gt;Use AWS Certificate Manager (ACM) to create an SSL cert&lt;/p&gt;

&lt;p&gt;Update your DNS settings to point to the CloudFront distribution&lt;/p&gt;

&lt;p&gt;💡 Bonus Tips&lt;br&gt;
✅ Enable versioning in S3 for rollbacks&lt;/p&gt;

&lt;p&gt;✅ Use CloudFront invalidation to force-refresh cache&lt;/p&gt;

&lt;p&gt;✅ Add security headers with Lambda@Edge (advanced)&lt;/p&gt;

&lt;p&gt;🎉 Done! Your Static Site is Live on AWS&lt;br&gt;
You now have a fast, global, scalable site hosted with S3 and accelerated by CloudFront.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>s3</category>
      <category>cloudfront</category>
      <category>webdev</category>
    </item>
    <item>
      <title>💰 How to Use S3 Lifecycle Policies to Save Money and Stay Organized on AWS"</title>
      <dc:creator>Oluwatobi</dc:creator>
      <pubDate>Mon, 05 May 2025 19:10:26 +0000</pubDate>
      <link>https://dev.to/ooluwatobi_o/how-to-use-s3-lifecycle-policies-to-save-money-and-stay-organized-on-aws-55ge</link>
      <guid>https://dev.to/ooluwatobi_o/how-to-use-s3-lifecycle-policies-to-save-money-and-stay-organized-on-aws-55ge</guid>
      <description>&lt;p&gt;If you're storing data on AWS S3 and not using lifecycle policies, you're probably overspending.&lt;/p&gt;

&lt;p&gt;In this guide, I’ll walk you through how to set up &lt;strong&gt;S3 Lifecycle Rules&lt;/strong&gt; to automate storage transitions, save money, and keep your data clean.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ Why S3 Lifecycle Policies Matter
&lt;/h2&gt;

&lt;p&gt;S3 is one of AWS’s most used services—and for good reason. It’s durable, flexible, and easy to use.&lt;/p&gt;

&lt;p&gt;But here’s the catch:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;If you don’t actively manage your storage, your costs can quietly stack up.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lifecycle policies help you automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Move files to &lt;strong&gt;cheaper storage classes&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Delete unnecessary files&lt;/strong&gt; on schedule&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  📦 S3 Storage Class Cheatsheet
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Storage Class&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;Frequent access&lt;/td&gt;
&lt;td&gt;💸 High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Intelligent-Tiering&lt;/td&gt;
&lt;td&gt;Dynamic access patterns&lt;/td&gt;
&lt;td&gt;⚖️ Balanced&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One Zone-IA&lt;/td&gt;
&lt;td&gt;Rare access, lower durability&lt;/td&gt;
&lt;td&gt;💵 Lower&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Glacier&lt;/td&gt;
&lt;td&gt;Archival, infrequent access&lt;/td&gt;
&lt;td&gt;🧊 Very low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Glacier Deep Archive&lt;/td&gt;
&lt;td&gt;Long-term cold storage&lt;/td&gt;
&lt;td&gt;❄️ Lowest&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  🧪 Use Case: Archiving Logs Automatically
&lt;/h2&gt;

&lt;p&gt;Imagine you store logs that are only useful for 30 days. After that, you want to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Archive them to &lt;strong&gt;Glacier&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Delete them after &lt;strong&gt;6 months&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here’s how you can do that 👇&lt;/p&gt;


&lt;h2&gt;
  
  
  ⚙️ Step-by-Step: Setting Up an S3 Lifecycle Rule
&lt;/h2&gt;
&lt;h3&gt;
  
  
  🔹 1. Open the AWS S3 Console
&lt;/h3&gt;

&lt;p&gt;Go to: S3 &amp;gt; Select Your Bucket &amp;gt; Management &amp;gt; Lifecycle Rules &amp;gt; Create Rule&lt;/p&gt;

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

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

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3am0tsclgo88a5fg24og.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3am0tsclgo88a5fg24og.png" alt="Image description" width="800" height="224"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  🔹 2. Name Your Rule
&lt;/h3&gt;

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fodsb5dk180u5u2zp7glb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fodsb5dk180u5u2zp7glb.png" alt="Image description" width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  🔹 3. Choose Filter (Optional)
&lt;/h3&gt;

&lt;p&gt;Apply the rule to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All objects&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;prefix&lt;/strong&gt; (e.g., &lt;code&gt;logs/&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Or &lt;strong&gt;tagged&lt;/strong&gt; objects
Tags are great for fine-grained control. Example:
&lt;/li&gt;
&lt;/ul&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;"project"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"analytics"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🔹 4. Set Transitions
&lt;/h3&gt;

&lt;p&gt;Transition to GLACIER after 30 days&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh03jruii9c38ftvemhu1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh03jruii9c38ftvemhu1.png" alt="Image description" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  🔹 5. Set Expiration
&lt;/h3&gt;

&lt;p&gt;Delete objects after 180 days&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy6mkjdtq52608oc0hsac.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy6mkjdtq52608oc0hsac.png" alt="Image description" width="800" height="110"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  🔹 6. Review &amp;amp; Create
&lt;/h3&gt;

&lt;p&gt;Done! Now AWS handles the cleanup for you.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;✅ Use object tagging to separate lifecycles per project&lt;/li&gt;
&lt;li&gt;✅ Combine with Intelligent-Tiering when access patterns are unpredictable&lt;/li&gt;
&lt;li&gt;✅ Monitor with AWS CloudTrail or CloudWatch for visibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🧾 Example JSON Rule (for automation)&lt;br&gt;
If you're using Terraform, here's a snippet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;lifecycle_rule {
  id      = "archive_logs"
  enabled = true

  prefix = "logs/"

  transition {
    days          = 30
    storage_class = "GLACIER"
  }

  expiration {
    days = 180
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔚 Conclusion
&lt;/h3&gt;

&lt;p&gt;S3 Lifecycle Policies are simple yet powerful. Whether you're managing logs, backups, or raw data dumps, they help:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Cut costs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Maintain hygiene&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Automate boring tasks&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  💬 Your Turn!
&lt;/h2&gt;

&lt;p&gt;Are you using S3 lifecycle rules yet?&lt;br&gt;
Or planning to? What use cases do you have in mind?&lt;/p&gt;

&lt;p&gt;Let me know in the comments 👇&lt;/p&gt;

</description>
      <category>aws</category>
      <category>s3</category>
      <category>cloud</category>
      <category>costoptimization</category>
    </item>
    <item>
      <title>AWS Virtual Private Cloud</title>
      <dc:creator>Oluwatobi</dc:creator>
      <pubDate>Sun, 01 Sep 2024 20:53:07 +0000</pubDate>
      <link>https://dev.to/ooluwatobi_o/aws-virtual-private-cloud-4i2p</link>
      <guid>https://dev.to/ooluwatobi_o/aws-virtual-private-cloud-4i2p</guid>
      <description>&lt;h2&gt;
  
  
  Project Description:
&lt;/h2&gt;

&lt;p&gt;We'll explore the core concept of Amazon Web Service (AWS), focusing specifically on virtual Private Clouds (VPCs)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subnets &lt;/li&gt;
&lt;li&gt;Gateways&lt;/li&gt;
&lt;li&gt;Routing tables
We'll navigate the AWS management console to deploy and manage these critical components effectively. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Project Goals:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Setting up and configuring VPC, Subnets, internet gateway, NAT gateway&lt;/li&gt;
&lt;li&gt;Enable internet connectivity securely within VPC &lt;/li&gt;
&lt;li&gt;Implement outbound internet access through the NAT gateway.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Setting up a Virtual Private Cloud (VPC)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to the search bar and enter VPC&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Navigate to the "Create VPC" option and click on it&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Select the "VPC only" option, specify the IPv4 CIDR block, and proceed by clicking on the "Create VPC" button.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Note: If you encounter an error message stating that the CIDR block must be between '/16 and /28' when creating a VPC, it indicates that your provided CIDR block falls outside of this recommended range.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VPC created&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  Step 2: Configuring Subnets within the VPC
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Navigate to the "Subnets" option located on the left sidebar.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Proceed to click on the "Create Subnet" button.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Select the ID of the VPC that you created in the previous step&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Enter the subnet name, and specify the IPv4 CIDR for the subnet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;choose the availability zone&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Specify the IPv4 CIDR for the subnet &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To create another subnet, Click on the "Add subnet" button.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Repeat the same steps for the second subnet&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ensuring to specify the subnet name, choose the availability zone, and provide the IPV4 CIDR&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Your subnets is being created&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Step 3: Creating Internet Gateway
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Navigate to the "Internet Gateway"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on the "Create Internet Gateway"&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Specify the name of Internet Gateway&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on the "Creating Internet Gateway"&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Your internet gateway is being successfully created.&lt;/p&gt;

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

&lt;p&gt;Now, you will notice that it is currently detached, indicating that it is not associated with any VPC. To enable internet connectivity, you must attach the Internet Gateway to the VPC you have previously created.&lt;/p&gt;

&lt;p&gt;Now, attach it to the VPC&lt;/p&gt;

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

&lt;p&gt;Successfully attached &lt;/p&gt;

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

&lt;h2&gt;
  
  
  Step 4: Creating Route Tables
&lt;/h2&gt;

&lt;p&gt;Let's come to the next part which is enabling internet connectivity with the internet Gateway by setting up routing tables&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Proceed to the " Route Tables"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on the "Create route table&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Enter the name of the route table and select the VPC you previously created &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a route table&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Click on "Subnet association" followed by "edit subnet associations" to associate the subnet with the route table&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Choose the public subnet and click on Save association.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Navigate to "Routes" and then click on "Edit routes" &lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Click on add route &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select "Destination" as "0.0.0.0/0", indicating that every IPV4 address can access this subnet&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;"Target Field", Choose "Internet Gateway" and then select the Internet Gateway you created. finally, save the changes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

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

&lt;h2&gt;
  
  
  Step 5: Creating NAT Gateway
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to the "NAT Gateways" then click on "Create NAT Gateway"&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Choose the Private subnet &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the connectivity type as private&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create NAT Gateway&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Your NAT Gateway is being created successfully &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Select your NAT Gateway.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Navigate to the " Details tab&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Locate the subnet ID and click on it&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Navigate to the "Route Table" section. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then click on the "route table ID"&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Proceed to the "Routes" section, then click on "Edit routes"&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Then click on "Add routes"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select "Destination" as "0.0.0.0/0" &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the  "Target" field, choose the "NAT Gateway you created.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finally, save the changes &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;On the subnet association section,  click on the edit subnet association&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Choose the private subnet and click on "Save associations" &lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The subnet has been successfully attached to the route table &lt;/p&gt;

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

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>devops</category>
      <category>networking</category>
    </item>
    <item>
      <title>Aws-S3-Bucket-Policy-Exploration</title>
      <dc:creator>Oluwatobi</dc:creator>
      <pubDate>Sun, 04 Aug 2024 20:08:41 +0000</pubDate>
      <link>https://dev.to/ooluwatobi_o/aws-s3-bucket-policy-exploration-1fhn</link>
      <guid>https://dev.to/ooluwatobi_o/aws-s3-bucket-policy-exploration-1fhn</guid>
      <description>&lt;h2&gt;
  
  
  Project Description:
&lt;/h2&gt;

&lt;p&gt;This project will guide you through creating a simple S3 bucket, defining a policy to manage access permissions, creating IAM Users and Groups, and assigning roles to each group.&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Task:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Create an S3 Bucket&lt;/li&gt;
&lt;li&gt;Understanding S3 Bucket Resource Base Policies&lt;/li&gt;
&lt;li&gt;Create IAM users and Groups&lt;/li&gt;
&lt;li&gt;Policy Configuration &lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step 1: Create an S3 bucket
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Log in to the AWS Management Console &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F7515410d-19cd-4e24-a2ae-14144b295a6d" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F7515410d-19cd-4e24-a2ae-14144b295a6d" alt="2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to the S3 service &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F9dcaa4c7-de71-4cc3-b831-b47445a881d2" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F9dcaa4c7-de71-4cc3-b831-b47445a881d2" alt="3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click the &lt;em&gt;"Create bucket"&lt;/em&gt; button &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F31a716f3-5b4f-4328-869e-ee72088597de" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F31a716f3-5b4f-4328-869e-ee72088597de" alt="4"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Follow the prompts to configure your new S3 bucket ( maintain the default settings)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F7021f9b6-8d98-4be6-84dd-77db62827d7b" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F7021f9b6-8d98-4be6-84dd-77db62827d7b" alt="5"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F83da1c62-3417-4811-9253-12eae1ffc028" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F83da1c62-3417-4811-9253-12eae1ffc028" alt="7"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You might get this prompt, S3 naming convention is unique (You can't have two buckets with the same name in the whole of AWS infrastructure)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add some extra characters or texts&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fdfc0acda-6509-42a6-8a36-0f941f3ab8c2" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fdfc0acda-6509-42a6-8a36-0f941f3ab8c2" alt="8"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fe1619ba3-ab45-46a5-800e-4c966816924e" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fe1619ba3-ab45-46a5-800e-4c966816924e" alt="9"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Understanding S3 Bucket Policies [How Amazon S3 works with IAM]
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Scenario: As the cloud Architect, you're to
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Create IAM users, and assign them to different groups
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Group 1 - Developers [Users - Gift, grace]&lt;/li&gt;
&lt;li&gt;Group 2 - Auditors [Ali, Josh]&lt;/li&gt;
&lt;li&gt;Group 3 - Operations [ Samuel, Lovet]&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Assign different roles (policies) to each group
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Groups&lt;/th&gt;
&lt;th&gt;Roles&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Developers&lt;/td&gt;
&lt;td&gt;EC2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auditors&lt;/td&gt;
&lt;td&gt;Billing and cost Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operation&lt;/td&gt;
&lt;td&gt;Networking&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Each Group has a lead, assign Resource-based policies within Amazon S3 only to the lead of each group
&lt;/h3&gt;

&lt;h3&gt;
  
  
  2.1 Creating groups and assigning permissions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to IAM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fc4e704c1-e074-46da-9f21-f750cd54f456" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fc4e704c1-e074-46da-9f21-f750cd54f456" alt="10"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select User groups&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fd47c5b03-3795-45b9-b345-8c0a5465f135" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fd47c5b03-3795-45b9-b345-8c0a5465f135" alt="11"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create groups&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F5e23d6e5-526a-469d-9858-e07e7ca151ac" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F5e23d6e5-526a-469d-9858-e07e7ca151ac" alt="12"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F2cf00f24-9e1d-4227-89f0-47c7ed8cebac" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F2cf00f24-9e1d-4227-89f0-47c7ed8cebac" alt="13"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F715c8e0c-062b-40e3-b778-c3c41b00a3e6" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F715c8e0c-062b-40e3-b778-c3c41b00a3e6" alt="14"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fd4ef2f7f-4b98-46df-8fa3-7814bdd60ab1" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fd4ef2f7f-4b98-46df-8fa3-7814bdd60ab1" alt="15"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F81ac7d71-f0d6-4363-9886-ec660f75809e" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F81ac7d71-f0d6-4363-9886-ec660f75809e" alt="16"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Apply the same Steps to create the other groups
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;### 2.2 Creating and Adding Users &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Ff3df1df1-72fb-4bc0-bbb4-f19912f0b177" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Ff3df1df1-72fb-4bc0-bbb4-f19912f0b177" alt="21"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fae8183b2-529f-4003-a0a8-46f1261bc602" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fae8183b2-529f-4003-a0a8-46f1261bc602" alt="22"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F0d8dbe92-bb5a-4d3c-b031-b59503d25177" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F0d8dbe92-bb5a-4d3c-b031-b59503d25177" alt="23"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F65244606-869c-4cb7-be43-f31f925d6ac4" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F65244606-869c-4cb7-be43-f31f925d6ac4" alt="24"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F701dcae9-1ce4-4deb-b286-c5bed5a530cf" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F701dcae9-1ce4-4deb-b286-c5bed5a530cf" alt="25"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Apply the same Steps to create the Users you want
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F1fd93355-732b-4da6-8fea-c5062f8b670f" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F1fd93355-732b-4da6-8fea-c5062f8b670f" alt="26"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 Assign Resource-based policies within Amazon S3 only to the lead of each group
&lt;/h3&gt;

&lt;p&gt;Assuming the leads are &lt;/p&gt;

&lt;p&gt;Auditors - Ali &lt;/p&gt;

&lt;p&gt;Developers - Grace &lt;/p&gt;

&lt;p&gt;Operations - Samuel&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to the bucket you created &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F73de8db5-1087-49cb-9a74-7e6d778de413" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F73de8db5-1087-49cb-9a74-7e6d778de413" alt="27"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select Permission
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F5dbeb545-5ee0-45f0-abe0-ff5cecfa08e5" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F5dbeb545-5ee0-45f0-abe0-ff5cecfa08e5" alt="28"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Edit Bucket Policy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Ff3df2d99-4acd-4163-9b74-583b824e2f18" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Ff3df2d99-4acd-4163-9b74-583b824e2f18" alt="29"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Copy this code
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPublicReadCannedAcl",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::471112799800:user/Ali",
                    "arn:aws:iam::471112799800:user/Samuel",
                    "arn:aws:iam::471112799800:user/grace"
                ]
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::bucketttesting/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "public-read"
                }
            }
        }
    ]
}

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Edit the principal, Copy the ARN URL of the users&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F23738d1e-b208-421d-80d1-8c9ee374dcbd" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F23738d1e-b208-421d-80d1-8c9ee374dcbd" alt="31"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Edit the Resource, Copy the bucket ARN&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can edit the action if you want &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F58f50a18-7173-4f94-b234-a4c222c673cc" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F58f50a18-7173-4f94-b234-a4c222c673cc" alt="30g"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Save Changes &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F6cb717c3-29aa-40fe-ab4c-05294686da1f" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F6cb717c3-29aa-40fe-ab4c-05294686da1f" alt="30h"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Alternatively
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use the policy generator &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F8404c122-ce34-4793-8f83-2018d8e7b5af" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F8404c122-ce34-4793-8f83-2018d8e7b5af" alt="30"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select S3 Bucket policy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fe58d7f47-1a8f-467b-9e7a-b449882737f5" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fe58d7f47-1a8f-467b-9e7a-b449882737f5" alt="30a"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select Allow &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F25f77f43-c411-4fba-af66-a06e52dc465e" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F25f77f43-c411-4fba-af66-a06e52dc465e" alt="30b"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select any action, you can select as many as you like &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fc552a2ba-f9e8-4bbe-96de-9be6250d84ff" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fc552a2ba-f9e8-4bbe-96de-9be6250d84ff" alt="30c"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy the bucket ARN &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F4398ea39-a401-4b9d-abd9-0ac44ee91beb" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F4398ea39-a401-4b9d-abd9-0ac44ee91beb" alt="30e"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select Generate Policy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F5e073406-3b01-426e-a087-7dc13507dfd9" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F5e073406-3b01-426e-a087-7dc13507dfd9" alt="30f"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>git</category>
      <category>github</category>
    </item>
    <item>
      <title>How to build and Deploy an E-Commerce Platform with Git-Linux-and-AWS</title>
      <dc:creator>Oluwatobi</dc:creator>
      <pubDate>Wed, 31 Jul 2024 18:16:40 +0000</pubDate>
      <link>https://dev.to/ooluwatobi_o/how-to-build-and-deploy-an-e-commerce-platform-with-git-linux-and-aws-1loa</link>
      <guid>https://dev.to/ooluwatobi_o/how-to-build-and-deploy-an-e-commerce-platform-with-git-linux-and-aws-1loa</guid>
      <description>&lt;h2&gt;
  
  
  Project Description:
&lt;/h2&gt;

&lt;p&gt;To develop an e-commerce website for a new online marketplace name "Agate Interior". This platform will feature product listings, a shopping cart, and user authentication.&lt;/p&gt;

&lt;h2&gt;
  
  
  Task:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;To utilize Git for version control, develop the platform in a Linux environment, and deploy it on an AWS EC2 instance.&lt;/li&gt;
&lt;li&gt;Continous integration and development workflow &lt;/li&gt;
&lt;li&gt; Developing New features and fixes &lt;/li&gt;
&lt;li&gt;Version Control with Git &lt;/li&gt;
&lt;li&gt;Pull Requests and Merging to ain branch &lt;/li&gt;
&lt;li&gt;Deploying Updates to the Production Server &lt;/li&gt;
&lt;li&gt;Testing the new changes &lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step 1:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Initialize Git Repository
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Create a new Repository &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fa9009396-a6df-4d73-b68b-8929c275062d" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fa9009396-a6df-4d73-b68b-8929c275062d" alt="1_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy SSH/HTTP (depending on the one you use best)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fca5140fc-909b-40eb-a912-dd827a7de633" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fca5140fc-909b-40eb-a912-dd827a7de633" alt="2_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Clone the Repo&lt;br&gt;
&lt;code&gt;git clone "Paste the URL"&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Confirm it has been successfully downloaded into your local Repo&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F89f8d1c8-5712-4906-a354-cdb518ca499b" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F89f8d1c8-5712-4906-a354-cdb518ca499b" alt="3_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;## Step 2: &lt;/p&gt;

&lt;h3&gt;
  
  
  Obtain and Prepare the E-Commerce Website Template
&lt;/h3&gt;

&lt;p&gt;Instead of developing the website from scratch, use a pre-existing e-commerce website template&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Download A website template from (&lt;a href="https://www.tooplate.com/" rel="noopener noreferrer"&gt;https://www.tooplate.com/&lt;/a&gt;) or any website template hub you know &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Ff6665189-bfa8-4e02-a444-27c53e8c1849" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Ff6665189-bfa8-4e02-a444-27c53e8c1849" alt="4_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Extract the Downloaded template into your project Directory that you've created &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Customize the template if you have a basic web development skill. (I Tailored mine to Agate Interior)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fcad4b981-5a0b-4d47-918d-1559196b2cab" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fcad4b981-5a0b-4d47-918d-1559196b2cab" alt="5_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;## Step 3: &lt;/p&gt;

&lt;h3&gt;
  
  
  Stage and Commit the Template to Git
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;ls&lt;/code&gt; to confirm the directory&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;git add "Directory_name"&lt;/code&gt; to stage the codes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F40323672-d1d7-4228-9613-510a75ffb731" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F40323672-d1d7-4228-9613-510a75ffb731" alt="6_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;git status&lt;/code&gt; to see if it's successfully staged &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F3bb453d8-4164-4307-9284-10fa4c12876b" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F3bb453d8-4164-4307-9284-10fa4c12876b" alt="7_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;git commit -m "your message"&lt;/code&gt; to commit your code &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F7011f346-dc54-4f07-8567-372a7a6a5579" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F7011f346-dc54-4f07-8567-372a7a6a5579" alt="8_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;git push&lt;/code&gt; / &lt;code&gt;git push -u origin main&lt;/code&gt; to push your code to your remote Repo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F0ef69855-94c7-4a2c-97d1-abbc17c0fe55" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F0ef69855-94c7-4a2c-97d1-abbc17c0fe55" alt="9_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to your Github to confirm the changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F2598647e-6f29-409e-8c1b-4adf636635b4" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F2598647e-6f29-409e-8c1b-4adf636635b4" alt="10_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;## Step 4: &lt;/p&gt;

&lt;h3&gt;
  
  
  AWS Deployment
&lt;/h3&gt;

&lt;p&gt;To deploy, you'll start by setting up an Amazon EC2 instance &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log in to the AWS Management Console &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fb9b4ca0f-f7b2-4188-b950-10d0cac4d6ef" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fb9b4ca0f-f7b2-4188-b950-10d0cac4d6ef" alt="11_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Launch An EC2 Instance Using an Amazon Linux AMI&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remember to download a key pair &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fb18fd308-996d-412d-ab16-4c918936bd34" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fb18fd308-996d-412d-ab16-4c918936bd34" alt="12_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fc28f0ada-8907-4b10-9c1e-2bf3f97caf25" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fc28f0ada-8907-4b10-9c1e-2bf3f97caf25" alt="13_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connect to the to your local Repo using SSH&lt;/li&gt;
&lt;li&gt;Copy the URL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fee199d64-3d35-4038-a456-98641f94de77" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fee199d64-3d35-4038-a456-98641f94de77" alt="14_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You have successfully launched an EC2&lt;/p&gt;

&lt;p&gt;## Step 5: &lt;/p&gt;

&lt;h3&gt;
  
  
  Connect and Clone the repository on the Linux Server
&lt;/h3&gt;

&lt;p&gt;You need to clone the GitHub repository to your AWS EC2 instance. This process involves authenticating with GitHub using SSH&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open your Local Server &lt;/li&gt;
&lt;li&gt;Paste the URL copied from your EC2 to connect your local server to the remote server &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F5f504e78-51a4-4ded-979d-67ea3138eedf" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F5f504e78-51a4-4ded-979d-67ea3138eedf" alt="15_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Run &lt;code&gt;ssh-keygen&lt;/code&gt; to generate an SSH keypair&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Press enter to use the default file directory and passphrase&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fd758ead1-48ab-4a9c-aa28-4c447ae40bd6" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fd758ead1-48ab-4a9c-aa28-4c447ae40bd6" alt="17_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;cat /home/ec2-user/.ssh/id_rsa.pub&lt;/code&gt; (copy the content)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F8652e3a1-53b3-4dcb-98d7-a8d2e1408560" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F8652e3a1-53b3-4dcb-98d7-a8d2e1408560" alt="18_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to your Repository in GitHub Console, click on settings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F9855ee82-5c7d-4483-b7e9-dac0d11fd17c" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F9855ee82-5c7d-4483-b7e9-dac0d11fd17c" alt="19_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to SSH and GPG key, create a new SSH key &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F45f43795-30ff-4c6c-a44f-919f2f30f250" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F45f43795-30ff-4c6c-a44f-919f2f30f250" alt="21_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Paste the Copied content, and add the SSH key&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fc913ed71-480f-47f5-bae6-8ce2ace68e2d" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fc913ed71-480f-47f5-bae6-8ce2ace68e2d" alt="22_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Install git on your EC2 server if you have it installed
&lt;/h3&gt;

&lt;p&gt;To check if it is installed or not &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;which git&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F8533f953-c0df-4fc8-b113-ec59589726ea" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F8533f953-c0df-4fc8-b113-ec59589726ea" alt="23_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To install, run &lt;code&gt;sudo yum install git&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F44662ae0-ff21-44df-8f06-6216101aaae9" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F44662ae0-ff21-44df-8f06-6216101aaae9" alt="24_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Clone the Repository
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Navigate back to Repo and copy the SSH URL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F54c81ffe-c749-4c03-b558-aae7bb4ed2f5" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F54c81ffe-c749-4c03-b558-aae7bb4ed2f5" alt="16_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clone Repo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F54071175-143c-4854-9f81-c5be470d36d5" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F54071175-143c-4854-9f81-c5be470d36d5" alt="25_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;## Step 6: &lt;/p&gt;

&lt;h3&gt;
  
  
  Install a Web Server on EC2
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Apache HTTP Scerver
&lt;/h3&gt;

&lt;p&gt;Installing it on Linux EC2 server allows you to host "&lt;strong&gt;Agate Interior&lt;/strong&gt;" &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install the Apache web server on the EC2 instance.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo yum update -y
sudo yum install httpd -y
sudo systemctl start httpd
sudo systemctl enable httpd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F712c8886-82dc-42ca-8d4b-40577afaea5b" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F712c8886-82dc-42ca-8d4b-40577afaea5b" alt="26_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure httpd for the website
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo rm -rf /var/www/html/*
sudo cp -r ~Agate_interior/* /var/www/html/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fc30988d7-37e1-4432-9094-19e8494edfc5" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fc30988d7-37e1-4432-9094-19e8494edfc5" alt="27_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reload httpd &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;sudo systemctl reload httpd&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fd812c2bd-9b98-40f8-bab5-df2656cef989" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fd812c2bd-9b98-40f8-bab5-df2656cef989" alt="28_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Success Website from browser
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Open a web browser and access the public IP of your EC2 instance to view the deployed website &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F773eb3fd-c411-4a57-8aba-3a23fe91f0d4" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F773eb3fd-c411-4a57-8aba-3a23fe91f0d4" alt="29_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;## Step 8: &lt;/p&gt;

&lt;h3&gt;
  
  
  Continuous Integration and Deployment Workflow
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Developing New Features and fixes &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;git checkout -b Development&lt;/code&gt; to create a new branch&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fe53e20fd-47d8-469f-b560-8f3d0eefcaf2" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fe53e20fd-47d8-469f-b560-8f3d0eefcaf2" alt="30_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make your New development &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F734c509c-a8d1-4a0b-9f92-e3a8b40f4f12" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F734c509c-a8d1-4a0b-9f92-e3a8b40f4f12" alt="31_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stage your Edit
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add "index.html"
git commit -m "your message"
git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F4ec1d03a-0d71-48e3-aa1f-32fd8973d5a0" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F4ec1d03a-0d71-48e3-aa1f-32fd8973d5a0" alt="32_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to your GitHub &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fa8819b6c-0f63-448d-aac7-19730160069b" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fa8819b6c-0f63-448d-aac7-19730160069b" alt="33_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Ff101f095-c585-4b3d-8b5f-d49c204a1575" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Ff101f095-c585-4b3d-8b5f-d49c204a1575" alt="34_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F47da77a5-d546-4b29-be43-b46d40dde310" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F47da77a5-d546-4b29-be43-b46d40dde310" alt="35_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Git pull &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F86948c08-c36c-407c-9924-6e949faf3a47" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F86948c08-c36c-407c-9924-6e949faf3a47" alt="36_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 8:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Deploying Updates to the Production Server
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Pull the latest changes on the Server &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F366e2aef-a832-428f-87a0-a4c133a35de3" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F366e2aef-a832-428f-87a0-a4c133a35de3" alt="37_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Follow and study the code &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F2d9ef45a-c875-40c7-b62f-90bf829eb4a8" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F2d9ef45a-c875-40c7-b62f-90bf829eb4a8" alt="38_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Code Updated&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Before
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fcad4b981-5a0b-4d47-918d-1559196b2cab" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fcad4b981-5a0b-4d47-918d-1559196b2cab" alt="5_aws"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  After
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F8ac29c0a-e023-4932-9e86-9b0c6bb434e2" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F8ac29c0a-e023-4932-9e86-9b0c6bb434e2" alt="39_aws"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>aws</category>
      <category>linux</category>
      <category>git</category>
    </item>
    <item>
      <title>EC2-and-S3-integration-for-Zappy-E-bank</title>
      <dc:creator>Oluwatobi</dc:creator>
      <pubDate>Tue, 30 Jul 2024 13:24:10 +0000</pubDate>
      <link>https://dev.to/ooluwatobi_o/ec2-and-s3-integration-for-zappy-e-bank-4in7</link>
      <guid>https://dev.to/ooluwatobi_o/ec2-and-s3-integration-for-zappy-e-bank-4in7</guid>
      <description>&lt;h2&gt;
  
  
  Mini Project: EC2-and-S3-integration-for-zappy-e-bank
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Project Description:
&lt;/h2&gt;

&lt;p&gt;Zappy E-bank plans to deploy its application on AWS ECS, with S3 buckets serving as the backbone for storage solutions, including customer data, transaction logs, and analytical data. The integration of EC2 and S3, facilitated by a reversed proxy setup, aims to provide a seamless experience for managing and accessing diverse resources under a unified access point.&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Task:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;EC2:&lt;/strong&gt; Host the core application, enabling scalable computing capacity to meet growing customer demands.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;S3:&lt;/strong&gt; Offers secure, scalable objects strong for vast amounts of data, ensuring that Zappy E-bank can serve its customers efficiently and reliably.&lt;/p&gt;

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

&lt;p&gt;A reverse Proxy will be configured on the EC2 instance, directing requests to the appropriate destination.&lt;/p&gt;

&lt;p&gt;This also explains how to launch an EC2 instance&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Login into the AWS console as an IAM user&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3n5-kkC_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/067e4fa3-7e55-4d0b-97cb-dc4da048fcf7" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3n5-kkC_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/067e4fa3-7e55-4d0b-97cb-dc4da048fcf7" alt="1_aws" width="393" height="651"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--obBmQj52--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/269fd9f0-89ed-4dd1-a755-13983b1b9008" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--obBmQj52--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/269fd9f0-89ed-4dd1-a755-13983b1b9008" alt="2_aws" width="364" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Launching An Instance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Search for EC2 &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lfd1scGg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/4b8cc2fd-e290-4d49-a558-f9f1dcaea8f9" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lfd1scGg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/4b8cc2fd-e290-4d49-a558-f9f1dcaea8f9" alt="3_aws" width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on Launch Instance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---GXOF5uE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/d2f5cece-5cbf-476f-85de-6a926d128d91" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---GXOF5uE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/d2f5cece-5cbf-476f-85de-6a926d128d91" alt="4_aws" width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Insert your project Name &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--krEGO0g---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/77e37c9c-66a1-4bdf-9065-936e1508c8b7" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--krEGO0g---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/77e37c9c-66a1-4bdf-9065-936e1508c8b7" alt="5_aws" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select an Operating system to run (I'll be using the Ubuntu instance)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4ykjh4dZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/932a392a-dbc6-45c2-88f7-f9e5f658a611" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4ykjh4dZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/932a392a-dbc6-45c2-88f7-f9e5f658a611" alt="5a_aws" width="786" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select Instance Type&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TaMIGUkW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/f9b6884a-d255-4174-bfdd-45daa1eefd02" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TaMIGUkW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/f9b6884a-d255-4174-bfdd-45daa1eefd02" alt="6_aws" width="790" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can decide to generate a key pair if you want to connect to a local server, but I won't be needing it here&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2ZKBJOlQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/7bebd145-9c79-491b-8600-d2b0b85f00e8" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2ZKBJOlQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/7bebd145-9c79-491b-8600-d2b0b85f00e8" alt="7_aws" width="791" height="243"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select  Network Settings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BgYLy3pD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/ce5c32e2-00dd-4665-ab81-b2a86ddeedd8" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BgYLy3pD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/ce5c32e2-00dd-4665-ab81-b2a86ddeedd8" alt="9_aws" width="800" height="709"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Proceed without key pair&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_s0daXkK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/548cad15-2cfa-4f69-98ce-b07540e84ec2" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_s0daXkK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/548cad15-2cfa-4f69-98ce-b07540e84ec2" alt="10_aws" width="622" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connect to instance &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tS7IwDh_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/d862b16d-8291-4cf7-be48-1a561b40f22b" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tS7IwDh_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/d862b16d-8291-4cf7-be48-1a561b40f22b" alt="12_aws" width="800" height="780"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You have successfully created an instance &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--I_sjC40M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/5402398a-c894-4506-b8e5-ed4b26fb2ad7" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I_sjC40M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/5402398a-c894-4506-b8e5-ed4b26fb2ad7" alt="13_aws" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Assigning a Static IP (Elastic IP)
&lt;/h3&gt;

&lt;p&gt;Associating an Elastic IP address with your EC2 instance ensures it retains the same public IP address across reboots.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the EC2 console navigation, select elastic IP and click on allocate elastic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Imh7Gni9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/be738812-eff2-4b17-bd23-66834832d1eb" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Imh7Gni9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/be738812-eff2-4b17-bd23-66834832d1eb" alt="14_aws" width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HUUPKQ2S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/9224e5c6-5cb3-4a33-bc00-4f582f28a333" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HUUPKQ2S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/9224e5c6-5cb3-4a33-bc00-4f582f28a333" alt="15_aws" width="800" height="193"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Follow the highlighted part&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Gy3fIPdv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/8c1be237-c347-4671-aee5-7f8cb9c86e6f" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Gy3fIPdv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/8c1be237-c347-4671-aee5-7f8cb9c86e6f" alt="6b_aws" width="800" height="786"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on &lt;em&gt;Associate&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--73ldlEp5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/17b5bab8-fe6e-4a5a-b046-40f7d2f76160" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--73ldlEp5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/17b5bab8-fe6e-4a5a-b046-40f7d2f76160" alt="16_aws" width="800" height="222"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iCg7bbhY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/26327ab8-20b9-49a6-86de-1b5ee0a8a963" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iCg7bbhY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/26327ab8-20b9-49a6-86de-1b5ee0a8a963" alt="17_aws" width="800" height="798"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Creating S3 Bucket
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Search S3 and click&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bP8KIe4Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/e76d2a26-0f89-4770-9021-16b3ea910cae" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bP8KIe4Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/e76d2a26-0f89-4770-9021-16b3ea910cae" alt="20_aws" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a new bucket and give it a name of your choice &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_rT4iGOq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/9e27a9d2-863c-4037-b295-c6a231ec538c" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_rT4iGOq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/9e27a9d2-863c-4037-b295-c6a231ec538c" alt="21_aws" width="800" height="504"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a new object inside the bucket. You should upload an index.html file containing &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GkzSHLTq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/881c460e-cd69-4420-9ebf-9b94641c81eb" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GkzSHLTq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/881c460e-cd69-4420-9ebf-9b94641c81eb" alt="22_aws" width="800" height="775"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZdfyS7iO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/5a7a0c7e-6254-4666-bef3-31f32cb67724" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZdfyS7iO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/5a7a0c7e-6254-4666-bef3-31f32cb67724" alt="23_aws" width="800" height="733"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aS9VOj2A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/b4993e4b-0adc-4f68-bf2d-d6778fc9e7aa" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aS9VOj2A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/b4993e4b-0adc-4f68-bf2d-d6778fc9e7aa" alt="24_aws" width="800" height="609"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e9-mxjv1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/632b28ad-99e9-4596-b9d4-11aa95c2d657" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e9-mxjv1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/632b28ad-99e9-4596-b9d4-11aa95c2d657" alt="25_aws" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7_NDkvbm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/c60b649c-8774-4941-ae3b-8f787db22030" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7_NDkvbm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/c60b649c-8774-4941-ae3b-8f787db22030" alt="26_aws" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On your computer, create an index.html file with the content "Welcome to Amazon&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ye8Iv_65--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/ed8f6549-9380-4961-97c7-dae5964268f1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ye8Iv_65--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/ed8f6549-9380-4961-97c7-dae5964268f1" alt="27_aws" width="800" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Jm9ed_io--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/58a3d742-dc4a-44c5-a75b-416f4564ed63" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Jm9ed_io--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/58a3d742-dc4a-44c5-a75b-416f4564ed63" alt="28_aws" width="800" height="684"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Upload the index.html on S3 bucket as shown in the image below;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--t3Y1HtcD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/31a26385-f9e1-47e5-a477-a15a00847c1e" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--t3Y1HtcD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/31a26385-f9e1-47e5-a477-a15a00847c1e" alt="29_aws" width="800" height="679"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Configuring S3 Bucket for Web Hosting
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Click on your bucket name&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tbLsP5UO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/6de02e30-fce2-4024-ae6d-3fa92fec8d31" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tbLsP5UO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/6de02e30-fce2-4024-ae6d-3fa92fec8d31" alt="31_aws" width="800" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on the properties tab and scroll down&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OVEWPMa6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/f138cd0d-3fcc-4756-92f0-b26758e7940e" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OVEWPMa6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/f138cd0d-3fcc-4756-92f0-b26758e7940e" alt="32_aws" width="800" height="598"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on edit &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gweWjSLu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/a82d5616-20fd-4a3c-a32a-09b182d7c9cf" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gweWjSLu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/a82d5616-20fd-4a3c-a32a-09b182d7c9cf" alt="33_aws" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TVCrczVl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/010a732d-2025-4e19-986d-8c12daa6cc2d" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TVCrczVl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/010a732d-2025-4e19-986d-8c12daa6cc2d" alt="34_aws" width="800" height="626"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy the URL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RHwOyMye--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/f1aadcb4-69b8-4c69-a89d-c71240015edf" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RHwOyMye--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/f1aadcb4-69b8-4c69-a89d-c71240015edf" alt="35_aws" width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Configuring a web server as Reverse Proxy
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;On your EC2 instance, install Nginx web server&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zogrgHx_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/c6c0dd8d-1e0f-4515-b4e9-60362ae65abb" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zogrgHx_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/c6c0dd8d-1e0f-4515-b4e9-60362ae65abb" alt="36_aws" width="724" height="315"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure the Web Server to Serve your S3 app directly and forward request to your S3 bucket&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;sudo vim /etc/nginx/sites-available/mybucket&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qgn29yxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/279b59bc-bc6f-4331-9a6b-c11feaecc01e" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qgn29yxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/279b59bc-bc6f-4331-9a6b-c11feaecc01e" alt="37_aws" width="643" height="90"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Paste the configuration code snippet below and replace the highlighted part with your S3 link
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; server {
    listen 80;
    server_name 100.26.55.173;  # Replace with your domain name or server IP address

    location / {
        proxy_pass https://your-bucket-name.s3.amazonaws.com; # Replace with the link you generated after you enabled  static web hosting for your bucket
        proxy_set_header Host your-bucket-name.s3.amazonaws.com;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt; Make sure to replace the link above with the link you generated after you enabled static web hosting for your bucket&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ooop3NMd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/dc8b2566-89de-4420-9248-b8136bd7d7ce" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ooop3NMd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/dc8b2566-89de-4420-9248-b8136bd7d7ce" alt="38_aws" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Make your index.html public
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to the &lt;em&gt;index.html&lt;/em&gt; file, click on &lt;strong&gt;Action&lt;/strong&gt; and then click on &lt;strong&gt;Make Public&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G4lZj86o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/bdad4825-180d-477a-8f80-8cb820d3c11a" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G4lZj86o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/bdad4825-180d-477a-8f80-8cb820d3c11a" alt="39_aws" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zuSkJd7e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/ba19d065-83e7-4383-936a-e78c5aa7ccbb" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zuSkJd7e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/ba19d065-83e7-4383-936a-e78c5aa7ccbb" alt="40_aws" width="800" height="754"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 8:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Launch
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;insert this code to link the files &lt;br&gt;
&lt;code&gt;sudo ln -s /etc/nginx/sites-available/mybucket /etc/nginx/sites-enabled&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then Restart the nginx&lt;br&gt;
&lt;code&gt;sudo systemctl restart nginx&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--p2RZVExM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/f361aa80-99f9-4c12-967e-2109d97068e3" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--p2RZVExM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/f361aa80-99f9-4c12-967e-2109d97068e3" alt="Snipaste_2024-07-29_20-46-27" width="800" height="258"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy your Public URL and paste into your browser&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>vscode</category>
      <category>git</category>
    </item>
    <item>
      <title>Contributing to Open-Source Projects on GitHub: A Step-by-Step Guide to Successfully Adding to Existing Code</title>
      <dc:creator>Oluwatobi</dc:creator>
      <pubDate>Fri, 26 Jul 2024 15:14:33 +0000</pubDate>
      <link>https://dev.to/ooluwatobi_o/contributing-to-open-source-projects-on-github-a-step-by-step-guide-to-successfully-adding-to-existing-code-36ch</link>
      <guid>https://dev.to/ooluwatobi_o/contributing-to-open-source-projects-on-github-a-step-by-step-guide-to-successfully-adding-to-existing-code-36ch</guid>
      <description>&lt;p&gt;Are you interested in contributing to open-source projects on GitHub but unsure where to start? This guide will walk you through successfully adding to existing code on GitHub using Git. Learn how to navigate the GitHub interface, fork and clone repositories, change existing code, and submit pull requests. Whether you're a seasoned developer or a beginner, this guide will give you the skills and confidence to contribute to open-source projects and collaborate with other developers on GitHub.&lt;/p&gt;

&lt;p&gt;Tips:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fork the repository to create a personal copy&lt;/li&gt;
&lt;li&gt;Clone the forked repository using SSH (or HTTPS/GITCLI)&lt;/li&gt;
&lt;li&gt;Ensure to configure SSH on your GitHub &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step 1:&lt;br&gt;
Copy ssh URL&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DqWrjCmR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/86d2f926-8acb-40a6-a4d9-82296e1d690f" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DqWrjCmR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/86d2f926-8acb-40a6-a4d9-82296e1d690f" alt="image" width="675" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 2:&lt;br&gt;
Clone (download) on your local repository (gitbash)&lt;br&gt;
using&lt;br&gt;
 &lt;code&gt;git clone "paste the ssh URL copied from github"&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;Step 3:&lt;br&gt;
Ensure it's downloaded by running a command&lt;/p&gt;

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

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

&lt;p&gt;Step 4:&lt;br&gt;
The &lt;code&gt;cd&lt;/code&gt; into the directory&lt;/p&gt;

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

&lt;p&gt;Step 5: Create a branch &lt;br&gt;
&lt;code&gt;git checkout -b feature/update-events&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;Step 6: &lt;br&gt;
&lt;code&gt;ls&lt;/code&gt; to see the list of files and what you're editing &lt;/p&gt;

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

&lt;p&gt;Step 7:&lt;br&gt;
Edit the file using Vim &lt;/p&gt;

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

&lt;p&gt;Step 8: &lt;br&gt;
Insert your edit by pressing I, after save and exit using escape, then :wq! and enter &lt;/p&gt;

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

&lt;p&gt;Step 9:&lt;br&gt;
Check the status of your edit by using &lt;br&gt;
&lt;code&gt;git status&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;Step 10:&lt;br&gt;
Add the file by using &lt;br&gt;
&lt;code&gt;git add "name of the file"&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;Then, confirm it added but using &lt;code&gt;git status&lt;/code&gt; again&lt;/p&gt;

&lt;p&gt;Step 11: Commit changes and also add a message&lt;br&gt;
&lt;code&gt;git commit -m "whatever changes you made"&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;Step 12: Push your update &lt;br&gt;
&lt;code&gt;git push&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;you might have an error, but don't panic just copy the name suggested and run the command again.&lt;/p&gt;

&lt;p&gt;You've successfully made a pull request&lt;/p&gt;

&lt;p&gt;Step 13: &lt;br&gt;
Go back to your GitHub to compare &amp;amp; pull request&lt;/p&gt;

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

&lt;p&gt;Remember, contributing to open-source projects is a great way to collaborate with other developers, learn new skills, and build your portfolio. Don't be afraid to explore and contribute to different projects on GitHub.&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>vscode</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How to install AWS CLI on Windows</title>
      <dc:creator>Oluwatobi</dc:creator>
      <pubDate>Fri, 23 Feb 2024 16:52:58 +0000</pubDate>
      <link>https://dev.to/ooluwatobi_o/how-to-install-aws-cli-on-windows-33j</link>
      <guid>https://dev.to/ooluwatobi_o/how-to-install-aws-cli-on-windows-33j</guid>
      <description>&lt;p&gt;The AWS CLI, or Command Line Interface, is a powerful tool for interacting with AWS services directly from your Windows machine. This guide will walk you through two primary methods for installing the latest AWS CLI version 2 on your Windows system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Method 1: Using the Installer
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Download the Installer:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Head to the official AWS CLI website:
&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Click on Windows Option&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click the Download link and save the installer file.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Run the Installer:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Locate the downloaded installer file.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Double-click the file to launch the installation process.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Follow the on-screen instructions, accepting the terms and conditions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Choose the installation location (default is recommended).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the components you want to install (default is recommended).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Complete the installation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Verify Installation:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open a Command Prompt window.&lt;/p&gt;

&lt;p&gt;Type &lt;code&gt;aws --version&lt;/code&gt;and press Enter.&lt;br&gt;
If the installation was successful, you should see the installed AWS CLI version and other details.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Method 2: Using Pip (Python Package Manager)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Install Python (if not already installed):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Download and install Python from &lt;a href="https://www.python.org/" rel="noopener noreferrer"&gt;https://www.python.org/&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Ensure you add Python to your PATH environment variable during installation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Install the AWS CLI with Pip:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open a Command Prompt window.&lt;/li&gt;
&lt;li&gt;Type pip install &lt;code&gt;awscli --upgrade --user&lt;/code&gt; and press Enter.&lt;/li&gt;
&lt;li&gt;This will download and install the latest AWS CLI version using Pip.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Verify Installation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open a Command Prompt window.&lt;/li&gt;
&lt;li&gt;Type aws --version and press Enter.&lt;/li&gt;
&lt;li&gt;If the installation was successful, you should see the installed AWS CLI version and other details.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Whether you're a seasoned developer or just starting with AWS, the AWS CLI offers a powerful and efficient way to manage your resources. By following these steps and exploring the official documentation, you can unlock the full potential of this versatile tool and streamline your interactions with the AWS cloud platform.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Understanding Network services: FTP, SFTP, TFTP, NTP, DNS DHCP</title>
      <dc:creator>Oluwatobi</dc:creator>
      <pubDate>Mon, 06 Nov 2023 18:11:48 +0000</pubDate>
      <link>https://dev.to/ooluwatobi_o/understanding-network-services-ftp-sftp-tftp-ntp-dns-dhcp-5g14</link>
      <guid>https://dev.to/ooluwatobi_o/understanding-network-services-ftp-sftp-tftp-ntp-dns-dhcp-5g14</guid>
      <description>&lt;p&gt;As a Cloud, DevOps Engineer, it is necessary to have a deep understanding of various network services that play a vital role in the infrastructure of cloud-based applications. This write-up will delve into some key network services: FTP, SFTP, TFTP, NTP, DNS, and DHCP. We will explore their functions and their significance in cloud environments.&lt;/p&gt;

&lt;h2&gt;
  
  
  FTP (File Transfer Protocol)
&lt;/h2&gt;

&lt;p&gt;Is a standard network protocol used to transfer files between a client and a server.&lt;br&gt;
Users can upload or access files, organize their directories, and carry out basic file functions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Significance in Cloud DevOps:&lt;/strong&gt;&lt;br&gt;
It is essential for migrating data to and from cloud storage&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--b5kFuTPu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xiwmq1j30mg3ryq0rga4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--b5kFuTPu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xiwmq1j30mg3ryq0rga4.png" alt="ftp" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  SFTP (Secure File Transfer Protocol)
&lt;/h2&gt;

&lt;p&gt;Is a secure extension of FTP that uses an encrypted SSH connection for data transfer. It provides a more secure and reliable way to transfer files over a network&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Significance in Cloud DevOps:&lt;/strong&gt;&lt;br&gt;
It is used for secure access to cloud-based storage and servers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zJ-QtSZ6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hpc4bf7b4bcv1xvxl5do.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zJ-QtSZ6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hpc4bf7b4bcv1xvxl5do.png" alt="SFTp" width="660" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  TFTP (Trivial File Transfer Protocol)
&lt;/h2&gt;

&lt;p&gt;TFTP is a simplified version of FTP, primarily used for quickly transferring small files without the authentication and security features found in FTP or SFTP.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Significance in Cloud DevOps:&lt;/strong&gt;&lt;br&gt;
It supports the automation of cloud infrastructure deployment and configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  NTP (Network Time Protocol)
&lt;/h2&gt;

&lt;p&gt;NTP is a protocol used to synchronize the time of networked devices in a distributed and accurate manner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Significance in Cloud DevOps:&lt;/strong&gt;&lt;br&gt;
NTP ensures that logs, metrics, and events generated by cloud resources are accurately timestamped, facilitating troubleshooting and incident response.&lt;/p&gt;

&lt;h2&gt;
  
  
  DNS (Domain Name System)
&lt;/h2&gt;

&lt;p&gt;DNS is used to translate human-readable domain names into IP addresses, making it possible for users to access websites and services by name.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;DNS enables users to access websites and services using domain names like "&lt;a href="http://www.google.com"&gt;www.google.com&lt;/a&gt;" instead of IP addresses “192.22.3…”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Significance in Cloud DevOps:&lt;/strong&gt;&lt;br&gt;
It is used for configuring custom domains for cloud services and applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  DHCP (Dynamic Host Configuration Protocol)
&lt;/h2&gt;

&lt;p&gt;DHCP is a network protocol that automates the assignment of IP addresses and other network configuration settings to devices on a network.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Significance in Cloud DevOps:&lt;/strong&gt;&lt;br&gt;
It supports the rapid scaling and deployment of cloud resources by automating IP address allocation.&lt;/p&gt;

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

&lt;p&gt;Therefore, as a Cloud DevOps Engineer, one should have in-depth knowledge of such network services as FTP, SFTP, TFTP, NTP, DNS, and DHCP so as to guarantee the dependability, safety, and efficiency of cloud-based applications. Cloud service involves transfers, time synchronization, name resolution, and net configurations; all integral aspects of any modern cloud architecture. You should include those services in your DevOps practices to make your deployment process easier and operate your cloud resources smoothly.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Logging into Your AWS Console as an IAM User: Importance and Best Practices</title>
      <dc:creator>Oluwatobi</dc:creator>
      <pubDate>Sat, 04 Nov 2023 15:55:55 +0000</pubDate>
      <link>https://dev.to/ooluwatobi_o/logging-into-your-aws-console-as-an-iam-user-importance-and-best-practices-4fd3</link>
      <guid>https://dev.to/ooluwatobi_o/logging-into-your-aws-console-as-an-iam-user-importance-and-best-practices-4fd3</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Amazon Web Services (AWS) provides a range of cloud services that enable organizations to create deploy and oversee applications and infrastructure, with flexibility and scalability. To ensure security and ease of management AWS utilizes Identity and Access Management (IAM) to regulate user access to AWS resources. IAM allows organizations to assign permissions to users, groups, and roles guaranteeing that individuals and systems have the level of access they require while upholding security.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Logging into your AWS Console as an IAM user is an aspect of overseeing your AWS environment. There are thousands of Videos and write-ups on how to create an IAM user on AWS, This informative article delves into the process of logging in as an IAM user elaborates on its significance, and presents practices, for user management.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Importance of Logging in, as an IAM User
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Security&lt;/strong&gt;&lt;br&gt;
Logging in, as an IAM user is highly important to uphold the security of your AWS environment. By granting users the permissions you minimize the potential harm that could occur if an account is compromised. IAM ensures that the principle of privilege is followed, guaranteeing that users can only access what they truly need for their designated tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Dividing Responsibilities&lt;/strong&gt;&lt;br&gt;
IAM users enable you to distribute responsibilities within your organization. Various users can be given permissions to oversee groups of AWS resources thereby minimizing the possibility of purposeful misuse.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Handling Growth&lt;/strong&gt;&lt;br&gt;
As your organization expands it becomes crucial to have the capability of setting up and overseeing IAM users. This allows you to easily accommodate staff members, third-party contractors, and automated systems while maintaining a grip, on resource access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.  Accountability&lt;/strong&gt;&lt;br&gt;
IAM user logins contribute to accountability and auditing. Each login event is recorded, including the user's actions within the AWS environment. This audit trail is invaluable for compliance, troubleshooting, and security investigations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Practices for Secure IAM User Management
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use Strong Passwords:&lt;/strong&gt; Make use of strong and unique passwords.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iZSwDTQD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/86n5m2ly97e8duk8d76w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iZSwDTQD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/86n5m2ly97e8duk8d76w.png" alt="password bar" width="800" height="169"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Implement MFA:&lt;/strong&gt; Authorise the use of Multi-Factor Authentication for all IAM users. This provides an additional layer of security against unauthorized access.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pNm2fRT0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dm388l8ahqc18hrs29it.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pNm2fRT0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dm388l8ahqc18hrs29it.png" alt="choose any device to get your verification" width="800" height="736"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Permission-based Principle:&lt;/strong&gt; Assign IAM permissions based on the principle of least privilege. Only grant users the permissions they need to perform their tasks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Fq_G4Vta--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/95vrlc9aazfqi0j1op5m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Fq_G4Vta--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/95vrlc9aazfqi0j1op5m.png" alt="give permission" width="800" height="313"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Use Groups:&lt;/strong&gt; Organize IAM users into groups with similar responsibilities and permissions. This simplifies user management and ensures consistency.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cD6ax7mo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mj6nizysgspwn5pj0nag.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cD6ax7mo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mj6nizysgspwn5pj0nag.png" alt="assign groups" width="395" height="209"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Regularly Monitor:&lt;/strong&gt; Continuously monitor user activity and regularly review access logs to detect and respond to suspicious or unauthorized behavior.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implement IAM Policies and Roles:&lt;/strong&gt; Create IAM policies and roles to define fine-grained permissions for users. Roles are especially useful for granting temporary permissions to resources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stay Informed:&lt;/strong&gt; Keep abreast of AWS best practices, security updates, and new IAM features to continually improve security.&lt;/p&gt;

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

&lt;p&gt;Logging into the AWS Console as an IAM user is not just a matter of convenience; it's a critical aspect of managing your AWS environment securely. By following best practices for IAM user management and consistently adhering to security guidelines, organizations can harness AWS's powerful cloud resources while minimizing risks and ensuring a robust security posture.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>cloudpractitioner</category>
      <category>devops</category>
    </item>
    <item>
      <title>Why Is Bash scripting an important tool to learn as a Cloud DevOps engineer?</title>
      <dc:creator>Oluwatobi</dc:creator>
      <pubDate>Mon, 02 Oct 2023 00:46:05 +0000</pubDate>
      <link>https://dev.to/ooluwatobi_o/why-is-bash-scripting-an-important-tool-to-learn-as-a-cloud-devops-engineer-2gbf</link>
      <guid>https://dev.to/ooluwatobi_o/why-is-bash-scripting-an-important-tool-to-learn-as-a-cloud-devops-engineer-2gbf</guid>
      <description>&lt;p&gt;Bash is widely regarded as a universal scripting language &lt;br&gt;
In the world of cloud computing. All cloud platforms support using Bash commands to pass data and information. Bash scripting is mainly used for Automating tasks in DevOps workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let’s establish what Shell scripting and Bash scripting are:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Shell scripting&lt;/strong&gt; is the practice of writing scripts or programs using a shell's scripting language.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bash scripting&lt;/strong&gt;, short for “Bourne Again SHell” is a subset of shell scripting language. &lt;/p&gt;

&lt;h2&gt;
  
  
  Importance of Bash scripting
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automation:&lt;/strong&gt; It allows you to create scripts that can execute a series of commands automatically. This is indispensable for tasks that need to be repeated regularly, such as backups, log file parsing, and system maintenance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Efficiency:&lt;/strong&gt; They can perform complex tasks quickly and consistently, reducing the potential for human error.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remote Administration:&lt;/strong&gt; Bash scripts can be used for remote administration of systems. With tools like SSH, you can run Bash scripts on remote servers, making it easier to manage and maintain multiple systems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logging and Reporting:&lt;/strong&gt; Bash scripts can generate logs and reports, which are essential for monitoring system health, tracking changes, and troubleshooting issues.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Having established some relevant importance of bash scripting, &lt;/p&gt;

&lt;h2&gt;
  
  
  How do we identify a Bash script?
&lt;/h2&gt;

&lt;p&gt;Every bash script starts with a shebang/hashbang &lt;code&gt;#!&lt;/code&gt; at the very beginning of a script file to indicate the path to the interpreter that should be used to execute the script.&lt;br&gt;
&lt;code&gt;#! /bin/bash/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;#!&lt;/code&gt; tells the system to use the Bash shell interpreter to run the script. The shebang line is crucial because it ensures that the script is executed with the correct interpreter, regardless of where the script is located. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: Different interpreters, such as Python, Perl, or Ruby, may have their own shebang lines.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;By understanding the importance of Bash scripting and recognizing its distinctive shebang notation, you can harness this tool effectively to manage and maintain cloud-based systems with precision and reliability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next write-up, I’ll be discussing the Bash scripting Fundamental concepts and skills to focus on.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>bash</category>
      <category>shellscript</category>
      <category>devops</category>
      <category>cloud</category>
    </item>
    <item>
      <title>How can I learn Linux without using any Cloud platforms?</title>
      <dc:creator>Oluwatobi</dc:creator>
      <pubDate>Tue, 12 Sep 2023 17:09:12 +0000</pubDate>
      <link>https://dev.to/ooluwatobi_o/how-can-i-learn-linux-without-using-any-cloud-platforms-5911</link>
      <guid>https://dev.to/ooluwatobi_o/how-can-i-learn-linux-without-using-any-cloud-platforms-5911</guid>
      <description>&lt;p&gt;Having established that learning Linux is an important prerequisite for working on cloud platforms, it's worth noting that Linux cloud-based environments offer services involving a subscription fee. However, using Linux on a &lt;strong&gt;Windows machine&lt;/strong&gt; is an alternative way of effectively learning Linux at no cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are Windows machines?
&lt;/h2&gt;

&lt;p&gt;Window machines are desktops and laptop that run the Windows Operating system (OS). &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rL-s3LUu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d94rxl401umb2pmnkoy5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rL-s3LUu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d94rxl401umb2pmnkoy5.jpg" alt="linux on windows" width="770" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How can Linux OS work on windows machines?
&lt;/h2&gt;

&lt;p&gt;This is possible through a concept/technology called &lt;strong&gt;Virtualization&lt;/strong&gt;. Virtualization is like running multiple separate computers (virtual machines) on a single physical computer. Each virtual machine behaves like an independent computer with its own operating system and applications, even though they all share the underlying hardware resources of the physical computer. The virtualization process is made possible by a &lt;strong&gt;hypervisor&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Hypervisors are divided into two types, namely; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type 1 hypervisor (bare metal)&lt;/li&gt;
&lt;li&gt;Type 2 hypervisor (hosted)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With Type 2 hypervisors being our main focus, let’s briefly discuss the two types of hypervisors. &lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Type 1 hypervisor&lt;/strong&gt; runs directly on the physical computer, It's like having a boss who manages employees {virtual machines} without any middle managers {OS} in between.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VS8NzS-e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pfsse3td94nm0yj4gh3q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VS8NzS-e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pfsse3td94nm0yj4gh3q.png" alt="type 1 hypervisor" width="800" height="521"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;On the other hand, a &lt;strong&gt;Type 2 hypervisor&lt;/strong&gt;, Is a software you install into your usual Windows OS, and it helps you create and run virtual machines.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ae4m_adJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7sgpnkcoact3nmcnya38.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ae4m_adJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7sgpnkcoact3nmcnya38.png" alt="type 2 hypervisor" width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Examples of Type 2 hypervisors include;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Oracle Virtual box:&lt;/strong&gt; It is the most used and popular open-source Type 2 Hypervisor that works on various operating systems, including Mac.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VMware Workstation:&lt;/strong&gt; VMware is known for its performance and feature set.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parallel Desktops:&lt;/strong&gt; It is specifically designed for Mac computers and allows you to run Windows and other operating systems alongside macOS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Microsoft Virtual PC:&lt;/strong&gt; This is a Type 2 hypervisor provided by Microsoft, primarily for Windows-based systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I strongly recommend using Oracle Virtual Box as your hypervisor. &lt;/p&gt;

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

&lt;p&gt;In conclusion, learning Linux without relying on cloud platforms is entirely possible, and using Linux on a Windows machine is an efficient way to learn Linux.&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>devops</category>
      <category>linux</category>
      <category>cloudcomputing</category>
    </item>
  </channel>
</rss>
