Published on

Comment créer un VPC avec Terraform

Authors
  • avatar
    Name
    Sylva ETOKABEKA
    Twitter

VPC

VPC, abréviation de Virtual Private Cloud, vous permet de lancer des services AWS dans un réseau virtuel logiquement isolé.

Nous allons créer un simple VPC avec deux sous-réseaux publics qui se trouvent chacun dans une zone de disponibilité.

  • Dans un prochain poste je vous montrerais comment créer un réseau privé dans un VPC

Ci dessous une petite explication de la différence entre un réseau privé et un réseau public dans un VPC

aws-ecs-service-terraform.jpg

Réseau public

Ce réseau sera capable de communiquer avec internet via un NAT

Réseau privé

Ce réseau ne communique pas directement avec Internet. Son principal avantage est de vous permettre d'isoler vos services au sein de votre VPC (Virtual Private Cloud) et donc, dans la plupart des situations, de restreindre les interactions avec d'autres réseaux internes. Cela garantit une meilleure sécurité et confidentialité de vos données, tout en offrant un contrôle plus granulaire sur les connexions entrantes et sortantes.

Étape 1: Définissez votre VPC

Pour ce faire, dans votre module terraform vous aller créer un nouveau fichier main.tf et y ajouter cici:

resource "aws_vpc" "this" {
  cidr_block = "10.0.0.0/16"
}

Étape 2: Créer 2 sous-réseau

A noter que nous allons créer 2 sous-réseaux publics. Ajoutez ceci.

resource "aws_subnet" "public" {
  vpc_id = aws_vpc.this.id
  cidr_block = "10.0.1.0/24"
  availability_zone = "eu-central-1a"
}

resource "aws_subnet" "public-2" {
  vpc_id = aws_vpc.this.id
  cidr_block = "10.0.2.0/24"
  availability_zone = "eu-central-1b"
}

Étape 3: Créer une passerelle réseau ou Gateway

Une passerelle est une interface qui permet à vos sous-réseaux de communiquer avec Internet. Ajoutez toujours dans le fichier main.tf :

resource "aws_internet_gateway" "this" {
  vpc_id = aws_vpc.this.id
}

Étape 4: Ajouter une table de routage et les associations de routes

Une table de routage va permettre de rediriger les connexions d'internet vers le réseau VPC.

resource "aws_route_table" "this" {
  vpc_id = aws_vpc.this.id
  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.this.id
  }
}

resource "aws_route_table_association" "public" {
  route_table_id = aws_route_table.this.id
  subnet_id = aws_subnet.public.id
}

resource "aws_route_table_association" "public-2" {
  route_table_id = aws_route_table.this.id
  subnet_id = aws_subnet.public-2.id
}

Étape 5: Définissez un groupe de sécurité

Après avoir créé notre VPC, nous allons enfin terminer en ajoutant un groupe de sécurité.

Un groupe de sécurité va nous permettre de définir des règles d'accès à nos sous-réseaux.

Pour ce faire, nous allons ajouter ceci :

resource "aws_security_group" "this" {
  name   = "default-security-group"
  vpc_id = aws_vpc.this.id
  ingress {
    from_port   = 0
    to_port     = 0
    protocol    = -1
    self        = "false"
    cidr_blocks = ["0.0.0.0/0"]
    description = "any"
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

Dans cet exemple, nous autorisons toutes les connexions d'internet vers notre VPC et vice versa. Cela signifie que toutes les communications entrantes et sortantes seront permises entre notre VPC et Internet.

Et pour orchestrer tout cela, dans un premier temps, nous allons lancer la commande terraform init. Cette commande permet d'initialiser le module Terraform, qui sera utilisé pour gérer notre infrastructure.

Ensuite, nous lancerons la commande terraform plan pour afficher les instructions détaillées qui vont être envoyées à AWS. Ce plan nous permettra de voir les changements qui seront effectués dans notre infrastructure avant de les appliquer.

Lorsque vous êtes prêt, vous pouvez enfin lancer la commande terraform apply pour appliquer les changements et mettre à jour notre infrastructure selon les instructions spécifiées dans notre configuration Terraform.

Plan: 3 to add, 0 to change, 1 to destroy.
aws_route_table.this: Destroying... [id=rtb-05a7072659476d349]
aws_route_table.this: Destruction complete after 1s
aws_route_table.this: Creating...
aws_route_table.this: Creation complete after 1s [id=rtb-05a7b83a36692e005]
aws_route_table_association.public-2: Creating...
aws_route_table_association.public: Creating...
aws_route_table_association.public-2: Creation complete after 0s [id=rtbassoc-04a7c9d72ca83b91a]
aws_route_table_association.public: Creation complete after 0s [id=rtbassoc-0bda4f706f92d698f]

Apply complete! Resources: 3 added, 0 changed, 1 destroyed.

Voilà notre VPC a été crée

N'oubliez pas de lancer terraform destroy lorsque vous souhaitez supprimer le VPC d'AWS pour éviter des frais inutiles.

Conclusion

En suivant les étapes mentionnées ci-dessus, vous pouvez créer un VPC AWS avec Terraform.

Le VPC vous permettra de lancer des services AWS dans un réseau virtuel isolé, offrant une meilleure sécurité et confidentialité des données.

En créant des sous-réseaux publics et privés, vous pourrez contrôler les interactions avec Internet et isoler vos services au sein du VPC.

En ajoutant une passerelle réseau, une table de routage et un groupe de sécurité, vous pourrez configurer les connexions entrantes et sortantes.