Udostępnianie instancji EC2
Napiszą Państwo konfiguracje Terraform do wdrażania i zarządzania maszynami wirtualnymi Amazon EC2, w tym ustawieniami sieci i grup zabezpieczeń.
Udostępnianie instancji EC2 to bezpłatna lekcja Terraform Infrastructure as Code na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Terraform Infrastructure as Code, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Terraform Infrastructure as Code zawiera 4 lekcji w sumie.
Instancje EC2 z Terraform
Witamy! W tej lekcji nauczą się Państwo udostępniać i zarządzać maszynami wirtualnymi Amazon EC2 za pomocą Terraform.
EC2 (Elastic Compute Cloud) zapewnia skalowalne serwery wirtualne w chmurze. Korzystanie z Infrastructure as Code (IaC) wraz z Terraform w przypadku EC2 oznacza możliwość definiowania serwerów w kodzie, co zapewnia spójne i powtarzalne wdrożenia.
Definiowanie instancji EC2
Podstawowym zasobem reprezentującym instancję EC2 w Terraform jest aws_instance. Należy określić co najmniej dwa kluczowe argumenty:
ami: obraz Amazon Machine Image (system operacyjny i oprogramowanie), który ma zostać użyty.instance_type: konfiguracja sprzętowa (np.t2.microw przypadku instancji kwalifikujących się do bezpłatnego poziomu).
Oto, jak wygląda podstawowy blok 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"
}
}Uruchamianie pierwszej instancji EC2
Połączmy wszystkie elementy, aby uruchomić prostą instancję EC2. Ta konfiguracja definiuje AWS provider i instancję EC2.
Aby ją wdrożyć, należy zapisać ją jako plik .tf, a następnie uruchomić w terminalu polecenia terraform init, terraform plan i 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"
}
}Zabezpieczanie EC2: grupy zabezpieczeń
Grupy zabezpieczeń działają jak wirtualne zapory sieciowe dla instancji EC2. Kontrolują, jaki przychodzący (ingress) i wychodzący (egress) ruch sieciowy może docierać do instancji lub ją opuszczać.
Ich prawidłowa konfiguracja ma kluczowe znaczenie dla ochrony serwerów przed nieautoryzowanym dostępem przy jednoczesnym zezwoleniu na korzystanie z niezbędnych usług, takich jak SSH lub HTTP.
Tworzenie grupy zabezpieczeń
Grupę zabezpieczeń definiuje się za pomocą zasobu aws_security_group. Dodamy regułę ingress, aby zezwolić na dostęp SSH (port 22) z dowolnego miejsca (0.0.0.0/0).
Należy określić istniejący element vpc_id, w którym ma znajdować się grupa zabezpieczeń.
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"
}
}Dołączanie grupy zabezpieczeń do EC2
Zaktualizujmy teraz nasz zasób aws_instance, aby korzystał z nowej grupy zabezpieczeń. Odwołujemy się do identyfikatora grupy zabezpieczeń za pomocą aws_security_group.allow_ssh.id.
Należy pamiętać o zastąpieniu wartości vpc_id w grupie zabezpieczeń rzeczywistym identyfikatorem VPC z konta AWS, aby konfigurację można było uruchomić.
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"
}
}Sieć EC2: VPC i podsieci
Każda instancja EC2 znajduje się w obrębie Virtual Private Cloud (VPC) oraz konkretnej podsieci w tym VPC. VPC to odizolowana sieć wirtualna, a podsieci są logicznymi podziałami VPC (np. publicznymi lub prywatnymi).
Domyślnie EC2 może zostać uruchomiona w domyślnym VPC lub podsieci. Aby uzyskać większą kontrolę i lepiej uporządkować środowisko, często określa się podsieć, z której instancja ma korzystać.
Tworzenie podstawowej sieci
Aby w pełni kontrolować sieć naszej instancji EC2, zdefiniujmy minimalny VPC i publiczną podsieć. Wymaga to również Internet Gateway zapewniającego dostęp publiczny oraz Route Table kierującej ruchem.
Ta kompletna konfiguracja zapewnia instancji EC2 komunikację z internetem.
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 w niestandardowej sieci
Połączmy teraz wszystkie elementy: niestandardowy VPC, podsieć, grupę zabezpieczeń i instancję EC2. Instancja EC2 zostanie uruchomiona w określonej publicznej podsieci i automatycznie otrzyma publiczny adres IP.
Ta kompletna konfiguracja zapewnia szczegółową kontrolę nad wdrożeniem EC2 i umożliwia dostęp za pośrednictwem 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"
}
}Sprawdzanie konfiguracji EC2
Które z poniższych argumentów są niezbędne do zdefiniowania podstawowego zasobu aws_instance w Terraform?
Podsumowanie: EC2 z Terraform
Świetnie! Nauczyli się Państwo aprowizować instancje Amazon EC2 za pomocą Terraform.
- Zdefiniowaliśmy instancje EC2 za pomocą zasobu
aws_instance. - Zabezpieczyliśmy je za pomocą
aws_security_group, kontrolując ruch sieciowy. - Skonfigurowaliśmy podstawową niestandardową sieć (VPC, podsieć, bramę internetową i tabelę routingu), w której działają nasze instancje EC2.
- Mają już Państwo podstawy do wdrażania i zarządzania serwerami wirtualnymi jako kodem!
Często zadawane pytania
Czy lekcja „Udostępnianie instancji EC2” jest bezpłatna?
Tak — pełny tekst „Udostępnianie instancji EC2” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Terraform Infrastructure as Code, przejdź na CoddyKit PRO. Kurs Terraform Infrastructure as Code zawiera 4 lekcji w sumie.
Co nauczysz się w „Udostępnianie instancji EC2”?
Napiszą Państwo konfiguracje Terraform do wdrażania i zarządzania maszynami wirtualnymi Amazon EC2, w tym ustawieniami sieci i grup zabezpieczeń. Ćwiczysz Terraform Infrastructure as Code z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Terraform Infrastructure as Code?
Nie wymagamy żadnego doświadczenia. Terraform Infrastructure as Code w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Udostępnianie instancji EC2”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Terraform Infrastructure as Code?
Tak. Każda lekcja Terraform Infrastructure as Code zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Konfiguracja dostawcy AWS
- Udostępnianie instancji EC2
- Zarządzanie zasobnikami S3 i IAM
- Konfigurowanie VPC i sieci