البرنامج التعليمي: منح تطبيق Azure Function حق الوصول إلى حساب خدمات الوسائط

شعار Media Services v3


تحذير

سيتم إيقاف Azure Media Services في 30 يونيو 2024. لمزيد من المعلومات، راجع دليل إيقاف AMS.

لنفترض أنك تريد السماح لزوار موقع الويب أو التطبيق الخاص بك بمعرفة أنك "على الهواء" في استوديو البث الخاص بك. يمكنك تحديد متى يتم تشغيل Media Services Live Events باستخدام API خدمات الوسائط؛ ولكن قد يكون من الصعب استدعاء هذا من جهاز مضمن. بدلا من ذلك، يمكنك عرض واجهة برمجة تطبيقات HTTP لجهازك المضمن باستخدام وظائف Azure. يمكن لوظائف Azure بعد ذلك استدعاء خدمات الوسائط للحصول على حالة الحدث المباشر.

Managed Identities giving a Function App access to a Media Services account

يستخدم هذا البرنامج التعليمي واجهة برمجة تطبيقات خدمات الوسائط 2020-05-01.

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

لاستخدام أي من الأوامر في هذه المقالة، يجب أولاً أن تسجل الدخول إلى الاشتراك الذي تريد استخدامه.

تسجيل الدخول إلى Azure. عند استخدام هذا الأمر سيُطلب منك الاشتراك الذي تريد تفعيله.

az login

تعيين اشتراك

استخدم هذا الأمر لتعيين الاشتراك الذي تريد العمل به.

تعيين اشتراك Azure باستخدام CLI

في الأمر التالي، وفّر معرف اشتراك Azure الذي تريد استخدامه لحساب خدمات الوسائط.

az account set --subscription <subscriptionName>

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

هام

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

أسماء الموارد

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

سترى هذه الأسماء مشاراً إليها في الأوامر أدناه. أسماء الموارد التي ستحتاج إليها هي:

  • myRG
  • myStorageAccount
  • myAmsAccount
  • الموقع
  • myFunction: استخدام "OnAir"
  • myLiveEvent: استخدم "live1"
  • ipaddresses use: "0.0.0./32"

ملاحظة

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

أي شيء يمثله 00000000-0000-0000-0000000000 هو المعرف المميز للمورد. عادة ما يتم إرجاع هذه القيمة بواسطة استجابة JSON. يجب نسخ استجابات JSON ولصقها في المفكرة أو محرر نصوص آخر، حيث ستحتوي هذه الاستجابات على قيم ستحتاجها لأوامر CLI اللاحقة.

كما أنك لا تنشئ اسم المنطقة. يقوم Azure بتحديد اسم المنطقة.

قائمة مناطق Azure

إذا لم تكن متأكداً من اسم المنطقة الفعلي الذي تريد استخدامه، فاستخدم هذا الأمر للحصول على قائمة:

استخدم هذا الأمر لسرد المناطق المتوفرة لحسابك.

az account list-locations --query "[].{DisplayName:displayName, Name:name}" -o table

تسلسل

يتم تنفيذ كل خطوة من الخطوات أدناه بترتيب معين؛ لأنه يتم استخدام قيمة واحدة أو أكثر من استجابات JSON في الخطوة التالية في التسلسل.

إنشاء حساب تخزين:

يجب أن يكون حساب خدمات الوسائط الذي ستقوم بإنشائه مقترناً بحساب تخزين. قم بإنشاء حساب التخزين لحساب خدمات الوسائط أولاً. ستستخدم your-storage-account-name للخطوات اللاحقة.

إنشاء حساب Azure Storage باستخدام CLI

استخدم الأوامر التالية لإنشاء حساب Azure Storage.

لإنشاء حساب تخزين، يجب أولا إنشاء مجموعة موارد داخل موقع.

لسرد المواقع المتوفرة، استخدم الأمر التالي:

سرد المواقع المتوفرة باستخدام CLI

لسرد المواقع المتوفرة، استخدم الأمر التالي:

az account list-locations

إنشاء مجموعة موارد باستخدام CLI

لإنشاء مجموعة موارد، استخدم الأمر التالي:

az group create -n <resourceGroupName> --location chooseLocation

اختر SKU

تحتاج أيضا إلى اختيار SKU لحساب التخزين الخاص بك. يمكنك سرد حسابات التخزين.

اختر SKU من القائمة التالية: Standard_LRS، Standard_GRS، Standard_RAGRS، Standard_ZRS، Premium_LRS، Premium_ZRS، Standard_GZRS، Standard_RAGZRS.

  • قم بالتغيير myStorageAccount إلى اسم فريد بطول أقل من 24 حرفا.
  • قم بالتغيير chooseLocation إلى المنطقة التي تريد العمل داخلها.
  • قم بالتغيير chooseSKU إلى SKU المفضل لديك.
az storage account create -n <myStorageAccount> -g <resourceGroup>  --location <chooseLocation> --sku <chooseSKU>

إنشاء حساب خدمات الوسائط

الآن إنشاء حساب خدمات الوسائط. ابحث عن '

لمزيد من المعلومات حول هذا الأمر، راجع مرجع Media Services CLI.

فحص Azure Function

في هذا القسم، ستقوم بإعداد وظيفة Azure.

الحصول على الرمز

استخدم وظائف Azure لإنشاء مشروع الدالة، واسترداد التعليمة البرمجية من قالب HTTP.

func init MediaServicesLiveMonitor –dotnet

تغيير الدليل

تأكد من تغيير دليل العمل إلى دليل المشروع. وإلا ستحصل على أخطاء.

cd .\MediaServicesLiveMonitor\

قم بتسمية الدالة الخاصة بك

func new --name OnAir --template "HTTP trigger" --authlevel "anonymous"

تكوين مشروع الوظائف

تثبيت خدمات الوسائط وغيرها من الملحقات

قم بتشغيل الأمر dotnet add package في نافذة Terminal لتثبيت حزم الملحقات التي تحتاجها في مشروعك. يقوم الأمر التالي بتثبيت حزم Media Services وAzure Identity.

dotnet add package Microsoft.Azure.Management.Media
dotnet add package Azure.Identity

تحرير التعليمة البرمجية .cs OnAir

قم بتغيير الملف OnAir.cs. قم بتغيير متغيرات subscriptionId وresourceGroup وmediaServicesAccountName إلى تلك التي قررتها سابقاً.

using Azure.Core;
using Azure.Identity;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Management.Media;
using Microsoft.Azure.Management.Media.Models;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
using Microsoft.Rest;
using System.Threading.Tasks;

namespace MediaServicesLiveMonitor
{
    public static class OnAir
    {
        [FunctionName("OnAir")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string name = req.Query["name"];

            if (string.IsNullOrWhiteSpace(name))
            {
                return new BadRequestObjectResult("Missing 'name' URL parameter");
            }

            var credential = new ManagedIdentityCredential();
            var accessTokenRequest = await credential.GetTokenAsync(
                new TokenRequestContext(
                    scopes: new string[] { "https://management.core.windows.net" + "/.default" }
                    )
                );
            ServiceClientCredentials credentials = new TokenCredentials(accessTokenRequest.Token, "Bearer");

            var subscriptionId = "00000000-0000-0000-000000000000";                 // Update
            var resourceGroup = "<your-resource-group-name>";                       // Update
            var mediaServicesAccountName = "<your-media-services-account-name>";    // Update

            var mediaServices = new AzureMediaServicesClient(credentials)
            {
                SubscriptionId = subscriptionId
            };

            var liveEvent = await mediaServices.LiveEvents.GetAsync(resourceGroup, mediaServicesAccountName, name);

            if (liveEvent == null)
            {
                return new NotFoundResult();
            }

            return new OkObjectResult(liveEvent.ResourceState == LiveEventResourceState.Running ? "On air" : "Off air");
        }
    }
}

فحص تطبيق الدالة

قم بإنشاء تطبيق الوظيفة لاستضافة الوظيفة. الاسم هو نفس الاسم الذي قمت بتنزيله سابقاً، MediaServicesLiveMonitorApp.


az functionapp create --resource-group <your-resource-group-name> --consumption-plan-location your-region --runtime dotnet --functions-version 3 --name MediaServicesLiveMonitorApp --storage-account mediatest3store --assign-identity "[system]"

ابحث عن principalId في استجابة JSON:

{
...
"identity": {
//Note the principalId value for the following step
    "principalId": "00000000-0000-0000-000000000000",
    "tenantId": "00000000-0000-0000-000000000000",
    "type": "SystemAssigned",
    "userAssignedIdentities": null
  }
...

منح حق الوصول إلى تطبيق الدالة إلى مورد حساب خدمات الوسائط

لهذا الطلب:

  • assignee هو principalId ذلك الموجود في استجابة JSON من az functionapp create
  • scope هو id الموجود في استجابة JSON من az ams account create. اطلع على مثال استجابة JSON أعلاه.
az role assignment create --assignee 00000000-0000-0000-000000000000 --role "Media Services Account Administrator" --scope "/subscriptions/<the-subscription-id>/resourceGroups/<your-resource-group>/providers/Microsoft.Media/mediaservices/<your-media-services-account-name>"

انشر الدالة

func azure functionapp publish MediaServicesLiveMonitorApp

التحقق من الصحة

في المستعرض، انتقل إلى عنوان URL الخاص بالدالة، على سبيل المثال:

https://mediaserviceslivemonitorapp.azurewebsites.net/api/onair?name=live1

يجب أن يعرض هذا الخطأ 404 (لم يتم العثور على)؛ لأن الحدث المباشر غير موجود حتى الآن.

إنشاء حدث مباشر

az ams live-event create --resource-group test3 --account-name mediatest3 --name live1 --streaming-protocol RTMP

في المستعرض، انتقل إلى عنوان URL الخاص بالدالة، على سبيل المثال:

https://mediaserviceslivemonitorapp.azurewebsites.net/api/onair?name=live1

يجب أن يظهر هذا الآن "خارج الهواء".

بدء الحدث المباشر

إذا بدأ الحدث المباشر، يجب أن تعود الدالة "على الهواء".

az ams live-event start live1

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

تنظيف الموارد

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

حذف مجموعة موارد مع CLI

az group delete --name <your-resource-group-name>

الحصول على التعليمات والدعم

يمكنك الاتصال بخدمات الوسائط مع الأسئلة أو متابعة تحديثاتنا بإحدى الطرق التالية: