Описание проекта

Этот проект взят из «Техчака»

Предварительные требования к проекту

  • Аккаунт AWS
  • Знание создания vpc, ec2 и интернет-шлюза.
  • Знакомый с использованием vscode
  • Знакомство с терраформ.
  • Должен понимать ручную реализацию

Начало работы

Сначала создайте папку и назовите ее terraform vpc В папке проекта создайте файл main.tf. Это файл, в котором будут размещены все ваши конфигурации терраформирования.

Первый шаг, который вам нужно сделать при выполнении этого проекта, это указать вашего провайдера. Поскольку для этого проекта мы используем AWS, наш провайдер будет указан следующим образом:

provider "aws" {
    region = "us-east-1"
}

Далее мы создадим VPC и пометим его «My VPC».

resource "aws_vpc" "my_custom_vpc" {
    cidr_block = "10.0.0.0/16"

    tags = {
        Name = "My VPC"
    }
}

Далее создаем подсети. Здесь мы создадим одну общедоступную и одну частную подсеть.

resource "aws_subnet" "my_public_subnet" {
    vpc_id = aws_vpc.my_custom_vpc.id
    cidr_block = "10.0.1.0/24"
    availability_zone = "us-east-1a"

    tags = {
        Name = "My Public Subnet"
    }
}

resource "aws_subnet" "my_private_subnet" {
    vpc_id = aws_vpc.my_custom_vpc.id
    cidr_block = "10.0.2.0/24"
    availability_zone = "us-east-1a"

    tags = {
        Name = "My Private Subnet"
    }
}

Затем создайте интернет-шлюз и подключите его к VPC.

resource "aws_internet_gateway" "my_IGW" {
    vpc_id = aws_vpc.my_custom_vpc.id

    tags = {
        Name = "My Internet Gateway"
    }
}

Создайте таблицу маршрутов и добавьте маршрут для маршрутизации трафика через интернет-шлюз. После этого добавьте ассоциацию таблицы маршрутов, чтобы привязать ее к общедоступной подсети.

resource "aws_route_table" "my_public_rt" {
    vpc_id = aws_vpc.my_custom_vpc.id

    route {
        cidr_block = "0.0.0.0/0"
        gateway_id = aws_internet_gateway.my_IGW.id
    }

    route {
        ipv6_cidr_block = "::/0"
        gateway_id = aws_internet_gateway.my_IGW.id
    }
    tags = {
        Name = "Public Route Table"
    }
}
resource "aws_route_table_association" "my_public_rt_a" {
    subnet_id = aws_subnet.my_public_subnet.id
    route_table_id = aws_route_table.my_public_rt.id
}

Создайте новую группу безопасности и откройте порт SSH на входе.

resource "aws_security_group" "web_sg" {
    name = "HTTP and SSH"
    vpc_id = aws_vpc.my_custom_vpc.id

      ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

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

Наконец, напишите код терраформирования, который будет предоставлять экземпляр, используя приведенную выше конфигурацию.

resource "aws_instance" "my_web_instance" {
    ami = "ami-0b0dcb5067f052a63"
    instance_type = "t2.micro"
    key_name = "tutorial"

    subnet_id = aws_subnet.my_public_subnet.id
    vpc_security_group_ids = [aws_security_group.web_sg.id]
    associate_public_ip_address = true

    user_data = <<-EOF
    #!/bin/bash
    yum update -y
    yum install httpd -y
    echo "<html><h1>webpage 1(whatever you want, give the page name here)</h1></html>" > /var/www/html/index.html
    service httpd start
    chkconfig httpd on
    EOF

    tags = {
        "Name": "My-Practice VPC"
    }
}

После всего этого запустите terraform validate, чтобы проверить правильность кода, и запустите terraform plan, чтобы проверить, правильно ли установлена ​​инфраструктура.

Чтобы выполнить код терраформирования и предоставить свой экземпляр в пользовательском VPC, вы запускаете

terraform apply --auto-approve

Как только все будет сделано, на выходе вашего терминала появится сообщение «Apply Complete».

Перейдите в свой браузер и введите http://<public-ip-of-instance> ваш браузер должен отобразить следующее

Поздравляем! Вы успешно развернули EC2 внутри пользовательского VPC с помощью Terraform.

Если вы нашли эту статью полезной, ставьте аплодисменты 👏 и делитесь ею, чтобы другие ее увидели 🙂