خطوات الاستخدام
الخطوة 1: اكتب أو الصق كود Pulumi الخاص بك (بأي لغة مدعومة مثل TypeScript أو Python أو Go أو C#) في حقل الإدخال. يتعرف العداد على كل سطر يحتوي على الكلمة المفتاحية 'new '، والتي تشير عادةً إلى إنشاء مورد جديد مثل `new aws.s3.Bucket(...)`. تأكد من أن الكود مكتوب بشكل صحيح لتجنب الأخطاء في العد. إذا كان الكود يحتوي على تعليقات أو نصوص غير قابلة للتنفيذ، فقد يتم احتساب 'new ' داخلها أيضًا، لذا يُفضل إزالتها للحصول على دقة أعلى.
الخطوة 2: بعد إدخال الكود، انقر على زر 'احسب' (أو ما يعادله). سيقوم العداد بمسح النص بالكامل والبحث عن جميع تكرارات 'new ' متبوعة بمسافة. يتم حساب كل مثيل على أنه إعلان مورد محتمل. لاحظ أن العداد لا يحلل السياق، لذا قد يتم احتساب 'new ' في تعريفات الكائنات غير المتعلقة بالموارد (مثلاً `new Date()`). للحصول على عدد دقيق للموارد فقط، يجب استخدام فلترة يدوية أو أدوات تحليل AST.
الخطوة 3: راجع النتيجة المعروضة. سترى عددًا صحيحًا يمثل إجمالي إعلانات الموارد المكتشفة. يمكنك استخدام هذا الرقم لتقدير تكلفة البنية التحتية، أو تحسين الكود، أو مقارنة مشاريع Pulumi مختلفة. لاحظ أن كل مورد قد يتطلب أيضًا إعداد إضافي مثل الموفر أو المناطق، لذا فإن العدد مجرد نقطة بداية لفهم حجم المشروع.
الخطوة 4 (اختياري): قم بتحسين الكود الخاص بك لتقليل عدد الموارد إذا لزم الأمر. على سبيل المثال، يمكن دمج تكوينات متشابهة باستخدام حلقات أو وظائف لإعادة الاستخدام. يتيح لك عداد الموارد تتبع مدى فعالية تحسيناتك عند إعادة الحساب بعد التعديلات.
أمثلة محلولة
تطبيقات عملية على عداد موارد Pulumi بخطوات الحل كاملة.
الحل
لنفترض أن لدينا مشروع Pulumi بلغة TypeScript ينشئ مجموعة S3، مثيل EC2، وقاعدة بيانات RDS. الكود كما يلي:
```typescript
import * as aws from "@pulumi/aws";
// إنشاء دلو S3
const bucket = new aws.s3.Bucket("my-bucket", {
acl: "private",
});
// إنشاء مثيل EC2
const instance = new aws.ec2.Instance("my-instance", {
ami: "ami-0c55b159cbfafe1f0",
instanceType: "t2.micro",
});
// إنشاء قاعدة بيانات RDS
const db = new aws.rds.Instance("my-db", {
engine: "mysql",
instanceClass: "db.t2.micro",
allocatedStorage: 20,
});
export const bucketName = bucket.id;
export const instanceId = instance.id;
export const dbEndpoint = db.endpoint;
```
عند إدخال هذا الكود في حاسبة عدد موارد Pulumi، ستقوم بالبحث عن كل 'new ' وتجد 3 مثيلات: `new aws.s3.Bucket`، `new aws.ec2.Instance`، و `new aws.rds.Instance`. ستظهر النتيجة '3'. هذا العدد يتوافق مع العدد الفعلي للموارد التي سيتم إنشاؤها بواسطة Pulumi. إذا كان لديك موارد إضافية مثل موفري DNS أو مجموعات الأمان، فسيتم احتسابها أيضًا طالما تستخدم 'new '. من المهم ملاحظة أن بعض الموارد قد لا تستخدم 'new ' إذا تم تعريفها بشكل ضمني عبر وظائف مثل `aws.getAmi()` - هذه لا تحتسب لأنها عمليات استعلام وليس إنشاء موارد.
الحل
في مشروع Pulumi كبير، قد يتم إنشاء الموارد ديناميكيًا باستخدام الحلقات. على سبيل المثال، الكود التالي بلغة Python ينشئ 5 مجموعات أمان AWS و 3 حالات EC2:
```python
import pulumi
import pulumi_aws as aws
# إنشاء 5 مجموعات أمان
sg_groups = []
for i in range(5):
sg = aws.ec2.SecurityGroup(f"sg-{i}",
description=f"Security group {i}",
ingress=[{"protocol": "tcp", "from_port": 80, "to_port": 80, "cidr_blocks": ["0.0.0.0/0"]}]
)
sg_groups.append(sg)
# إنشاء 3 حالات EC2 مع إرفاق كل مجموعة أمان
instances = []
for i in range(3):
instance = aws.ec2.Instance(f"instance-{i}",
ami="ami-0c55b159cbfafe1f0",
instanceType="t2.micro",
vpcSecurityGroupIds=[sg_groups[i].id] # استخدام المجموعات التي تم إنشاؤها
)
instances.append(instance)
```
هذا الكود يحتوي على 8 استدعاءات 'new ': 5 من `aws.ec2.SecurityGroup` و 3 من `aws.ec2.Instance`. العدد الإجمالي هو 8. لكن لاحظ أن الحاسبة ستعد كل تكرار لـ 'new '، حتى لو كان داخل حلقة، لذلك ستحصل على 8. هذا مفيد لتقدير عدد الموارد الفعلية التي سيتم نشرها. إذا كان لديك دالة مساعدة تنشئ موارد داخليًا، فقد لا تحتسب إذا كانت الدالة لا تحتوي على 'new ' صريح (مثلاً تستخدم واجهة برمجة تطبيقات ذات مستوى أعلى). لذلك، يُنصح باستخدام الحاسبة مع كود غير مُلخص لفهم الحجم الحقيقي.
أمثلة محسوبة
قيم مُدخَلة ونتيجة محسوبة فعليًا بواسطة عداد موارد Pulumi.
مرجع — Bucket و VPC و RDS
- كود Pulumi
- import * as aws from "@pulumi/aws"; const bucket = new aws.s3.Bucket("b1"); const vpc = new aws.ec2.Vpc("v1"); const db = new aws.rds.Instance("d1");
مرجع — استبعاد أسطر التعليقات
- كود Pulumi
- // create a new bucket for logs const bucket = new aws.s3.Bucket("b1"); const topic = new aws.sns.Topic("t1");
مرجع — دالة Lambda واحدة
- كود Pulumi
- const fn = new aws.lambda.Function("f1");