Tutorial: Membuat aplikasi notifikasi tanpa server dengan Azure Functions dan layanan Azure Web PubSub

Layanan Azure Web PubSub membantu Anda membangun aplikasi web Olahpesan real time menggunakan WebSocket. Azure Functions adalah platform tanpa server yang memungkinkan Anda menjalankan kode Anda tanpa mengelola infrastruktur apa pun. Dalam tutorial ini, Anda mempelajari cara menggunakan layanan Azure Web PubSub dan Azure Functions untuk membangun aplikasi tanpa server dengan Olahpesan real time di pada skenario pemberitahuan.

Dalam tutorial ini, Anda akan mempelajari cara:

  • Membangun aplikasi pemberitahuan tanpa server
  • Menangani input fungsi Web PubSub dan pengikatan output
  • Menjalankan fungsi sampel secara lokal
  • Menyebarkan fungsi ke Aplikasi Azure Function

Prasyarat

Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.

Masuk ke Azure

Masuk ke portal Microsoft Azure di https://portal.azure.com/ dengan akun Azure Anda.

Membuat instans layanan Azure Web PubSub

Aplikasi Anda akan terhubung ke instans layanan Web PubSub di Azure.

  1. Pilih tombol Baru yang ditemukan di sudut kiri atas portal Microsoft Azure. Di layar Baru, ketik Web PubSub di kotak pencarian dan tekan enter. (Anda juga dapat mencari Azure Web PubSub dari kategori Web.)

    Screenshot of searching the Azure Web PubSub in portal.

  2. Pilih Web PubSub dari hasil pencarian, lalu pilih Buat.

  3. Masukkan pengaturan berikut.

    Pengaturan Nilai yang disarankan Deskripsi
    Nama sumber daya Nama unik secara global Nama unik global yang mengidentifikasi instans layanan Web PubSub baru Anda. Karakter yang valid adalah a-z, A-Z, 0-9, dan -.
    Langganan Langganan Anda Langganan Azure tempat instans layanan Web PubSub baru ini dibuat.
    Grup Sumber Daya myResourceGroup Nama untuk grup sumber daya baru untuk membuat instans layanan Web PubSub Anda.
    Location US Barat Pilih wilayah di dekat Anda.
    Tingkat harga Gratis Anda dapat mencoba layanan Azure Web PubSub secara gratis terlebih dahulu. Pelajari lebih lanjut tingkat harga layanan Azure Web PubSub
    Jumlah unit - Jumlah unit menentukan berapa banyak koneksi yang dapat diterima instans layanan Web PubSub Anda. Setiap unit mendukung paling banyak 1.000 koneksi bersamaan. Ini hanya dapat dikonfigurasi dalam tingkat Standar.

    Screenshot of creating the Azure Web PubSub instance in portal.

  4. Pilih Buat untuk mulai menyebarkan instans layanan Web PubSub.

Membuat dan menjalankan fungsi secara lokal

  1. Pastikan Anda telah menginstal Azure Functions Core Tools. Sekarang, buat direktori kosong untuk proyek. Jalankan perintah di dalam direktori kerja ini. Gunakan salah satu opsi yang diberikan di bawah ini.

    func init --worker-runtime javascript --model V4
    
  2. Ikuti langkah-langkah untuk menginstal Microsoft.Azure.WebJobs.Extensions.WebPubSub.

    Konfirmasi atau perbarui host.jsonekstensiBundle ke versi 4.* atau yang lebih baru untuk mendapatkan dukungan Web PubSub. Untuk memperbarui host.json, buka file di editor, lalu ganti ekstensi versi yang adaBundle ke versi 4.* atau yang lebih baru.

    {
        "extensionBundle": {
            "id": "Microsoft.Azure.Functions.ExtensionBundle",
            "version": "[4.*, 5.0.0)"
        }
    }
    
  3. Buat fungsi index untuk membaca dan menghosting halaman web statis untuk klien.

    func new -n index -t HttpTrigger
    
    • Perbarui src/functions/index.js dan salin kode berikut.
      const { app } = require('@azure/functions');
      const { readFile } = require('fs/promises');
      
      app.http('index', {
          methods: ['GET', 'POST'],
          authLevel: 'anonymous',
          handler: async (context) => {
              const content = await readFile('index.html', 'utf8', (err, data) => {
                  if (err) {
                      context.err(err)
                      return
                  }
              });
      
              return { 
                  status: 200,
                  headers: { 
                      'Content-Type': 'text/html'
                  }, 
                  body: content, 
              };
          }
      });
      
  4. Buat fungsi negotiate untuk membantu klien mendapatkan url koneksi layanan dengan token akses.

    func new -n negotiate -t HttpTrigger
    
    • Perbarui src/functions/negotiate.js dan salin kode berikut.
      const { app, input } = require('@azure/functions');
      
      const connection = input.generic({
          type: 'webPubSubConnection',
          name: 'connection',
          hub: 'notification'
      });
      
      app.http('negotiate', {
          methods: ['GET', 'POST'],
          authLevel: 'anonymous',
          extraInputs: [connection],
          handler: async (request, context) => {
              return { body: JSON.stringify(context.extraInputs.get('connection')) };
          },
      });
      
  5. Buat fungsi notification untuk menghasilkan pemberitahuan dengan TimerTrigger.

    func new -n notification -t TimerTrigger
    
    • Perbarui src/functions/notification.js dan salin kode berikut.
      const { app, output } = require('@azure/functions');
      
      const wpsAction = output.generic({
          type: 'webPubSub',
          name: 'action',
          hub: 'notification'
      });
      
      app.timer('notification', {
          schedule: "*/10 * * * * *",
          extraOutputs: [wpsAction],
          handler: (myTimer, context) => {
              context.extraOutputs.set(wpsAction, {
                  actionName: 'sendToAll',
                  data: `[DateTime: ${new Date()}] Temperature: ${getValue(22, 1)}\xB0C, Humidity: ${getValue(40, 2)}%`,
                  dataType: 'text',
              });
          },
      });
      
      function getValue(baseNum, floatNum) {
          return (baseNum + 2 * floatNum * (Math.random() - 0.5)).toFixed(3);
      }
      
  6. Tambahkan halaman index.html tunggal klien di folder akar proyek dan salin konten.

    <html>
        <body>
        <h1>Azure Web PubSub Notification</h1>
        <div id="messages"></div>
        <script>
            (async function () {
                let messages = document.querySelector('#messages');
                let res = await fetch(`${window.location.origin}/api/negotiate`);
                let url = await res.json();
                let ws = new WebSocket(url.url);
                ws.onopen = () => console.log('connected');
    
                ws.onmessage = event => {
                    let m = document.createElement('p');
                    m.innerText = event.data;
                    messages.appendChild(m);
                };
            })();
        </script>
        </body>
    </html>
    
  7. Mengonfigurasi dan menjalankan aplikasi Fungsi Azure

    • Di browser, buka portal Microsoft Azure dan konfirmasikan instans Layanan Web PubSub yang Anda sebarkan sebelumnya berhasil dibuat. Narigasikan ke instans.
    • Pilih Kunci dan salin string koneksi.

    Screenshot of copying the Web PubSub connection string.

    Jalankan perintah di folder fungsi untuk mengatur layanan string koneksi. Ganti <connection-string> dengan nilai Anda sesuai kebutuhan.

    func settings add WebPubSubConnectionString "<connection-string>"
    

    Catatan

    TimerTrigger yang digunakan dalam sampel memiliki dependensi pada Azure Storage, tetapi Anda dapat menggunakan emulator penyimpanan lokal saat Fungsi berjalan secara lokal. Jika Anda mendapatkan beberapa kesalahan seperti There was an error performing a read operation on the Blob Storage Secret Repository. Please ensure the 'AzureWebJobsStorage' connection string is valid., Anda harus mengunduh dan mengaktifkan Storage Emulator.

    Sekarang Anda dapat menjalankan fungsi lokal Berdasarkan perintah.

    func start --port 7071
    

    Dan memeriksa log yang berjalan, Anda dapat mengunjungi laman statis host lokal dengan mengunjungi: http://localhost:7071/api/index.

    Catatan

    Beberapa penjelajah secara otomatis mengalihkan ke https yang mengarah ke url yang salah. Sarankan untuk menggunakan Edge dan memeriksa kembali url jika penyajian tidak berhasil.

Menyebarkan aplikasi fungsi ke Azure

Sebelum dapat menyebarkan kode fungsi ke Azure, Anda perlu membuat tiga sumber daya:

  • Grup sumber daya, yang merupakan kontainer logis untuk sumber daya terkait.
  • Akun penyimpanan, yang digunakan untuk mempertahankan status dan informasi lain tentang fungsi Anda.
  • Aplikasi fungsi, menyediakan lingkungan untuk menjalankan kode fungsi Anda. Aplikasi fungsi memetakan ke proyek fungsi lokal Anda dan memungkinkan Anda mengelompokkan fungsi sebagai unit logis untuk pengelolaan, penyebaran, dan berbagi sumber daya yang lebih mudah.

Gunakan perintah berikut untuk membuat item ini.

  1. Masuk ke Azure:

    az login
    
  2. Buat grup sumber daya atau Anda dapat melompati dengan menggunakan kembali salah satu layanan Azure Web PubSub:

    az group create -n WebPubSubFunction -l <REGION>
    
  3. Buat akun penyimpanan tujuan umum di grup sumber daya dan wilayah Anda:

    az storage account create -n <STORAGE_NAME> -l <REGION> -g WebPubSubFunction
    
  4. Buat aplikasi fungsi di Azure:

    az functionapp create --resource-group WebPubSubFunction --consumption-plan-location <REGION> --runtime node --runtime-version 18 --functions-version 4 --name <FUNCIONAPP_NAME> --storage-account <STORAGE_NAME>
    

    Catatan

    Periksa dokumentasi versi runtime Azure Functions untuk mengatur --runtime-version parameter ke nilai yang didukung.

  5. Menyebarkan proyek fungsi ke Azure:

    Setelah membuat aplikasi fungsi di Azure, Anda sekarang siap untuk menyebarkan proyek fungsi lokal dengan menggunakan perintah terbitkan func azure functionapp.

    func azure functionapp publish <FUNCIONAPP_NAME> --publish-local-settings
    

    Catatan

    Di sini kita menyebarkan pengaturan lokal local.settings.json bersama dengan parameter perintah --publish-local-settings. Jika Anda menggunakan Microsoft Azure Storage Emulator, Anda dapat mengetikkan no untuk melewati penimpaan nilai ini di Azure dengan mengikuti pesan permintaan: App setting AzureWebJobsStorage is different between azure and local.settings.json, Would you like to overwrite value in azure? [yes/no/show]. Selain itu, Anda dapat memperbarui pengaturan Aplikasi Fungsi di Portal Microsoft Azure ->Pengaturan ->Configuration.

  6. Sekarang Anda dapat memeriksa situs Anda dari Azure Function App dengan membuka URL: https://<FUNCIONAPP_NAME>.azurewebsites.net/api/index.

Membersihkan sumber daya

Jika Anda tidak akan terus menggunakan aplikasi ini, hapus semua sumber daya yang dibuat oleh dokumen ini dengan langkah-langkah berikut agar Anda tidak dikenakan biaya apa pun:

  1. Di portal Azure, pilih Grup sumber daya di paling kiri, lalu pilih grup sumber daya yang Anda buat. Gunakan kotak pencarian untuk menemukan grup sumber daya berdasarkan namanya.

  2. Di jendela yang terbuka, pilih grup sumber daya, lalu pilih Hapus grup sumber daya.

  3. Di jendela baru, ketik nama grup sumber daya untuk dihapus, lalu pilih Hapus.

Langkah berikutnya

Dalam mulai cepat ini, Anda mempelajari cara menjalankan aplikasi obrolan tanpa server. Sekarang, Anda bisa mulai membangun aplikasi Anda sendiri.