Table of Contents

وقد أدى هذا الحساب غير القابل للتداول إلى تحويل كيفية قيام الأفرقة ببناء ونشر التطبيقات، وتوفير القدرة على التكرار، والتسعير مقابل الاستخدام، وتخفيض النفقات التشغيلية، غير أن تطبيقات الإنتاج التي لا تخضع لأية طرق تنطوي على أكثر بكثير من مدونة قواعد السلوك، وتحتاج إلى توفير وإدارة عشرات من بوابات الموارد السحابية - أي بي أو قواعد بيانات أو أدوار في نظام إي إم أو إيه أو شكليات أو عناصر إنتاجية غير رسمية، ويجب تكرارها باستمرار.

ما هو تيرافورم؟

Terraform is an open-source IaC tool created by HashiCorp that enables you to provision and manage infrastructure across multiple cloud providers using a declarative formation language known as HCL (HashiCorp Configuration Language) instead of writing imperative scripts that execute step-by-step commands, you declare the desired state of your infrastructure-what resources you want, their properties, and how they relate to each other - and Terraform.

وفي قلب تيرافورم هو خطة التنفيذ، قبل إجراء أي تغييرات، تيرافورم يقارن تشكيلتك مع الوضع الحالي للهياكل الأساسية وينتج خطة مفصلة لما سينشأ أو يستكمل أو يدمر، ويمكن استعراض هذه الخطة (وهذه الخطة، في خطوط الأنابيب CI/CD، تمت الموافقة عليها) قبل تطبيقها، مما يتيح لك حلقة تغذية مأمونة تحول دون حدوث تغييرات غير مقصودة، كما يتتبع مسار الموارد في ملفات الدولة.

Terraform supports hundreds of providers, including all major cloud platforms (AWS, Azure, Google Cloud), as well as SaaS services like Cloudflare, Datadog, and GitHub. For serverless applications on AWS, you will typically use the AWS provider] to define LamESTBda functions,

لماذا يحتاج "سيرفرلاس توبز" إلى بنية أساسية كرمز

وتشمل التطبيقات التي لا تُستخدم في إطارها أي خدمات صغيرة أو مصممة الغرض والتي تُرسل عن طريق المتزامنة أو المتزامنة، ومن بين الوظائف النموذجية التي تُستخدم في إطارها الأحداث بوابة نظامية تتلقى طلبات من شركة " هاتيمبو " ، ووظيفة " لامبدا " لتجهيزها، وجدول " دينامو " لتخزين النتائج، وطرح أسئلة عن العمل العازل لوظيفة يدوية ثانية تشمل إنشاء هذه الموارد.

  • Inconsistency:] Different environments (dev, staging, prod) inevitably turn apart when created manually.
  • No version history: ] Who changed the DynamoDB read capacity? when?
  • Recreation disasters: ] After a disaster, you would need to refigure everything from الصفر, hope you remember every setting.
  • Time waste:] Clicking through the console for each resource consumes hours that should go into application logical.

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

الفوائد الرئيسية لاستخدام الترافيم في خدمة عديمي الفائدة

وفي حين يمكن استخدام أي أداة من أدوات لجنة التنسيق الدولية لإدارة الهياكل الأساسية التي لا تخدم الحاسوب، فإن " تيرافورم " توفر مزايا متميزة تتوافق بشكل جيد مع احتياجات الأفرقة التي لا تخدم الحاسوب.

التشغيل الكامل لدراجة الحياة

ولا يقتصر الأمر على توفير الموارد فحسب بل يستكملها ويدمرها، وعندما تحتاج إلى تغيير حجم الذاكرة في وظيفة لامبدا أو إسناد شركة تي تي إل إلى طاولة دينامو دي بي، تقومون ببساطة بتحديث التشكيلة وتديرون وعندما يتم ذلك باستخدام مورد، فإن نفس الرمز الذي أنشأه سينظفه، وهذا أمر قيم للغاية في بيئة الانتشار قبل التفرغ.

إدارة الإعالة

وتعتمد وظيفة لامبدا على دور إدارة الهجرة الدولية، الذي قد يعتمد على سياسة قد تعتمد على جدول دينامو دي بي، تيرامورم، ويضع رسما مرجعيا من إعلاناتك ويحدد تلقائيا الترتيب الصحيح للعمليات، ويخلق موارد قبل الإشارة إليها وينتظر أن تصبح الكتبة متاحة، وهذا ما يحررك من الأخطاء الكتابية.

الاتسام بتعدد البيئات

وباستخدام أماكن العمل أو هياكل الدليل، يمكن إعادة استخدام نفس التشكيلة عبر بيئات متعددة ذات قيم مختلفة، ويمكن أن تكون تشكيلة وظيفة لامبدا مطابقة عبر الحرف، والتصنيع، والإنتاج باستثناء المتغيرات الخاصة بالبيئة مثل أسماء الجداول، أو مستويات السجلات، أو بيئات الفيلق، مما يضمن أن البنية التحتية للإنتاج هي بالضبط ما جرى اختباره في الترميز.

الرقابة الحكومية العليا

إدارة الدولة هي مصدر قلق بالغ، ويتيح هذا التقلب لك تخزين الدولة عن بعد في مساند مثل S3 (مع إغلاق دينامو دي بي)، أو سحاب الترفور، أو قنصل هاشيكورب، ويمكِّن من التعاون بين الأفرقة: يمكن للمهندسين المتعددين أن يطبقوا بشكل آمن التغييرات على نفس البنية التحتية دون نزاع، وبالنسبة لفرق لا تصلح وتنشر باستمرار الإدارة القوية للدولة، لا بد منها.

بدء مع تيرافورم للنشر بلا سر

ولنمشي من خلال وضع تطبيق كامل لاسلكية باستخدام نظام " تيرافورم " على شبكة AWS، وسيعرض مثالنا على نظام " آر إي تي إي إي إي إي إي إي تي " بسيط عن طريق بوابة نظام إي بي آي التي تؤدي وظيفة لامبدا، التي تكتب البيانات إلى طاولة دينامو دي بي، وسنغطي أيضاً الأذون اللازمة لدائرة الهجرة الدولية.

الشروط المسبقة

  • Terraform installed (] download)
  • حساب AWS مع وثائق تفويض مصممة (عن طريق متغيرات البيئة أو )
  • Node.js installed (to compile the Lambda code)

هيكل المشروع

serverless-terraform/
├── main.tf
├── variables.tf
├── outputs.tf
├── lambda/
│ └── index.js
└── terraform.tfvars

1 - تحديد مقدِّم خدمات تيرامو

In , configure the AWS provider and specify the region:

terraform {
 required_providers {
 aws = {
 source = "hashicorp/aws"
 version = "~> 5.0"
 }
 }
 backend "s3" {
 bucket = "my-terraform-state-bucket"
 key = "serverless-app/terraform.tfstate"
 region = "us-east-1"
 dynamodb_table = "terraform-locks"
 }
}

provider "aws" {
 region = var.aws_region
}

2- إنشاء دور الرابطة في لامبدا

data "aws_iam_policy_document" "lambda_assume_role" {
 statement {
 actions = ["sts:AssumeRole"]
 principals {
 type = "Service"
 identifiers = ["lambda.amazonaws.com"]
 }
 }
}

resource "aws_iam_role" "lambda_exec" {
 name = "serverless-lambda-role"
 assume_role_policy = data.aws_iam_policy_document.lambda_assume_role.json
}

resource "aws_iam_policy" "lambda_dynamodb_policy" {
 name = "lambda-dynamodb-policy"
 policy = jsonencode({
 Version = "2012-10-17"
 Statement = [
 {
 Action = ["dynamodb:PutItem", "dynamodb:GetItem", "dynamodb:UpdateItem"]
 Effect = "Allow"
 Resource = aws_dynamodb_table.items.arn
 },
 {
 Action = ["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"]
 Effect = "Allow"
 Resource = "*"
 }
 ]
 })
}

resource "aws_iam_role_policy_attachment" "lambda_policy_attach" {
 role = aws_iam_role.lambda_exec.name
 policy_arn = aws_iam_policy.lambda_dynamodb_policy.arn
}

3 - نشر جدول دينامو دي بي

resource "aws_dynamodb_table" "items" {
 name = "items"
 billing_mode = "PAY_PER_REQUEST"
 hash_key = "id"

 attribute {
 name = "id"
 type = "S"
 }

 tags = {
 Environment = var.environment
 }
}

4 - التعبئة ونشر وظيفة لامبدا

أولاً، إنشاء وظيفة بسيطة في لامبدا في :

exports.handler = async (event) => {
 const AWS = require('aws-sdk');
 const dynamodb = new AWS.DynamoDB.DocumentClient();
 const id = event.pathParameters.id;

 const params = {
 TableName: process.env.TABLE_NAME,
 Item: { id, timestamp: Date.now(), data: event.body }
 };

 await dynamodb.put(params).promise();

 return {
 statusCode: 200,
 body: JSON.stringify({ id })
 };
};

ثم في تشكيلة التيراموزيك، الإشارة رمز المهمة:

data "archive_file" "lambda_zip" {
 type = "zip"
 source_dir = "${path.module}/lambda"
 output_path = "${path.module}/lambda_function_payload.zip"
}

resource "aws_lambda_function" "api_handler" {
 filename = data.archive_file.lambda_zip.output_path
 function_name = "serverless-api-handler"
 role = aws_iam_role.lambda_exec.arn
 handler = "index.handler"
 runtime = "nodejs18.x"
 source_code_hash = data.archive_file.lambda_zip.output_base64sha256

 environment {
 variables = {
 TABLE_NAME = aws_dynamodb_table.items.name
 }
 }
}

5 - استكشاف بوابة لامبدا عبر بوابة نظام المعلومات الإدارية المتكامل

resource "aws_api_gateway_rest_api" "api" {
 name = "serverless-api"
}

resource "aws_api_gateway_resource" "items" {
 rest_api_id = aws_api_gateway_rest_api.api.id
 parent_id = aws_api_gateway_rest_api.api.root_resource_id
 path_part = "items"
}

resource "aws_api_gateway_resource" "item" {
 rest_api_id = aws_api_gateway_rest_api.api.id
 parent_id = aws_api_gateway_resource.items.id
 path_part = "{id}"
}

resource "aws_api_gateway_method" "put_item" {
 rest_api_id = aws_api_gateway_rest_api.api.id
 resource_id = aws_api_gateway_resource.item.id
 http_method = "PUT"
 authorization = "NONE"
}

resource "aws_api_gateway_integration" "lambda" {
 rest_api_id = aws_api_gateway_rest_api.api.id
 resource_id = aws_api_gateway_resource.item.id
 http_method = aws_api_gateway_method.put_item.http_method
 integration_http_method = "POST"
 type = "AWS_PROXY"
 uri = aws_lambda_function.api_handler.invoke_arn
}

resource "aws_lambda_permission" "apigw" {
 statement_id = "AllowExecutionFromAPIGateway"
 action = "lambda:InvokeFunction"
 function_name = aws_lambda_function.api_handler.function_name
 principal = "apigateway.amazonaws.com"
 source_arn = "${aws_api_gateway_rest_api.api.execution_arn}/*/*"
}

resource "aws_api_gateway_deployment" "prod" {
 depends_on = [aws_api_gateway_integration.lambda]
 rest_api_id = aws_api_gateway_rest_api.api.id
 stage_name = "prod"
}

6 - تحديد النواتج

In , expose the API endpoint:

output "api_endpoint" {
 value = "${aws_api_gateway_deployment.prod.invoke_url}/items/"
}

7 - التطبيق

terraform init
terraform plan
terraform apply

بعد تقديم الطلب، يمكنك إصدار طلب من الشرطة إلى نقطة النهاية مع هيئة من الـ(سو جون) و(لامبدا) تكتب البيانات إلى (دينامود ب) لتمزيق الحزمة بأكملها، اركضوا

مشروعات تيرافورم الهيكلية

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

استخدام الطرائق في تجميع العناصر القابلة للاستعمال

وحدات التمارين تسمح لك بتجميع الموارد إلى الوحدات المنطقية، بالنسبة لغير الخواديم، قد تخلق وحدات نموذجية لما يلي:

  • وحدة عمل أساسية في لامبدا (مع دور الرابطة، وتصاريح السحب الأساسية، والثقة الاختيارية فيلق حماية البيئة البحرية)
  • نموذج لنموذج " بوابة " + دمج " لامبدا "
  • وحدة طاولة دينامو دي بي مع خصائص موحدة وأجهزة للتصنيف
  • وحدة أسئلة SQS مع طاولات متفرقة

يمكن تخزين النماذج في مستودع صواريخك الخاصة أو نشرها في سجل المهام ].

البيئات المنفصلة مع المديرين أو أماكن العمل

وهناك نهجان مشتركان لإدارة البيئات:

  • Directory per environment:] Create folders like , , , each with its own and possibly a . This isolates state files and prevents accidental cross-envi.
  • Terraform Workspaces:] Use the built-in workspace feature to create named instances of the same formation. Workspaces are lighter but can become confusing when dealing with multiple teams.

وبالنسبة لمعظم الأفرقة التي لا تخدم، فإن نهج الدليل أوضح لأنه يجعل الحدود البيئية واضحة في قاعدة البيانات.

Remote State with Locking

ولا يخزن أبداً الولاية محلياً لمشاريع الفريق - يستخدم رقم S3 خلفية مع قفل دينامو دي بي، ويحتفظ دلو S3 بملف الدولة، ويوفر دينامو دي بي أقفال متسقة بحيث لا يُستخدم إلا جهاز واحد ] في وقت واحد، وقد تم عرض تشكيلة احتياطية مستقلة من قبل، وضمان إنشاء دلو دوبرامو ديبومبو خارج تيرافورمبي (الثا).

إدارة الأسرار بشكل آمن

التطبيقات التي لا تُستخدم كثيراً ما تتطلب أسراراً مثل كلمات مرور قاعدة البيانات، أو مفاتيح (آي بي إي) أو (جي دبليو تي) للتوقيع على (توكينز)

  • AWS Secrets Manager or SSM Parameter Store, referenced via or data sources
  • مزود الخزنة لجلب الأسرار الديناميكية
  • Environmental-specific encrypted changing files (e.g., with tools like )

أفضل الممارسات في مجال الهياكل الأساسية الآلية مع Terraform

To maximize reliable and team velocity, follow these proven practices:

التحكم بالصوت كل شيء

وينبغي تخزين جميع تشكيلات الترايافورم، بما في ذلك الوحدات، في غيت برسائل ذات معنى تتعلق بالالتزام، وإطلاقات منافذ للتغيرات، مما يوفر أثرا كاملا لمراجعة الحسابات من قام بتغيير ما ومتى.

دائماً ما ندير الخطة و نستعرض

وفي مجال التنمية المحلية، يُدار دائماً قبل .() وفي إطار مبادرة التعاون التقني/الاتفاقية، يتطلب الأمر اتخاذ خطوة يدوية للموافقة على نشرات الإنتاج.() وتعد كلوز التاريب وأطلانطيس أدوات شعبية تدمج خطط/سيرات العمل التطبيقية في طلبات سحب الإنتاج.

تنفيذ اتفاقية مكافحة التصحر/اتفاقية مكافحة التصحر فيما يتعلق بالهياكل الأساسية

(ج) استخدام خط أنابيب يدير و على طلبات سحب، ثم تشغيل ، وبعد إجراء عمليات الاندماج .

Use for Drift Detection

وحتى مع مركز التحقيقات/المركز، يمكن لشخص ما أن يعدل يدوياً مورداً من خلال المجمع، كما أن الجدول الزمني العادي [يجري] (مثلاً ليلياً) للكشف عن الانجراف وتنبيه الفريق، ويمكن أن تُؤتمت الأدوات مثل الكشف عن الانجراف الذي تقوم به شركة Terraform Cloud.

اختبار التسلسل التسلسلي

ويمكن أن تكون هناك أدوات مثل Terratest]، وهي مكتبة تابعة للوحدة تدور في موارد سحابية حقيقية، وتتحقق من سلوكها وتمزقها، ولك أن تنشر، بلا خواديم، أكوام في حسابات اختبارات معزولة، وتختبر شركة HTTP ضد شركة API، وتثبت من محتوياتها الفرعية.

السياسة العامة المستخدمة كمدونة

(د) تحديد قواعد الامتثال على نطاق المنظمة باستخدام نظام هاشيكورب سينتينيل (كلود) أو وكيل السياسات المفتوحة، مثلاً، يتطلب أن تكون جميع وظائف لامبدا مكنت من تعقب مسارات الأشعة السينية أو منع جداول الداينامو دي بي العامة، وأن تنفذ هذه السياسات في وقت التخطيط، مما يجعل الأمن وإدارة التكاليف أمراً منهجياً.

التحديات المشتركة والحلول

State File Locking and Conflicts

وعندما يركض أعضاء الفريق المتعددون في وقت واحد، يمكن حدوث فساد الدولة: فالحل هو: دائماً استخدام خلفية تدعم القفل (S3 + DynamoDB) ولا يركضون أبداً مباشرة من الفروع الموازية.

عدد كبير من وظائف لامبدا

(ج) إدارة 50+ لامبدا في تشكيلة واحدة تصبح غير مرغوب فيها، فالحل: استخدام أو مع خريطة لتعاريف المهام، بل تنظيم مهام في تشكيلات منفصلة تُشارك فيها مصادر بيانات الدولة، على سبيل المثال، نواتج " التشكيلة الأساسية " (أسماء جدول بيانات دينامو دي بي، تشكيلة SQS، التي تُدرج الواردات)

نظام الإعالة في الهيكل المعقّد

وعلى الرغم من أن التسلسل التسلسلي يتعامل مع معظم المعالين تلقائياً، فإن التعميمات (مثلاً، خدمات تشير إلى بعضها البعض) يمكن أن تسبب مشاكل، فالحل: كسر الدورة بإدخال مورد ثالث (مثل موضوع مركزي لشبكة SNS) أو استخدام كتل واضحة ]، ومن غير المحسوب، هناك نمط مشترك يتمثل في خلق أدوار وسياسات مستقلة عن الوظائف لتجنب الدورات.

Deploying Lambda Code Changes

ويصمم نظام " Terraform " للبنية التحتية وليس للنشر المستمر لرمز التطبيق، إذ إن طباعة نسخ جديدة من لامبدا عن طريق إعادة تطبيق نظام " Terraform " في كل مرة هي بطيئة وليست مثالية للبرمجيات السريعة، والحل: فصل نشر الهياكل الأساسية (المنشأة مرة واحدة لكل بيئة) عن نشر الرموز، واستخدام خطوط أنابيب المعلومات الأساسية التي تستكمل رمز عمل لامبدا عن طريق " SDK " أو أدوات " ، مثل " سيرافيرا.

خاتمة

ويجلب نشر الهياكل الأساسية آلياً مع Terraform نفس التصلب الذي تطبقه أفرقة البرامجيات على رمز التطبيقات، وبتعريف كل مورد في ملفات HCL التي تخضع لمراقبة النسخ، تحصل على عمليات نشر متكررة، وإدارة للتغييرات الآمنة، ومسارات مراجعة كاملة للحسابات، كما أن مشروع " Terraform " الذي يُنظم بشكل جيد مع وحدات، وأجهزة من بعد، وتكامل أجهزة الاستخبارات المركزية/التجمعات المدمج يمكن الأفرقة من إدارة مئات المهام اليدوية، وتوفير المعلومات المفاجئة.

ونظراً لأن البنايات العديمة الخادم لا تزال تنمو بشكل معقد مع تدفق العمل المدفوع بالأحداث، ووظائف الخطوة، والهياكل الأساسية العالمية المنتشرة في مناطق متعددة - فإن أهمية وجود زيادة قوية في لجنة التنسيق الدولية، بدءاً من الأنماط والأمثلة في هذه المادة، يمكن أن تبنى أساساً يرتقي بتطبيقك ومنظمتك، والاستثمارات الأولية في تأقلم هياكلكم الأساسية التي لا تخدم الخواديم تدفع لنفسها مرات عديدة على الأخطاء المخفضة، وعلى سرعة انتشارها، وعلى البيئة التي تكتسبها الثقة.