أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

يبدو أن مطوري Terraform يقدمون أفضل الممارسات الملائمة للعمل مع البنية التحتية لـ AWS. فقط هناك فارق بسيط. بمرور الوقت ، يزداد عدد البيئات وتظهر الميزات في كل منها. يظهر تقريبًا نسخة من مكدس التطبيق في المنطقة المجاورة. ويجب نسخ كود Terraform وتحريره بعناية وفقًا للمتطلبات الجديدة أو لعمل ندفة ثلجية.

يدور تقريري حول الأنماط في Terraform لمكافحة الفوضى والروتين اليدوي في المشاريع الكبيرة والطويلة.

فيديو:

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

أبلغ من العمر 40 عامًا ، وأنا أعمل في مجال تكنولوجيا المعلومات منذ 20 عامًا. أنا أعمل في Ixtens منذ 12 عامًا. نحن منخرطون في التنمية المدفوعة بالتجارة الإلكترونية. وأنا أمارس ممارسات DevOps منذ 5 سنوات.

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

يتم إعطاء الأرقام الموجودة على الشريحة من أجل فهم نطاق المشروع. وكل ما سأقوله بعد ذلك مرتبط بأمازون.

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

شكرًا لماتفي ، الذي أخبرنا بالأمس بما حدث في دودو بيتزا. هذا ما حدث لنا منذ 4 سنوات.

جاء المطورون وبدأوا في عمل كود البنية التحتية.

كانت الأسباب الأكثر وضوحًا لضرورة هذا هو وقت التسويق. كان من الضروري التأكد من أن فريق DevOps لم يكن عقبة عند بدء التشغيل. ومن بين أمور أخرى ، تم استخدام Terraform و Puppet في المستوى الأول للغاية.

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

تعني البنية التحتية كرمز أنه يمكننا وصف بنيتنا التحتية ونطلب من بعض الروبوتات التأكد من حصولنا على الموارد التي وصفناها.

على سبيل المثال ، نحن بحاجة إلى آلة افتراضية. سوف نصف ، نضيف بعض المعلمات المطلوبة.

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

بعد ذلك ، سنقوم بتهيئة الوصول إلى Amazon في وحدة التحكم. واطلب خطة Terraform. ستقول خطة Terraform: "حسنًا ، بالنسبة لمواردك ، يمكننا القيام بهذه الأشياء." وستتم إضافة مورد واحد على الأقل. ولا يتوقع أي تغييرات.

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

ونكرر. الرجاء التخطيط. نحن نرى ما هي التغييرات المخطط لها. يتقدم. وهكذا تنمو بنيتنا التحتية.

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

بنيتنا التحتية آخذة في النمو. هذا هو رمزنا. والآن لا نريد إنشاء آلة افتراضية فحسب ، بل نريد أن تكون لدينا بيئة اختبار.

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

يسمح لك Terraform بعمل شيء مثل الوحدة ، أي وصف الشيء نفسه في مجلد ما.

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

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

بوجود مكتبة موارد واسعة النطاق ، يمكنك الاتصال بنفس الشيء في الاختبار والإنتاج.

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

تهتم Terraform بجميع التبعيات. ويقوم دائمًا بإنشاء موارد في هذا التسلسل بحيث يمكنك الحصول على عنوان IP ، على سبيل المثال ، من مثيل تم إنشاؤه حديثًا ، والحصول على عنوان IP هذا في إدخال route53.

بالإضافة إلى ذلك ، المنصة كبيرة جدًا. وإجراء اختبار مكدس ، حتى لو كان لمدة ساعة ، حتى لو كان لمدة 8 ساعات ، هو عمل مكلف للغاية.

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

ثم دفع Jenkins نصًا برمجيًا قام بتعديل الشفرة بشكل طفيف في مجلد Terraform. تمت إزالة الملفات غير الضرورية وإضافة الملفات الضرورية. وبعد ذلك ، مع تطبيق تشغيل واحد من Terraform ، ارتفعت المكدس.

ثم كانت هناك خطوات أخرى لا أريد الخوض فيها.

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

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

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

في الواقع ، Terraform ليست لغة حقيقية. هذا إعلان. إذا احتجنا إلى التصريح بشيء ما ، فإننا نعلن عنه. وكل شيء يعمل.

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

وبعد ظهور ندفة الثلج هذه ، كل كود Terraform الذي حولناه إلى كومة كبيرة وكبيرة من الثلج.

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

ماذا يمكننا ان نفعل بعد ذلك؟ قبل العمل مع Terraform ، تحتاج إلى تهيئته. في وقت التهيئة ، يقوم Terraform بتنزيل جميع المكونات الإضافية. في مرحلة ما ، انفصلوا من وحدة متراصة إلى بنية خدمات مصغرة أكثر. وتحتاج دائمًا إلى القيام بـ Terraform init بحيث يقوم بسحب جميع الوحدات ، كل الإضافات.

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

من أين تحصل على البيانات؟ ملف JSON. يسمح لك Terraform بكتابة البنية التحتية ليس فقط في hcl (لغة تكوين HashiCorp) ، ولكن أيضًا في JSON.

JSON سهلة القراءة من نص برمجي. وفقًا لذلك ، يمكنك وضع ملف تكوين مع دلو في مكان ما. واستخدم هذا الدلو في كود Terraform وفي البرنامج النصي shell للتهيئة.

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

لماذا من المهم أن يكون لديك دلو Terraform؟ لأن هناك شيء مثل ملفات الحالة البعيدة. أي عندما أجمع بعض الموارد ، لأخبر أمازون: "الرجاء رفع المثيل" ، أحتاج إلى تحديد الكثير من المعلمات المطلوبة.

ويتم تخزين هذه المعرفات في مجلد آخر. ويمكنني أن آخذه وأقول: "Terraform ، من فضلك ركض إلى ملف الدولة لهذا المورد بالذات واحضر لي هذه المعرفات." وبالتالي هناك نوع من التوحيد بين مختلف المناطق أو البيئات.

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

الآن قليلا عن الاختبار. ما الذي يمكن اختباره في Terraform؟ من المحتمل أن يكون هناك الكثير ، لكنني سأتحدث عن هذه الأشياء الأربعة.

يمتلك HashiCorp فهمًا لكيفية تنسيق كود Terraform. ويتيح لك Terraform fmt تنسيق الكود الذي تقوم بتحريره وفقًا لهذا الاعتقاد. وفقًا لذلك ، يجب أن تتحقق الاختبارات بالضرورة مما إذا كان التنسيق يطابق ما أوصى به HashiCorp ، حتى لا تضطر إلى تغيير موقع الأقواس ، وما إلى ذلك.

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

وفقًا لذلك ، لتسريع الاختبار ، نجري عدة عمليات بالتوازي باستخدام التوازي.

الموازي شيء رائع جدًا ، استخدمه.

ولكن في كل مرة يتم فيها تهيئة Terraform ، يذهب إلى HashiCorp ويسأل ، "ما هي أحدث المكونات الإضافية؟ والمكوِّن الإضافي الموجود في ذاكرة التخزين المؤقت - هل هو المكون الإضافي أم لا؟ وقد تباطأ في كل خطوة.

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

المرحلة التالية هي خطة Terraform. كما قلت ، التنمية دورية. نحن نصنع كود بالتغييرات وبعد ذلك تحتاج إلى معرفة التغييرات المخطط لها للبنية التحتية.

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

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

يجب أن تتم خطة Terraform عند الطلب. على الأقل هذا ما نفعله.

الاختبارات ، بالطبع ، جيدة في كل تغيير ، لكل التزام ، لكن الخطط مكلفة للغاية. ونقول في طلب السحب: "من فضلك أعطني الخطط". يبدأ الروبوت. ويرسل إلى التعليقات أو يرفق كل الخطط المتوقعة من تغييراتك.

الخطة باهظة الثمن إلى حد ما. يستغرق الأمر وقتًا لأن Terraform يذهب إلى أمازون ويسأل ، "هل هذا المثال لا يزال موجودًا؟ هل هذا المقياس التلقائي له نفس المعلمات بالضبط؟ ". ولتسريعها ، يمكنك استخدام معامل مثل Refresh = false. هذا يعني أن Terraform سينكمش حالة S3. وسأعتقد أن الدولة ستطابق تمامًا ما هو موجود في أمازون.

خطة Terraform هذه أسرع بكثير ، ولكن يجب أن تتطابق الحالة مع البنية التحتية الخاصة بك ، أي في مكان ما ، يجب أن يبدأ تحديث Terraform في وقت ما. يقوم تحديث Terraform بذلك بالضبط ، بحيث تتوافق الحالة مع ما هو موجود في البنية التحتية الحقيقية.

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

الشيء التالي الذي أود التحدث عنه هو اختبار بيانات المستخدم.

ما هي بيانات المستخدم؟ في Amazon ، عندما نقوم بإنشاء مثيل ، يمكننا إرسال نوع من الحرف من المثيل - البيانات الوصفية. عند بدء مثيل ، عادة ما تكون سحابة init موجودة دائمًا في تلك الحالات. تقرأ Cloud init هذه الرسالة وتقول: "حسنًا ، أنا اليوم موازن تحميل". ووفقًا لهذه التعاليم ، يقوم ببعض الأعمال.

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

وإذا لم تنتبه لهذا ، فقد ينتقل بعض الملفات النصية المهزومة إلى Amazon ، إلى البنية التحتية الحقيقية.

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

بدلاً من ذلك ، لا يمكنك تحديد البنية الأساسية بالكامل أثناء التنفيذ ، ولكن يمكنك تحديد النموذج فقط. وفي الكود قل: "من فضلك اعرض هذا النموذج لي". ونتيجة لذلك ، يمكنك الحصول على نسخة مطبوعة من الشكل الذي ستبدو عليه بياناتك على Amazon.

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

خيار آخر هو استخدام وحدة لتوليد بيانات المستخدم. سوف تقوم بتطبيق هذه الوحدة. احصل على الملف على القرص. قارنها بالمرجع. وبالتالي ، إذا قرر البعض إصلاح القليل من بيانات المستخدم ، فستقول اختباراتك: "حسنًا ، هناك بعض التغييرات هنا وهناك - هذا أمر طبيعي."

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

الشيء التالي الذي أود التحدث عنه هو تطبيق Automate Terraform.

بالطبع ، إنه أمر مخيف بما يكفي لتطبيق Terraform في الوضع التلقائي ، لأن من يدري التغييرات التي حدثت هناك ومدى إلحاقها الضرر بالبنية التحتية الحية.

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

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

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

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

ومن الصعب جدًا قراءتها. من الصعب للغاية مراجعة هذا. وغالبًا ما يتبين أنه تتم مراجعة بعض المعلمات وأنها ليست تمامًا تلك المطلوبة. ويكلّف إصلاحه لاحقًا وقتًا ومالًا.

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

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

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

وخلاصة القول:

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

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

  • بنية تحتية ثابتة. تسليم AMI في الموعد المحدد.
  • بنية المسار 53 عندما يكون لديك الكثير من الإدخالات وتريد أن تكون في ترتيب ثابت.
  • حارب حدود معدل API. هذا عندما تقول أمازون ، "هذا كل شيء ، لا يمكنني قبول أي طلبات أخرى ، يرجى الانتظار." ونصف المكتب ينتظر حتى يتمكن من إطلاق بنيته التحتية.
  • بقعة الحالات. أمازون ليس حدثًا رخيصًا وتتيح لك المواقع توفير الكثير جدًا. وهناك يمكنك أن تخبرنا بتقرير كامل عنها.
  • أدوار الأمان و IAM.
  • ابحث عن الموارد المفقودة ، عندما يكون لديك حالات من أصل غير معروف في Amazone ، فإنهم يأكلون المال. حتى إذا كانت تكلفة المثيلات 100-150 دولارًا أمريكيًا في الشهر ، فإنها تزيد عن 1 دولار أمريكي سنويًا. العثور على مثل هذه الموارد هو عمل مربح.
  • و الامثل المحجوزة.

أنماط في Terraform لمكافحة الفوضى والروتين اليدوي. مكسيم كوستريكين (Ixtens)

هذا كل شيء بالنسبة لي. Terraform رائع جدًا ، استخدمه. شكرًا لك!

الأسئلة

شكرا على التقرير! لديك ملف حالة في S3 ، ولكن كيف يمكنك حل المشكلة التي يمكن للعديد من الأشخاص أخذ ملف الحالة هذا ومحاولة نشرها؟

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

هل تستخدم المصدر المفتوح أو المؤسسة؟

لا توجد مؤسسة ، أي كل ما يمكنك الذهاب إليه وتنزيله مجانًا.

اسمي ستانيسلاف. كنت أرغب في عمل إضافة صغيرة. لقد تحدثت عن ميزة Amazon التي تسمح لك بجعل مثيل لا يمكن القضاء عليه. هذا أيضًا في Terraform نفسه ، في كتلة Life Second ، يمكنك فرض حظر على التغيير أو حظر التدمير.

كانت محدودة في الوقت المناسب. نقطة جيدة.

أنا أيضا أردت أن أسأل شيئين. أولاً ، تحدثت عن الاختبار. هل استخدمت أي أدوات اختبار؟ سمعت عن البرنامج المساعد Test Kitchen. ربما هناك شيء آخر. وأود أن أسأل عن القيم المحلية. كيف تختلف بشكل أساسي عن متغيرات الإدخال؟ ولماذا لا يمكنني تحديد شيء ما من خلال القيم المحلية فقط؟ حاولت التعامل مع هذا الموضوع ، لكن بطريقة ما لم أفهمه بنفسي.

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

فيما يتعلق بالقيم المحلية ، دعنا نواصل المحادثة خارج الجمهور.

مرحبًا! شكرا على التقرير! مليء بالمعلومات. قلت إن لديك الكثير من نفس النوع من الكود لوصف البنية التحتية. هل فكرت في إنشاء هذا الرمز؟

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

هل سمعت عن jsonnet؟

لا.

انظر ، هذه أشياء رائعة حقًا. أرى حالة معينة حيث يمكنك تطبيقها وإنشاء بنية بيانات.

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

فقط انظر. شكرًا لك!

اسمي مكسيم ، أنا من سبيربنك. لقد قلت قليلاً أنك حاولت جلب Terraform إلى نظير لغة برمجة. أليس من الأسهل استخدام Ansible؟

هذه اشياء مختلفة جدا يمكن لـ Ansible إنشاء موارد ، ويمكن لـ Puppet إنشاء موارد في Amazon. لكن Terraform شحذ بصراحة.

هل لديك أمازون فقط؟

ليس الأمر أننا لدينا أمازون فقط. تقريبا لدينا أمازون فقط. لكن السمة الرئيسية هي أن Terraform يتذكرها. في Ansible ، إذا قلت: "التقط لي 5 حالات" ، فسيتم رفعها ، ثم تقول: "والآن أنا بحاجة إلى 3". وسيقول Terraform: "حسنًا ، سأقتل 2" ، وسيقول Ansible: "حسنًا ، إليك 3 من أجلك." المجموع 8.

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

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

السؤال هو. أنت تستخدم الواجهة الخلفية Remote ، وأنت تستخدم S 3. لماذا لا تستخدم الواجهة الخلفية الرسمية؟

الرسمية؟

سحابة Terraform.

متى ظهر؟

قبل 4 أشهر.

إذا كان قد ظهر قبل 4 سنوات ، فمن المحتمل أنني كنت سأجيب على سؤالك.

توجد بالفعل وظيفة وأقفال مضمنة ، ويمكنك تخزين ملف الحالة. جربها. لكنني لم أختبر أيضًا.

نحن في قطار كبير يتحرك بسرعة عالية. ولا يمكنك أخذ بعض السيارات ورميها.

كنت تتحدث عن رقاقات الثلج ، لماذا لم تستخدم الفرع؟ لماذا لم تسر بهذه الطريقة؟

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

أي أنها لا تعمل؟

إنه لا يعمل على الإطلاق.

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

مرحبًا! اسمي يورا! شكرا على التقرير! سؤال عن الوحدات. أنت تقول أنك تستخدم وحدات. كيف تحل المشكلة إذا تم إجراء تغييرات في وحدة واحدة لا تتوافق مع تغيير شخص آخر؟ بطريقة أو بأخرى تعيين الإصدارات للوحدات النمطية أو محاولة جلب معجزة لتلبية متطلبين؟

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

أي ، لم يتقرر بعد؟

أنت تصنع وحدات عالمية. تجنب رقاقات الثلج. وكل شيء سينجح. النصف الثاني من التقرير يدور حول كيفية تجنبه.

مرحبًا! شكرا على التقرير! اود ان اوضح. خلف الكواليس كان هناك كومة كبيرة أتيت من أجلها. كيف يتم دمج توزيع الدمى والأدوار؟

بيانات المستخدم.

هذا هو ، هل فقط بصق الملف وتنفيذه بطريقة ما؟

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

هذا هو ، هل هو نوع من العملية المنفصلة التي يتم التخلي عنها؟

نحن لم نخترعه. نحن نستخدمه.

مرحبًا! لدي سؤال حول بيانات المستخدم. لقد قلت أن هناك مشاكل هناك ، وأن شخصًا ما قد يرسل شيئًا ما إلى المكان الخطأ. هل هناك طريقة ما لتخزين بيانات المستخدم في نفس Git ، بحيث يكون من الواضح دائمًا ما تشير إليه بيانات المستخدم؟

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

اتضح أن الحل الوحيد هو الاختبار؟

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

اسمي تيمور. إنه لأمر رائع أن تكون هناك تقارير حول كيفية تنظيم Terraform بشكل صحيح.

لم أبدأ حتى.

أعتقد أنه في المؤتمر القادم ، ربما سيكون هناك. لدي سؤال بسيط. لماذا تقوم بترميز القيمة في وحدة منفصلة بدلاً من استخدام tfvars ، أي هل الوحدة ذات القيم أفضل من tfvars؟

أي يجب أن أكتب هنا (slide: production / environment / settings.tf): المجال = متغير ، المجال vpcnetwork ، متغير vpcnetwork و stvars - هل تحصل على نفس الشيء؟

نحن نفعل ذلك بالضبط. نشير إلى وحدة مصدر الإعداد ، على سبيل المثال.

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

اتضح أن كل شيء كان في مكان واحد؟

نعم ، tfvars عندما يكون لديك رمز واحد. ويتم استخدامه في عدة أماكن مختلفة مع الفروق الدقيقة المختلفة. ثم سترمي tfvars وتحصل على الفروق الدقيقة. ونحن البنية التحتية كرمز في أنقى صوره. بدا وفهم.

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

مع المفاتيح ، ولكن - نعم ، يتأثر جزء من البنية التحتية بهذا الشيء ، أي لا يمكن لـ Terraform تغيير أي شيء. لا يمكننا تغيير أي شيء بأيدينا أيضًا. طالما أننا نعيش معها.

أي أنك صادفت هذا ، لكنك لم تأت بأي شيء ، كيف يفعل ذلك ويفعله بنفسه؟

للأسف نعم.

مرحبًا! اسمي ستانيسلاف ستاركوف. بريد. en المجموعة. كيف تحل مشكلة إنشاء علامة على ... ، كيف تمررها إلى الداخل؟ كما أفهمها ، من خلال بيانات المستخدم ، لتحديد اسم المضيف ، تحريض Puppet؟ والجزء الثاني من السؤال. كيف يمكنك حل هذه المشكلة في SG ، أي عند إنشاء SG ، مئات الحالات من نفس النوع ، كيف يتم تسميتها بشكل صحيح؟

تلك الحالات التي تعتبر مهمة جدًا بالنسبة لنا ، سنقوم بتسميتها بشكل جميل. تلك التي ليست هناك حاجة ، هناك حاشية أن هذه مجموعة مقياس تلقائي. ومن الناحية النظرية يمكن تسميرها والحصول على واحدة جديدة.

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

ماذا كان السؤال أيضا؟

عندما تخلق الأمانة العامة مائة حالة ، هل يجب تمييزها بطريقة ما؟

لا لا تفعل. كل مثيل لديه وكيل يخبرني أن لدي مشكلة. إذا أبلغ الوكيل ، فإن الوكيل يعرف عنه وعلى الأقل عنوان IP الخاص به. يمكنك بالفعل الجري. ثانيًا ، نستخدم Consul for Discovery ، حيث لا يوجد Kubernetes. ويظهر القنصل أيضًا عنوان IP الخاص بالمثيل.

أي أنك تستهدف عنوان IP بالضبط وليس اسم المضيف؟

من المستحيل التنقل باستخدام اسم المضيف ، أي أن هناك الكثير منها. هناك معرّفات حالات - AE ، إلخ. يمكنك العثور عليها في مكان ما ، ويمكنك طرحها في البحث.

مرحبًا! أدركت أن Terraform شيء جيد ، مصمم خصيصًا للسحب.

ليس هذا فقط.

هذا هو السؤال الذي يهمني. إذا قررت الانتقال ، على سبيل المثال ، إلى Bare Metal بشكل جماعي مع جميع مثيلاتك؟ هل ستكون هناك أية مشاكل؟ أم لا يزال يتعين عليك استخدام منتجات أخرى ، على سبيل المثال ، نفس Ansible الذي تم ذكره هنا؟

Ansible هو قليلا عن شيء آخر. وهذا يعني أن Ansible قيد التشغيل بالفعل عند بدء المثيل. ويعمل Terraform قبل بدء المثيل. التحول إلى Bare Metal ليس كذلك.

ليس الآن ، لكن العمل سيأتي ويقول: "تعال".

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

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

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

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

في الغالب بأيدينا وأعيننا ، إذا رأينا شيئًا غريبًا في التقرير ، فإننا نحلل ما يحدث هناك ، أو نقتله. بشكل عام ، تعد طلبات السحب أمرًا شائعًا.

إذا كان هناك خطأ ، هل تتراجع؟ هل حاولت فعل هذا؟

لا ، هذا قرار يتخذه الشخص في الوقت الحالي عندما يرى المشكلة.

المصدر: www.habr.com