AWS معلمة المتجر مقابل متغيرات البيئة

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

حالة لمتغيرات البيئة

سهل الإعداد

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

npm تثبيت dotenv

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

تتطلب ( 'dotenv'). التكوين ()

من هنا ، كل ما نحتاج إليه هو إضافة متغيرات البيئة الخاصة بنا إلى ملف .env الموجود في المجلد الجذر للمشروع.

يمكنك العثور على مزيد من المعلومات حول وحدة dotenv هنا:

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

  • تحتاج إلى الوصول إلى حساب AWS
  • تحتاج إلى معرفة كيفية التنقل في لوحة معلومات AWS - وتحديداً قسم SSM.
  • يجب تشفير المعلمات الحساسة / الآمنة باستخدام KMS - والتي تتطلب بحد ذاتها بعض الإعداد الإضافي (https://aws.amazon.com/kms/)
  • بناءً على احتياجاتك ، قد تحتاج إلى معرفة التهيئة بخدمات AWS الأخرى مثل IAM و SSM حتى تعمل "متجر المعلمات" على العمل بشكل صحيح.
  • يتم استضافة جميع المعلمات على السحابة التي تتطلب وصولًا برمجيًا إلى IAM ، مما يعني أن الاتصال دون انقطاع مطلوب (تجدر الإشارة إلى أنه يمكن إنشاء إعدادات محلية مفصّلة مع المتغيرات المحلية التي يمكن استخدامها بدلاً من متغيرات Store Parameter Store اعتمادًا على الموقف - I في الواقع تشجيع هذا النوع من النهج).

سهل التحديث أثناء التطوير والنشر والاختبار

يمكن بسهولة تحديث متغيرات البيئة عبر ملف .env أعلاه ووحدة dotenv. يمكن أيضًا إنشاء أشكال مختلفة من هذا الملف واستخدامها لتناسب كل بيئة ذات صلة. يعمل استيراد متغيرات البيئة الخاصة بنا في سيناريو اختبار بنفس الطريقة (استيراد vars env من ملف dotenv ذي الصلة).

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

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

من وجهة نظر متجر المعلمة ، فإنه من غير الملائم للغة / الإطار ، مما يعني أن كل الإعداد سيتعين القيام به يدويًا باستخدام AWS SDK مع وصول برمجي إلى خدمة متجر المعلمات ، أو من خلال موفر جهة خارجية (مثل وحدة npm) . في حين أن AWS والخدمات التي تقدمها هي المعيار القياسي لمعايير الأمان في مجال الحوسبة السحابية ، فإن الوحدات المخصصة التي قد ترغب في تطويرها أو الاستفادة منها قد تكون بها ثغرات أمنية بسبب الخبث أو الرقابة - مع الأخذ في الاعتبار وجود وحدات مقبولة من الصناعة لهذا الغرض وهي: تمت صيانته واعتماده من قبل كيانات موثوق بها مثل AWS نفسها.

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

متغيرات البيئة أحرار في الاستخدام

على الرغم من أن متجر AWS Parameter Store لا يتضمن رسومًا إضافية (https://aws.amazon.com/systems-manager/pricing) ، فإن هيكل تسعير أمازون للخدمات ذات الصلة مثل KMS (https://aws.amazon.com/kms/pricing ) سوف تبدأ في تحمل تكاليف إضافية على أساس الاستخدام. من ناحية أخرى ، استخدام متغيرات البيئة مجاني.

فلماذا تحل محل متغيرات البيئة؟ : قضية لمتجر المعلمة

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

يمكن مشاركة متغيرات Store Parameter Store عبر مشاريع متعددة

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

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

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

يمكن استخدام مخزن المعلمة التحكم في الوصول

إن وجود تحكم محدد في وصول المستخدم يجعل خدمة IAM واحدة من أكبر سمات AWS ، وخاصة عندما يتعلق الأمر بالتعامل مع المعلومات التي يحتمل أن تكون حساسة مثل مفاتيح API أو كلمات المرور. إن مفهوم التحكم في الوصول إلى متغيرات البيئة ضمن معنى الفانيليا (مثل استخدام نهج dotenv) ليس مجرد خيار (إلا إذا كنت على استعداد لتطوير حل مفصل خاص بك - أو الانتقال خارج نطاق "أفضل الممارسات").

يتم تحديث قيم متجر المعلمة بسهولة

من أجل تحديث أي قيم في متجر Parameter Store ، كل ما تحتاج إليه هو الوصول المناسب إلى لوحة معلومات AWS (أو CLI) ، مما يعني أنه حتى أعضاء الفريق غير الفني يمكنهم تحديث القيم مع قليل من تجربة لوحة معلومات AWS.

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

يمكن لـ KMS تشفير قيم Parameter Store بسهولة

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

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

يمكن تنظيم متغيرات Store Parameter

تتم إدارة معلمات الإنتاج والتدريج في مكان واحد عند استخدام Parameter Store ، والذي يتضمن معاملات الفرز والتصفية وحتى إضافة أوصاف لتوضيح الغرض منها.

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

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

استنتاج

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

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