“Automating VPC Peering in AWS with Terraform”
Tags: aws, devops, sre, cloud
Published: 2024-05-09 05:53:33

**Introduction**:
In today’s cloud-centric world, networking infrastructure plays a crucial role in ensuring the connectivity and security of applications and services. One common networking pattern is VPC peering, which allows different Virtual Private Clouds (VPCs) to communicate with each other securely. In this blog post, we’ll explore how to automate the setup of VPC peering using Terraform, a popular Infrastructure as Code (IaC) tool. By leveraging Terraforms declarative syntax and AWS provider, we can simplify the process of configuring VPC peering connections, saving time and reducing the chance of human error.

**Main Content:**

**Understanding VPC Peering:** We’ll start by discussing the concept of VPC peering and its significance in cloud networking. This section will cover the benefits of VPC peering, such as improved connectivity between VPCs and reduced data transfer costs.
**Setting Up the Terraform Environment:** Next, we’ll guide readers through the setup of a Terraform environment for managing AWS resources. This includes installing Terraform, configuring AWS credentials, and initializing a Terraform project.
**Defining VPCs and Internet Gateways:** In this section, we’ll use Terraform to define two VPCs and create internet gateways for each VPC. These components are essential prerequisites for establishing VPC peering connections.
**Creating VPC Peering Connections:** Using Terraforms AWS provider, we’ll programmatically create VPC peering connections between the two VPCs defined earlier. We’ll specify the necessary parameters such as VPC IDs and enable auto-acceptance of peering requests.
**Verifying the Peering Connection:** After deploying the Terraform configuration, we’ll demonstrate how to verify the status of the VPC peering connection using the AWS Management Console or CLI. This step ensures that the peering connection is successfully established and ready for use.

Launch instance

Install Terraform

```
#! /bin/bash
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list

sudo apt update
sudo apt install terraform -y
```

Install Git

```
sudo apt update
sudo apt install git
```
Install awscli
```
#! /bin/bash
curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
```
Cloning the repo

```
git clone https://github.com/Prajwal2023/vpc-peering.git
```
Now hit the **terraform init** command
“terraform init” is a command used to initialize a Terraform working directory. When you run this command, Terraform reads the configuration files in the directory and downloads any required plugins or modules specified in those files. This command prepares the directory for Terraform operations such as planning, applying, or destroying infrastructure resources. It ensures that the necessary dependencies are available for managing your infrastructure with Terraform.

Now **terraform plan**
“terraform plan” is a command used to create an execution plan. When you run this command, Terraform compares the current state of your infrastructure with the desired state defined in your Terraform configuration files. It then generates an execution plan that outlines what actions Terraform will take to achieve the desired state. The plan includes information about which resources will be created, modified, or destroyed. Running “terraform plan” allows you to preview the changes that Terraform will make to your infrastructure before actually applying them. This helps you verify that the planned changes are as expected and provides an opportunity to review and confirm them before proceeding.

**terraform validate**
“terraform validate” checks Terraform configuration files for errors, ensuring correct syntax and structure.

**terraform apply**
“terraform apply” is a command used in Terraform to apply the changes described in your Terraform configuration files to your infrastructure. When you run this command, Terraform reads the configuration files, creates an execution plan, and then executes that plan to provision, update, or delete the resources specified in the configuration. This command is typically used after running “terraform plan” to review the proposed changes and before making any modifications to your infrastructure.

**terraform destroy**
The “terraform destroy” command is used to destroy all the resources defined in your Terraform configuration. It deletes all the resources that Terraform manages, effectively tearing down your infrastructure. Use this command with caution as it cannot be undone and may result in the permanent loss of data or resources. Always verify the resources that will be destroyed before executing this command.

**Conclusion**:
Automating the setup of VPC peering connections with Terraform streamlines the process of configuring cloud networking infrastructure. By codifying infrastructure configurations, teams can easily replicate and manage VPC peering across different environments with consistency and reliability. As organizations embrace cloud-native architectures, Terraform serves as a valuable tool for simplifying complex networking tasks and accelerating the adoption of cloud technologies.

Connect on LinkedIn https://www.linkedin.com/in/prajwal-patil-334002296/