Terraform - configurare VPC
Postat la Sun 22 May 2022 in howto
Terraform este o aplicatie ce permite crearea si configurarea infrastructurii ce ruleaza de obicei in cloud ca si cod (IaC) intr-un mod foarte rapid.
Terraform se integreaza cu cei mai mari si cunoscuti furnizori de cloud (AWS, GCE, Azure) cat si cu Kubernetes. Lista completa cu integrarile o gasiti aici .
Instalarea aplicatiei este foarte simpla existand repo pentru distributia favorita cat si pentru Windows.
Mai jos voi explica cum creem o retea privata (VPC) in AWS. Pentru acest lucru aveti nevoie de un cont in AWS cu drept full ptr EC2 cu credential de access.
Aceste credentiale de access presupunem ca sunt stocate in profilul default (vezi configurarea aws cli ).
Avem un folder care sa includa proiectul nostru si creem un fiser main.tf in care definim datele de conectare la AWS si regiunea in care se va configura:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 3.0"
}
}
}
provider "aws" {
profile = "default"
region = "eu-central-1"
}
Initializam configuratia cu comanda:
terraform init
care va instala librariile necesare.
In aceasta regiune - eu-central-1 - creeam un VPC numit ter-vpc cu clasa de ip-uri 10.20.0.0/16:
resource "aws_vpc" "ter-vpc" {
cidr_block = "10.20.0.0/16"
tags = {
"Name" = "ter-vpc"
}
}
Nota: parametrii suplimentari gasiti in documentatia vpc
Configuratia descrisa o putem testa inainte de aplicare cu comanda:
terraform plan
si daca modificarile sunt conforme se pot aplica cu comanda
terraform apply
La acest VPC este necesar un internet gateway pentru ca viitoarele resurse sa poata fi accesibile din exterior
resource "aws_internet_gateway" "ter-gw" {
vpc_id = aws_vpc.ter-vpc.id
tags = {
"Name" = "ter-gw"
}
}
Nota: parametrii suplimentari gasiti in documentatia aws_internet_gateway .
In VPC vom crea 2 subretele in DC diferite (availability zone):
resource "aws_subnet" "ter-1a" {
vpc_id = aws_vpc.ter-vpc.id
cidr_block = "10.20.1.0/24"
availability_zone = "eu-central-1a"
map_public_ip_on_launch = true
tags = {
Name = "ter-1a"
}
}
resource "aws_subnet" "ter-1b" {
vpc_id = aws_vpc.ter-vpc.id
cidr_block = "10.20.2.0/24"
availability_zone = "eu-central-1b"
map_public_ip_on_launch = true
tags = {
Name = "ter-1b"
}
}
Nota: parametrii suplimentari gasiti in documentatia aws subnet .