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

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

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

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

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

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

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

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

  2. انقر على إنشاء مورد.

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

    Creating a new resource group

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

    Screenshot of the Resource group dialog box.

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

    Screenshot of the C D N Console Tutorial section.

إنشاء تطبيق Azure AD وتطبيق الأذونات

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

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

هام

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

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

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

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

Users blade

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

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

هام

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

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

    Native application

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

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

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

    Individual user access

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

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

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

npm init

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

NPM init output

تتم تهيئة مشروعنا الآن باستخدام ملف packages.json. سيستخدم مشروعنا بعض مكتبات Azure الموجودة في حزم NPM. سنستخدم المكتبة لمصادقة Azure Active Directory في Node.js (@azure/ms-rest-nodeauth) ومكتبة عميل Azure CDN لجافا سكريبت (@azure/arm-cdn). دعونا نضيف تلك إلى المشروع كتبعيات.

npm install --save @azure/ms-rest-nodeauth
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": "^5.2.0",
    "@azure/ms-rest-nodeauth": "^3.0.0"
  }
}

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

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

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

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

    var msRestAzure = require('@azure/ms-rest-nodeauth');
    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 msRestAzure.ApplicationTokenCredentials(clientId, tenantId, clientSecret);
    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>
function cdnCreateProfile() {
    requireParms(3);
    console.log("Creating profile...");
    var standardCreateParameters = {
        location: resourceLocation,
        sku: {
            name: 'Standard_Verizon'
        }
    };

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

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

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

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

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

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

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

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

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

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

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

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

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

تلميح

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

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

List profiles

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

Create profile

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

Create endpoint

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

Delete profile

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

للاطلاع على مرجع Azure CDN SDK لجافا سكريبت، اعرض المرجع.

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

قم بإدارة موارد CDN الخاصة بك باستخدام PowerShell.