فهم أدوات IaC: AWS CDK مقابل Terraform

نشرت: 2022-03-31

AWS CDK و Terraform - لست متأكدًا أيهما تختار؟ ستساعدك هذه المقالة في الوصول إلى قرار مستنير.

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

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

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

البنية التحتية كرمز في AWS

AWS هو أكبر مزود خدمات السحابة وأكثرها استخدامًا على مستوى العالم. لديها أداة IAC الخاصة بها ، أو AWS CloudFormation أو AWS CDK ، وتسمح أيضًا لأدوات IAC التابعة لجهات خارجية مثل Terraform بتوفير الموارد. عند اختيار أدوات IAC لـ AWS ، تعتبر Terraform ، وهي أداة من جهات خارجية ، منافسة قوية للأدوات المُدارة من AWS و AWS CloudFormation و AWS CDK.

مع وجود العديد من الخيارات والميزات التي توفرها كل من هذه الأدوات ، قد يكون اختيار أداة IAC الصحيحة أمرًا صعبًا. في هذه المقالة ، سنناقش الفرق بين AWS CDK و Terraform. يستخدم AWS CDK المعلومات السحابية داخليًا ، لذا للحصول على رؤية أعمق في Cloudformation و Terraform ، يرجى الرجوع إلى المقالة ذات الصلة ، فهم أدوات IAC: CloudFormation مقابل Terraform.

Terraform

Terraform هي بنية أساسية مفتوحة المصدر كأداة رمز تم تطويرها في البداية بواسطة Hashicorp. إنها أداة دقيقة للغاية وناضجة لا تدعم AWS فحسب ، بل تدعم موفري السحابة الآخرين أيضًا. يدعم Terraform جميع خدمات AWS ، ويسارع مجتمع التطوير إلى انتقاء أي ميزة جديدة تضيفها AWS إلى خدماتها. يتيح لنا كتابة التعليمات البرمجية بلغة Hashicorp المطورة (HCL). HCL هي لغة شبيهة بلغة JSON لتحديد موارد البنية التحتية.

AWS CDK

AWS CDK عبارة عن غلاف حول AWS CloudFormation. لفهم عمل AWS CDK ، يجب أن تعرف القليل عن AWS CloudFormation. AWS CloudFormation هي أداة تديرها AWS وتسمح لنا بتحديد البنية التحتية لـ AWS بتنسيق YML أو JSON. على الرغم من سهولة قراءة JSON و YML ، إلا أنهما ليسا لغات برمجة فعلية. لا يوجد دعم محلي للحلقات والوظائف ، مما يجعل صيانة البنى التحتية الكبيرة أكثر صعوبة. هنا يأتي دور AWS CDK.

AWS CDK عبارة عن غلاف حول AWS CloudFromation يتيح لك استخدام لغات برمجة مألوفة مثل - JAVA أو Python لتوفير البنية الأساسية الخاصة بك. هذا يجعل من السهل كتابة التعليمات البرمجية والحفاظ عليها.

Terraform مقابل AWS CDK: الاختلافات

# 1. اللغة وسهولة الاستخدام

تعد اللغة وسهولة الاستخدام أمرًا حيويًا لفهم الاختلاف بين AWS CDK و Terraform.

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

دعنا نرى رمزًا لإنشاء حاوية S3.

 resource "aws_s3_bucket" "my_s3_bucket" { bucket = "my-tf-bucket" tags = { Name = "My bucket" Environment = "Dev" } }

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

كما ذكرنا سابقًا ، AWS CDK عبارة عن برنامج تجميع CloudFormation يسمح لنا بتحديد مواردنا في لغات البرمجة. دعنا نرى رمز AWS CDK لإنشاء حاوية S3.

 import * as cdk from '@aws-cdk/core'; import * as s3 from '@aws-cdk/aws-s3'; export class BucketStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); new s3.Bucket(this, 'MyFirstBucket', { bucketName: 'my-first-bucket', }); } }

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

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

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

# 2. نِطَاق

Terraform هي أداة IAC متعددة السحابة ، مما يعني أنه لا يمكنك فقط استخدام Terraform مع AWS ولكن أيضًا مع موفري السحابة الآخرين مثل Azure أو GCP. Terraform هي أداة رائعة لإنشاء عمليات نشر متعددة السحاب ولديك أي عدد من موفري السحابة لتطبيقك.

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

AWS CDK هو عرض AWS لـ IAC. نظرًا لقوة ونضج CDK ، فإنه يقتصر على سحابة AWS فقط.

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

# 3. أداء

لا يعد الأداء عادةً أهم المعايير عند اختيار أداة IAC الصحيحة ، ولكن قد يكون الأمر مهمًا في المشاريع الكبيرة. تنشر Terraform الموارد باستخدام AWS SDK ، بينما يتم تحويل رمز CDK أولاً إلى قوالب CloudFormation ثم يتم تطبيقه.

سيعمل Terraform بشكل أسرع قليلاً من AWS CDK ، خاصة بسبب الوقت الذي يستغرقه CDK لتحويل التعليمات البرمجية إلى CloudFormation Template.

# 4. نمطية

يمكن استخدام كل من Terraform و AWS CDK لإنشاء وحدات. Terraform لديه دعم أصلي للوحدات النمطية. يمكنك إنشاء الوحدات النمطية الخاصة بك واستضافتها في سجل وحدة خاصة لاستخدامها داخل مؤسستك. يحتوي Terraform أيضًا على سجل وحدة عامة لاستضافة واستخدام الوحدات النمطية العامة.

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

بشكل عام ، كلتا الأداتين متشابهتان في هذا الجانب.

# 5. الرقابة والحوكمة

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

بالإضافة إلى استخدام IAM للتحكم في الوصول إلى موارد الحساب ، يقدم Terraform سياسة كإطار عمل رمز ، Sentinel . يسمح لك Sentinel بكتابة سياسات دقيقة للتحكم بشكل صحيح في تصرفات المستخدم عبر Terraform.

استنتاج

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

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