مع Terraform 1.5 والإصدارات الأحدث، يمكنك استخدام كتلة import
لإدارة استيراد الموارد مباشرة في تكوينك. هذه الميزة تبسط عملية استيراد البنية التحتية الموجودة إلى حالة Terraform، مما يلغي الحاجة إلى أمر سطر الأوامر المنفصل terraform import
.
في هذه المقالة، نشرح كتلة الاستيراد وكيفية استخدامها لاستيراد موارد مختلفة.
ما هي كتلة استيراد Terraform؟
تقدم كتلة import
التي تم تقديمها في Terraform v1.5.0 نهجًا إعلانيًا لاستيراد موارد البنية التحتية الموجودة إلى ملف حالة Terraform. تسمح استيرادات الموارد بأن تصبح جزءًا لا يتجزأ من عملية تخطيط Terraform – مشابهة للموارد المدارة الأخرى – بدلاً من اعتبارها عملية حالة مباشرة.
نتيجة لذلك، تحسن كتلة import
الشفافية وتنسق استيرادات الموارد مع المبادئ الأساسية للبنية التحتية ككود (IaC)، مما يمكّن المستخدمين من إدارة بنيتهم التحتية بشكل أكثر فعالية وقابلية للتنبؤ.
الصيغة الخاصة بكتلة import
في Terraform هي كما يلي:
import {
to = <resource_address>
id = <resource_identifier>
}
to
: يحدد عنوان المورد في تكوينك حيث سيتم تعيين المورد المستورد.id
: يحدد المعرف الفريد للمورد الحالي في واجهة برمجة تطبيقات المزود. تأكد من تكوين موفر Terraform الخاص بك بشكل صحيح للوصول إلى المورد المستورد.
يرجى ملاحظة أن بعض أنواع الموارد قد تحتوي على متطلبات أو قيود إضافية للاستيراد.
قطعة الاستيراد مقابل أمر استيراد Terraform
تتيح قطعة import
في Terraform لك تعريف الموارد مباشرة في ملف التكوين الخاص بك، مما يبسط إدارة البنية التحتية الحالية.
على النقيض، عند استخدام أمر terraform import
دون قطعة import
، فإنه يربط موردًا موجودًا بحالة Terraform ولكنه لا يولد تلقائيًا التكوين المقابل في كودك. يجب عليك إضافة هذا التكوين يدويًا بعد ذلك. يكون الأمر المستورد مفيدًا بشكل خاص للاستيرادات لمرة واحدة أو لنقل البنية التحتية إلى إدارة Terraform.
كلا الطريقتين تتطلب التعامل الحذر لضمان الاتساق بين حالة Terraform والبنية التحتية الفعلية. تكون قطعات import
مناسبة بشكل عام لإدارة الموارد المستمرة، بينما يعمل الأمر المستقل بشكل جيد للاستيرادات المتقطعة.
مثال 1: استخدام كتلة الاستيراد في تيرافورم لاستيراد سلة S3
لنفترض أن لدينا سلة AWS S3 موجودة (my-existing-bucket
) ترغب في إدارتها باستخدام تيرافورم.
يحدد كتلة المورد سلة S3 (aws_s3_bucket.example
) ويحدد سمة الـ bucket اسم السلة الموجودة:
resource "aws_s3_bucket" "example" {
bucket = "my-existing-bucket"
}
import {
to = aws_s3_bucket.example
id = "my-existing-bucket"
}
تربط كتلة الاستيراد السلة S3 الموجودة بمورد تيرافورم.
to
: يعين المورد المستورد إلى عنوان كتلة المورد (aws_s3_bucket.example
)id
: يحدد الهوية الفريدة للسلة (my-existing-bucket
).
عند تشغيل terraform plan
، يقرأ تيرافورم كتلة الاستيراد، يتحقق من حالة سلة S3 الموجودة، ويعرض معاينة للتغييرات التي سيقوم بها إلى ملف الحالة. ثم، بعد تشغيل terraform apply
، يقوم تيرافورم بتحديث ملف الحالة ليتضمن السلة الموجودة، مرتبطة بمورد aws_s3_bucket.example
.
بعد تشغيل terraform apply
واستيراد المورد بنجاح، من الأفضلية إزالة كتلة import
. الإبقاء عليها لن يسبب أي ضرر، ولكن إزالتها تساعد في الحفاظ على تكوين نظيف وتقليل الالتباس المحتمل أثناء إدارة الحالة في المستقبل.
المثال 2: استخدام كتلة الاستيراد في تيرافورم لاستيراد مثيل EC2
لننظر إلى مثال آخر: لدينا مثيل EC2 موجود بالمعرف i-1234567890abcdef0
ونريد إدارته تحت تيرافورم.
نحدد المورد aws_instance
الذي نريد من تيرافورم إدارته في كتلة resource
. تأكد من تطابق السمات (على سبيل المثال، ami
، instance_type
) مع تكوين المثيل الموجود:
resource "aws_instance" "example" {
ami = "ami-0abcdef1234567890" # Replace with the actual AMI ID
instance_type = "t2.micro"
}
import {
to = aws_instance.example
id = "i-1234567890abcdef0"
}
في كتلة import
:
to
: تربط المورد في تكوينك (aws_instance.example
) بالمورد الموجود.id
: يحدد معرف فريد لمثيل EC2 الذي تقوم باستيراده.
بمجرد إضافة كتلة المورد وبيان الاستيراد إلى ملف تكوين تيرافورم الخاص بك، قم بتشغيل terraform plan
لمعاينة التغييرات. بعد ذلك، قم بتشغيل terraform apply
لاستيراد المورد إلى ملف الحالة في تيرافورم.
بعد الاستيراد، ستدير تيرافورم المثيل EC2 الموجود، مضمنة بقاء تكوينها تصريحيًا.
مثال 3: استخدام كتلة الاستيراد في تيرافورم لاستيراد مجموعة موارد Azure
في المثال التالي، سنقوم باستيراد مجموعة موارد Azure.
لدينا مجموعة موارد Azure موجودة بالفعل تحت اسم example-resource-group
في منطقة East US
، ونريد إدارتها باستخدام تيرافورم.
أولاً، في كتلة resource
، نحدد مورد azurerm_resource_group
الذي سيديره تيرافورم:
resource "azurerm_resource_group" "example" {
name = "example-resource-group"
location = "East US"
}
import {
to = azurerm_resource_group.example
id = "/subscriptions/<subscription_id>/resourceGroups/example-resource-group"
}
كتلة الاستيراد:
to
: يربط المورد في تكوينك (azurerm_resource_group.example
) بالمورد الحالي في Azure.id
: يحدد معرف مورد Azure الكامل لمجموعة الموارد. تذكر أن تستبدل<subscription_id>
بمعرف الاشتراك الفعلي لديك.
أضف المورد وكتلة الاستيراد إلى ملف تكوين تيرافورم الخاص بك. بعد ذلك، قم بتشغيل الأمر terraform plan
لمعاينة التغييرات وتنفيذ الأمر terraform apply
لتطبيق التغييرات واستيراد المورد إلى ملف حالة تيرافورم الخاص بك.
هل يمكنك استخدام كتلة الاستيراد في تيرافورم بشكل مشروط؟
يتم تصميم كتلة الاستيراد في تيرافورم لتكون تصريحية وتتطلب قيم محددة معروفة في وقت التخطيط. لذلك، لا يمكن استخدامها بشكل مشروط ضمن كود تيرافورم الخاص بك.
لا تدعم كتلة الاستيراد التعبيرات الديناميكية أو المتغيرات لتحديد معرف الاستيراد استنادًا إلى الشروط. محاولات استخدام بنى مثل count أو المتغيرات داخل كتلة الاستيراد ستؤدي إلى وجود أخطاء، حيث لا يسمح تيرافورم بمثل هذه الوسيطات في هذا السياق.
نقاط رئيسية
تبسيط إدارة الموارد من خلال إدخال كتلة الاستيراد في تيرافورم 1.5+ يمكنه استيراد الموارد مباشرة وتعريفها داخل ملفات التكوين. يتماشى ذلك مع مبادئ البنية كـ كود عن طريق تقليل التعقيد وجعله أسهل لدمج البنية التحتية الحالية في تكوينات تيرافورم.
Source:
https://dzone.com/articles/how-to-use-terraform-import-block