بدء استخدام تطوير Azure CDN

يمكنك استخدام SDK CDN Azure لـ JavaScript لأتمتة إنشاء وإدارة ملفات تعريف CDN ونقاط النهاية. يستعرض هذا البرنامج التعليمي عملية إنشاء تطبيق وحدة تحكم Node.js بسيط يوضح العديد من العمليات المتاحة. لا يهدف هذا البرنامج التعليمي إلى وصف جميع جوانب Azure CDN SDK لـ JavaScript بالتفصيل.

لإكمال هذا البرنامج التعليمي، يجب أن يكون لديك بالفعل Node.js6.x.x أو أعلى مثبتًا ومكونًا. يمكنك استخدام أي محرر نصوص تريد لإنشاء تطبيق Node.js الخاص بك. لكتابة هذا البرنامج التعليمي، استخدمت Visual Studio Code.

المتطلبات الأساسية

قبل كتابة رمز إدارة CDN، يجب عليك القيام ببعض التحضير لتمكين الرمز من التفاعل مع Azure Resource Manager. للقيام بهذا الإعداد، تحتاج إلى:

  • قم بإنشاء مجموعة موارد لتحتوي على ملف تعريف CDN الذي تم إنشاؤه في هذا البرنامج التعليمي
  • تكوين معرف Microsoft Entra لتوفير المصادقة للتطبيق
  • تطبيق الأذونات على مجموعة الموارد بحيث يمكن للمستخدمين المعتمدين فقط من مستأجر Microsoft Entra التفاعل مع ملف تعريف CDN

إنشاء مجموعة الموارد

  1. تسجيل الدخول إلى مدخل Azure.

  2. انقر فوق إنشاء مورد.

  3. ابحث عن مجموعة الموارد وفي جزء مجموعة الموارد، انقر فوق إنشاء.

    إنشاء مجموعة الموارد الجديدة

  4. قم بتسمية مجموعة الموارد CdnConsoleTutorial. حدد اشتراكك واختر موقعًا قريبًا منك. إذا كنت ترغب في ذلك، يمكنك النقر فوق خانة الاختيار تثبيت بلوحة المعلومات لتثبيت مجموعة الموارد بلوحة المعلومات في المدخل. إن التثبيت يسهل العثور عليه لاحقًا. بعد إجراء التحديدات، انقر فوق إنشاء.

    لقطة شاشة لمربع الحوار مجموعة الموارد.

  5. بعد إنشاء مجموعة الموارد، إذا لم تقم بتثبيتها في لوحة المعلومات، يمكنك العثور عليها بالنقر فوق استعراض، ثم مجموعات الموارد. لفتحها، انقر فوق مجموعة الموارد. دوّن معرف الاشتراك الخاص بك. سنحتاجها لاحقًا.

    لقطة شاشة لقسم البرنامج التعليمي لوحدة التحكم C D N.

إنشاء تطبيق Microsoft Entra وتطبيق الأذونات

هناك نهجان لمصادقة التطبيق باستخدام معرف Microsoft Entra: المستخدمون الفرديون أو كيان الخدمة. يشبه كيان الخدمة حساب مستخدم في Windows. بدلاً من منح أذونات مستخدم معينة للتفاعل مع ملفات تعريف CDN، يتم منح الأذونات بدلاً من ذلك إلى مدير الخدمة. تُستخدم مبادئ الخدمة عادةً للعمليات الآلية غير التفاعلية. على الرغم من أن هذا البرنامج التعليمي يكتب تطبيق وحدة تحكم تفاعلي، فسوف نركز على نهج الخدمة الأساسي.

يتكون إنشاء كيان خدمة من عدة خطوات، بما في ذلك إنشاء تطبيق Microsoft Entra. لإنشائه، سنتبع هذا البرنامج التعليمي.

هام

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

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

عند الوصول إلى خطوة تعيين التطبيق إلى دور، استخدم مجموعة الموارد التي تم إنشاؤها سابقًا، CdnConsoleTutorial، ولكن بدلاً من دور القارئ، قم بتعيين دور مساهم ملف تعريف CDN. بعد تعيين التطبيق دور مساهم ملف تعريف CDN على مجموعة الموارد الخاصة بك، ارجع إلى هذا البرنامج التعليمي.

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

جزء المستخدمين

مصادقة المستخدم التفاعلية

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

هام

اتبع هذه الخطوات التالية فقط إذا كنت تختار استخدام مصادقة المستخدم الفردي بدلاً من كيان الخدمة.

  1. عند إنشاء التطبيق الخاص بك، بدلاً من تطبيق ويب، اختر تطبيق أصلي.

    التطبيق الأصلي

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

  3. ليست هناك حاجة لإنشاء مفتاح مصادقة العميل.

  4. بدلاً من تعيين كيان خدمة لدور مساهم ملف تعريف CDN، سنقوم بتعيين مستخدمين أو مجموعات فردية. في هذا المثال، يمكنك أن ترى أنني قمت بتعيين CDN Demo User إلى دور مساهم ملف تعريف CDN.

    الوصول إلى المستخدم الفردي

إنشاء مشروعك وإضافة تبعيات npm

الآن بعد أن أنشأنا مجموعة موارد لملفات تعريف CDN الخاصة بنا ومنحنا إذن تطبيق Microsoft Entra لإدارة ملفات تعريف CDN ونقاط النهاية داخل تلك المجموعة، يمكننا البدء في إنشاء تطبيقنا.

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

npm init

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

لقطة شاشة لإخراج NPM init.

تمت تهيئة مشروعنا الآن مع ملف packages.json. سيستخدم مشروعنا بعض مكتبات Azure الموجودة في حزم npm. سنستخدم المكتبة لمصادقة Microsoft Entra في Node.js (@Azure/الهوية) ومكتبة عميل Azure CDN ل JavaScript (@Azure/Azure Resource Manager-cdn). دعونا نضيفها إلى المشروع كتبعيات.

npm install --save @azure/identity
npm install --save @azure/arm-cdn

بعد الانتهاء من تثبيت الحزم، يجب أن يبدو ملف package.json مشابهًا لهذا المثال (قد تختلف أرقام الإصدارات):

{
  "name": "cdn_node",
  "version": "1.0.0",
  "description": "Azure CDN Node.js tutorial project",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Cam Soper",
  "license": "MIT",
  "dependencies": {
    "@azure/arm-cdn": "^7.0.1",
    "@azure/identity": "^2.0.4"
  }
}

وأخيرًا، باستخدام محرر النص الخاص بك، قم بإنشاء ملف نصي فارغ واحفظه في جذر مجلد المشروع الخاص بنا كـapp.js. نحن الآن جاهزون لبدء كتابة التعليمات البرمجية.

يتطلب وثوابت ومصادقة وبنية

مع فتح app.js في محررنا، دعونا نحصل على البنية الأساسية لبرنامجنا مكتوبة.

  1. أضف "requires" لحزم npm الخاصة بنا في الأعلى مع ما يلي:

    const { DefaultAzureCredential } = require("@azure/identity");
    const { CdnManagementClient } = require('@azure/arm-cdn');
    
  2. نحن بحاجة إلى تحديد بعض الثوابت التي ستستخدمها أساليبنا. قم بإضافة ما يلي. تأكد من استبدال العناصر النائبة، بما في ذلك <أقواس الزاوية>، بالقيم الخاصة بك حسب الحاجة.

    //Tenant app constants
    const clientId = "<YOUR CLIENT ID>";
    const clientSecret = "<YOUR CLIENT AUTHENTICATION KEY>"; //Only for service principals
    const tenantId = "<YOUR TENANT ID>";
    
    //Application constants
    const subscriptionId = "<YOUR SUBSCRIPTION ID>";
    const resourceGroupName = "CdnConsoleTutorial";
    const resourceLocation = "<YOUR PREFERRED AZURE LOCATION, SUCH AS Central US>";
    
  3. بعد ذلك، سنقوم بإنشاء مثيل لعميل إدارة CDN ونعطيه بيانات الاعتماد الخاصة بنا.

    var credentials = new DefaultAzureCredential();
    var cdnClient = new CdnManagementClient(credentials, subscriptionId);
    
  4. سيتخذ تطبيق وحدة التحكم Node.js لدينا بعض معلمات سطر الأوامر. لنتحقق من أنه تم تمرير معلمة واحدة على الأقل.

    //Collect command-line parameters
    var parms = process.argv.slice(2);
    
    //Do we have parameters?
    if(parms == null || parms.length == 0)
    {
        console.log("Not enough parameters!");
        console.log("Valid commands are list, delete, create, and purge.");
        process.exit(1);
    }
    
  5. يقودنا هذا إلى الجزء الرئيسي من برنامجنا، حيث نتفرع إلى وظائف أخرى بناءً على المعلمات التي تم تمريرها.

    switch(parms[0].toLowerCase())
    {
        case "list":
            cdnList();
            break;
    
        case "create":
            cdnCreate();
            break;
    
        case "delete":
            cdnDelete();
            break;
    
        case "purge":
            cdnPurge();
            break;
    
        default:
            console.log("Valid commands are list, delete, create, and purge.");
            process.exit(1);
    }
    
  6. في عدة أماكن في برنامجنا، سنحتاج إلى التأكد من تمرير العدد الصحيح من المعلمات وعرض بعض المساعدة إذا لم تكن تبدو صحيحة. دعونا ننشئ وظائف للقيام بذلك.

    function requireParms(parmCount) {
        if(parms.length < parmCount) {
            usageHelp(parms[0].toLowerCase());
            process.exit(1);
        }
    }
    
    function usageHelp(cmd) {
        console.log("Usage for " + cmd + ":");
        switch(cmd)
        {
            case "list":
                console.log("list profiles");
                console.log("list endpoints <profile name>");
                break;
    
            case "create":
                console.log("create profile <profile name>");
                console.log("create endpoint <profile name> <endpoint name> <origin hostname>");
                break;
    
            case "delete":
                console.log("delete profile <profile name>");
                console.log("delete endpoint <profile name> <endpoint name>");
                break;
    
            case "purge":
                console.log("purge <profile name> <endpoint name> <path>");
                break;
    
            default:
                console.log("Invalid command.");
        }
    }
    
  7. أخيرًا، الوظائف التي سنستخدمها في عميل إدارة CDN غير متزامنة، لذا فهي بحاجة إلى طريقة للاتصال مرة أخرى عند الانتهاء. دعنا نصنع واحدًا يمكنه عرض الإخراج من عميل إدارة CDN (إن وجد) والخروج من البرنامج بأمان.

    function callback(err, result, request, response) {
        if (err) {
            console.log(err);
            process.exit(1);
        } else {
            console.log((result == null) ? "Done!" : result);
            process.exit(0);
        }
    }
    

الآن بعد أن تمت كتابة البنية الأساسية لبرنامجنا، يجب علينا إنشاء الوظائف التي تسمى بناءً على معاييرنا.

سرد ملفات تعريف CDN ونقاط النهاية

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

// list profiles
// list endpoints <profile name>
function cdnList(){
    requireParms(2);
    switch(parms[1].toLowerCase())
    {
        case "profiles":
            console.log("Listing profiles...");
            cdnClient.profiles.listByResourceGroup(resourceGroupName, callback);
            break;

        case "endpoints":
            requireParms(3);
            console.log("Listing endpoints...");
            cdnClient.endpoints.listByProfile(resourceGroupName, parms[2], callback);
            break;

        default:
            console.log("Invalid parameter.");
            process.exit(1);
    }
}

إنشاء ملفات تعريف CDN ونقاط النهاية

بعد ذلك، سنكتب الوظائف لإنشاء ملفات التعريف ونقاط النهاية.

function cdnCreate() {
    requireParms(2);
    switch(parms[1].toLowerCase())
    {
        case "profile":
            cdnCreateProfile();
            break;

        case "endpoint":
            cdnCreateEndpoint();
            break;

        default:
            console.log("Invalid parameter.");
            process.exit(1);
    }
}

// create profile <profile name>
async function cdnCreateProfile() {
    requireParms(3);
    console.log("Creating profile...");
    var standardCreateParameters = {
        location: resourceLocation,
        sku: {
            name: 'Standard_Verizon'
        }
    };

    await cdnClient.profiles.beginCreateAndWait( resourceGroupName, parms[2], standardCreateParameters, callback);
}

// create endpoint <profile name> <endpoint name> <origin hostname>        
async function cdnCreateEndpoint() {
    requireParms(5);
    console.log("Creating endpoint...");
    var endpointProperties = {
        location: resourceLocation,
        origins: [{
            name: parms[4],
            hostName: parms[4]
        }]
    };

    await cdnClient.endpoints.beginCreateAndWait(resourceGroupName, parms[2], parms[3], endpointProperties, callback);
}

إزالة نقطة نهاية

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

// purge <profile name> <endpoint name> <path>
async function cdnPurge() {
    requireParms(4);
    console.log("Purging endpoint...");
    var purgeContentPaths = [ parms[3] ];
    await cdnClient.endpoints.beginPurgeContentAndWait(resourceGroupName, parms[2], parms[3], purgeContentPaths, callback);
}

حذف ملفات تعريف ونقاط نهاية CDN

الوظيفة الأخيرة التي سنقوم بتضمينها تحذف نقاط النهاية والملفات الشخصية.

async function cdnDelete() {
    requireParms(2);
    switch(parms[1].toLowerCase())
    {
        // delete profile <profile name>
        case "profile":
            requireParms(3);
            console.log("Deleting profile...");
            await cdnClient.profiles.beginDeleteAndWait(resourceGroupName, parms[2], callback);
            break;

        // delete endpoint <profile name> <endpoint name>
        case "endpoint":
            requireParms(4);
            console.log("Deleting endpoint...");
            await cdnClient.endpoints.beginDeleteAndWait(resourceGroupName, parms[2], parms[3], callback);
            break;

        default:
            console.log("Invalid parameter.");
            process.exit(1);
    }
}

تشغيل البرنامج

يمكننا الآن تنفيذ برنامجنا Node.js باستخدام مصحح الأخطاء المفضل لدينا أو في وحدة التحكم.

تلميح

إذا كنت تستخدم Visual Studio Code كمصحح أخطاء، فستحتاج إلى إعداد البيئة لتمريرها في معلمات سطر الأوامر. يقوم Visual Studio Code بهذا في ملف launch.json. ابحث عن خاصية تسمى args وأضف صفيفًا من قيم السلسلة للمعلمات الخاصة بك، بحيث تبدو مشابهة لما يلي: "args": ["list", "profiles"].

لنبدأ بإدراج ملفات التعريف الخاصة بنا.

قائمة ملفات التعريف

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

إنشاء ملف تعريف

الآن، دعونا نضيف نقطة نهاية.

قم بإنشاء نقطة نهاية

وأخيرًا، دعونا نحذف ملفنا الشخصي.

حذف ملف التعريف

الخطوات التالية

لمشاهدة مرجع Azure CDN SDK لـ JavaScript، اعرض المرجع.

للعثور على وثائق إضافية على Azure SDK لـ JavaScript، اعرض المرجع الكامل.

إدارة موارد CDN باستخدام PowerShell.