Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 64 additions & 0 deletions 3_networking/expressroute/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Terraform Template - Azure ExpressRoute

Costa Rica

[![GitHub](https://img.shields.io/badge/--181717?logo=github&logoColor=ffffff)](https://github.com/)
[brown9804](https://github.com/brown9804)

Last updated: 2025-06-12

----------

> This template contains Terraform configurations to create and manage an Azure ExpressRoute circuit, including provider, peering location, and bandwidth settings.

> [!NOTE]
> ExpressRoute circuits require coordination with your chosen service provider.

<p align="center">
<img width="700" alt="image" src="https://github.com/user-attachments/assets/7001446c-e5cc-4a16-b443-5a5689f31f68">
</p>

## File Descriptions

- **main.tf**: Contains the main configuration for creating the Azure ExpressRoute circuit.
- **variables.tf**: Defines the input variables used in the Terraform configuration.
- **terraform.tfvars**: Provides default values for the variables defined in `variables.tf`.
- **outputs.tf**: Defines the outputs such as ExpressRoute circuit ID and service key.

## Variables

| Variable Name | Description | Type | Example Value |
|------------------------ |--------------------------------------------------|--------|-----------------------------|
| `subscription_id` | The Azure subscription ID | string | `"00000000-0000-0000-0000-000000000000"` |
| `resource_group_name` | The name of the resource group | string | `"my-expressroute-rg"` |
| `location` | The Azure region to deploy resources | string | `"eastus"` |
| `expressroute_name` | The name of the ExpressRoute circuit | string | `"my-expressroute"` |
| `service_provider_name` | The name of the ExpressRoute service provider | string | `"Equinix"` |
| `peering_location` | The peering location for the ExpressRoute circuit| string | `"Silicon Valley"` |
| `bandwidth_in_mbps` | The bandwidth in Mbps for the circuit | number | `200` |
| `sku_tier` | The SKU tier for ExpressRoute | string | `"Standard"` |
| `sku_family` | The SKU family for ExpressRoute | string | `"MeteredData"` |

## Usage

1. Clone the repository and navigate to the expressroute directory.
2. Update the `terraform.tfvars` file with your values.
3. Initialize and apply the Terraform configuration:

```bash
terraform init
terraform plan
terraform apply
```

## Outputs

| Output Name | Description |
|----------------------------|---------------------------------------------|
| `expressroute_id` | The ID of the ExpressRoute circuit |
| `expressroute_service_key` | The service key of the ExpressRoute circuit |

<div align="center">
<h3 style="color: #4CAF50;">Total Visitors</h3>
<img src="https://profile-counter.glitch.me/brown9804/count.svg" alt="Visitor Count" style="border: 2px solid #4CAF50; border-radius: 5px; padding: 5px;"/>
</div>
23 changes: 23 additions & 0 deletions 3_networking/expressroute/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# main.tf
# This file contains the main configuration for creating an Azure ExpressRoute circuit.

# Resource Group
resource "azurerm_resource_group" "er" {
name = var.resource_group_name
location = var.location
}

# ExpressRoute Circuit
resource "azurerm_express_route_circuit" "er" {
name = var.expressroute_name
location = azurerm_resource_group.er.location
resource_group_name = azurerm_resource_group.er.name
service_provider_name = var.service_provider_name
peering_location = var.peering_location
bandwidth_in_mbps = var.bandwidth_in_mbps

sku {
tier = var.sku_tier
family = var.sku_family
}
}
7 changes: 7 additions & 0 deletions 3_networking/expressroute/outputs.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# outputs.tf
# This file defines the outputs for the ExpressRoute configuration.

output "expressroute_id" {
description = "The ID of the ExpressRoute circuit"
value = azurerm_express_route_circuit.er.id
}
19 changes: 19 additions & 0 deletions 3_networking/expressroute/provider.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# provider.tf
# This file configures the Azure provider to interact with Azure resources.
# It specifies the required provider and its version, along with provider-specific configurations.

terraform {
required_version = ">= 1.8, < 2.0"
# Specify the required provider and its version
required_providers {
azurerm = {
source = "hashicorp/azurerm" # Source of the AzureRM provider
version = "~> 4.16.0" # Version of the AzureRM provider
}
}
}

provider "azurerm" {
features {} # Enable all features for the AzureRM provider
subscription_id = var.subscription_id # Use the subscription ID variable
}
18 changes: 18 additions & 0 deletions 3_networking/expressroute/terraform.tfvars
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# terraform.tfvars
# This file provides default values for the variables defined in variables.tf.
# These values can be overridden by specifying different values during Terraform execution.

# Azure Subscription
subscription_id = "" # "your-subscription-id"

# Resource Group
resource_group_name = "RG-expressroute-test"
location = "eastus"

# ExpressRoute Configuration
expressroute_name = "my-expressroute"
service_provider_name = "Equinix"
peering_location = "Silicon Valley"
bandwidth_in_mbps = 200
sku_tier = "Standard"
sku_family = "MeteredData"
49 changes: 49 additions & 0 deletions 3_networking/expressroute/variables.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# variables.tf
# This file defines the input variables used in the Terraform configuration.

variable "subscription_id" {
description = "The Azure subscription ID"
type = string
}

variable "resource_group_name" {
description = "The name of the resource group"
type = string
}

variable "location" {
description = "The Azure region to deploy resources"
type = string
}

variable "expressroute_name" {
description = "The name of the ExpressRoute circuit"
type = string
}

variable "service_provider_name" {
description = "The name of the ExpressRoute service provider"
type = string
}

variable "peering_location" {
description = "The peering location for the ExpressRoute circuit"
type = string
}

variable "bandwidth_in_mbps" {
description = "The bandwidth in Mbps for the ExpressRoute circuit"
type = number
}

variable "sku_tier" {
description = "The SKU tier for ExpressRoute (Standard or Premium)"
type = string
default = "Standard"
}

variable "sku_family" {
description = "The SKU family for ExpressRoute (MeteredData or UnlimitedData)"
type = string
default = "MeteredData"
}