0Pricing
DevOps Bootcamp · บทเรียน

การจัดเตรียมอินสแตนซ์ EC2

เขียนการตั้งค่า Terraform เพื่อจัดเตรียมและจัดการเครื่องเสมือน Amazon EC2 รวมถึงการตั้งค่าเครือข่ายและกลุ่มความปลอดภัย

การจัดเตรียมอินสแตนซ์ EC2 เป็นบทเรียน DevOps Bootcamp ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน DevOps Bootcamp และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน

อินสแตนซ์ EC2 ด้วยเทอร์ราฟอร์ม

ยินดีต้อนรับ! ในบทเรียนนี้ คุณจะเรียนรู้การจัดเตรียมและจัดการเครื่องเสมือน Amazon EC2 ด้วยเทอร์ราฟอร์ม

EC2 (Elastic Compute Cloud) ให้บริการเซิร์ฟเวอร์เสมือนที่ปรับขนาดได้บนคลาวด์ การใช้โครงสร้างพื้นฐานในรูปแบบโค้ด (IaC) ร่วมกับเทอร์ราฟอร์มสำหรับ EC2 ช่วยให้คุณกำหนดเซิร์ฟเวอร์ด้วยโค้ด และทำให้การนำไปใช้งานมีความสอดคล้องและทำซ้ำได้

กำหนดอินสแตนซ์ EC2

ทรัพยากรหลักสำหรับอินสแตนซ์ EC2 ในเทอร์ราฟอร์มคือ aws_instance คุณต้องระบุอาร์กิวเมนต์สำคัญอย่างน้อยสองรายการ:

  • ami: Amazon Machine Image ซึ่งประกอบด้วยระบบปฏิบัติการและซอฟต์แวร์ที่จะใช้
  • 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 ของเราให้ใช้กลุ่มความปลอดภัยใหม่นี้ เราอ้างอิง ID ของกลุ่มความปลอดภัยโดยใช้ aws_security_group.allow_ssh.id

อย่าลืมแทนที่ vpc_id ในกลุ่มความปลอดภัยด้วย 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” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส DevOps Bootcamp ให้อัปเกรดเป็น CoddyKit PRO คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การจัดเตรียมอินสแตนซ์ EC2”

เขียนการตั้งค่า Terraform เพื่อจัดเตรียมและจัดการเครื่องเสมือน Amazon EC2 รวมถึงการตั้งค่าเครือข่ายและกลุ่มความปลอดภัย คุณปฏิบัติ DevOps Bootcamp ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน DevOps Bootcamp หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน DevOps Bootcamp บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การจัดเตรียมอินสแตนซ์ EC2” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน DevOps Bootcamp นี้ได้ไหม

ได้ บทเรียน DevOps Bootcamp ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การตั้งค่าผู้ให้บริการ AWS
  2. การจัดเตรียมอินสแตนซ์ EC2
  3. การจัดการบักเก็ต S3 และ IAM
  4. การตั้งค่า VPC และเครือข่าย
← กลับไปที่ DevOps Bootcamp