0Pricing
Terraform Infrastructure as Code · Урок

Подготовка экземпляров EC2

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

«Подготовка экземпляров EC2» — бесплатный урок Terraform Infrastructure as Code на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Terraform Infrastructure as Code, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Terraform Infrastructure as Code содержит 4 уроков всего.

Экземпляры EC2 с Terraform

Добро пожаловать! На этом уроке вы научитесь создавать и управлять виртуальными машинами Amazon EC2 с помощью Terraform.

EC2 (Elastic Compute Cloud) предоставляет масштабируемые виртуальные серверы в облаке. Использование инфраструктуры как кода (IaC) с Terraform для EC2 позволяет описывать серверы в коде и обеспечивать единообразное, воспроизводимое развертывание.

Определение экземпляра EC2

Основным ресурсом для экземпляра EC2 в Terraform является aws_instance. Необходимо указать как минимум два ключевых аргумента:

  • ami: образ Amazon Machine Image (OS, программное обеспечение), который будет использоваться.
  • instance_type: конфигурация оборудования (например, t2.micro для экземпляров, подходящих для бесплатного уровня).

Базовый блок aws_instance выглядит так:

resource "aws_instance" "web_server" {
  ami           = "ami-053b04dcd42d5397e" # Example: Amazon Linux 2 in us-east-1
  instance_type = "t2.micro"

  tags = {
    Name = "MyWebServer"
  }
}

Запуск первого EC2

Объединим все элементы и запустим простой экземпляр EC2. Эта конфигурация определяет провайдера AWS и экземпляр EC2.

Для развертывания сохраните конфигурацию в файл .tf, затем выполните в терминале команды terraform init, terraform plan и terraform apply.

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

resource "aws_instance" "web_server" {
  ami           = "ami-053b04dcd42d5397e" # Amazon Linux 2 AMI for us-east-1
  instance_type = "t2.micro"

  tags = {
    Name = "MyBasicWebServer"
  }
}

Защита EC2: группы безопасности

Группы безопасности работают как виртуальные брандмауэры для экземпляров EC2. Они управляют тем, какой входящий (ingress) и исходящий (egress) сетевой трафик может достигать экземпляра или покидать его.

Крайне важно правильно настроить группы безопасности, чтобы защитить серверы от несанкционированного доступа и при этом разрешить необходимые сервисы, например SSH или HTTP.

Создание группы безопасности

Группа безопасности определяется с помощью ресурса aws_security_group. Мы добавим правило ingress, разрешающее доступ по SSH (порт 22) отовсюду (0.0.0.0/0).

Для группы безопасности необходимо указать существующий vpc_id, в котором она будет размещена.

resource "aws_security_group" "allow_ssh" {
  name        = "allow_ssh_traffic"
  description = "Allow SSH inbound traffic"
  vpc_id      = "vpc-0123456789abcdef0" # IMPORTANT: Replace with YOUR VPC ID!

  ingress {
    description = "SSH from anywhere"
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

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

  tags = {
    Name = "allow_ssh_sg"
  }
}

Подключение группы безопасности к EC2

Теперь обновим наш aws_instance, чтобы использовать эту новую группу безопасности. Мы ссылаемся на идентификатор группы безопасности с помощью aws_security_group.allow_ssh.id.

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

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

resource "aws_security_group" "allow_ssh" {
  name        = "allow_ssh_traffic_example"
  description = "Allow SSH inbound traffic"
  vpc_id      = "vpc-0123456789abcdef0" # IMPORTANT: Replace with YOUR VPC ID!

  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" "web_server" {
  ami             = "ami-053b04dcd42d5397e"
  instance_type   = "t2.micro"
  vpc_security_group_ids = [
    aws_security_group.allow_ssh.id
  ]

  tags = {
    Name = "WebServerWithSSH"
  }
}

Сеть EC2: VPC и подсети

Каждый экземпляр EC2 находится внутри виртуального частного облака (VPC) и определенной подсети внутри этого VPC. VPC — это изолированная виртуальная сеть, а подсети — логические части VPC (например, общедоступные или частные).

По умолчанию EC2 может запускаться в VPC или подсети по умолчанию. Для большего контроля и упорядоченности часто указывают, какую подсеть должен использовать экземпляр.

Создание базовой сети

Чтобы полностью управлять сетью EC2, определим минимальные VPC и общедоступную подсеть. Для этого также потребуются шлюз Интернета для общедоступного доступа и таблица маршрутизации для направления трафика.

Эта полная настройка обеспечивает возможность EC2 взаимодействовать с Интернетом.

resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"
  tags = {
    Name = "main-vpc-lesson"
  }
}

resource "aws_subnet" "public" {
  vpc_id            = aws_vpc.main.id
  cidr_block        = "10.0.1.0/24"
  availability_zone = "us-east-1a"
  map_public_ip_on_launch = true # Instances in this subnet get a public IP
  tags = {
    Name = "public-subnet-lesson"
  }
}

resource "aws_internet_gateway" "gw" {
  vpc_id = aws_vpc.main.id
  tags = {
    Name = "main-gw-lesson"
  }
}

resource "aws_route_table" "public_rt" {
  vpc_id = aws_vpc.main.id

  route {
    cidr_block = "0.0.0.0/0" # Traffic to the internet
    gateway_id = aws_internet_gateway.gw.id
  }
  tags = {
    Name = "public-rt-lesson"
  }
}

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

EC2 в вашей пользовательской сети

Теперь объединим все части: пользовательские VPC, подсеть, группу безопасности и экземпляр EC2. EC2 будет запущен в указанной общедоступной подсети и автоматически получит общедоступный IP-адрес.

Эта полная конфигурация обеспечивает детальный контроль над развертыванием EC2 и делает его доступным по SSH.

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

resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"
  tags = { Name = "main-vpc-lesson" }
}

resource "aws_subnet" "public" {
  vpc_id            = aws_vpc.main.id
  cidr_block        = "10.0.1.0/24"
  availability_zone = "us-east-1a"
  map_public_ip_on_launch = true
  tags = { Name = "public-subnet-lesson" }
}

resource "aws_internet_gateway" "gw" {
  vpc_id = aws_vpc.main.id
  tags = { Name = "main-gw-lesson" }
}

resource "aws_route_table" "public_rt" {
  vpc_id = aws_vpc.main.id
  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.gw.id
  }
  tags = { Name = "public-rt-lesson" }
}

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

resource "aws_security_group" "allow_ssh" {
  name        = "allow_ssh_lesson"
  description = "Allow SSH inbound traffic"
  vpc_id      = aws_vpc.main.id
  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" "web_server" {
  ami             = "ami-053b04dcd42d5397e"
  instance_type   = "t2.micro"
  subnet_id       = aws_subnet.public.id
  vpc_security_group_ids = [
    aws_security_group.allow_ssh.id
  ]
  associate_public_ip_address = true
  tags = {
    Name = "FullWebServerLesson"
  }
}

Проверка конфигурации EC2

Какие из следующих аргументов необходимы для определения базового ресурса aws_instance в Terraform?

Итоги: EC2 с Terraform

Отличная работа! Вы научились развертывать экземпляры Amazon EC2 с помощью Terraform.

  • Мы определили экземпляры EC2 с помощью ресурса aws_instance.
  • Мы защитили их с помощью aws_security_group, настроив сетевой трафик.
  • Мы настроили простую пользовательскую сеть (VPC, подсеть, интернет-шлюз и таблицу маршрутизации) для размещения EC2.
  • Теперь у Вас есть основа для развертывания виртуальных серверов и управления ими в виде кода!

Часто задаваемые вопросы

Урок «Подготовка экземпляров EC2» бесплатный?

Да — полный текст урока «Подготовка экземпляров EC2» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Terraform Infrastructure as Code, подпишись на CoddyKit PRO. Курс Terraform Infrastructure as Code содержит 4 уроков всего.

Чему я научусь в уроке «Подготовка экземпляров EC2»?

Напишите конфигурации Terraform для развёртывания и управления виртуальными машинами Amazon EC2, включая настройки сети и групп безопасности. Ты практикуешь Terraform Infrastructure as Code с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Terraform Infrastructure as Code?

Предыдущий опыт не требуется. Terraform Infrastructure as Code на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Подготовка экземпляров EC2»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Terraform Infrastructure as Code?

Да. Каждый урок Terraform Infrastructure as Code включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Настройка поставщика AWS
  2. Подготовка экземпляров EC2
  3. Управление корзинами S3 и IAM
  4. Настройка VPC и сети
← Назад к Terraform Infrastructure as Code