<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Elmaur Dehni Namata</title>
    <description>The latest articles on Forem by Elmaur Dehni Namata (@elmaur1).</description>
    <link>https://forem.com/elmaur1</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%2F3538092%2F119b689a-4a11-4c54-a7e9-b3ebbf7fabf7.jpeg</url>
      <title>Forem: Elmaur Dehni Namata</title>
      <link>https://forem.com/elmaur1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/elmaur1"/>
    <language>en</language>
    <item>
      <title>From missed flight to mission: building a 24-hour reminder service on AWS</title>
      <dc:creator>Elmaur Dehni Namata</dc:creator>
      <pubDate>Sat, 29 Nov 2025 21:19:04 +0000</pubDate>
      <link>https://forem.com/elmaur1/from-missed-flight-to-mission-building-a-24-hour-reminder-service-on-aws-146g</link>
      <guid>https://forem.com/elmaur1/from-missed-flight-to-mission-building-a-24-hour-reminder-service-on-aws-146g</guid>
      <description>&lt;p&gt;A few months ago, my mom missed her flight. She’d been swamped all week, errands, and work. She thought the flight was later, got to the airport, it was too late her flight had gone. When she told me, I felt that gut drop of &lt;em&gt;“we could’ve avoided this.”&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;This wasn’t just about building a reminder service. It was about my journey into DevOps learning AWS resources one by one, connecting them, and seeing how cloud skills can solve everyday problems.&lt;/p&gt;

&lt;p&gt;From a missed flight to a working solution, this project shows that even small ideas can become powerful learning experiences.&lt;br&gt;
That one moment turned into this project.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data:&lt;/strong&gt; Appointments saved in DynamoDB (name, date, time).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compute:&lt;/strong&gt; AWS Lambda scans appointments and decides who needs reminders.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notify:&lt;/strong&gt; Amazon SNS sends email/SMS notifications. &lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Create the DynamoDB Table
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Table name:&lt;/strong&gt; &lt;code&gt;Appointment&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%2Ftkutd7m850e4lsd0z8ag.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Ftkutd7m850e4lsd0z8ag.png" alt=" " width="800" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Primary key:&lt;/strong&gt; Partition key = &lt;code&gt;Name&lt;/code&gt; (String)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Attributes:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Name&lt;/code&gt;: e.g., “Dentist Visit”
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Date&lt;/code&gt;: ISO string, e.g., “2025-12-29” &lt;/li&gt;
&lt;/ul&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%2Fifnwwg6y1a1kc3l9mzq4.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Fifnwwg6y1a1kc3l9mzq4.png" alt=" " width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Create the SNS Topic and Subscribe
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Topic name:&lt;/strong&gt; &lt;code&gt;AppointmentReminders&lt;/code&gt; (Standard) &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%2F58ldbzzi4gl6y761hyp7.png" class="article-body-image-wrapper"&gt;&lt;img 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%2F58ldbzzi4gl6y761hyp7.png" alt=" " width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy the &lt;strong&gt;Topic ARN&lt;/strong&gt; — you’ll need this for Lambda.
&lt;/li&gt;
&lt;li&gt;Add a subscription:

&lt;ul&gt;
&lt;li&gt;Protocol: Email (or SMS)
&lt;/li&gt;
&lt;li&gt;Endpoint: Your email address
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Confirm the subscription via the AWS email link.
&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Create the Lambda Function (Node.js)
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;Runtime:** Node.js 18.x
&lt;/li&gt;
&lt;li&gt;Handler:** &lt;code&gt;index.handler&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;File name:** `index.js&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%2F0kpecryj3gayjqvksmus.png" class="article-body-image-wrapper"&gt;&lt;img 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%2F0kpecryj3gayjqvksmus.png" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Give Lambda the Right IAM Permissions
&lt;/h2&gt;

&lt;p&gt;Attach a minimal inline policy to your Lambda’s execution role:&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%2Fdalc45h1dbzpzb9f77f6.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Fdalc45h1dbzpzb9f77f6.png" alt=" " width="773" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;** choosing the specific action that the resources in DynamoDB will need.&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%2Fyhwh7v186b9dndoyefh3.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Fyhwh7v186b9dndoyefh3.png" alt=" " width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;** And for SNS&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%2F148fv4e4vtqqrl7vaptj.png" class="article-body-image-wrapper"&gt;&lt;img 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%2F148fv4e4vtqqrl7vaptj.png" alt=" " width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;** After that is done give a to the policy.&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%2Fyhw4e91ekqlvoanrxcei.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Fyhw4e91ekqlvoanrxcei.png" alt=" " width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;** Review and click create.&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%2Fcz8ubvjiuzpvu06dtp0i.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Fcz8ubvjiuzpvu06dtp0i.png" alt=" " width="800" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Add a test item in DynamoDB:
&lt;/h2&gt;

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

&lt;h2&gt;
  
  
  Run Lambda → Test event
&lt;/h2&gt;

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

&lt;h2&gt;
  
  
  &lt;strong&gt;Result&lt;/strong&gt; I tested with a dentist appointment and received an email reminder no more last-minute panics.   .
&lt;/h2&gt;

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

&lt;h2&gt;
  
  
  🚀 what I learned
&lt;/h2&gt;

&lt;p&gt;what this project solve Forgetting is easy; systems aren’t.&lt;br&gt;
24-hour timing gives you enough time to prepare.&lt;br&gt;
The missed flight hurt, but it sparked something useful: a small, dependable system that gives you a 24-hour heads up for what matters. You don’t need a huge platform just a table, a function, a topic, and a schedule.&lt;/p&gt;

&lt;p&gt;** Cloud skills solving everyday problems.**&lt;br&gt;
This is my Devops/cloud engineering journey.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>serverless</category>
      <category>learningjourney</category>
    </item>
    <item>
      <title>Launching EC2 with Git Bash: Why SSH Is Preferable to PuTTY.</title>
      <dc:creator>Elmaur Dehni Namata</dc:creator>
      <pubDate>Sun, 23 Nov 2025 17:50:44 +0000</pubDate>
      <link>https://forem.com/elmaur1/launching-ec2-with-git-bash-why-ssh-is-preferable-to-putty-21aa</link>
      <guid>https://forem.com/elmaur1/launching-ec2-with-git-bash-why-ssh-is-preferable-to-putty-21aa</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;SSH let me copy my .pem key and connect instantly, while PuTTY forced me to convert to .ppk every time SSH saved time, reduced friction, and scaled securely.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This project matters because it teaches secure, real‑world cloud skills: launching EC2, using SSH with .pem keys, avoiding PuTTY conversions, and hosting a webpage. It builds automation habits, scales easily, and mirrors workflows businesses rely on daily.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step by Step on how to SSH into Ubuntu EC2 from Gitbash&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Launch an EC2 Instance&lt;/li&gt;
&lt;li&gt;Log in to the AWS Management Console.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Search for EC2 and open the EC2 dashboard.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Click Launch Instance&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fill in the details:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Name: e.g., elmaurserver.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AMI (Amazon Machine Image): Choose Ubuntu Server 22.04 LTS (or Amazon Linux if you prefer).&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%2Fyxgnwe6v8aw5lub1lc23.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Fyxgnwe6v8aw5lub1lc23.png" alt=" " width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I choose Ubuntu.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instance type: Start with t2.micro (free tier eligible).&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%2Flxmnbe8qwyzpmkn2kwii.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Flxmnbe8qwyzpmkn2kwii.png" alt=" " width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Key pair: Create a new key pair → name it dehnikeypair → download the .pem file.&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%2Fyhzulkxqqjdvq03gd0h5.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Fyhzulkxqqjdvq03gd0h5.png" alt=" " width="800" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Network settings: Allow SSH (port 22) from your IP. Optionally allow HTTP (port 80) if you plan to run a web server.&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%2Fnei19jepthcmk4xpq294.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Fnei19jepthcmk4xpq294.png" alt=" " width="800" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click Launch Instance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Locate Your Public IP&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the EC2 dashboard, select your instance.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Under Details, copy the Public IPv4 address (example: 18.132.3.224).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Open Git Bash&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix permissions:
&lt;img 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%2F1tchxtcwml4x7mk4ek1j.png" alt=" " width="800" height="461"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Connect via SSH&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For Ubuntu:&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%2Fx33lbbzwvsw2cagkqerp.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Fx33lbbzwvsw2cagkqerp.png" alt=" " width="800" height="563"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Update Your Server&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%2F8lhrnh5cngvsau0wg14r.png" class="article-body-image-wrapper"&gt;&lt;img 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%2F8lhrnh5cngvsau0wg14r.png" alt=" " width="800" height="419"&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%2Fxr6dkj82rpv5zoy4qpqs.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Fxr6dkj82rpv5zoy4qpqs.png" alt=" " width="800" height="601"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common Mistakes I Hit and Fixes&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;No such file or directory on chmod → Use Git Bash path (/c/...), not Windows path (C:...).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tried to run the .pem file → Never execute the key. Only reference it with -i in ssh.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Permission denied (publickey) → Use the right username (ubuntu for Ubuntu AMI).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;IP keeps changing → Use an Elastic Ip.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Why I Preferred SSH Over PuTTY&lt;br&gt;
PuTTY is popular on Windows, but here’s why I preferred SSH in Git Bash:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;No extra conversions — .pem works directly; PuTTY requires .ppk.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fits naturally into my Git workflow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scriptable and automation-friendly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Industry standard across Linux, macOS, and Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Consistent experience across platforms.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Security: Strong key‑based authentication, no passwords.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Automation: SSH integrates with CI/CD pipelines and config management tools.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Collaboration: Developers use SSH keys with GitHub/GitLab for secure code pushes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Resilience: Elastic IPs + SSH allow fast recovery during outages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scalability: Manage fleets of servers with scripts, not GUIs.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ec2</category>
      <category>ssh</category>
      <category>gitbash</category>
      <category>linux</category>
    </item>
    <item>
      <title>I Built my First static website using Amazon S3 and infinityfree.</title>
      <dc:creator>Elmaur Dehni Namata</dc:creator>
      <pubDate>Wed, 29 Oct 2025 23:00:47 +0000</pubDate>
      <link>https://forem.com/elmaur1/i-built-my-first-static-website-using-amazon-s3-and-infinityfree-426n</link>
      <guid>https://forem.com/elmaur1/i-built-my-first-static-website-using-amazon-s3-and-infinityfree-426n</guid>
      <description>&lt;p&gt;Hi Devs. &lt;br&gt;
I built this project because I wanted a simple way to keep all my images and files in one place, without relying on third-party platforms. I also wanted to understand how static websites actually work, how to host them, connect a domain, and make them live. Using Amazon S3 gave me hands-on experience with real tools, and now I can use what I’ve learned for future projects, portfolios, or sharing resources online.&lt;/p&gt;

&lt;p&gt;I recently built my first static website using Amazon S3 and connected it to a free domain from InfinityFree all without spending a penny. If you're looking to host a simple HTML site and make it live globally, this guide is for you.&lt;/p&gt;

&lt;p&gt;I will walk you through on what services I used and how I did it.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Tools and Services Used.&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;-Amazon S3&lt;br&gt;
-Infinityfree&lt;br&gt;
-HTML&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;STEP 1&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Create my own website&lt;/strong&gt;
&lt;/h2&gt;

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

&lt;p&gt;You can edit this on either Notepad or on VS code known as visual studio code and I made some changes. Here you can edit and type whatever you wanted.&lt;/p&gt;

&lt;p&gt;Save it as index.html&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;STEP 2&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Hosting the Website on Amazon S3.
&lt;/h2&gt;

&lt;p&gt;-&lt;strong&gt;Go to AWS Console&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;-Search for S3 and click Create Bucket.&lt;/p&gt;

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

&lt;p&gt;-Name it (e.g., mycoolsite) or any Name of your choice.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Facufsr22u2xw1uun3csj.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Facufsr22u2xw1uun3csj.png" alt=" " width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;-Uncheck Block all public access.&lt;/p&gt;

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

&lt;p&gt;-Upload your index.html file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F231ykfqe5lfwocrpc4l9.png" class="article-body-image-wrapper"&gt;&lt;img 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%2F231ykfqe5lfwocrpc4l9.png" alt=" " width="800" height="252"&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%2F9e3955a458ngl6sogmxq.png" class="article-body-image-wrapper"&gt;&lt;img 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%2F9e3955a458ngl6sogmxq.png" alt=" " width="800" height="262"&gt;&lt;/a&gt;&lt;br&gt;
save as index.html &lt;/p&gt;

&lt;p&gt;-Go to Properties &amp;gt; Static Website Hosting.&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%2Fh8klwhfu1ecy4oyk5d7e.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Fh8klwhfu1ecy4oyk5d7e.png" alt=" " width="800" height="284"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enable it.&lt;br&gt;
Click create.&lt;/p&gt;

&lt;p&gt;What this does it I created an Amazon S3 bucket in AWS management console and upload my website in the bucket I created which is saved as index.html.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;STEP 3&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ** Get a free Domain from infinityfree.
&lt;/h2&gt;

&lt;p&gt;This offer a free domain name.&lt;/p&gt;

&lt;p&gt;-Go to InfinityFree (Any browser of your choice).&lt;/p&gt;

&lt;p&gt;-Sign up and create a free hosting account&lt;/p&gt;

&lt;p&gt;-Choose a free subdomain (e.g., yourname.infinityfreeapp.com)&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%2F0uw2lr8d4oymtmx7jb08.png" class="article-body-image-wrapper"&gt;&lt;img 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%2F0uw2lr8d4oymtmx7jb08.png" alt=" " width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;-Wait for it to become Active (check in your dashboard&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Done! Your Website Is Live.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://elmaurprojectsite.s3.eu-west-2.amazonaws.com/index.html" rel="noopener noreferrer"&gt;https://elmaurprojectsite.s3.eu-west-2.amazonaws.com/index.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A static website hosted on Amazon S3&lt;/p&gt;

&lt;p&gt;A free domain from InfinityFree.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devop</category>
      <category>website</category>
      <category>s3</category>
    </item>
    <item>
      <title>From AWS Cloud Practitioner Essential to Real-world Impact. How my Learning Translate into Business Value.</title>
      <dc:creator>Elmaur Dehni Namata</dc:creator>
      <pubDate>Thu, 02 Oct 2025 19:26:16 +0000</pubDate>
      <link>https://forem.com/elmaur1/from-aws-cloud-practitioner-essential-to-real-world-impact-how-my-learning-translate-into-business-566n</link>
      <guid>https://forem.com/elmaur1/from-aws-cloud-practitioner-essential-to-real-world-impact-how-my-learning-translate-into-business-566n</guid>
      <description>&lt;p&gt;I recently completed the AWS Cloud Practitioner Essential course through AWS Skill Builder, and it has opened my eyes to how cloud technology can truly reshape business strategy. During the learning process, I learned about some mind-blowing tools that in today's economy businesses need to do more with less and that's exactly where cloud makes the difference. &lt;/p&gt;

&lt;p&gt;Cloud Computing isn't just servers somewhere else. It's a strategic tool for reducing cost, increasing agility, and driving innovation. This applied to all business levels.&lt;/p&gt;

&lt;p&gt;Here are some of the key things I learned.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt;  Owning infrastructure to Renting What you Need. instead of CapEx(capital expenses), companies use OpEx(operational expenses) pay only for what you use. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt;  Global infrastructure Built for Resilience. With the use of AWS Regions, Availability Zones and Edge Locations. This designs high Availability by default something that would cost millions to replicate traditionally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt;  AWS Services like EC2(Elastic Compute Cloud), S3(simple storage service), RDS( Relational Database Service), Lambda(serverless compute) and CloudFront(CDN).Just to list some few. This wasn't just naming services it was training me to &lt;strong&gt;think in terms of solution.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; Shared Responsibility Models. Here AWS secure resources &lt;strong&gt;of&lt;/strong&gt; the Cloud this include handling of physical security such as hardware and networking. while the Customer secure resources &lt;strong&gt;in&lt;/strong&gt; the Cloud such as data configurations, encryption and control access policies.&lt;/p&gt;

&lt;p&gt;Looking forward in practising my knowledge in building mini projects with the various services and tools that AWS offers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS isn't about servers it's about possibilities.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>learning</category>
      <category>skillbuider</category>
    </item>
  </channel>
</rss>
