0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

[Lab 01] Triển khai EC2 trên AWS bằng Terraform: Hướng Dẫn Chi Tiết cho Người Mới Bắt Đầu

Đăng vào 3 tháng trước

• 6 phút đọc


Triển Khai Cơ Sở Hạ Tầng Cloud bằng Terraform

Trong bài viết này, chúng ta sẽ tìm hiểu cách triển khai một máy chủ EC2 trên AWS bằng Terraform, một công cụ quản lý hạ tầng mã nguồn mở, giúp tự động hóa việc xây dựng, thay đổi và phiên bản hóa hạ tầng Cloud.

Xây Dựng Cấu Trúc Thư Mục

Theo hướng dẫn từ trang chính thức của Terraform, cấu trúc thư mục sẽ bao gồm:

  • Hai module chính: ec2networking.

1. Tạo File main.tf trong Thư Mục Gốc

h Copy
terraform {
    required_providers {
        aws = {
            source  = "hashicorp/aws"
            version = "~> 4.16"
        }
    }

    required_version = ">= 1.2.0"
}

provider "aws" {
    region     = var.aws.region
    access_key = var.aws.access_key
    secret_key = var.aws.secret_key

    default_tags {
        tags = {
            Name = var.tag.name
        }
    }
}

2. Khai Báo Biến trong File variables.tf

h Copy
variable "aws" {
    sensitive = true
    type = object({
        region     = string
        access_key = string
        secret_key = string
    })
}

variable "tag" {
    type = object({
        name = string
    })

    default = {
        name = "learning"
    }
}

3. Gắn Giá Trị Biến trong File terraform.tfvars

h Copy
# Cấu Hình AWS Provider
aws = {
    region     = <AWS_region>
    access_key = <AWS_access_key>
    secret_key = <AWS_secret_key>
}

# Tên Tag Mặc Định
tag = {
    name = "learning"
}

# Cấu Hình Mạng
networking = {
    vpc_cidr_block    = "10.0.0.0/16"
    subnet_cidr_block = "10.0.1.0/24"
}

4. File output.tf Để Xuất Giá Trị Ra Màn Hình

h Copy
output "instance_public_ip" {
    description = "Địa chỉ IP công cộng của EC2 instance"
    value       = module.ec2.instance_public_ip
}

Khởi Tạo Workspace

Sau khi khai báo xong, sử dụng lệnh sau để khởi tạo workspace:

h Copy
terraform init

Điều này sẽ tạo ra thư mục .terraform và file .terraform.lock.hcl.

Xây Dựng Các Module

Chúng ta sẽ xây dựng các module trong thư mục modules.

1. Module Networking

Module này sẽ bao gồm các thành phần như VPC, Public Subnet, Security Group, Route Table, và Internet Gateway.

  • Tạo thư mục networking tại modules/networking và các file main.tf, variables.tf, output.tf.

File main.tf cho Module Networking sẽ như sau:

h Copy
// VPC
resource "aws_vpc" "vpc-learning" {
    cidr_block = var.vpc_cidr_block
}

// Subnet
resource "aws_subnet" "subnet-learning" {
    vpc_id     = aws_vpc.vpc-learning.id
    cidr_block = var.subnet_cidr_block
}

// Internet Gateway
resource "aws_internet_gateway" "gw-learning" {
    vpc_id = aws_vpc.vpc-learning.id
}

// Route Table
resource "aws_route_table" "route-table-learning" {
    vpc_id = aws_vpc.vpc-learning.id
    route {
        cidr_block = "0.0.0.0/0"
        gateway_id = aws_internet_gateway.gw-learning.id
    }
}
resource "aws_route_table_association" "a" {
    subnet_id      = aws_subnet.subnet-learning.id
    route_table_id = aws_route_table.route-table-learning.id
}

// Security Group
resource "aws_security_group" "allow_tls" {
    name        = "allow_tls"
    description = "Cho phép lưu lượng TLS vào và tất cả lưu lượng ra"
    vpc_id      = aws_vpc.vpc-learning.id

    // Quy tắc vào
    ingress {
        from_port   = 22
        to_port     = 22
        protocol    = "tcp"
        cidr_blocks = ["0.0.0.0/0"] // Cho phép SSH từ mọi nơi
    }

   // Quy tắc ra
    egress {
        from_port   = 0
        to_port     = 0
        protocol    = "-1"
        cidr_blocks = ["0.0.0.0/0"]
    }
}

2. Module EC2

Tương tự như module networking, tạo thư mục ec2 tại modules/ec2 và các file main.tf, variables.tf, output.tf.

File main.tf cho Module EC2 như sau:

h Copy
// EC2
resource "aws_instance" "web" {
    ami                         = var.ami
    instance_type               = var.instance_type
    subnet_id                   = var.subnet_id
    vpc_security_group_ids      = [var.security_group_id]
    associate_public_ip_address = true
    key_name                    = var.key_name

    // Chạy lệnh sau khi EC2 được tạo
    provisioner "local-exec" {
        command = "echo IP address is ${self.private_ip}"
    }

    // Thực hiện các lệnh trên EC2
    provisioner "remote-exec" {
        connection {
            type        = "ssh"
            user        = var.user
            private_key = var.key_private
            host        = self.public_ip
        }

        inline = [
            "sudo yum update -y",
            "sudo amazon-linux-extras enable nginx1",
            "sudo yum install -y nginx",
            "sudo systemctl start nginx",
            "sudo systemctl enable nginx"
        ]
    }
}

3. Khai Báo Variables và Xuất Giá Trị

Tạo các variables cần thiết trong variables.tf và sử dụng output.tf để xuất thông tin ra ngoài.

Kết nối giữa các module cũng thông qua việc khai báo biến trong file variables.tf của thư mục gốc để truyền thông tin cần thiết đến từng module tương ứng.

Triển Khai Hệ Thống

Sau khi hoàn thành các bước cấu hình, ta cần khởi tạo lại workspace và thực hiện các lệnh sau:

h Copy
terraform init
terraform fmt
terraform validate

Cuối cùng, thực hiện lệnh terraform apply để triển khai hệ thống lên Cloud. Nếu mọi thứ diễn ra trôi chảy, bạn sẽ nhận được địa chỉ IP công cộng của instance EC2 vừa được tạo ra.

Kết Luận

Bài lab này đã hướng dẫn bạn cách xây dựng một cấu trúc thư mục và triển khai cơ sở hạ tầng Cloud bằng Terraform. Hy vọng bạn sẽ áp dụng kiến thức này trong các dự án thực tế sau này.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào