Trong bài viết này, tôi sẽ chỉ cho bạn cách tạo VPC cùng với Subnet, Internet Gateway, NAT Gateway và Route Table. Chúng ta sẽ tạo 1 VPC với 4 Subnet: 2 Private và 2 Public, 2 NAT Gateway, 1 Internet Gateway và 4 Route Table.
Trước khi tiếp tục, tôi cho rằng bạn đã có hiểu biết cơ bản về Terraform và VPC trên AWS. Để tìm hiểu về VPC và cách tạo VPC từ bảng điều khiển AWS, bạn có thể nhấp vào đây và để tìm hiểu những điều cơ bản về Terraform, bạn có thể tìm kiếm "Terraform là gì và cách cài đặt trên AWS EC2 Instance?"
Sử dụng lệnh sau để tạo một thư mục và thay đổi thư mục làm việc hiện tại của bạn thành thư mục đó.
Tôi đang sử dụng "vim" làm trình soạn thảo để viết vào các tệp. Bạn có thể sử dụng trình soạn thảo theo lựa chọn của mình và sao chép-dán các cấu hình sau để tạo variables.tf, terraform.tfvars vàmain.tf
Tạo 'main.tf', chịu trách nhiệm tạo VPCon cho AWS với các tài nguyên phụ thuộc. Main.tf này sẽ đọc các giá trị của các biến từ variables.tf và terraform.tfvars.
Tạo 'variables.tf' chứa khai báo và định nghĩa của các biến.
Tạo 'terraform.tfvars' chứa định nghĩa của các biến access_key và secret_key được xác định trong tệp ở trên. Chúng tôi đã giữ nguyên khai báo của hai biến này trong tệp 'terraform.tfvars'.
Các khóa sau đây cần được thay đổi bằng các khóa của người dùng IAM của bạn.
Bây giờ, bạn sẽ có 3 tệp, tức là variables.tf, terraform.tfvars và main.tf
Lệnh đầu tiên được sử dụng là 'terraform init'. Lệnh này tải xuống và cài đặt các plugin cho các nhà cung cấp được sử dụng trong cấu hình. Trong trường hợp của chúng tôi, đó là AWS.
Lệnh thứ hai được sử dụng là 'terraform plan'. Lệnh này được sử dụng để xem những thay đổi sẽ diễn ra trên cơ sở hạ tầng.
Lệnh 'terraform apply' sẽ tạo các tài nguyên trên AWS được đề cập trong tệp main.tf. Bạn sẽ được nhắc nhập thông tin đầu vào để tạo tài nguyên.
Khi bạn thực thi lệnh trên, bạn có thể thấy rằng 20 tài nguyên mới đã được thêm vào và 0 đã bị hủy trong kết quả đầu ra.
Bạn có thể vào bảng điều khiển AWS VPC để xác minh xem VPC có được tạo cùng với Subnet, Route Tables NAT Gateways và Internet Gateway hay không.[/b]
Khi bạn thực thi lệnh trên, bạn có thể thấy rằng 20 tài nguyên đã tạo đã bị hủy trong kết quả đầu ra. Bạn có thể xác minh điều tương tự bằng cách truy cập AWS trong Bảng điều khiển VPC.
Trước khi tiếp tục, tôi cho rằng bạn đã có hiểu biết cơ bản về Terraform và VPC trên AWS. Để tìm hiểu về VPC và cách tạo VPC từ bảng điều khiển AWS, bạn có thể nhấp vào đây và để tìm hiểu những điều cơ bản về Terraform, bạn có thể tìm kiếm "Terraform là gì và cách cài đặt trên AWS EC2 Instance?"
Điều kiện tiên quyết
- Hiểu biết cơ bản về Terraform.
- Terraform được cài đặt trên hệ thống của bạn.
- Tài khoản AWS (Tạo nếu bạn chưa có).
- 'access_key' & 'secret_key' của Người dùng AWS IAM. (Nhấp vào đây để tìm hiểu cách tạo người dùng IAM bằng 'access_key' và 'secret_key' trên AWS, )
Những gì chúng ta sẽ làm
- Viết các tệp cấu hình Terraform để tạo VPC với các tài nguyên phụ thuộc khác.
- Tạo VPC và các tài nguyên phụ thuộc khác bằng các tệp cấu hình Terraform
- Xóa VPC và các tài nguyên phụ thuộc khác đã tạo bằng Terraform
Viết các tệp cấu hình Terraform để tạo VPC với các tài nguyên phụ thuộc khác.
Tạo một thư mục chuyên dụng nơi bạn có thể tạo các tệp cấu hình Terraform.Sử dụng lệnh sau để tạo một thư mục và thay đổi thư mục làm việc hiện tại của bạn thành thư mục đó.
Mã:
mkdir terraform[B]cd terraform/
Tạo 'main.tf', chịu trách nhiệm tạo VPCon cho AWS với các tài nguyên phụ thuộc. Main.tf này sẽ đọc các giá trị của các biến từ variables.tf và terraform.tfvars.
Mã:
[I]vim main.tf[/I]
Mã:
provider "aws" { region = "${var.region}" access_key = "${var.access_key}" secret_key = "${var.secret_key}"}# Tài nguyên VPC: Điều này sẽ tạo 1 VPC với 4 Mạng con, 1 Cổng Internet, 4 Bảng định tuyến.tài nguyên "aws_vpc" "mặc định" { cidr_block = var.cidr_block enable_dns_support = true enable_dns_hostnames = true}tài nguyên "aws_internet_gateway" "mặc định" { vpc_id = aws_vpc.default.id}tài nguyên "aws_route_table" "riêng tư" { count = chiều dài(var.private_subnet_cidr_blocks) vpc_id = aws_vpc.default.id}tài nguyên "aws_route" "riêng tư" { count = chiều dài(var.private_subnet_cidr_blocks) route_table_id = aws_route_table.private[count.index].id destination_cidr_block = "0.0.0.0/0" nat_gateway_id = aws_nat_gateway.default[count.index].id}tài nguyên "aws_route_table" "công khai" { vpc_id = aws_vpc.default.id}tài nguyên "aws_route" "public" { route_table_id = aws_route_table.public.id destination_cidr_block = "0.0.0.0/0" gateway_id = aws_internet_gateway.default.id}tài nguyên "aws_subnet" "private" { count = length(var.private_subnet_cidr_blocks) vpc_id = aws_vpc.default.id cidr_block = var.private_subnet_cidr_blocks[count.index] availability_zone = var.availability_zone[count.index]}tài nguyên "aws_subnet" "public" { count = length(var.public_subnet_cidr_blocks) vpc_id = aws_vpc.default.id cidr_block = var.public_subnet_cidr_blocks[count.index] availability_zone = var.availability_zones[count.index] map_public_ip_on_launch = true}resource "aws_route_table_association" "private" { count = length(var.private_subnet_cidr_blocks) subnet_id = aws_subnet.private[count.index].id route_table_id = aws_route_table.private[count.index].id}resource "aws_route_table_association" "public" { count = length(var.public_subnet_cidr_blocks) subnet_id = aws_subnet.public[count.index].id route_table_id = aws_route_table.public.id}# Tài nguyên NAT: Điều này sẽ tạo 2 cổng NAT trong 2 Mạng con công khai cho 2 Mạng con riêng tư khác nhau.tài nguyên "aws_eip" "nat" { count = length(var.public_subnet_cidr_blocks) vpc = true}tài nguyên "aws_nat_gateway" "default" { phụ thuộc = ["aws_internet_gateway.default"] count = length(var.public_subnet_cidr_blocks) allocation_id = aws_eip.nat[count.index].id subnet_id = aws_subnet.public[count.index].id}[B][/b]
Tạo 'variables.tf' chứa khai báo và định nghĩa của các biến.
Mã:
vim variables.tf
Mã:
biến "access_key" { mô tả = "Khóa truy cập vào bảng điều khiển AWS"}biến "secret_key" { mô tả = "Khóa bí mật vào bảng điều khiển AWS"}biến "region" { mặc định = "eu-west-3" loại = chuỗi mô tả = "Khu vực của VPC"}biến "cidr_block" { mặc định = "10.0.0.0/16" loại = chuỗi mô tả = "Khối CIDR cho VPC"}biến "public_subnet_cidr_blocks" { mặc định = ["10.0.0.0/24", "10.0.2.0/24"] loại = danh sách mô tả = "Danh sách các khối CIDR mạng con công khai"}biến "private_subnet_cidr_blocks" { mặc định = ["10.0.1.0/24", "10.0.3.0/24"] loại = danh sách mô tả = "Danh sách các khối CIDR mạng con riêng tư blocks"}biến "availability_zones" { mặc định = ["eu-west-3a", "eu-west-3b"] loại = danh sách mô tả = "Danh sách các vùng khả dụng"}
Các khóa sau đây cần được thay đổi bằng các khóa của người dùng IAM của bạn.
Mã:
[I]vim terraform.tfvars[/I]
Mã:
access_key = "AKIAQ6GAIA5XIHHM2GJM"secret_key = "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"
Tạo VPC và các tài nguyên phụ thuộc khác bằng cách sử dụng các tệp cấu hình Terraform
Trước khi thực hiện các lệnh sau, hãy đảm bảo rằng bạn đã định cấu hình hợp lệ access_key và secret_key.Lệnh đầu tiên được sử dụng là 'terraform init'. Lệnh này tải xuống và cài đặt các plugin cho các nhà cung cấp được sử dụng trong cấu hình. Trong trường hợp của chúng tôi, đó là AWS.
Mã:
terraform init
Mã:
terraform plan
Mã:
terraform apply
Bạn có thể vào bảng điều khiển AWS VPC để xác minh xem VPC có được tạo cùng với Subnet, Route Tables NAT Gateways và Internet Gateway hay không.[/b]
Xóa VPC đã tạo và các tài nguyên phụ thuộc khác bằng Terraform
Nếu bạn không còn yêu cầu các tài nguyên đã tạo bằng cấu hình được đề cập trong tệp main.tf nữa, bạn có thể sử dụng lệnh "terraform destroy" để xóa tất cả các tài nguyên đó.
Mã:
terraform destroy