0Pricing
DevOps Bootcamp · Lezione

Provisioning delle istanze EC2

Scriva configurazioni Terraform per distribuire e gestire macchine virtuali Amazon EC2, incluse le impostazioni di rete e dei security group.

Provisioning delle istanze EC2 è una lezione DevOps Bootcamp gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento DevOps Bootcamp, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso DevOps Bootcamp include 4 lezioni in totale.

Istanze EC2 con Terraform

Benvenuto! In questa lezione imparerà a predisporre e gestire macchine virtuali Amazon EC2 utilizzando Terraform.

EC2 (Elastic Compute Cloud) fornisce server virtuali scalabili nel cloud. Utilizzare l'Infrastructure as Code (IaC) con Terraform per EC2 significa poter definire i server nel codice, garantendo distribuzioni coerenti e ripetibili.

Definire un'istanza EC2

La risorsa principale per un'istanza EC2 in Terraform è aws_instance. È necessario specificare almeno due argomenti fondamentali:

  • ami: l'Amazon Machine Image (sistema operativo e software) da utilizzare.
  • instance_type: la configurazione hardware (ad esempio t2.micro per le istanze idonee al piano gratuito).

Ecco come si presenta un blocco aws_instance di base:

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

  tags = {
    Name = "MyWebServer"
  }
}

Avviare la prima istanza EC2

Mettiamo insieme tutti gli elementi per avviare una semplice istanza EC2. Questa configurazione definisce il provider AWS e l'istanza EC2.

Per eseguire la distribuzione, salvi questo contenuto in un file .tf, quindi esegua terraform init, terraform plan e terraform apply nel terminale.

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"
  }
}

Proteggere EC2: gruppi di sicurezza

I gruppi di sicurezza fungono da firewall virtuali per le istanze EC2. Controllano il traffico di rete in ingresso (ingress) e in uscita (egress) autorizzato a raggiungere o lasciare l'istanza.

È fondamentale configurarli correttamente per proteggere i server dagli accessi non autorizzati consentendo al contempo i servizi necessari, come SSH o HTTP.

Creare un gruppo di sicurezza

Si definisce un gruppo di sicurezza utilizzando la risorsa aws_security_group. Aggiungeremo una regola ingress per consentire l'accesso SSH (porta 22) da qualsiasi origine (0.0.0.0/0).

È necessario specificare un vpc_id esistente in cui collocare il gruppo di sicurezza.

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"
  }
}

Collegare il gruppo di sicurezza a EC2

Ora aggiorniamo la nostra aws_instance per utilizzare questo nuovo gruppo di sicurezza. Facciamo riferimento all'ID del gruppo di sicurezza utilizzando aws_security_group.allow_ssh.id.

Ricordi di sostituire il vpc_id nel gruppo di sicurezza con un ID VPC effettivo del Suo account AWS affinché la configurazione sia eseguibile.

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"
  }
}

Networking EC2: VPC e subnet

Ogni istanza EC2 risiede all'interno di una Virtual Private Cloud (VPC) e di una subnet specifica all'interno di tale VPC. Una VPC è una rete virtuale isolata, mentre le subnet sono suddivisioni logiche della VPC (ad esempio pubbliche o private).

Per impostazione predefinita, EC2 potrebbe avviarsi in una VPC/subnet predefinita. Per un maggiore controllo e una migliore organizzazione, spesso si specifica quale subnet deve utilizzare l'istanza.

Creare una rete di base

Per controllare completamente la rete della nostra EC2, definiamo una VPC minima e una subnet pubblica. Sono inoltre necessari un Internet Gateway per l'accesso pubblico e una Route Table per indirizzare il traffico.

Questa configurazione completa garantisce che l'istanza EC2 possa comunicare con 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 nella rete personalizzata

Ora uniamo tutti gli elementi: una VPC personalizzata, una subnet, un gruppo di sicurezza e la nostra istanza EC2. EC2 verrà avviata nella subnet pubblica specificata e riceverà automaticamente un IP pubblico.

Questa configurazione completa offre un controllo dettagliato sulla distribuzione EC2 e rende l'istanza accessibile tramite 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 della configurazione EC2

Quali dei seguenti argomenti sono essenziali per definire una risorsa aws_instance di base in Terraform?

Riepilogo: EC2 con Terraform

Ottimo lavoro! Ha imparato a effettuare il provisioning di istanze Amazon EC2 usando Terraform.

  • Abbiamo definito le istanze EC2 usando la risorsa aws_instance.
  • Le abbiamo protette con aws_security_group, controllando il traffico di rete.
  • Abbiamo configurato una rete personalizzata di base (VPC, subnet, gateway Internet, tabella di routing) per ospitare le nostre istanze EC2.
  • Ora dispone delle basi necessarie per distribuire e gestire i server virtuali come codice!

Domande Frequenti

La lezione «Provisioning delle istanze EC2» è gratuita?

Sì — il testo completo di «Provisioning delle istanze EC2» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso DevOps Bootcamp, passa a CoddyKit PRO. Il corso DevOps Bootcamp include 4 lezioni in totale.

Cosa imparerò in «Provisioning delle istanze EC2»?

Scriva configurazioni Terraform per distribuire e gestire macchine virtuali Amazon EC2, incluse le impostazioni di rete e dei security group. Eserciti DevOps Bootcamp con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare DevOps Bootcamp?

Non è richiesta alcuna esperienza precedente. DevOps Bootcamp su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Provisioning delle istanze EC2»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione DevOps Bootcamp?

Sì. Ogni lezione DevOps Bootcamp include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Configurazione del provider AWS
  2. Provisioning delle istanze EC2
  3. Gestione dei bucket S3 e di IAM
  4. Configurare VPC e networking
← Torna a DevOps Bootcamp