Подготовка экземпляров EC2
Напишите конфигурации Terraform для развёртывания и управления виртуальными машинами Amazon EC2, включая настройки сети и групп безопасности.
«Подготовка экземпляров EC2» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 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) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Подготовка экземпляров EC2»?
Напишите конфигурации Terraform для развёртывания и управления виртуальными машинами Amazon EC2, включая настройки сети и групп безопасности. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Подготовка экземпляров EC2»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Настройка поставщика AWS
- Подготовка экземпляров EC2
- Управление корзинами S3 и IAM
- Настройка VPC и сети