عندما تقوم بإنشاء وحدة في تيرافورم (Terraform) التي يمكن تكرارها بمدخلات متغيرة مختلفة، يمكنك الرجوع إلى الموارد باستخدام اسماء متغيرة عبر استخدام الدالة الحاسبة interpolation syntax ${}
. ومن النظرة الأولى، يبدو أن الكود الذي قمت بتوفيره قد تكون فيه بعض الأخطاء البسيطة.
الخطأ الذي تراه يبدو متعلقًا بصيغة تعريف المورد resource
لل aws_ecs_service
. يجب أن يكون اسم المورد (resource) قبل السطر ${var.name}
في المثال الذي قدمته. يجب عليك تغيير السطر:
hclresource "aws_ecs_service" "${var.name}" {
إلى:
hclresource "aws_ecs_service" "${var.name}_service" {
هذا التعديل يجب أن يحل المشكلة التي واجهتها. بعد هذا التعديل، ستصبح صيغة إشارة المورد (resource reference) الخاصة بالمهمة task_definition
صحيحة وستتمكن من الوصول إلى القيمة المطلوبة.
لتوضيح، هناك كود محدث ليعكس هذا التعديل:
hclvariable "name" {} resource "aws_ecs_service" "${var.name}_service" { name = "${var.name}_service" cluster = "" task_definition = "${aws_ecs_task_definition.${var.name}.arn}" desired_count = 1 } resource "aws_ecs_task_definition" "${var.name}" { family = "ecs-family-${var.name}" container_definitions = "${template_file.${var.name}_task.rendered}" } resource "template_file" "${var.name}_task" { template = "${file("task-definition.json")}" vars { name = "${var.name}" } }
يرجى ملاحظة أننا قمنا أيضًا بتحديث إشارة المورد (resource reference) لل aws_ecs_task_definition
و template_file
لتأخذ بعين الاعتبار التغيير الذي قمنا به في اسم المورد (resource name).
المزيد من المعلومات
بالطبع، إليك بعض المعلومات الإضافية حول كيفية العمل مع المتغيرات والموارد في تيرافورم:
-
استخدام المتغيرات في أسماء الموردين (Resource Names): يمكنك استخدام المتغيرات في أسماء الموردين باستخدام تركيبات interpolation syntax
${}
. على سبيل المثال، يمكنك تحديد اسم الموردaws_ecs_service
كـ"${var.name}_service"
. -
استخدام المتغيرات في قيم الموردين: يمكنك أيضًا استخدام المتغيرات في قيم الموردين مثل
task_definition
وcluster
. في مثالك، استخدمت${aws_ecs_task_definition[var.name].arn}
للوصول إلى قيمة ARN لتعريف المهمة، وهذا صحيح. -
التواريخ والوقت: يمكنك أيضًا استخدام المتغيرات في تحديد التواريخ والأوقات في تيرافورم. على سبيل المثال،
var.environment == "production" ? "8h" : "2h"
يمكن استخدامه لتحديد فترة الانتظار (wait_time) بناءً على قيمة المتغيرenvironment
. -
التعليقات: يمكنك استخدام التعليقات لشرح الأشياء في ملفات تيرافورم. يتم تجاهل التعليقات أثناء تشغيل تيرافورم، ولكنها مفيدة لتوضيح القرارات والتصميمات في الكود.
-
إعادة استخدام الأكواد: يمكنك إعادة استخدام الأكواد من خلال تعريف وحدات (modules) في تيرافورم. الوحدات تسمح بتجميع وإعادة استخدام مجموعات من الموارد والمتغيرات والمخرجات في ملف واحد قابل لإعادة الاستخدام.
-
استخدام الوظائف: يمكنك استخدام الوظائف في تيرافورم للقيام بعمليات معقدة أو تكرارية. يمكن استخدام الوظائف لتوليد قيم مختلفة بناءً على المتغيرات أو البيانات الأخرى في التيرافورم.
هذه بعض الأمثلة على كيفية استخدام المتغيرات والموارد في تيرافورم بطريقة تسمح بتكرار وإعادة استخدام الأكواد بشكل فعال.