Provisionamento de Instâncias EC2
Escreva configurações do Terraform para implantar e gerenciar máquinas virtuais Amazon EC2, incluindo definições de rede e grupos de segurança.
Provisionamento de Instâncias EC2 é uma aula grátis de DevOps Bootcamp no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de DevOps Bootcamp, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de DevOps Bootcamp inclui 4 aulas no total.
Instâncias do EC2 com o Terraform
Bem-vindo! Nesta lição, você aprenderá a provisionar e gerenciar máquinas virtuais Amazon EC2 usando o Terraform.
EC2 (Elastic Compute Cloud) fornece servidores virtuais escaláveis na nuvem. Usar Infraestrutura como Código (IaC) com o Terraform para o EC2 significa que você pode definir os seus servidores em código, garantindo implantações consistentes e repetíveis.
Definindo uma instância do EC2
O recurso principal para uma instância do EC2 no Terraform é aws_instance. Você precisa especificar pelo menos dois argumentos importantes:
ami: a Imagem de Máquina da Amazon (sistema operacional e software) a ser usada.instance_type: a configuração de hardware (por exemplo,t2.micropara instâncias elegíveis ao nível gratuito).
Veja como é um bloco básico de 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"
}
}Inicie sua primeira instância do EC2
Vamos juntar tudo para iniciar uma instância simples do EC2. Esta configuração define o provedor AWS e a instância do EC2.
Para provisioná-la, salve isto como um arquivo .tf e execute terraform init, terraform plan e terraform apply no seu terminal.
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"
}
}Proteja seu EC2: grupos de segurança
Os grupos de segurança funcionam como firewalls virtuais para as suas instâncias do EC2. Eles controlam qual tráfego de rede de entrada (ingresso) e de saída (egresso) pode chegar à sua instância ou sair dela.
É essencial configurá-los corretamente para proteger os seus servidores contra acesso não autorizado e, ao mesmo tempo, permitir os serviços necessários, como SSH ou HTTP.
Criando um grupo de segurança
Você define um grupo de segurança usando o recurso aws_security_group. Vamos adicionar uma regra de ingress para permitir acesso SSH (porta 22) de qualquer lugar (0.0.0.0/0).
Você precisará especificar um vpc_id existente para o grupo de segurança.
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"
}
}Associando o grupo de segurança ao EC2
Agora, vamos atualizar o nosso aws_instance para usar este novo grupo de segurança. Fazemos referência ao ID do grupo de segurança usando aws_security_group.allow_ssh.id.
Lembre-se de substituir o vpc_id no grupo de segurança por um ID de VPC real da sua conta AWS para que isso possa ser executado.
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"
}
}Rede do EC2: VPCs e sub-redes
Cada instância do EC2 reside em uma nuvem privada virtual (VPC) e em uma sub-rede específica dentro dessa VPC. Uma VPC é uma rede virtual isolada, e as sub-redes são divisões lógicas da sua VPC (por exemplo, públicas ou privadas).
Por padrão, o EC2 pode ser iniciado em uma VPC ou sub-rede padrão. Para ter mais controle e organização, geralmente você especifica qual sub-rede a sua instância deve usar.
Criando uma rede básica
Para controlar completamente a rede do nosso EC2, vamos definir uma VPC mínima e uma sub-rede pública. Isso também requer um gateway da Internet para acesso público e uma tabela de rotas para direcionar o tráfego.
Essa configuração completa garante que o seu EC2 possa se comunicar com a Internet.
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 na sua rede personalizada
Agora, vamos combinar todas as partes: uma VPC personalizada, uma sub-rede, um grupo de segurança e a nossa instância do EC2. O EC2 será iniciado na nossa sub-rede pública específica e receberá automaticamente um endereço IP público.
Essa configuração completa oferece controle detalhado sobre a implantação do seu EC2 e torna-o acessível por 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"
}
}Verificação da Configuração do EC2
Quais dos argumentos a seguir são essenciais para definir um recurso básico aws_instance no Terraform?
Recapitulação: EC2 com Terraform
Excelente trabalho! Você aprendeu a provisionar instâncias do Amazon EC2 usando o Terraform.
- Definimos instâncias do EC2 usando o recurso
aws_instance. - Protegemo-las com
aws_security_group, controlando o tráfego de rede. - Configuramos uma rede personalizada básica (VPC, sub-rede, gateway da Internet e tabela de rotas) para hospedar nosso EC2.
- Agora você tem a base para implantar e gerenciar seus servidores virtuais como código!
Perguntas Frequentes
A aula “Provisionamento de Instâncias EC2” é grátis?
Sim — o texto completo de “Provisionamento de Instâncias EC2” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de DevOps Bootcamp, atualize para CoddyKit PRO. O curso de DevOps Bootcamp inclui 4 aulas no total.
O que vou aprender em “Provisionamento de Instâncias EC2”?
Escreva configurações do Terraform para implantar e gerenciar máquinas virtuais Amazon EC2, incluindo definições de rede e grupos de segurança. Você pratica DevOps Bootcamp com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar DevOps Bootcamp?
Nenhuma experiência prévia é necessária. DevOps Bootcamp no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Provisionamento de Instâncias EC2”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de DevOps Bootcamp?
Sim. Cada aula de DevOps Bootcamp inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Configuração do Provedor AWS
- Provisionamento de Instâncias EC2
- Gerenciamento de Buckets S3 e IAM
- Configurando VPC e redes