مقدمة
التكوين السليم لمشاريع Terraform وفقاً للحالات المستخدمة والتعقيد المتوقع أساسي لضمان الصلابة والتوسعة في التجارب اليومية. أساسي أن تتبع منهجية تنظيم الملفات البرمجية بشكل صحيح لضمان أن المشروع يبقى قابلاً للتوسع خلال التنفيذ وقابلاً للاستخدام من قبلك وفريقك.
في هذا الدرس التعليمي، ستتعلم المقاطعة للمشاريع الخاصة بTerraform وفقاً للغرض العام والتعقيد. ومن ثم، ستقوم بإنشاء مشروع بهيكل بسيط باستخدام أكثر الميزات الشائعة من Terraform: المتغيرات، المحليات، المصادر البيانات، والمزadores. وفي النهاية، سيتم تنفيذ سيرفر للخوادم العاملة Ubuntu 20.04 (قطعة) على DigitalOcean، وتثبيت مرور للخوادم الويب Apache، وتوجيه أحدى أنواع من الأحوال إلى المرور.
الأحتياجات السابقة
-
توكين شخصي ل DigitalOcean، يمكن إنشاؤه عن طريق لوحة التحكم في DigitalOcean. يمكنك إيجاد التعليمات في المستندات المنتجة من منتجات DigitalOcean في كيفية إنشاء توكين شخصي.
-
مفتاح SSH بدون كلمة مرور أضف لحسابك في DigitalOcean، يمكنك إنشائه بالتتبع ل كيفية استخدام المفاتيح SSH مع DigitalOcean Droplets.
-
تم تثبيت Terraform على جهازك المحلي. يمكنك أن ترافق تعليماتك وفقاً للنظام الأساسي الذي تستخدمه في خطوة 1 من الدرس التعليمي كيفية استخدام Terraform مع DigitalOcean.
-
تم تثبيت Python 3 على جهازك المحلي. يمكنك إنجاز خطوة 1 من كيفية تثبيت وإعداد بيئة برمجية محلية لـ Python 3 للنظام التعلمي خاصتك.
-
تم إضافة إسم مجال مسجل بشكل كامل إلى حسابك في DigitalOcean. لتعرف التعليمات التي يتم بها هذا الإجراء، قم بزيارة المستندات الرسمية.
ملاحظة: قد تم اختبار هذا الدرس بشكل خاص مع Terraform 1.0.2
فقط.
فهم بنية مشروع Terraform
في هذا المقطع ستتعلم ما يعتبره ترافارم مشروعًا، كيف يمكنك تشكيل شيء من البنية التحتية بواسطة الشفرة، وفي أي وقت يجب اختيار منهج معين. ستتعلم أيضًا عن أراءة ترافارم، ما يفعله، وكيف تقوم ترافارم بتخزين الحالة.
أي مورد هو جهة من خدمة السحابة (مثل قطعة DigitalOcean Droplet) المعروفة في ترافارم الشفرة التي تنشأ وفقاً لخصائص معينة وتلك التي تنتج من خلالها. تتكون البنية التحتية من الموارد العديدة والتي تترابع مع بعضها البعض من خلال الاتصالات المتشابكة.
تستخدم ترافارم لغة برمجية خاصة لتعريف البنية التحتية، وهي لغة Hashicorp Configuration Language (HCL). تتخزين الشفرة HCL عادةً في الملفات التي تنتهي بتوسيع قمة tf
. مشروع ترافارم هو أي دارة تحتوي على tf
ملفات والتي تم تكيفها باستخدام الأمر init
، وهو ما يوفر مستودعات ترافارم والحالة المحلية الافتراضية التقدمية.
تلك الحالة هي آلية تمكن ترافارم من إتباع موارد التي تتم توفيرها في السحابة. الحالة تتخزين في الخلفيات (محليًا على القرنبيط أو عن بعدًا على خدمة تخزين الملفات السحابية أو برمجيات إدارة الحالة التقييمية) للتوافر الأفضل والامانة. يمكنك أن تقرأ المزيد عن الخلفيات المختلفة في توثيق ترافارم.
يمكنك أن تمتلك مساحات عمل متعددة في نفس الخلفية المتصلة بنفس التكوينات. هذا يسمح لك بتنفيذ عدة مستويات من الأيركاد منفصلة. يبدأ كل مشروع بمساحة عمل تدعى default
— سيتم استخدامها إذا لم يكن لديك تخزين آخر أو تحويل إليه.
الموديولات في Terraform (تشبه المجموعات في لغات البرمجيات الأخرى) هي حاجزات تحميل البرمجيات المتعددة المتخزنة تحويل عدة اعلانات الموارد. يسمح لك بتجميع جزء مشترك من البنية التحتية وإعادة استخدامه من خلال معطيات مختلفة.
يمكن أيضًا أن تشمل مشروع Terraform ملفات برمجيات خارجية للاستخدام مع معطيات البيانات التي تقوم بتجويب الإختراقات الJSON من أوامر البرمجيات الخارجية وتقدمها للاستخدام في الاعلانات المواردية. في هذا التورية، ستقوم بهذا مع 脚本 Python.
بعد أن تعرفت ما تتكون منه مشروع Terraform، دعونا نراقب أساليبين عامتين لتشكيل مشاريع Terraform.
ترتيب بسيط
بنية بسيطة تناسب المشاريع الصغيرة والتجريبية والتي تتمتع بقليل من الموارد بأنواع مختلفة والمتغيرات. وتحتوي على قليل من الملفات الإعدادية عادةً واحد لكل نوع من الموارد (أو مزيد من المساعدات المترابطة مع الرئيسي) ولا تحتوي على مواد خاصة لأن معظم الموارد فريدة ولا يكون هناك ما يكفي ليتم تعميمه وإستخدامه مجددًا. وبعد هذا يتم تخزين معظم البرمجيات في نفس المجلد مع بعضها البعض. وهذه المشاريع تحتوي على قليل من المتغيرات (مثل مفتاح تواصل API للوصول إلى السحابة) وقد تستخدم أدات بيانات تتغيرية وميزات أخرى لـ Terraform وHCL ، وعلى الأقل ليس بشكل بارز.
ولكن على سبيل المثال للبنية الملاحظية لهذه الطريقة ، هذا ما سيبدو مشروع التدريب الذي ستبنيه في هذه الدروسة في النهاية:
.
└── tf/
├── versions.tf
├── variables.tf
├── provider.tf
├── droplets.tf
├── dns.tf
├── data-sources.tf
└── external/
└── name-generator.py
ولأن هذا المشروع سيتم تنفيذ مستودع Apache وتعريف سجلات DNS ، فإن تعريفات المتغيرات المشروعية ومزيل الأنظمة Terraform والمستودعات والسجلات الإلكترونية ستتم تخزينها في ملفاتهم الخاصة. سيتم تحديد الأصدارات المطلوبة لـ Terraform ومزيل الأنظمة DigitalOcean في versions.tf
، بينما سيتم تخزين مقال البرمجيات البيانية التي ستنتج إسم للمستودع (وسيتم استخدامه كمصدر بيانات تتغيرية في data-sources.tf
) في المجلد external
، لتفصيله عن البرمجيات البيانية الخاصة بـ HCL.
بنية معقدة</diy5
بخلاف الهيكل البسيط، هذا المقارب مناسب للمشاريع الكبيرة والتي تحتوي على ترتيبات فرعية معلومة تحوي متسع من الموديولات بمستويات متنوعة من التعقيد، بجانب البرمجيات العادية. هذه الموديولات قد تعتمد على بعضها البعض. متوفرة بالإشمال بالنظم التنظيمية للإصدارات، يمكن لهذه المشاريع استخدام مساحات العمل بشكل واسع. هذه المقاربة مناسبة للمشاريع الكبيرة التي تدير عدد من التطبيقات وتحويل قدر ما يمكن المحتويات البرمجية من تكرار.
يمكن أيضًا تقديم الحالات المتعددة للتطوير، المرحلة المستقبلية، التأكد الجودة، والبيئة الإنتاجية تحت نفس المشروع في directories مختلفة بواسطة التثبيت على الموديولات المشتركة، مما يبطئ بتكرار البرمجيات ويجعل المشروع المركز للمصدر الأقرب للحقيقة. هذه هي هيكل الملفات لمشروع مثالي مع هيكل معقد أكثر، يحتوي على عدد من التطبيقات التوزيعية، وموديولات Terraform وبيئات السحاب المستهدفة:
.
└── tf/
├── modules/
│ ├── network/
│ │ ├── main.tf
│ │ ├── dns.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ └── spaces/
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
└── applications/
├── backend-app/
│ ├── env/
│ │ ├── dev.tfvars
│ │ ├── staging.tfvars
│ │ ├── qa.tfvars
│ │ └── production.tfvars
│ └── main.tf
└── frontend-app/
├── env/
│ ├── dev.tfvars
│ ├── staging.tfvars
│ ├── qa.tfvars
│ └── production.tfvars
└── main.tf
يتم بحث أوسع في سلسلة كيفية إدارة البيئة التحتية بواسطة Terraform.
لقد عرفتم المشروع المتعلق بTerraform، كيف يمكنك تشكيله بطريقة توافق مع التعقيد المتوقع، ودور المساحات العملية في Terraform. في الخطوات القادمة، ستقومون بإنشاء مشروع بهيكل بسيط سيقوم بتوفير دوبلت مع مزجر Apache وتأسيس سجلات DNS ل dominio خاص بكم. ستبدأون بتمرير مشروعك مع مورد DigitalOcean والمت
خطوة 1 — إعداد مشروعك الأول
في هذه القسم ستقوم بإضافة مزيد من مزودي ترافير DigitalOcean لمشروعك وتعريف المتغيرات الخاصة بالمشروع، وإعلان معالم مزيد للمزود، حتى يتمكن Terraform من تواصل مع حسابك.
بدء بإنشاء مجلد لمشروع ترافير Terraform باستخدام الأمر التالي:
تحويل إلىه:
لأن هذا المشروع سيتبع المنهج التنظيمي البسيط، ستقوم بتخزين المزيد من مزود، المتغيرات، و تسجيلات الـ Droplet والبيانات الخاصة بالـ DNS في ملفات منفصلة، وفقاً للتكوين الملفي الموجود في القسم السابق. أولاً، ستحتاج إلى إضافة مزيد من مزودي ترافير DigitalOcean لمشروعك كمزود مطلوب.
قم بإنشاء ملف يسمى versions.tf
وافتحه للتحرير بتنفيذ:
أضف السطور التالية:
في هذا ال terraform
تقع تعريف المزودين المطلوبين (DigitalOcean، الإصدار 2.x
). عندما يتم إنتهاء هذا، حفظ وغلق الملف.
بعد ذلك، تعريف المتغيرات التي سيتم تعريفها بالمشروع في ملف variables.tf
، وبتتبع طريقة تخزين الأنواع المختلفة في ملفات تخزينية:
أضف المتغيرات التالية:
حفظ وغلق الملف.
سيتم حمل قيمة المستخدم الشخصي لـ DigitalOcean في متغير do_token
وسيحدد ما يراد تسميته مجالدك الخاص. سيتم تثبيت المجالد الخاص بـ SSH والتي يمكن تحديدها من بصمة SSH، تلقائيًا.
إليك تحديد مثالي للمزود الرقمي الخاص بـ DigitalOcean لهذا المشروع. ستقم بتخزينه في ملف يدعى provider.tf
. قم بإنشائه وفتحه للتحرير بتنفيذ:
أضف المزود:
حفظ وخرج حينما تنتهي. لقد قمت بتعريف المزود digitalocean
الذي يتماشى مع المزود المطلوب الذي توصلت إليه مسبقًا في provider.tf
، وتعريفت بطولته لقيمة المتغير التي ستتم تقديمها خلال التشغيل الفعال.
في هذه الخطوة قمت بإنشاء مجال لمشروعك، وطلبت من المزود الرقمي الخاص بـ DigitalOcean أن يكون متاحًا، وعرضت متغيرات المشروع، وأنشأت اتصالًا بنسخة من مزود ال DigitalOcean لإستخدام توكيل تعريفي سيتم تقديمه في المرحلة القادمة. الآن سوف تكتب 脚本 سينتج بيانات ديناميكية لتعريفات مشروعك.
الخطوة 2 — إنشاء 脚本 بيانات ديناميكية لـ Python
قبل الاستمرار في تعريف الجسيم التالي (Droplet), سوف تقوم بإنشاء 脚本 Python سيقوم بتوليد أسم الجسيم التالي (Droplet) بشكل ديناميكي و يكلف مصدر بيانات لتحليله. سيتم توليد الأسم من خلال تراكم السطر الثابت (web
) مع وقت الجهاز المحلي الحالي والمعروف في النمط العمل القديم للUNIX. قد يكون مفيداً إستخدام خطوط تسمية عندما تنتج متعدد جسيمات (Droplets) وفقاً لخطة تسميات، لتسهيل تمييزهم بسهولة.
سوف تقوم بتخزين هذا البرنامج في ملف يسمى name-generator.py
في دايرة تسمى external
. أولاً، قم بإنشاء الدايرة بتنفيذ:
توجد الدايرة external
في جذور مشروعك وسوف تخزين فيه ملفات غير الـHCL، مثل البرنامج الPython الذي ستكتب.
قم بإنشاء name-generator.py
في external
وافتحه للتحرير:
أضف التعريف التالي:
هذا البرنامج Python يقوم باستيراد مواد الjson
والtime
ويكلف مصدر تسمية القاموس يسمى result
وتعطي قيمة مفاتيح الname
لسلسلة متقاطعة تتكامل مع fixed_name
مع الوقت الUNIX الحالي للجهاز الذي يجري فيه. ثم يتم تحويل result
إلى JSON وتخرج من stdout
. سيكون نتائج الخروج مختلفة كل مرة تجري تشغيل البرنامج:
عندما ينتهي العمل على الملف، أبقه وأغلقه.
ملاحظة: يتطلب المشاريع الهيكلية الكبيرة والمعقدة من التفكير المتعمّد في كيفية إنشاء مصادر البيانات الخارجية واستخدامها، خاصة بالنسبة للقابلية للتنقل ومعالجة الأخطاء. تتوقع Terraform أن يكتب البرنامج المؤكد رسالة خطأ قابلة للقراءة بواسطة stderr
ويخرج بوجود خطأ غير صفر، وهو شيء لم يظهر في هذه الخطوة بسبب بساطة المهمة. بالإضافة إلى ذلك، تتوقع أن يكون البرنامج بدون تأثيرات جانبية، لذا يمكن تكراره عدة مرات كما يحتاج.
لمعلومات أكثر حولما تتوقع Terraform، أنظر إلى التوثيق الرسمي المتعلق بالمصادر البياناتية.
حينما يكون الscript جاهزًا، يمكنك تعريف المصدر البياناتي، الذي سيجلب البيانات من الscript. سوف تخزن المصدر البياناتي في ملف يسمى data-sources.tf
في جذور مشروعك وفقًا لمنهجية التركيب البسيط.
إنشأه للتحرير بواسطة الأمر:
أضف التعريف التالي:
حفظ وأغلق الملف.
هذا المصدر البياناتي يدعى droplet_name
ويقوم بتنفيذ الscript name-generator.py
بواسطة Python 3 الذي يقطن في المجلد external
الذي أنشأته مؤخرًا. يتم تجزأة مخرجه الخاص به وتوفير البيانات التي يتم تعريفها تحت خصيصها result
للاستخدام داخل تعريفات الموارد الأخرى.
بعد إعلان المصدر ال
خطوة 3 — تعريف الجسم السطحي
في هذه الخطوة، ستكتب تعريف المورد السطحي وستقوم بتخزينه في ملف برمجي يخص الجسم السطحي، وفقاً لمقاربة الترميز البسيط. سيأخذ إسمه من مصدر البيانات الديناميكية التي قمت بإنشائه مؤخرًا وسيختلف كل مرة يتم تخزينه.
قم بإنشاء وفتح ملف droplets.tf
للتحرير:
أضف التعريف التالي للمورد السطحي المطلوب:
أولاً ، قم بإعداد مورد مفتاح SSH لـ DigitalOcean يدعى ssh_key
، الذي سيجلب مفتاحًا من حسابك باسمه. أوكي تأكد من تجديل هذا البرمجيات باسم مفتاحك الشخصي السي.
بعد ذلك ، قم بإعداد مورد الجسم السطحي يدعى web
، وإسمه الحقيقي في السحابة سيختلف لأنه يطلب من مصدر البيانات الخارجي droplet_name
. لتبديل مورد الجسم السطحي بمفتاح SSH في كل مرة يتم تخزينه يتم تقديم معرفي مورد ssh_key
إلى ما يلي ssh_keys
، حتى يعلم ما يلي مورد DigitalOcean أي مفتاح يجب تطبيقه.
حتى الآن هذه كل ما تحتاج إلى تكوينه بشأن droplet.tf
، لذا حفظ وغلق الملف حينما تنتهي.
ستكتب الآن تكوينات السجل التي ستدفع إلى جسم السطحي المعروف مؤخرًا.
خطوة 4 — تعريف سجلات DNS
هذه هي الخطوة الأخيرة في العملية ، وهي تقوم بتكوين السجل ال DNS الموجه إلى ال Droplet من قومك.
سوف تقوم بتخزين التكوين ال DNS في ملف يدعى dns.tf
، لأنه نوع من الموارد المنفصل عن الأخرين التي قمت بإنشائها في الخطوات السابقة. قم بإنشائه وافتحه للتعديل:
أضف الخطوط التالية:
هذا الكود يدeclare سجل DNS ل DigitalOcean في أسم الموقع الخاص بك (يتم تخزينه بواسطة المتغير) من نوع A
. السجل له إسم @
، وهو وسيلة تجاوز توجه الإسم الموقعي إلى نفسه ورقم ال IP الخاص بال Droplet كقيمة value
. يمكنك تجديد قيمة name
بشيء آخر ، وسينتج عن ذلك قراءة قطعة فرعية.
عندما تنتهي ، حفظ وغلق الملف.
وبعدما قمت بتكوين ال Droplet ومصدر البيانات المنتجة للأسماء وسجل DNS واحد سوف تتجه إلى تنفيذ المشروع في السحابة.
خطوة 5 — التخطيط وتطبيق الإعدادات
في هذا القسم ستقوم بتأسيس مشروعك الخاص بTerraform وتوزيعه في السحابة وتحقق من أن كل شيء قد تم توفيره بطريقة correct.
وبعدما تم تعريف بالكامل ببنية مشروعك الخاص بTerraform ، فلا يبقى سوى التحقق منه قبل التوزيع. لقد تم تشغيل أمر تلك الأوامر:
ستحصل على المخرج التالي:
OutputInitializing the backend...
Initializing provider plugins...
- Finding digitalocean/digitalocean versions matching "~> 2.0"...
- Finding latest version of hashicorp/external...
- Installing digitalocean/digitalocean v2.10.1...
- Installed digitalocean/digitalocean v2.10.1 (signed by a HashiCorp partner, key ID F82037E524B9C0E8)
- Installing hashicorp/external v2.1.0...
- Installed hashicorp/external v2.1.0 (signed by HashiCorp)
Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here:
https://www.terraform.io/docs/cli/plugins/signing.html
Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
ستتمكن حاليا من توزيع دوبلتك الخاص بك بإسم ديناميكي منتج ومعه مجال شبكي في حسابك الخاص بDigitalOcean.
بدءا بتعريف الإسم الموجود في المجال الشبكي ، وأعادة تواصل الSSH والتواصل الشخصي لمفاتيح الحساب الخاصة بك كمتغيرات البيئة ، لكي لا يتوجب عليك نسخ القيم كل مرة تشغل Terraform. قم بتشغيل الأوامر التالية وتغيير القيم المبرزة:
يمكنك إيجاد مفاتيحك الخاصة بالAPI في لوحة مراقبة حسابات DigitalOcean.
قم بتشغيل أمر plan
مع القيم المتبعة لرؤية ما ستقوم Terraform بعمله لتوزيع مشروعك:
سيكون المخرج يشابه التالي:
OutputTerraform used the selected providers to generate the following execution plan. Resource
actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# digitalocean_droplet.web سيتم إنشاؤه
+ resource "digitalocean_droplet" "web" {
+ backups = false
+ created_at = (known after apply)
+ disk = (known after apply)
+ id = (known after apply)
+ image = "ubuntu-20-04-x64"
+ ipv4_address = (known after apply)
+ ipv4_address_private = (known after apply)
+ ipv6 = false
+ ipv6_address = (known after apply)
+ locked = (known after apply)
+ memory = (known after apply)
+ monitoring = false
+ name = "web-1625908814"
+ price_hourly = (known after apply)
+ price_monthly = (known after apply)
+ private_networking = (known after apply)
+ region = "fra1"
+ resize_disk = true
+ size = "s-1vcpu-1gb"
+ ssh_keys = [
+ "...",
]
+ status = (known after apply)
+ urn = (known after apply)
+ vcpus = (known after apply)
+ volume_ids = (known after apply)
+ vpc_uuid = (known after apply)
}
# digitalocean_record.www سيتم إنشاؤه
+ resource "digitalocean_record" "www" {
+ domain = "your_domain'"
+ fqdn = (known after apply)
+ id = (known after apply)
+ name = "@"
+ ttl = (known after apply)
+ type = "A"
+ value = (known after apply)
}
Plan: 2 to add, 0 to change, 0 to destroy.
...
ستشاهد أخطوات ببطء بعضها بتوقع أن تكون موجودة بعد الإنشاء وهذا بالضبط ما يجب أن يحدث ، لذلك يمكنك تطبيق التكوين:
سيكون المخرج كما من قبل ، ما عدا أن هذه المرة سيطرح عليك السؤال:
OutputPlan: 2 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: `yes`
أدخل yes
وسيتم توفير دوبلتكك والسجل التليفزيوني:
Outputdigitalocean_droplet.web: Creating...
...
digitalocean_droplet.web: Creation complete after 33s [id=204432105]
digitalocean_record.www: Creating...
digitalocean_record.www: Creation complete after 1s [id=110657456]
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
ترافورم قد تسجيل الموارد المتوفرة الآن في حالته. للتأكد من أن السجلات الDNS والDroplet قد تم ربطهما بنجاح، يمكنك استخراج عنصر الIP للDroplet من الحالة المحلية والبحث عن ما إذا كان يتطابق مع السجلات الDNS العامة ل dominio خاص بك. قم بتشغيل الأمر التالي لحصول على عنصر الIP:
ستحصل على عنصر IP للDroplet الخاص بك:
Outputipv4_address = "your_Droplet_IP"
...
يمكنك البحث عن السجلات العامة A بتشغيل:
ستظهر الناتج بعنصر IP الذي يتم إشارته إلى السجل العام:
OutputAddress: your_Droplet_IP
هم نفسهم، كما يجب أن يكونوا، مما يعني أن الDroplet وسجل DNS تم توفيرهما بنجاح.
للتأكد من أن التغييرات في الخطوة القادمة ستنفذ قم بتدمير الموارد المتوفرة بتشغيل:
عندما يتم المعاينة ، أدخل yes
للمتابعة.
في هذه الخطوة قمت بإنشاء بنيتك وتطبيقه على حسابك الخاص ب DigitalOcean. سوف تغيره الآن لتتمكن من تثبيت Apache متصل بالإنترنت على الDroplet المتوفر بواسطة Terraform provisioners.
الخطوة 6 — تشغيل الشيء بواسطة الممرضين
حالياً سوف تقوم بتأسيس تثبيت Apache متصل بالإنترنت على دوبلتك المتوفر الآن باستخدام ممرض التنفيذ التعليمي للقيام بأوامر شخصية.
تماماً تستطيع استخدام موردات ترافيسبورد لتنفيذ أفعال تحديدية على الموارد البعيدة المنشئة (مورد التنفيذ البعيد remote-exec
) أو الجهاز المحلي الذي يتم تنفيذ البرمجيات عليه (باستخدام المورد local-exec
). إذا فشل مورد تنفيذ، سيتم تعريف النقطة ك tainted في الحالة الحالية، وهذا يعني أنها ستُحذف وستُعيد إنشاؤها خلال الترافيسبورد القادم.
للاتصال بالقطعة المستهدفة المتوفرة، تحتاج ترافيسبورد إلى مفتاح الـSSH الخاص بها، الذي يتم تأسيسه على القطعة. أفضل طريقة لتمرير موقع المفتاح الخاص هي عن طريق المتغيرات، لذا افتح variables.tf
للتعديل:
أضف السطر الملون:
لقد أضفت الآن متغير جديد يُدعى private_key
لمشروعك. حفظ وغلق الملف.
من ثم، سوف تضيف البيانات الاتصالية والمورد البعيد التعريفي ل配置اتك القطعية. افتح droplets.tf
للتعديل بتنفيذ الأمر:
وسيتم توسيع البرمجيات الموجودة بالسطور الملونة:
يحدد القطعة connection
كيفية تواصل ترافيسبورد مع القطعة المستهدفة. ويحتوي القطعة provisioner
على توالي أوامر، خلال الماركات الفائزة inline
، التي ستنفذ بعد التوعية. وهذا يعني تحديث قاعدة البيانات الخاصة بمودمر البرمجيات وتثبيت Apache. حفظ وغلق عندما تنتهي.
يمكنك أيضًا إنشاء متغير بيئة temporal لمسار المفت
ملاحظة: يتوجب وضع المفاتيح الخاصة وأي ملف آخر تود تحميله من داخل Terraform ضمن المشروع. يمكنك مشاهدة درس التوجيه كيفية تكوين التوافر المولد بواسطة مفتاح SSH على سيرفر لينكس لمعلومات أكثر حول إعداد مفتاح SSH على Ubuntu 20.04 أو أخرى توزيعات.
حاول تطبيق الإعدادات مرة أخرى:
أدخل yes
عند التقا prompt. سوف تحصل على ما يشابه الخريطة السابقة، ومواءمة بما يزيد من الخريطة الطويلة من متوفر الموارد البعيدة عن المورد remote-exec
:
Outputdigitalocean_droplet.web: Creating...
digitalocean_droplet.web: Still creating... [10s elapsed]
digitalocean_droplet.web: Still creating... [20s elapsed]
digitalocean_droplet.web: Still creating... [30s elapsed]
digitalocean_droplet.web: Provisioning with 'remote-exec'...
digitalocean_droplet.web (remote-exec): Connecting to remote host via SSH...
digitalocean_droplet.web (remote-exec): Host: ...
digitalocean_droplet.web (remote-exec): User: root
digitalocean_droplet.web (remote-exec): Password: false
digitalocean_droplet.web (remote-exec): Private key: true
digitalocean_droplet.web (remote-exec): Certificate: false
digitalocean_droplet.web (remote-exec): SSH Agent: false
digitalocean_droplet.web (remote-exec): Checking Host Key: false
digitalocean_droplet.web (remote-exec): Connected!
...
digitalocean_droplet.web: Creation complete after 1m5s [id=204442200]
digitalocean_record.www: Creating...
digitalocean_record.www: Creation complete after 1s [id=110666268]
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
يمكنك الآن التنقل إلى مجالك الرئيسي في متصفح الويب. سوف ترون صفحة مرحبا بApache الافتراضي.
هذا يعني أن Apache تم تثبيته بنجاح، وأن Terraform قام بتوفير كل شيء بالطريقة الصحيحة.
لتدمير الموارد المتوفرة، قم بتشغيل الأمر التالي وأدخل yes
عند التقا prompt:
لقد أنجزت الآن مشروع صغير لTerraform مع بنية بسيطة تنتشر موقع الويب Apache في قمة Droplet وتوفير سجلات DNS للمجال الرئيسي المرغوب فيه.
الخلاصة
قد تعلمت عن مقاربتين عامتين لتشكيل مشاريعكم في Terraform وفقاً للتعقيد بالذي تلتزم به. بعد التوجه البسيط للتشكيل واستخدام الموصل remote-exec
لتنفيذ الأوامر، تم تخزين دوبليو يشتغل بالApache مع سجلات الDNS لدومينك الخاص.
وللمرجع هذه هي البنية التي أنشأتها في هذا التوريتال:
.
└── tf/
├── versions.tf
├── variables.tf
├── provider.tf
├── droplets.tf
├── dns.tf
├── data-sources.tf
└── external/
└── name-generator.py
توفر مواردكم التي قد تعريفتمها (دوبليو الخاص بكم، سجل الDNS ومصدر البيانات التي تتغير ومزود الDigitalOcean والمتغيرات) في ملفات منفصلة كل واحد في خصوصه وفقاً للتشكيل البسيط الذي توصد في القسم الأول من هذا التوريتال.
لمعلومات أكثر حول موارد Terraform وما يتضمنه أحداثها، أنظر إلى التوثيق الرسمي.
هذا التوريتال جزء من السلسلة كيفية إدارة البنية بواسطة Terraform. السلسلة تغطي عددًا من المواضيع في Terraform من تثبيت Terraform لأول مرة إلى إدارة المشاريع المعقدة.
Source:
https://www.digitalocean.com/community/tutorials/how-to-structure-a-terraform-project