Tutorial: Memberikan akses aplikasi Azure Function ke akun Azure Media Services

Logo Azure Media Services v3


Peringatan

Azure Media Services akan dihentikan pada 30 Juni 2024. Untuk informasi selengkapnya, lihat Panduan Penghentian AMS.

Misalkan Anda ingin mengizinkan pengunjung ke situs web atau aplikasi Anda agar mengetahui bahwa Anda "On Air" di studio siaran Anda. Anda dapat menentukan kapan Acara Langsung Media Services berjalan menggunakan API Media Services tetapi ini mungkin sulit untuk dipanggil dari perangkat yang disematkan. Sebagai gantinya, Anda dapat mengekspos API HTTP untuk perangkat yang disematkan menggunakan Azure Functions. Azure Functions kemudian dapat memanggil Media Services untuk mendapatkan status Acara Langsung.

Identitas Terkelola yang memberikan akses Aplikasi Fungsi ke akun Media Services

Tutorial ini menggunakan API Media Services 2020-05-01.

Masuk ke Azure

Untuk menggunakan salah satu perintah dalam artikel ini, pertama-tama Anda harus masuk ke langganan yang ingin Anda gunakan.

Masuk ke Azure. Saat Anda menggunakan perintah ini, Anda akan diminta untuk berlangganan yang ingin Anda gunakan.

az login

Atur langganan

Jalankan perintah berikut untuk memilih langganan yang ingin Anda kerjakan.

Mengatur langganan Azure dengan CLI

Dalam perintah berikut ini, berikan ID langganan Azure yang ingin Anda gunakan untuk akun Media Services.

az account set --subscription <subscriptionName>

Prasyarat

Penting

Anda sangat dianjurkan untuk bekerja melalui Mulai cepat membuat fungsi C# di Azure dari baris perintah sebelum mencoba tutorial ini. Itu dikarenakan langkah-langkah penyiapan yang termasuk di dalamnya merupakan langkah yang sama dengan yang diperlukan di sini. Ini juga akan memberi Anda kesempatan untuk bekerja dengan contoh sederhana yang menjadi dasar tutorial ini.

Nama sumber daya

Sebelum memulai, tentukan nama sumber daya yang akan Anda buat. Nama ini harus mudah diidentifikasi sebagai satu set, terutama jika Anda tidak berencana untuk menggunakannya setelah Anda selesai menguji. Aturan penamaan berbeda untuk berbagai jenis sumber daya sehingga yang terbaik adalah tetap menggunakan huruf kecil semua. Misalnya, "mediatest1rg" untuk nama grup sumber daya Anda dan "mediatest1stor" untuk nama akun penyimpanan Anda. Gunakan nama yang sama untuk setiap langkah dalam artikel ini.

Anda akan melihat nama-nama ini direferensikan dalam perintah di bawah ini. Nama sumber daya yang Anda perlukan adalah:

  • myRG
  • myStorageAccount
  • myAmsAccount
  • lokasi
  • myFunction: use "OnAir"
  • myLiveEvent: use "live1"
  • ipaddresses use: "0.0.0./32"

Catatan

Tanda hubung di atas hanya digunakan untuk memisahkan kata-kata penjelas. Karena ketidakkonsistenan penamaan sumber daya di layanan Azure, jangan gunakan tanda hubung saat Anda memberi nama sumber daya Anda.

Apa pun yang diwakili oleh 00000000-0000-0000-0000000000 adalah pengidentifikasi unik sumber daya. Nilai ini biasanya dikembalikan oleh respons JSON. Anda juga disarankan untuk menyalin dan menempelkan respons JSON di Notepad atau editor teks lainnya, karena respons tersebut akan berisi nilai yang Anda perlukan untuk perintah CLI nanti.

Selain itu, Anda tidak membuat nama wilayah. Nama wilayah ditentukan oleh Azure.

Daftar wilayah Azure

Jika Anda tidak yakin nama kawasan aktual untuk digunakan, gunakan perintah ini untuk mendapatkan daftar:

Gunakan perintah ini untuk mencantumkan wilayah yang tersedia untuk akun Anda.

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

Urutan

Setiap langkah di bawah ini dilakukan dalam urutan tertentu karena satu atau beberapa nilai dari respons JSON digunakan dalam langkah berikutnya dalam urutan.

Membuat akun Penyimpanan

Akun Media Services yang akan Anda buat harus memiliki akun penyimpanan yang terkait dengannya. Buat akun penyimpanan untuk akun Media Services terlebih dahulu. Anda akan menggunakan your-storage-account-name untuk langkah berikutnya.

Membuat akun Azure Storage dengan CLI

Gunakan perintah berikut untuk membuat akun Azure Storage.

Untuk membuat akun penyimpanan, Anda harus terlebih dahulu membuat grup sumber daya dalam suatu lokasi.

Untuk mencantumkan lokasi yang tersedia, gunakan perintah berikut:

Mencantumkan lokasi yang tersedia dengan CLI

Untuk mencantumkan lokasi yang tersedia, gunakan perintah berikut:

az account list-locations

Membuat grup sumber daya dengan CLI

Untuk membuat grup sumber daya, gunakan perintah berikut:

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

Pilih SKU

Anda juga perlu memilih SKU untuk akun penyimpanan. Anda dapat mencantumkan akun penyimpanan.

Pilih SKU dari daftar berikut: Standard_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_LRS, Premium_ZRS, Standard_GZRS, Standard_RAGZRS.

  • Ubah myStorageAccount menjadi nama unik dengan panjang kurang dari 24 karakter.
  • Ubah chooseLocation menjadi wilayah tempat Anda ingin bekerja.
  • Ubah chooseSKU ke SKU pilihan Anda.
az storage account create -n <myStorageAccount> -g <resourceGroup>  --location <chooseLocation> --sku <chooseSKU>

Membuat Akun Azure Media Services

Sekarang buat akun Media Services. Carilah `

Untuk informasi selengkapnya tentang perintah ini, lihat referensi CLI Azure Media Services.

Menyiapkan Azure Function

Di bagian ini, Anda akan menyiapkan Azure Function Anda.

Mendapatkan kode

Gunakan Azure Functions untuk membuat proyek fungsi Anda dan mengambil kode dari templat HTTP.

func init MediaServicesLiveMonitor –dotnet

Mengubah direktori

Pastikan Anda mengubah direktori kerja anda ke direktori proyek. Jika tidak, Anda akan mengalami kesalahan.

cd .\MediaServicesLiveMonitor\

Memberi nama fungsi Anda

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

Mengonfigurasi proyek fungsi

Instal Azure Media Services dan ekstensi lainnya

Jalankan perintah paket penambahan dotnet di jendela Terminal untuk memasang paket ekstensi yang Anda butuhkan dalam proyek Anda. Perintah berikut menginstal paket Azure Media Services dan Identitas Azure.

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

Mengedit kode OnAir.cs

Ubah file OnAir.cs. Ubah variabel subscriptionId, resourceGroup, dan mediaServicesAccountName ke variabel Anda putuskan sebelumnya.

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");
        }
    }
}

Membuat Aplikasi Fungsi

Buat Aplikasi Fungsi untuk menghosting fungsi. Namanya sama dengan yang telah Anda unduh sebelumnya, 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]"

Carilah principalId dalam respons JSON:

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

Memberikan akses aplikasi fungsi ke sumber daya akun Media Services

Untuk permintaan ini:

  • assignee adalah principalId yang ada dalam respons JSON dari az functionapp create
  • scope adalah id yang ada dalam respons JSON dari az ams account create. Lihat contoh respons JSON di atas.
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>"

Menerbitkan fungsi

func azure functionapp publish MediaServicesLiveMonitorApp

Validasi

Dalam browser, buka URL fungsi, misalnya:

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

Ini harus mengembalikan kesalahan 404 (Tidak Ditemukan) karena Acara Langsung belum ada.

Membuat Acara Langsung

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

Dalam browser, buka URL fungsi, misalnya:

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

Ini sekarang harus menunjukkan "Off Air".

Memulai acara langsung

Jika Anda memulai Acara Langsung, fungsi harus menampilkan "On Air".

az ams live-event start live1

Fungsi ini memungkinkan akses ke siapa pun. Mengamankan akses ke Azure Function dan kabel lampu "On Air" berada di luar cakupan untuk dokumen ini.

Membersihkan sumber daya

Jika Anda tidak berencana menggunakan sumber daya yang Anda buat, hapus grup sumber daya.

Menghapus grup sumber daya dengan CLI

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

Dapatkan bantuan dan dukungan

Anda dapat menghubungi Media Services dengan pertanyaan atau mengikuti pembaruan kami dengan salah satu metode berikut: