0Pricing
Terraform Infrastructure as Code · Lekcja

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.micro w 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

  1. Konfiguracja dostawcy AWS
  2. Udostępnianie instancji EC2
  3. Zarządzanie zasobnikami S3 i IAM
  4. Konfigurowanie VPC i sieci
← Powrót do Terraform Infrastructure as Code