การจัดเตรียมอินสแตนซ์ EC2
เขียนการตั้งค่า Terraform เพื่อจัดเตรียมและจัดการเครื่องเสมือน Amazon EC2 รวมถึงการตั้งค่าเครือข่ายและกลุ่มความปลอดภัย
การจัดเตรียมอินสแตนซ์ EC2 เป็นบทเรียน Terraform Infrastructure as Code ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Terraform Infrastructure as Code และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Terraform Infrastructure as Code มีบทเรียนทั้งหมด 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) และปลดล็อคส่วนที่เหลือของคอร์ส Terraform Infrastructure as Code ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Terraform Infrastructure as Code มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การจัดเตรียมอินสแตนซ์ EC2”
เขียนการตั้งค่า Terraform เพื่อจัดเตรียมและจัดการเครื่องเสมือน Amazon EC2 รวมถึงการตั้งค่าเครือข่ายและกลุ่มความปลอดภัย คุณปฏิบัติ Terraform Infrastructure as Code ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Terraform Infrastructure as Code หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Terraform Infrastructure as Code บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การจัดเตรียมอินสแตนซ์ EC2” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Terraform Infrastructure as Code นี้ได้ไหม
ได้ บทเรียน Terraform Infrastructure as Code ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตั้งค่าผู้ให้บริการ AWS
- การจัดเตรียมอินสแตนซ์ EC2
- การจัดการบักเก็ต S3 และ IAM
- การตั้งค่า VPC และเครือข่าย