<?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: Brian Mengo</title>
    <description>The latest articles on Forem by Brian Mengo (@brian_mengo).</description>
    <link>https://forem.com/brian_mengo</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%2F3844844%2F4aab0841-36fc-4e8f-90f3-a3ded6483e33.jpg</url>
      <title>Forem: Brian Mengo</title>
      <link>https://forem.com/brian_mengo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/brian_mengo"/>
    <language>en</language>
    <item>
      <title>Creating AWS S3 Bucket using Terraform</title>
      <dc:creator>Brian Mengo</dc:creator>
      <pubDate>Sun, 26 Apr 2026 11:36:04 +0000</pubDate>
      <link>https://forem.com/brian_mengo/creating-aws-s3-bucket-using-terraform-4f6k</link>
      <guid>https://forem.com/brian_mengo/creating-aws-s3-bucket-using-terraform-4f6k</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
The first resource I create and provision using terraform is the AWS S3 bucket. By writing terraform configuration files (&lt;code&gt;.tf files&lt;/code&gt;) to initialise providers and use terraform commands to interact with AWS APIs and provision resources.&lt;/p&gt;

&lt;p&gt;AWS CLI for credentials setup before creating any resource in AWS using &lt;code&gt;aws configure&lt;/code&gt;.&lt;br&gt;
The below image shows the procedure of provisioning a simple S3 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%2F880oxzuj9m4hyhm7mcja.webp" 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%2F880oxzuj9m4hyhm7mcja.webp" alt=" " width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Terraform Configuration&lt;/strong&gt;&lt;br&gt;
The set up for this resource involves only two block: the provider configuration block and the S3 bucket resource block&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Provider Block&lt;/strong&gt;&lt;br&gt;
Since we are using the AWS provider we setup by specifying the region in which the resource will be created&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight terraform"&gt;&lt;code&gt;&lt;span class="k"&gt;provider&lt;/span&gt; &lt;span class="s2"&gt;"aws"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;region&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"us-east-1"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;S3 Bucket Resource Block&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight terraform"&gt;&lt;code&gt;&lt;span class="k"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"aws_s3_bucket"&lt;/span&gt; &lt;span class="s2"&gt;"demo_bucket"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;bucket&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"devbrio53-store"&lt;/span&gt;

  &lt;span class="nx"&gt;tags&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;Name&lt;/span&gt;        &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"My bucket"&lt;/span&gt;
    &lt;span class="nx"&gt;Environment&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Dev"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Terraform resource block starts with the keyword resource, followed by the resource type &lt;code&gt;aws_s3_bucket&lt;/code&gt; and a user-defined resource name (e.g., &lt;code&gt;first_bucket&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;The bucket name must be &lt;strong&gt;globally unique across AWS regions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Tags are added as a nested block with key-value pairs, e.g., &lt;code&gt;Name&lt;/code&gt; and &lt;code&gt;Environment&lt;/code&gt;&lt;br&gt;
Tags are strings enclosed in double quotes and enclosed within curly braces, representing a map/dictionary data type in Terraform.&lt;/p&gt;

&lt;p&gt;Using Terraform AWS provider documentation to find the correct resource block for an S3 bucket (&lt;code&gt;aws_s3_bucket&lt;/code&gt;).&lt;br&gt;
The documentation provides example usage, argument references (mandatory and optional parameters), and guides how to customise the resource block.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Running Terraform Commands to Provision the Bucket&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Terraform initialisation is run using the command:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This downloads the necessary provider plugins and initialises the backend.&lt;/p&gt;

&lt;p&gt;Next, a plan is created using:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This performs a dry run to preview the changes Terraform will apply without actually creating or modifying resources.&lt;/p&gt;

&lt;p&gt;The command to apply the changes and create the bucket is:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Terraform prompts for confirmation before applying changes; typing yes proceeds with the creation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Running terraform plan again shows&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zero resources to add&lt;/li&gt;
&lt;li&gt;One resource to change&lt;/li&gt;
&lt;li&gt;Zero resources to destroy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Terraform performs a state comparison between the current AWS environment and the configuration file to detect changes.&lt;/p&gt;

&lt;p&gt;To delete the created bucket and clean up resources, the command is:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This removes everything created by the Terraform configuration. It’s a handy way to keep your AWS account clean while learning.&lt;/p&gt;

&lt;p&gt;Today’s learning wasn’t just about creating an S3 bucket.&lt;/p&gt;

&lt;p&gt;It was about understanding how Terraform connects with AWS, and why authentication is the foundation of everything in cloud.&lt;/p&gt;

&lt;p&gt;A simple bucket  but a meaningful step forward.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/09HQ_R1P7Lw"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>aws</category>
      <category>s3bucket</category>
      <category>terraform</category>
      <category>infrastructureascode</category>
    </item>
    <item>
      <title>Terraform AWS Provider</title>
      <dc:creator>Brian Mengo</dc:creator>
      <pubDate>Thu, 23 Apr 2026 07:27:21 +0000</pubDate>
      <link>https://forem.com/brian_mengo/terraform-aws-provider-2f3m</link>
      <guid>https://forem.com/brian_mengo/terraform-aws-provider-2f3m</guid>
      <description>&lt;p&gt;&lt;strong&gt;How Terraform Talks to the Cloud&lt;/strong&gt;&lt;br&gt;
We begin with an introductory concept of &lt;strong&gt;Terraform providers&lt;/strong&gt;, which is basically a plugin bridging Terraform and cloud providers.&lt;br&gt;
Providers translate Terraform's HCL (HashiCorp Configuration Language) code into API calls understood by cloud platforms like AWS, Azure, or GCP. &lt;br&gt;
When provisioning a resource (e.g., an AWS S3 bucket), Terraform interacts with the cloud provider’s API via the corresponding provider plugin.&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%2Fnaxzb2xh67kgvtvq0ina.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%2Fnaxzb2xh67kgvtvq0ina.png" alt=" " width="800" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Role and Function of Terraform Providers&lt;/strong&gt;&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%2Fsq0nf28h7t1tch9l1vpu.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%2Fsq0nf28h7t1tch9l1vpu.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The provider plugin is responsible for translating Terraform’s configuration into API requests for the target service.&lt;br&gt;
Terraform providers thus enable infrastructure as code by connecting declarative Terraform files with underlying API operations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Types of Terraform Providers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There are three main categories of Terraform providers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Official providers&lt;/strong&gt;: Maintained by the cloud providers themselves (e.g., AWS, Azure, GCP).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Partner providers&lt;/strong&gt;: Maintained by third-party organisations, not the cloud providers directly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community providers&lt;/strong&gt;: Maintained by the open-source community. Providers can target cloud APIs or other services such as Docker, Kubernetes, Prometheus, and Grafana.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Exploring Terraform AWS Provider Documentation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Users are encouraged to visit the official Terraform AWS provider page on the Terraform Registry (registry.terraform.io).&lt;br&gt;
This page lists all AWS services supported by the provider, enabling provisioning across a broad range of AWS infrastructure components.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Importance of Version Locking and Compatibility&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using the latest Terraform or provider versions by default can cause compatibility issues if your Terraform code is not tested against those versions.&lt;/li&gt;
&lt;li&gt;Version locking ensures stability by using the tested combination of Terraform core and provider versions.&lt;/li&gt;
&lt;li&gt;Upgrading versions should be done cautiously: test in non-production environments before applying to production.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Understanding Version Constraints and Operators&lt;/strong&gt;&lt;br&gt;
Terraform supports several operators for version constraints:&lt;br&gt;
Operator Meaning;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;=&lt;/strong&gt;  Exact version match only&lt;br&gt;
 &lt;strong&gt;!=&lt;/strong&gt;   Excludes the specified version&lt;br&gt;
&lt;strong&gt;&amp;lt;, &amp;lt;=&lt;/strong&gt; Allows versions less than (or equal to) the specified version&lt;br&gt;
&lt;strong&gt;&amp;gt;, &amp;gt;=&lt;/strong&gt; Allows versions greater than (or equal to) the specified version&lt;br&gt;
&lt;strong&gt;~&amp;gt;&lt;/strong&gt; (Tilde Greater Than) Allows patch-level updates within the specified minor version (e.g., ~&amp;gt; 6.7.0 allows any version &amp;gt;= 6.7.0 but &amp;lt; 6.8.0)&lt;/p&gt;

&lt;p&gt;The tilde operator ~&amp;gt; is commonly used to allow patch upgrades without crossing minor or major version boundaries, preserving compatibility.&lt;br&gt;
Examples:&lt;br&gt;
~&amp;gt; 6.7.0 allows versions 6.7.1, 6.7.2, etc., but not 6.8.0.&lt;br&gt;
~&amp;gt; 1.0 allows versions 1.1, 1.2, etc., but not 2.0.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating a Basic Terraform Provider Configuration&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight terraform"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Configure the AWS Provider&lt;/span&gt;
&lt;span class="k"&gt;provider&lt;/span&gt; &lt;span class="s2"&gt;"aws"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;region&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"us-east-1"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;terraform&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;required_providers&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;aws&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;source&lt;/span&gt;  &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"hashicorp/aws"&lt;/span&gt;
      &lt;span class="nx"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"~&amp;gt; 6.0"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Create a VPC&lt;/span&gt;
&lt;span class="k"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"aws_vpc"&lt;/span&gt; &lt;span class="s2"&gt;"example"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;cidr_block&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"10.0.0.0/16"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This Terraform code tells Terraform to use the AWS provider and makes sure it uses a stable version of it. It then sets the AWS region to us-east-1, which means all resources will be created in that location. Finally, the code creates a VPC, which is like a private network inside AWS where you can later add servers, subnets, and other resources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Terraform Init&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Running terraform init or tf init downloads the necessary provider plugins and initialises Terraform in the working directory.&lt;/li&gt;
&lt;li&gt;The provider plugin is downloaded automatically based on the system OS (Mac, Windows, Linux).&lt;/li&gt;
&lt;li&gt;This step prepares Terraform to interact with the configured provider APIs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Running terraform plan and Understanding its Output&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;terraform plan compares the current Terraform configuration with the real infrastructure state.&lt;br&gt;
The plan shows which resources will be created, changed, or destroyed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authentication with AWS CLI&lt;/strong&gt;&lt;br&gt;
Terraform requires valid AWS credentials to interact with AWS services.&lt;br&gt;
The simplest authentication method is running aws configure (AWS CLI tool) to input:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Access Key ID&lt;/li&gt;
&lt;li&gt;AWS Secret Access Key&lt;/li&gt;
&lt;li&gt;Default region
These credentials can be generated from the AWS Management Console under IAM users, with appropriate permissions (e.g., S3 full access).
Credentials stored by AWS CLI are then used by Terraform automatically.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best Practices I Learned&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;✔ Always specify provider versions&lt;/strong&gt;&lt;br&gt;
Never rely on defaults.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✔ Use version ranges (not just exact versions)&lt;/strong&gt;&lt;br&gt;
Keeps things safe but flexible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✔ Test upgrades in a lower environment&lt;/strong&gt;&lt;br&gt;
Never update versions directly in production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✔ Use terraform providers lock&lt;/strong&gt;&lt;br&gt;
It creates a .terraform.lock.hcl file to ensure consistent builds.&lt;/p&gt;

&lt;p&gt;This makes your infrastructure “version-proof”.&lt;br&gt;
  &lt;iframe src="https://www.youtube.com/embed/JFiMmaktnuM"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>devops</category>
      <category>terraform</category>
      <category>infrastructureascode</category>
      <category>aws</category>
    </item>
    <item>
      <title>Introduction to IAC, how Terraform Works- Day01</title>
      <dc:creator>Brian Mengo</dc:creator>
      <pubDate>Tue, 21 Apr 2026 14:59:00 +0000</pubDate>
      <link>https://forem.com/brian_mengo/introduction-to-iac-how-terraform-works-day01-35lk</link>
      <guid>https://forem.com/brian_mengo/introduction-to-iac-how-terraform-works-day01-35lk</guid>
      <description>&lt;p&gt;Day01 of my 30day AWS terraform challenge, and I begin with highlighting what IaC is and how teams are using it to manage infrastructure in the cloud. &lt;br&gt;
Infrastructure as Code (IaC) is the practice of managing and provisioning computing infrastructure through machine-readable configuration files rather than through manual processes or interactive configuration tools.&lt;br&gt;
Think of it like this: instead of clicking through a cloud console to spin up servers, databases, and networks, you write code that describes exactly what you want — and a tool builds it for you.&lt;/p&gt;

&lt;p&gt;Tools for Infrastrucure as Code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Terraform (Multi-cloud and widely used)&lt;/li&gt;
&lt;li&gt;Pulumi&lt;/li&gt;
&lt;li&gt;AWS CloudFormation, AWS CDK, AWS SAM&lt;/li&gt;
&lt;li&gt;Azure ARM / Bicep&lt;/li&gt;
&lt;li&gt;GCP Deployment Manager, GCP Config Controller&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What is Terraform&lt;/strong&gt;&lt;br&gt;
Terraform is an open-source IaC tool created by HashiCorp. It allows you to define, preview, and deploy infrastructure across multiple cloud providers — AWS, Azure, Google Cloud, and hundreds more — using a simple, human-readable language called HCL (HashiCorp Configuration Language).&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%2F26duckq3akmpbnxjqw2k.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%2F26duckq3akmpbnxjqw2k.png" alt=" " width="800" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Manual provisioning of Infrastructure Challenges&lt;/strong&gt;;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Time-consuming: A simple three-tier app infrastructure can take around  2 hours to set up manually.&lt;/li&gt;
&lt;li&gt;Complexity grows exponentially when managing multiple environments&lt;/li&gt;
&lt;li&gt;Human error risks: Manual steps increase chances of misconfiguration, security oversights, or inconsistent environments&lt;/li&gt;
&lt;li&gt;Inconsistency: Different people provisioning environments can lead to "it works on my machine" issues.&lt;/li&gt;
&lt;li&gt;High operational costs and delays affecting dependent teams &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;*&lt;em&gt;Benefits of Terraform&lt;br&gt;
*&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automates the process.&lt;/li&gt;
&lt;li&gt;Reduces time needed to perform the same action again and again.&lt;/li&gt;
&lt;li&gt;Reduces labour resource which was needed to manual perform the process.&lt;/li&gt;
&lt;li&gt;Reduces the chances of human error.&lt;/li&gt;
&lt;li&gt;We can track changes using git.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How Terraform Works&lt;/strong&gt;&lt;br&gt;
Terraform Initialise - Run terraform init to initialize the working directory and download necessary providers.&lt;br&gt;
Validate Configuraion - Run terraform validate to check for syntax or configuration errors.&lt;br&gt;
Terraform Plan - Run terraform plan to preview infrastructure changes before applying.&lt;br&gt;
Terraform apply - Run terraform apply to provision or modify the infrastructure by calling cloud API.&lt;br&gt;
Terraform Destroy - Run terraform destroy to delete resources when no longer needed.&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%2F5nq5yjt6blsr47a36siu.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%2F5nq5yjt6blsr47a36siu.png" alt=" " width="300" height="168"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Getting Started&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install Terraform&lt;/strong&gt; → &lt;a href="http://developer.hashicorp.com/terraform/install" rel="noopener noreferrer"&gt;developer.hashicorp.com/terraform/install&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set up a cloud provider account&lt;/strong&gt; (AWS Free Tier is great for learning)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write your first &lt;code&gt;.tf&lt;/code&gt; file&lt;/strong&gt; and run &lt;code&gt;terraform init&lt;/code&gt;, &lt;code&gt;terraform plan&lt;/code&gt;, &lt;code&gt;terraform apply&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explore the Terraform Registry&lt;/strong&gt; → &lt;a href="http://registry.terraform.io" rel="noopener noreferrer"&gt;registry.terraform.io&lt;/a&gt; for modules and providers&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/s5fwSG_00P8"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>aws</category>
      <category>beginners</category>
      <category>devops</category>
      <category>terraform</category>
    </item>
  </channel>
</rss>
