كيفية استخدام Ansible لإدارة موارد AWS الخاصة بك

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

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

هذا لا يعني أن AWS نفسها لا تعالج المشكلة بفئتها الخاصة من أدوات التنسيق القوية ، بما في ذلك CloudFormation وخدمة Elastic Kubernetes (شيء أتناوله بإسهاب في الدورة التدريبية "استخدام Docker على AWS" في Pluralsight). ولكن لا يوجد أي من هذين الخيارين قريبًا جدًا من بنيتك التحتية الحالية - أو يستخدم طريقة تشغيل مألوفة - مثل Ansible.

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

فهم ميزة Ansible / AWS

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

قبل أن نطلق كتاب "Hello World" Ansible playbook البسيط ، فلنتأكد أولاً من حصولك على بيئة عمل مهيأة بشكل صحيح يمكن من خلالها أن تتواصل Ansible مع جميع أصدقائها الجدد في حساب AWS الخاص بك.

تهيئة بيئة محلية

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

في الأيام الخوالي ، عندما تم تشغيل دليل التشغيل على خادم فعلي ، كان Ansible يستخدم اتصال SSH موجودًا لتسجيل الدخول بأمان إلى المضيف البعيد والبدء في بناء تطبيقك. لكن هذا لن ينجح مع أعباء عمل AWS. كما ترى ، نظرًا لأن مثيلات EC2 والبنية التحتية الأخرى التي تريد تشغيلها غير موجودة بعد ، فلا يمكن أن تكون هناك اتصالات SSH "موجودة". بدلاً من ذلك ، ستستخدم Ansible Boto 3 - مجموعة تطوير البرامج (أو SDK) التي تستخدمها AWS والتي تسمح لكود Python بالاتصال بواجهة AWS API.

استخدام AWS CLI لتوصيل Ansible

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

يعد العمل مع مدير حزم Python ، PIP ، طريقة شائعة لإنجاز كل ذلك. إليك كيفية تثبيت PIP نفسها ثم AWS CLI على جهاز Ubuntu:

sudo apt update sudo apt install python3-pip pip3 install awscli

يجب أن أشير إلى أنه ، أثناء كتابتي لهذا ، لا يزال Python 2 على قيد الحياة ... ولكن فقط. لذلك قد يكون هناك أحيانًا إصدارات منفصلة من Python 2 و Python 3 مثبتة على نظامك. نظرًا لأن Python 2 سيتم إهماله تمامًا قريبًا ، فربما لن تقلق بشأن تحديد python3 أو pip3 بأوامرك: يجب أن يكون ذلك تلقائيًا.

بمجرد تثبيت CLI ، قم بتشغيل aws configureوإدخال معرف مفتاح الوصول إلى AWS ومفتاح الوصول السري.

aws configure cat .aws/credentials

يمكنك الحصول على مفاتيح من صفحة بيانات اعتماد الأمان الخاصة بك في وحدة الإدارة في AWS. إليك كيف ستبدو هذه المفاتيح (لا تحصل على أي أفكار بذيئة ، فهذه ليست صالحة):

AccessKeyId: AKIALNZTQW6H3EFBRLHQ SecretAccessKey: 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

فقط تذكر أن زوجًا من المفاتيح تم إصداره للمستخدم الجذر لحساب AWS الخاص بك يوفر وصولاً كاملاً إلى حساب AWS بالكامل. سيتمكن أي شخص لديه بيانات الاعتماد هذه من زيادة رسوم الخدمات المكونة من ستة وحتى سبعة أرقام بسرعة ، لذا كن حذرًا جدًا في كيفية استخدامها وتخزينها. من الناحية المثالية ، سيكون من الأفضل لك الحد من تعرضك للمخاطر من خلال إنشاء مستخدم إداري في خدمة AWS Identify and Access Management (IAM) بصلاحيات محدودة واستخدام مفتاح تم إصداره لذلك المستخدم.

على أي حال ، لماذا أفعل هذا؟ تكمن قيمة تعبئة ملف بيانات اعتماد AWS في أن Ansible ذكي بما يكفي للبحث عنه ، وإذا لم تتوفر مفاتيح مصادقة أخرى في بيئة النظام ، فسيستخدمها. سترى قريبًا كيف سيكون ذلك مناسبًا جدًا. ومع ذلك ، يجب أن تكون على دراية بالطرق الأخرى لإدارة المصادقة الخاصة بـ Playbooks ، مثل استخدام ansible-vault أو عن طريق إنشاء ملف aws_keys.yml ثم استدعاءه. ولكن هناك شيء واحد يجب ألا تفعله بالتأكيد وهو الترميز الثابت للمفاتيح الموجودة في ملفات Playbook الخاصة بك - خاصة إذا كنت تخطط لدفعها إلى مستودع عبر الإنترنت مثل GitHub. سأختبر CLI بسرعة للتأكد من أنه يمكننا الاتصال بشكل صحيح بـ AWS. سيقوم هذا الأمر البسيط بسرد أي حاويات S3 لدي داخل هذا الحساب.

aws s3 ls

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

$ pip3 install ansible 

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

$ ansible --version ansible 2.8.5 config file = None configured module search path = ['/home/ubuntu/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /home/ubuntu/.local/lib/python3.6/site-packages/ansible executable location = /home/ubuntu/.local/bin/ansible python version = 3.6.8 (default, Aug 20 2019, 17:12:48) [GCC 8.3.0] 

خطوة أخرى أيضا. كما ذكرت سابقًا ، سيتصل Ansible بـ AWS باستخدام boto SDK. لذلك سنحتاج إلى تثبيت حزم boto و boto 3. سأذهب مع PIP لهذا أيضًا.

$ pip3 install boto boto3 

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

اختبار Ansible مع Playbook بسيط

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

[local] localhost 

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

يتضمن القسم التالي المهام التي نريد أن يؤديها Ansible. سيستخدم هذا النموذج وحدة aws_s3 لإنشاء حاوية جديدة على خدمة التخزين البسيط S3 من Amazon في منطقة us-east-1. يجب أن أعطي هذا الاسم القبيح لأن حاويات S3 تتطلب أسماء فريدة على مستوى العالم - إذا كان الاسم الذي تختاره يتعارض مع أي من الملايين التي لا حصر لها من الأسماء الموجودة بالفعل ، فستفشل العملية.

--- - name: Test s3 hosts: local connection: local tasks: - name: Create new bucket aws_s3: bucket: testme817275b mode: create region: us-east-1 

أقوم بتشغيل كتاب التشغيل عن طريق استدعاء الأمر ansible-playbook باستخدام -i لتحديد ملف المضيفين ، ثم الإشارة إلى ملف test.yml. يجب أن يعطينا Ansible بعض التعليقات في غضون لحظة أو اثنتين. إذا نجحنا ، فسترى "0" كقيمة "فشل" و "1" على الأقل كقيمة "موافق".

$ ansible-playbook -i hosts test-ansible.yml PLAY [Test s3] ****************************************************** TASK [Create new bucket] ******************************************** changed: [localhost] PLAY RECAP ********************************************************** localhost: ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 

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

$ aws s3 ls 2018-12-30 15:19:24 elasticbeanstalk-us-east-1-297972716276 2018-10-12 04:09:37 mysite548.com 2019-09-24 15:53:26 testme817275b 

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

هذه المقالة مأخوذة من كتابي "إدارة موارد AWS باستخدام Ansible". هناك المزيد من المزايا التقنية - في شكل كتب ودورات تدريبية ومقالات - متوفرة على موقع الويب الخاص بي ، bootstrap-it.com.