دليلك الشامل: أين تجد المساعدة عند استخدام AWS CloudFormation؟

دقائق القراءة: 8

مقدمة في تحديات AWS CloudFormation وكيفية التغلب عليها

قد يكون التحديق في موجه سطر الأوامر البسيط (command line prompt) دون معرفة الخطوة التالية في استخدام AWS CLI تجربة محبطة. وفي كثير من الأحيان، قد يكون التعامل مع وحدة التحكم الإدارية (Management Console) لخدمة AWS CloudFormation أكثر تعقيدًا. لذا، نقدم لكم هنا دليلاً سريعًا للمبتدئين، مستندًا إلى خبرتنا العملية، لمساعدتكم في استكشاف هذه الخدمة القوية.

إذا كنتم تخططون لإدارة حزم CloudFormation الخاصة بكم عبر AWS CLI بدلاً من وحدة التحكم الإدارية، فقد ناقشنا الأساسيات في مقال سابق. بمجرد إتقان تلك الأساسيات، ستكونون مستعدين للتعامل مع أي سيناريو.

استكشاف سطر الأوامر لـ AWS CloudFormation

البدء بأوامر CLI الأساسية

لنبدأ بمثال بسيط يوضح كيفية عمل AWS CLI. عند كتابة الأمر التالي، فإننا نطلب من سطر الأوامر عرض قائمة بحزم التخزين في خدمة S3:

$ aws s3 ls
2019-11-03 13:16:59 athena5905
2019-02-03 18:01:42 book-3939
2014-07-01 18:52:32 elasticbeanstalk-ap-northeast-1-426397493112
2014-08-28 16:57:49 elasticbeanstalk-us-east-1-426497493912
2019-05-04 22:17:50 ltest236
2018-07-15 15:52:30 mybucket99688223
2017-07-25 17:06:43 nextcloud3239027

في هذا المثال، تخبر "aws" سطر الأوامر أنك تريد أن يتم التعامل مع ما يلي بواسطة AWS CLI. تشير "s3" إلى أنك ستستخدم خدمة S3 (خدمة التخزين البسيط من أمازون). أخيرًا، "ls" أو "list" هو الأمر الذي ترغب في تشغيله مقابل هذه الخدمة. سيقوم CLI، باستخدام متغيرات مصادقة الحساب التي أضافتها أداة التكوين إلى بيئتك، بالوصول إلى حسابك، وفي هذه الحالة، استرداد أسماء جميع حزم التخزين (buckets) الخاصة بك.

اكتشاف أوامر CloudFormation المتاحة

من المتوقع أنك تخبر AWS أنك تبحث عن العمل مع CloudFormation باستخدام "cloudformation". إذا قمت بتشغيل هذا الأمر دون تحديد أمر فرعي، فستتلقى رسالة خطأ:

aws cloudformation usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:
  aws help
  aws <command> help
  aws <command> <subcommand> help
aws: error: the following arguments are required: operation

لكن هذه الرسالة مهمة، لأنها تخبرنا بكيفية الوصول إلى التوثيق المضمن (inline documentation). المساعدة الحساسة للسياق متاحة في كل طبقة. انظر ماذا يحدث إذا أضفت "help" بعد "cloudformation". ستحصل على وصف موجز ثم قائمة بجميع الأوامر الفرعية المتاحة:

$ aws cloudformation help
CLOUDFORMATION()
CLOUDFORMATION()
NAME
    cloudformation - 

DESCRIPTION
    AWS CloudFormation allows you to create and manage AWS infrastructure deployments predictably and repeatedly. You can use AWS CloudFormation to leverage AWS products, such as Amazon Elastic Compute Cloud, Amazon Elastic Block Store, Amazon Simple Notification Service, Elastic Load Balancing, and Auto Scaling to build highly-reliable, highly scalable, cost-effective applications without creating or configuring the underlying AWS infrastructure. With AWS CloudFormation, you declare all of your resources and dependencies in a template file. The template defines a collection of resources as a single unit called a stack. AWS CloudFormation creates and deletes all member resources of the stack together and manages all dependencies between the resources for you. For more information about AWS CloudFormation, see the AWS CloudFormation Product Page.

    Amazon CloudFormation makes use of other AWS products. If you need additional technical information about a specific AWS product, you can find the product 's technical documentation at docs.aws.amazon.com.

AVAILABLE COMMANDS
  o cancel-update-stack
  o continue-update-rollback
  o create-change-set
  o create-stack
  o create-stack-set
  o delete-change-set
  o delete-stack
  o delete-stack-instances
  o delete-stack-set
  o deploy
  o describe-account-limits
  o describe-change-set
  o describe-stack-events
  o describe-stack-instance
  o describe-stack-resource
  o describe-stack-resources
  o describe-stack-set
  o describe-stack-set-operation
  o describe-stacks
  o estimate-template-cost
  o execute-change-set
  o get-stack-policy
  [...]

التعمق في تفاصيل الحزم باستخدام describe-stacks

الآن، قم بتشغيل الأمر "describe-stacks". ربما لا توجد حزم نشطة في حسابك حاليًا، لذلك لن ترى أي مخرجات. ولكن كرر ذلك مرة أخرى، هذه المرة بإضافة "help". سيعرض لك هذا بعض الخيارات التي ستتيح لك تصفية أو معالجة البيانات التي تحصل عليها. يمكنك، على سبيل المثال، توجيه CLI إلى حزمة معينة باستخدام "--stack-name" متبوعًا باسم حزمة موجودة.

$ aws cloudformation describe-stacks
$ aws cloudformation describe-stacks help
NAME
    describe-stacks - 

DESCRIPTION
    Returns the description for the specified stack; if no stack name was specified, then it returns the description for all the stacks created. NOTE: If the stack does not exist, an AmazonCloudFormationException is returned.

See also: AWS API Documentation
See 'aws help' for descriptions of global parameters.

describe-stacks is a paginated operation. Multiple API calls may be issued in order to retrieve the entire data set of results. You can disable pagination by providing the --no-paginate argument. When using --output text and the --query argument on a paginated response, the --query argument must extract data from the results of the following query expressions: Stacks

SYNOPSIS
    describe-stacks [--stack-name <value>]
                    [--cli-input-json <value>]
                    [--starting-token <value>]
                    [--max-items <value>]
                    [--generate-cli-skeleton <value>]

OPTIONS
    --stack-name (string)
    The name or the unique stack ID that is associated with the stack, which are not always interchangeable:
    (...)
$ aws cloudformation describe-stacks --stack-name myname

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

الاستفادة من قوالب CloudFormation الرسمية

البدء بقوالب جاهزة

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

تحليل قالب نموذجي لـ CloudFormation (بصيغة JSON)

يبدأ القالب بوصف حر يساعدنا في معرفة نوع الحزمة التي سيولدها هذا القالب. كما يتم إخبارنا أنه يمكننا تخصيص القالب باستخدام عنوان IP Elastic موجود بدلاً من واحد يتم إنشاؤه تلقائيًا.

{
  "AWSTemplateFormatVersion" : "2010-09-09" ,
  "Description" : "AWS CloudFormation Sample Template EC2InstanceWithSecurityGroupSample: Create an Amazon EC2 instance running the Amazon Linux AMI. The AMI is chosen based on the region in which the stack is run. This example creates an EC2 security group for the instance to give you SSH access. **WARNING** This template creates an Amazon EC2 instance. You will be billed for the AWS resources used if you create a stack from this template."
  ,

ستحتاج إلى تمرير اسم زوج مفاتيح (KeyPair) موجود من المنطقة الحالية في حساب AWS الخاص بك لتتمكن من فتح اتصال SSH عن بُعد إلى مثيل Linux الذي سيتم إطلاقه. يمكنك بدلاً من ذلك تمرير هذه القيمة من سطر الأوامر. قسم Parameters هو أيضًا المكان الذي تحدد فيه نوع مثيل EC2. الافتراضي هو t2.small، ولكن يُسمح لنا إما بتبديل هذه القيمة بأي من القيم الأخرى المسموح بها (AllowedValues) في هذا المستند، أو تجاوزها من سطر الأوامر.

  "Parameters" : {
    "KeyName" : {
      "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instance" ,
      "Type" : "AWS::EC2::KeyPair::KeyName" ,
      "ConstraintDescription" : "must be the name of an existing EC2 KeyPair."
    },
    "InstanceType" : {
      "Description" : "WebServer EC2 instance type" ,
      "Type" : "String" ,
      "Default" : "t2.small"
      ,

إذا قمت بالتمرير لأسفل عبر قسم Mappings، يمكننا رؤية قوائم طويلة من معماريات الأجهزة المتاحة ومعرفات صور آلة أمازون (Amazon Machine Image identifiers) لكل منطقة. هذا قسم اختياري حيث يمكنك إدراج قيمك غير القياسية الخاصة بك، بحيث يتم إطلاق نوع صورة، على سبيل المثال، بناءً على مجموعة معينة من المعلمات – وربما حتى صورة AMI خاصة. يتم تنظيم هذه البيانات في أزواج مفتاح/قيمة (key/value pairs).

  "Mappings" : {
    "AWSInstanceType2Arch" : {
      "t1.micro" : {
        "Arch" : "HVM64"
      },
      "t2.nano" : {
        "Arch" : "HVM64"
      },
      "t2.micro" : {
        "Arch" : "HVM64"
      },

يحدد قسم Resources في هذه الحالة بيئة المثيل الخاص بك. على سبيل المثال، تم تكوين مجموعة الأمان (SecurityGroup) لفتح منفذ SSH رقم 22 فقط ولا شيء آخر. يرتبط عنوان IP العام للمثيل أيضًا بعنوان IP Elastic الجديد الذي سيتم تخصيصه.

  "InstanceSecurityGroup" : {
    "Type" : "AWS::EC2::SecurityGroup" ,
    "Properties" : {
      "GroupDescription" : "Enable SSH access via port 22" ,
      "SecurityGroupIngress" : [
        {
          "IpProtocol" : "tcp" ,
          "FromPort" : "22" ,
          "ToPort" : "22" ,
          "CidrIp" : { "Ref" : "SSHLocation" }
        }
      ]
    }
  }
},

استكشاف AWS Quick Starts

مصدر آخر مهم من أمازون هو Quick Starts. بالمعنى الدقيق للكلمة، فإن حزم البنية التحتية الجاهزة المتوفرة هنا لمساعدتك في إنشاء عمليات نشر سحابية أكثر تعقيدًا ليست مرتبطة بشكل مباشر بـ CloudFormation. لقد تم توفيرها من قبل شركات خارجية لتبسيط عملية بناء بنيتها التحتية داخل منصة AWS. ولكن الحقيقة هي أن كل واحدة منها تبدأ بقالب CloudFormation فريد خاص بها. غالبًا ما يؤدي النقر للاطلاع على أمثلة فعلية إلى قوالب الكود المصدري للحزم داخل مستودع GitHub. يوضح هذا المثال الأدوات التي ستحتاجها لتشغيل HashiCorp Console:

صورة توضح مثالاً لقالب AWS Quick Start لتشغيل HashiCorp Console.

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

الخلاصة التقنية

يُعد AWS CloudFormation أداة لا غنى عنها لإدارة البنية التحتية ككود (Infrastructure as Code)، ولكن إتقانها يتطلب فهمًا عميقًا لمصادر المساعدة المتاحة. سواء كنت تستكشف AWS CLI للحصول على توثيق فوري ومرن، أو تستفيد من القوالب الرسمية الجاهزة التي توفرها AWS، أو حتى تستفيد من حلول Quick Starts لمشاريع معقدة، فإن الوصول إلى المعلومات الصحيحة يمثل حجر الزاوية في نجاح عمليات النشر السحابية. إن القدرة على تحليل القوالب الموجودة وتعديلها، بدلاً من البدء من الصفر، تسرع بشكل كبير من عملية التطوير وتقلل من الأخطاء المحتملة. لذا، فإن استثمار الوقت في فهم هذه الموارد لا يقل أهمية عن فهم بنية القوالب نفسها.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *