recent
أخبار ساخنة

شرح أنشاء سحابة افتراضية خاصة (VPC) على AWS باستخدام Terraform ... بالخطوات

الصفحة الرئيسية
شرح أنشاء سحابة افتراضية خاصة (VPC) على AWS باستخدام Terraform ... بالخطوات



سنشرح كيفية إنشاء VPC جنبًا إلى جنب مع Subnets و Internet Gateway  و NAT Gateways و Route Tables.

 سنقوم بإنشاء  VPC واحدة مع 4 Subnets:
 2 Private  و  2 Public و 2 NAT Gateways و   , Internet Gateways  واحدة و 4 Route Tables.

يفترض أن لديك فهمًا أساسيًا لـ Terraform و VPC على AWS.

المتطلبات المسبقة

الفهم الأساسي لـ Terraform.

تثبيت Terraform على نظامك.
AWS Account ( أنشئ واحداً إذا لم يكن لديك).
"access_key" و "secret_key" لمستخدم AWS IAM.

كتابة Terraform لإنشاء VPC باستخدام موارد أخرى.

قم بإنشاء مجلد مخصص حيث يمكنك إنشاء ملف إعدادات  الـ terraform.

استخدم الأمر التالي لإنشاء مجلد وتغيير مجلد العمل الحالي إليه.


mkdir terraform
cd terraform/



قم بإنشاء main.tf وهو المسؤول عن إنشاء VPC على AWS باستخدام الموارد التابعة (dependent resources).

 سيقرأ main.tf قيم المتغيرات من الـ variables.tf  و terraform.tfvars.

vim main.tf
provider "aws" {
      region     = "${var.region}"
      access_key = "${var.access_key}"
      secret_key = "${var.secret_key}"
}


# VPC resources: This will create 1 VPC with 4 Subnets, 1 Internet Gateway, 4 Route Tables. 

resource "aws_vpc" "default" {
  cidr_block           = var.cidr_block
  enable_dns_support   = true
  enable_dns_hostnames = true
}

resource "aws_internet_gateway" "default" {
  vpc_id = aws_vpc.default.id
}

resource "aws_route_table" "private" {
  count = length(var.private_subnet_cidr_blocks)

  vpc_id = aws_vpc.default.id
}

resource "aws_route" "private" {
  count = length(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
}

resource "aws_route_table" "public" {
  vpc_id = aws_vpc.default.id
}

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

resource "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_zones[count.index]
}

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


# NAT resources: This will create 2 NAT gateways in 2 Public Subnets for 2 different Private Subnets.

resource "aws_eip" "nat" {
  count = length(var.public_subnet_cidr_blocks)

  vpc = true
}

resource "aws_nat_gateway" "default" {
  depends_on = ["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
}


قم بإنشاء variables.tf الذي يحتوي على تعريفات المتغيرات.


vim variables.tf
variable "access_key" {
     description = "Access key to AWS console"
     
}
variable "secret_key" {
     description = "Secret key to AWS console"
     
}

variable "region" {
  default     = "eu-west-3"
  type        = string
  description = "Region of the VPC"
}


variable "cidr_block" {
  default     = "10.0.0.0/16"
  type        = string
  description = "CIDR block for the VPC"
}

variable "public_subnet_cidr_blocks" {
  default     = ["10.0.0.0/24", "10.0.2.0/24"]
  type        = list
  description = "List of public subnet CIDR blocks"
}

variable "private_subnet_cidr_blocks" {
  default     = ["10.0.1.0/24", "10.0.3.0/24"]
  type        = list
  description = "List of private subnet CIDR blocks"
}

variable "availability_zones" {
  default     = ["eu-west-3a", "eu-west-3b"]
  type        = list
  description = "List of availability zones"
}


قم بإنشاء terraform.tfvars الذي يحتوي على تعريف متغيرات access_key و secret_key.
يجب تغيير المفاتيح التالية باستخدام مفاتيح مستخدم IAM الخاص بك.

vim terraform.tfvars
access_key = "AKIAQ6GAIA5XIHHM2GJM"
secret_key = "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"

الآن  يجب أن يكون لديك 3 ملفات  variables.tf و terraform.tfvars و main.tf.


إنشاء VPC والموارد الأخرى التابعة باستخدام ملفات إعداد Terraform



قبل تنفيذ الأوامر التالية ، تأكد من إعدادات access_key و secret_key.

الأمر الأول الذي يجب استخدامه هو terraform init.
يقوم هذا الأمر بتنزيل وتثبيت المكونات الإضافية المستخدمة في الإعدادات.
 في حالتنا إنها AWS.

terraform init

الأمر الثاني الذي يجب استخدامه هو terraform plan.
يتم استخدام هذا الأمر لمعرفة التغييرات التي ستحدث على البنية التحتية (infrastructure).

terraform plan

سينشئ أمر terraform apply الموارد (resources) على AWS في ملف main.tf.
 سيُطلب منك تقديم مدخلاتك لإنشاء الموارد.

terraform apply


يمكنك أن ترى أنه تمت إضافة 20 موردًا جديدًا وتم إتلاف 0 في الإخراج.

يمكنك الانتقال إلى وحدة تحكم AWS VPC للتحقق مما إذا تم إنشاء VPC جنبًا إلى جنب مع Subnets و  Route Tables  و NAT Gateways و Internet Gateway.

حذف VPC الذي تم إنشاؤه والموارد التابعة باستخدام Terraform


إذا لم تعد بحاجة إلى موارد قمت بإنشائها باستخدام الإعدادات في ملف main.tf فيمكنك استخدام الأمر terraform destroy لحذف كل هذه الموارد.

terraform destroy

عند تنفيذ الأمر  يمكنك أن ترى أن 20 من الموارد التي تم إنشاؤها قد دمرت في الإخراج.

يمكنك التحقق من ذلك من خلال زيارة AWS في لوحة معلومات VPC.

google-playkhamsatmostaqltradent