بناء شبكة خاصة افتراضية AWS Terraform خطوة بخطوة

إذا كنت بحاجة إلى إعداد شبكة افتراضية خاصة (VPC) على AWS، فيمكنك القيام بذلك عبر واجهة تحكم إدارة AWS ولكن الأتمتة تجلب المتعة أكثر! في سيناريو DevOps، بناء خدمات AWS عبر أدوات مثل Terraform هو نهج أكثر توسعًا وأتمتة لتوفير موارد السحابة.

في هذا البرنامج التعليمي، ستتعلم كيفية بناء وتشغيل تكوين Terraform لبناء VPC من البداية!

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

سيكون هذا المنشور برنامجًا تعليميًا خطوة بخطوة. إذا كنت ترغب في متابعة الخطوات، تأكد من وجود ما يلي:

  • Terraform – سيستخدم هذا البرنامج التعليمي Terraform v0.14.9 يعمل على Ubuntu 18.04.5 LTS، ولكن أي نظام تشغيل يحتوي على Terraform ينبغي أن يعمل.
  • A code editor – Even though you can use any text editor to work with Terraform configuration files, you should have one that understands the HCL Terraform language. Try out Visual Studio (VS) Code.

فهم شبكات AWS VPCs

تحتوي خدمة AWS Cloud على العديد من الخدمات المختلفة من الحوسبة والتخزين والشبكات وغيرها. يمكن لكل هذه الخدمات التواصل مع بعضها البعض تمامًا مثل خدمات مركز البيانات الخاص بالموقع. ومع ذلك ، فإن كل خدمة من هذه الخدمات مستقلة عن بعضها البعض ، وليست بالضرورة معزولة عن الخدمات الأخرى. يقوم AWS VPC بتغيير ذلك.

يعد AWS VPC شبكة واحدة تتيح لك تشغيل خدمات AWS داخل شبكة معزولة واحدة. من الناحية التقنية ، يكاد AWS VPC يكون مشابهًا تمامًا لامتلاك مركز بيانات ولكن مع مزايا إضافية مدمجة مثل التوسع القابل للتوسع ، والمرونة ، والتخزين غير المحدود ، وما إلى ذلك.

AWS VPC architecture

تقتصر AWS VPC على المنطقة. لا يمكنك أن تمتد VPC واحد عبر المناطق ، مع دعم ما يصل إلى خمسة VPC لكل منطقة.

بناء تكوين Terraform لـ AWS VPC

كفى حديثًا ، دعنا نبدأ في البناء!

1. للبدء ، أنشئ مجلدًا لتخزين ملفات تكوين Terraform الخاصة بك. ستقوم هذه الدروس بإنشاء مجلد يسمى terraform-vpc-demo في دليل المنزل الخاص بك.

mkdir ~/terraform-vpc-demo
 cd ~/terraform-vpc-demo

2. افتح محرر الكود المفضل لديك وانسخ/الصق التكوين التالي الذي تم إنشاؤه بالفعل لك واحفظ الملف بصيغة main.tf داخل الدليل ~/terraform-vpc-demo. يتم وضع معلومات حول كل مورد يجب إنشاؤه ضمن الملف.

يحتوي ملف main.tf على جميع الموارد التي يجب توفيرها.

يستخدم Terraform عدة أنواع مختلفة من ملفات التكوين. يتم كتابة كل ملف إما بتنسيق نص عادي أو بتنسيق JSON. لديهم تسمية محددة إما بتنسيق .tf أو .tfjson.

تكوين Terraform أدناه:

  • ينشئ VPC
  • ينشئ بوابة إنترنت ويربطها بـ VPC للسماح لحركة المرور داخل VPC بأن تكون متاحة من قبل العالم الخارجي.
  • ينشئ شبكة فرعية عامة وخاصة

الشبكات الفرعية هي شبكات داخل شبكات. تم تصميمها لمساعدة تدفق حركة المرور عبر الشبكة على أن تكون أكثر كفاءة وتوفير “شظايا” أصغر وأكثر إدارة من عناوين IP

  • ينشئ جدول توجيه للشبكات الفرعية العامة والخاصة ويقوم بربط الجدول بكل من الشبكات الفرعية
  • ينشئ بوابة NAT لتمكين الشبكات الفرعية الخاصة من الوصول إلى الإنترنت دون الحاجة إلى تعيين عنوان IP مسار خارجي لكل مورد.
Create the VPC
 resource "aws_vpc" "Main" {                # إنشاء VPC هنا
   cidr_block       = var.main_vpc_cidr     # تعريف كتلة CIDR استخدم 10.0.0.0/24 للعرض التوضيحي
   instance_tenancy = "default"
 }
 Create Internet Gateway and attach it to VPC
 resource "aws_internet_gateway" "IGW" {    # إنشاء بوابة الإنترنت
    vpc_id =  aws_vpc.Main.id               # سيتم توليد vpc_id بعد إنشاء VPC
 }
 Create a Public Subnets.
 resource "aws_subnet" "publicsubnets" {    # إنشاء الشبكات الفرعية العامة
   vpc_id =  aws_vpc.Main.id
   cidr_block = "${var.public_subnets}"        # كتلة CIDR للشبكات الفرعية العامة
 }
 Create a Private Subnet                   # إنشاء الشبكات الفرعية الخاصة
 resource "aws_subnet" "privatesubnets" {
   vpc_id =  aws_vpc.Main.id
   cidr_block = "${var.private_subnets}"          # كتلة CIDR للشبكات الفرعية الخاصة
 }
 Route table for Public Subnet's
 resource "aws_route_table" "PublicRT" {    # إنشاء RT للشبكة الفرعية العامة
    vpc_id =  aws_vpc.Main.id
         route {
    cidr_block = "0.0.0.0/0"               # يصل المرور من الشبكة الفرعية العامة إلى الإنترنت عبر بوابة الإنترنت
    gateway_id = aws_internet_gateway.IGW.id
     }
 }
 Route table for Private Subnet's
 resource "aws_route_table" "PrivateRT" {    # إنشاء RT للشبكة الفرعية الخاصة
   vpc_id = aws_vpc.Main.id
   route {
   cidr_block = "0.0.0.0/0"             # يصل المرور من الشبكة الفرعية الخاصة إلى الإنترنت عبر بوابة NAT
   nat_gateway_id = aws_nat_gateway.NATgw.id
   }
 }
 Route table Association with Public Subnet's
 resource "aws_route_table_association" "PublicRTassociation" {
    subnet_id = aws_subnet.publicsubnets.id
    route_table_id = aws_route_table.PublicRT.id
 }
 Route table Association with Private Subnet's
 resource "aws_route_table_association" "PrivateRTassociation" {
    subnet_id = aws_subnet.privatesubnets.id
    route_table_id = aws_route_table.PrivateRT.id
 }
 resource "aws_eip" "nateIP" {
   vpc   = true
 }
 Creating the NAT Gateway using subnet_id and allocation_id
 resource "aws_nat_gateway" "NATgw" {
   allocation_id = aws_eip.nateIP.id
   subnet_id = aws_subnet.publicsubnets.id
 }

3. الآن ، أنشئ ملفًا آخر داخل ~/terraform-vpc-demo الدليل ، اسمه vars.tf والصق المحتوى أدناه.

Vars.tf هو ملف متغيرات Terraform يحتوي على جميع المتغيرات التي يشير إليها ملف التكوين.

يمكنك رؤية مراجع المتغيرات في ملف التكوين عن طريق:

  • var.region
  • var.main_vpc_cidr
  • var.public_subnets
  • var.private_subnets
variable "region" {}
 variable "main_vpc_cidr" {}
 variable "public_subnets" {}
 variable "private_subnets" {}

يمكن تضمين جميع قيم التكوين في ملف تكوين واحد. من أجل الوضوح وتسهيل الأمور على المطورين والمسؤولين ، من المهم تجزئة الأمور.

4. قم بإنشاء ملف إضافي داخل الدليل ~/terraform-vpc-demo، قم بلصق الكود التالي ، وقم بتسميته كـ provider.tf لتعريف مزود AWS. سيقوم البرنامج التعليمي بإنشاء موارد في منطقة us-east-2.

يعرف ملف المزود مزودين مثل AWS و Oracle أو Azure ، إلخ ، بحيث يمكن لـ Terraform الاتصال بخدمات السحابة الصحيحة. provider "aws" { region = "us-east-2" }

provider "aws" {
   region = "us-east-2"
 }

5. أخيرًا ، أنشئ ملفًا آخر داخل الدليل ~/terraform-vpc-demo ، اسمه terraform.tfvars، وقم بلصق الكود أدناه. يحتوي هذا الملف على القيم التي ستستخدمها Terraform لاستبدال مراجع المتغير داخل ملف التكوين.

main_vpc_cidr = "10.0.0.0/24"
 public_subnets = "10.0.0.128/26"
 private_subnets = "10.0.0.192/26"

الآن ، افتح الطرفية المفضلة لديك (Bash في هذه الحالة) وتحقق من وجود جميع الملفات المطلوبة أدناه في المجلد عن طريق تشغيل أمر tree.

tree terraform-vpc-demo  
Folder structure of terraform files

تشغيل Terraform لإنشاء VPC AWS

الآن بعد أن لديك ملف تكوين Terraform وملفات المتغيرات جاهزة للاستخدام، حان الوقت لبدء Terraform وإنشاء الشبكة الخاصة الظاهرية! لتوفير تكوين Terraform، يستخدم Terraform عادة نهجًا يتألف من ثلاث مراحل terraform initterraform planterraform apply. دعونا نمشي خلال كل مرحلة الآن.

1. افتح نافذة الأوامر وانتقل إلى الدليل ~\terraform-vpc-demo.

cd ~\terraform-vpc-demo

2. قم بتشغيل الأمر terraform init في نفس الدليل. يقوم الأمر terraform init بتهيئة المكونات الإضافية ومزودي الخدمة اللازمين للعمل مع الموارد.

terraform init

إذا كانت جميع الأمور على ما يرام، يجب أن ترى الرسالة تمت تهيئة Terraform بنجاح في الناتج، كما هو موضح أدناه.

Terraform initialized successfully

3. الآن، قم بتشغيل الأمر terraform plan. هذا إجراء اختياري، ولكنه إجراء موصى به للتأكد من صحة بنية تكوينك وللحصول على نظرة عامة على الموارد التي سيتم توفيرها في بنيتك التحتية. terraform plan

terraform plan

إذا نجحت، يجب أن ترى رسالة مثل خطة: "X" للإضافة، "Y" للتغيير، أو "Z" للتدمير في الإخراج للإشارة إلى نجاح الأمر. سترى أيضًا كل مورد AWS ينوي Terraform إنشاءه.

Plan command execution

4. بعد ذلك، قل لـ Terraform بالفعل تقديم VPC والموارد الخاصة به باستخدام terraform apply. عند استدعاء terraform apply، سيقرأ Terraform التكوين (main.tf) والملفات الأخرى لتجميع تكوين. ثم سيُرسل هذا التكوين إلى AWS كتعليمات لبناء VPC وغيرها من المكونات.

terraform apply
Terraform apply command execution

لاحظ الهويات المعرفة في إخراج Terraform. ستحتاج إلى هذه الهويات لربط الموارد التي تم إنشاؤها في القسم التالي.

تم تنفيذ أمر Terraform بنجاح، لنتحول الآن إلى واجهة تحكم إدارة AWS للتحقق من أن VPC والمكونات تم إنشاؤها بنجاح.

التحقق من AWS Terraform VPC

بحلول الآن، يجب أن تكون قد قمت بإنشاء VPC باستخدام Terraform. لنتحقق يدويًا من ذلك من خلال التحقق من وجود VPC في واجهة تحكم إدارة AWS.

1. افتح متصفح الويب المفضل لديك وانتقل إلى واجهة تحكم إدارة AWS وقم بتسجيل الدخول.

2. أثناء التواجد في الواجهة، انقر على شريط البحث في الأعلى، ابحث عن “vpc”، وانقر على عنصر القائمة VPC.

Navigating to the VPC service

3. بمجرد الوصول إلى صفحة VPC، انقر على Your VPCs. يجب أن ترى VPC الذي تم إنشاؤه بنفس الهوية التي أعادتها Terraform في وقت سابق.

VPC created

4. منذ أن قام Terraform بإنشاء أكثر من مجرد مورد VPC ولكن جميع الموارد المطلوبة لـ VPC، يجب عليك بعد ذلك العثور على كل مورد في هذه الصفحة أيضًا.

Subnets created
Route tables created
Internet Gateway created
NAT Gateway created

مع إنشاء جميع المكونات بنجاح، باستخدام Terraform، فإن هذا VPC جاهز للتشغيل!

الختام

في هذا البرنامج التعليمي، لقد تعلمت كيفية استخدام Terraform لنشر VPC AWS ومكوناتها باستخدام Terraform.

إن بناء Amazon Virtual Private Cloud بواسطة Terraform يتيح لك إنشاء الموارد بسرعة وسهولة وبشكل متوقع. أنت الآن جاهز لاستخدام هذه المعرفة مع خدمات AWS الأخرى وبناء خدمات قوية فوقها.

Source:
https://adamtheautomator.com/terraform-vpc/