<?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: James Kipsoi</title>
    <description>The latest articles on DEV Community by James Kipsoi (@lelkiramkeel).</description>
    <link>https://dev.to/lelkiramkeel</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%2F3917107%2F819354f2-2b51-4053-a648-167bb4c9466d.png</url>
      <title>DEV Community: James Kipsoi</title>
      <link>https://dev.to/lelkiramkeel</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lelkiramkeel"/>
    <language>en</language>
    <item>
      <title>Deploying Your First Server with Terraform: A Beginner's Guide</title>
      <dc:creator>James Kipsoi</dc:creator>
      <pubDate>Tue, 12 May 2026 04:34:55 +0000</pubDate>
      <link>https://dev.to/lelkiramkeel/deploying-your-first-server-with-terraform-a-beginners-guide-22lp</link>
      <guid>https://dev.to/lelkiramkeel/deploying-your-first-server-with-terraform-a-beginners-guide-22lp</guid>
      <description>&lt;h1&gt;
  
  
  Deploying Your First Server with Terraform: A Beginner's Guide
&lt;/h1&gt;

&lt;p&gt;Hi there,&lt;/p&gt;

&lt;p&gt;There is nothing quite as satisfying as deploying your first server… and somehow it feels even better when using Terraform as your Infrastructure as Code platform.&lt;/p&gt;

&lt;p&gt;There is this strange surge of dopamine that hits you the moment you press &lt;code&gt;Enter&lt;/code&gt; and watch your creation come to life.&lt;/p&gt;

&lt;p&gt;Especially when exploring a completely new concept.&lt;/p&gt;

&lt;p&gt;For me, one of those moments was experimenting with AWS S3 Presigned URLs while running everything from an EC2 instance.&lt;/p&gt;

&lt;p&gt;And honestly? Seeing it work felt slightly illegal.&lt;/p&gt;




&lt;h1&gt;
  
  
  AWS S3 Presigned URL Demo
&lt;/h1&gt;

&lt;p&gt;This project demonstrates how to securely generate &lt;strong&gt;Presigned URLs&lt;/strong&gt; for Amazon S3 uploads using an EC2 instance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Concepts Learned
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Security
&lt;/h3&gt;

&lt;p&gt;Instead of hardcoding AWS Access Keys like a future security incident waiting to happen, the project uses AWS IAM Roles (Instance Profiles).&lt;/p&gt;

&lt;h3&gt;
  
  
  Regional Compliance
&lt;/h3&gt;

&lt;p&gt;AWS regions can become surprisingly annoying if configured incorrectly.&lt;br&gt;
This project correctly handles regions such as &lt;code&gt;eu-north-1&lt;/code&gt; using &lt;code&gt;boto3&lt;/code&gt; configuration with Signature Version 4 enforcement.&lt;/p&gt;

&lt;h3&gt;
  
  
  Presigned URLs
&lt;/h3&gt;

&lt;p&gt;Presigned URLs allow clients to upload files directly to S3 without needing permanent AWS credentials.&lt;/p&gt;

&lt;p&gt;Which is honestly one of those “wait… this is actually genius” cloud moments.&lt;/p&gt;




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

&lt;p&gt;Before running the project, I needed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An active AWS account&lt;/li&gt;
&lt;li&gt;An S3 bucket&lt;/li&gt;
&lt;li&gt;An EC2 instance running Amazon Linux 2023&lt;/li&gt;
&lt;li&gt;Mild patience and stable internet&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/jameskipngetich/s3-uploader-demo.git
&lt;span class="nb"&gt;cd &lt;/span&gt;s3-uploader-demo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Install Dependencies
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Run the Upload Demo
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Syntax:&lt;/span&gt;
python3 main.py &amp;lt;BUCKET_NAME&amp;gt; &amp;lt;FILE_TO_UPLOAD&amp;gt; &amp;lt;ACTION&amp;gt;

&lt;span class="c"&gt;# Example:&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hello S3"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; test.txt
python3 main.py my-demo-bucket-123 test.txt put
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;p&gt;One thing I am slowly learning is that cloud engineering becomes much less scary once you stop avoiding documentation.&lt;/p&gt;

&lt;p&gt;Most debugging sessions are honestly just:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;misunderstanding regions,&lt;/li&gt;
&lt;li&gt;permissions,&lt;/li&gt;
&lt;li&gt;or forgetting one tiny configuration somewhere.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reading the docs makes debugging almost obsolete.&lt;/p&gt;

&lt;p&gt;Almost.&lt;/p&gt;

&lt;p&gt;Peace.&lt;/p&gt;

&lt;p&gt;— lelkiramkeel&lt;/p&gt;

</description>
      <category>aws</category>
      <category>beginners</category>
      <category>terraform</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Step-by-Step Guide to Setting Up Terraform, AWS CLI, and Your AWS Environment</title>
      <dc:creator>James Kipsoi</dc:creator>
      <pubDate>Mon, 11 May 2026 05:29:26 +0000</pubDate>
      <link>https://dev.to/lelkiramkeel/step-by-step-guide-to-setting-up-terraform-aws-cli-and-your-aws-environment-24d0</link>
      <guid>https://dev.to/lelkiramkeel/step-by-step-guide-to-setting-up-terraform-aws-cli-and-your-aws-environment-24d0</guid>
      <description>&lt;p&gt;Hi there,&lt;/p&gt;

&lt;p&gt;Today I am going to take you through the process of setting up Terraform, AWS CLI, and your AWS environment for your DevOps journey.&lt;/p&gt;

&lt;p&gt;But honestly… don’t you think there are already way too many tutorials, blogs, and videos about this? Just search “Terraform setup” and watch your screen become instantly messy with suggestions.&lt;/p&gt;

&lt;p&gt;It is honestly surprising you clicked this one.&lt;br&gt;
A glass of milk for both you and me &lt;/p&gt;

&lt;p&gt;Now, I will not pretend that this guide is magically different from the others. I am just a student DevOps engineer trying to complete a challenge assignment, so forgive me if I sound slightly dramatic along the way.&lt;/p&gt;

&lt;p&gt;Still, this is the exact process I followed.&lt;/p&gt;

&lt;p&gt;Step 1 — Create an AWS Account&lt;/p&gt;

&lt;p&gt;I started by creating an AWS Free Tier account.&lt;/p&gt;

&lt;p&gt;A few important things I quickly learned:&lt;/p&gt;

&lt;p&gt;Always enable billing alerts or budgets early.&lt;br&gt;
Never casually leave EC2 instances running.&lt;br&gt;
Avoid using the root account for daily activities.&lt;/p&gt;

&lt;p&gt;AWS gives enough free resources to learn comfortably, but cloud bills can become dangerous surprisingly fast.&lt;/p&gt;

&lt;p&gt;I also decided to use a separate IAM user instead of the root account for better security practices.&lt;/p&gt;

&lt;p&gt;Step 2 — Install Terraform&lt;/p&gt;

&lt;p&gt;For Terraform, I followed the official HashiCorp installation guide:&lt;/p&gt;

&lt;p&gt;Terraform Install Guide&lt;/p&gt;

&lt;p&gt;Since I use Ubuntu/Linux, I used the Linux installation method.&lt;/p&gt;

&lt;p&gt;After installation, I verified Terraform using:&lt;/p&gt;

&lt;p&gt;terraform version&lt;/p&gt;

&lt;p&gt;Output:&lt;/p&gt;

&lt;p&gt;Terraform v1.14.5&lt;br&gt;
on linux_amd64&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;provider registry.terraform.io/hashicorp/aws v6.44.0&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Terraform also informed me that a newer version was available, but the installed version worked perfectly fine for the labs.&lt;/p&gt;

&lt;p&gt;Step 3 — Install AWS CLI&lt;/p&gt;

&lt;p&gt;Next, I installed AWS CLI using the official AWS documentation:&lt;/p&gt;

&lt;p&gt;AWS CLI Quickstart Guide&lt;/p&gt;

&lt;p&gt;After installation, I configured my credentials using:&lt;/p&gt;

&lt;p&gt;aws configure&lt;/p&gt;

&lt;p&gt;I entered:&lt;/p&gt;

&lt;p&gt;Access Key&lt;br&gt;
Secret Access Key&lt;br&gt;
Default region&lt;br&gt;
Output format&lt;/p&gt;

&lt;p&gt;For my region, I chose one close to me and commonly used for learning labs.&lt;/p&gt;

&lt;p&gt;To confirm everything was working correctly, I ran:&lt;/p&gt;

&lt;p&gt;aws sts get-caller-identity&lt;/p&gt;

&lt;p&gt;Output:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
    "UserId": "AIDAZ24IS2U2RF5HSEXOK",&lt;br&gt;
    "Account": "676206925109",&lt;br&gt;
    "Arn": "arn:aws:iam::676206925109:user/demo-user"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;This confirmed that my AWS CLI authentication was properly configured.&lt;/p&gt;

&lt;p&gt;Common Errors and Quick Fixes&lt;/p&gt;

&lt;p&gt;Even though setup is usually straightforward, people still find creative ways to break things. Here are some common problems and fixes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Terraform Command Not Found&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Problem:&lt;/p&gt;

&lt;p&gt;terraform: command not found&lt;/p&gt;

&lt;p&gt;Fix:&lt;br&gt;
Terraform is either not installed correctly or not added to your PATH.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AWS Credentials Not Working&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Problem:&lt;/p&gt;

&lt;p&gt;Unable to locate credentials&lt;/p&gt;

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

&lt;p&gt;aws configure&lt;/p&gt;

&lt;p&gt;and enter valid credentials.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Access Denied Errors&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Problem:&lt;br&gt;
IAM user lacks permissions.&lt;/p&gt;

&lt;p&gt;Fix:&lt;br&gt;
Attach the required IAM policies or use a user with proper permissions.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Unexpected AWS Charges&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Problem:&lt;br&gt;
Leaving resources running accidentally.&lt;/p&gt;

&lt;p&gt;Fix:&lt;br&gt;
Always destroy unused infrastructure and set AWS Budgets alerts.&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;/p&gt;

&lt;p&gt;The setup process was actually smoother than I expected.&lt;/p&gt;

&lt;p&gt;The most interesting part was seeing how Terraform and AWS CLI work together to automate infrastructure management. Once the environment was ready, I could already see how much faster Infrastructure as Code is compared to manually configuring cloud resources through the AWS console.&lt;/p&gt;

&lt;p&gt;Read the docs before starting a 4-hour debugging side quest&lt;br&gt;
Peace.&lt;br&gt;
-lelkiramkeel&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>terraform</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>What is Infrastructure as Code and why it is transforming DevOps</title>
      <dc:creator>James Kipsoi</dc:creator>
      <pubDate>Fri, 08 May 2026 03:29:43 +0000</pubDate>
      <link>https://dev.to/lelkiramkeel/what-is-infrastructure-as-code-and-why-it-is-transforming-devops-1a3j</link>
      <guid>https://dev.to/lelkiramkeel/what-is-infrastructure-as-code-and-why-it-is-transforming-devops-1a3j</guid>
      <description>&lt;p&gt;In today’s tech world, success is measured by flexibility, speed, and the ability to accomplish important tasks efficiently within a short time.&lt;br&gt;
That is where automation comes in.&lt;/p&gt;

&lt;p&gt;Infrastructure as Code (IaC) is the epitome of automation in infrastructure management. Instead of performing repetitive and cumbersome tasks manually through a GUI, IaC allows you to define infrastructure using configuration files. These configurations can then be deployed within seconds using simple commands such as terraform apply.&lt;/p&gt;

&lt;p&gt;Declarative vs Imperative Approaches&lt;/p&gt;

&lt;p&gt;There are two main approaches to Infrastructure as Code:&lt;/p&gt;

&lt;p&gt;Declarative Approach&lt;/p&gt;

&lt;p&gt;With the declarative approach, you define the desired end state and let the tool determine how to achieve it.&lt;/p&gt;

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

&lt;p&gt;“I want 10 servers running.”&lt;/p&gt;

&lt;p&gt;Tools like Terraform handle the process of creating and managing the infrastructure needed to match that desired state.&lt;/p&gt;

&lt;p&gt;Imperative Approach&lt;/p&gt;

&lt;p&gt;With the imperative approach, you define the exact steps required to reach the desired state.&lt;/p&gt;

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

&lt;p&gt;“Create server 1, create server 2… create server 10.”&lt;/p&gt;

&lt;p&gt;The challenge with this approach is that rerunning scripts can sometimes create duplicate infrastructure if state is not properly managed.&lt;/p&gt;

&lt;p&gt;Why Terraform?&lt;/p&gt;

&lt;p&gt;Terraform is one of the industry leaders in Infrastructure as Code. It allows you to manage infrastructure across both private and public cloud platforms.&lt;/p&gt;

&lt;p&gt;Some reasons why Terraform is worth learning:&lt;/p&gt;

&lt;p&gt;It uses a human-readable language for writing infrastructure configurations.&lt;br&gt;
Terraform state helps track and manage deployed infrastructure.&lt;br&gt;
It supports version control, making collaboration in infrastructure management easier.&lt;br&gt;
It works across multiple cloud providers, making skills transferable.&lt;br&gt;
My Terraform 30-Day Challenge&lt;/p&gt;

&lt;p&gt;I am embarking on this 30-day journey to better understand Infrastructure as Code and Terraform in particular. My goal is to gain more hands-on experience in infrastructure management, automation, and modern DevOps practices.&lt;/p&gt;

&lt;p&gt;Looking forward to learning, building, and sharing the journey.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>devops</category>
      <category>infrastructure</category>
      <category>terraform</category>
    </item>
  </channel>
</rss>
