Bagikan melalui


Tutorial: Menyebarkan Azure Functions sebagai modul IoT Edge

Berlaku untuk:IoT Edge 1.5 dengan tanda centang IoT Edge 1.5

Penting

IoT Edge 1.5 LTS adalah rilis didukung. IoT Edge 1.4 LTS mencapai akhir masa pakai pada 12 November 2024. Jika Anda menggunakan rilis sebelumnya, lihat Update IoT Edge.

Gunakan Azure Functions untuk menyebarkan kode yang menjalankan logika bisnis Anda langsung di perangkat Azure IoT Edge Anda. Tutorial ini menunjukkan kepada Anda cara membuat dan menyebarkan Fungsi Azure yang memfilter data sensor pada perangkat IoT Edge yang disimulasikan. Gunakan perangkat IoT Edge yang disimulasikan yang Anda buat di panduan memulai cepat. Dalam tutorial ini, Anda akan mempelajari cara:

  • Menggunakan Visual Studio Code untuk membuat Fungsi Azure
  • Gunakan Visual Studio Code dan Docker untuk membuat gambar Docker dan menerbitkannya ke registri kontainer
  • Menyebarkan modul dari registri kontainer ke perangkat IoT Edge Anda
  • Menampilkan data yang difilter

Diagram yang memperlihatkan arsitektur fungsi, termasuk cara mentahapkan dan menyebarkan modul fungsi.

Fungsi Azure yang Anda buat dalam tutorial ini memfilter data suhu yang dihasilkan oleh perangkat Anda. Fungsi ini hanya mengirim pesan ke hulu ke Azure IoT Hub ketika suhu berada di atas ambang yang ditentukan.

Jika Anda tidak memiliki akun Azure, buat akun free sebelum Memulai.

Prasyarat

Sebelum Anda memulai tutorial ini, ikuti tutorial untuk menyiapkan lingkungan pengembangan Anda untuk pengembangan kontainer Linux: Develop Azure IoT Edge modul menggunakan Visual Studio Code. Setelah selesai, Anda memiliki prasyarat berikut:

Untuk mengembangkan modul IoT Edge dengan Azure Functions, instal prasyarat tambahan ini di komputer pengembangan Anda:

Buat proyek fungsi

Azure IoT Edge untuk Visual Studio Code memberi Anda kemampuan manajemen dan templat kode. Di bagian ini, Anda menggunakan Visual Studio Code untuk membuat solusi IoT Edge dengan fungsi Azure.

Membuat proyek baru

Ikuti langkah-langkah ini untuk membuat templat solusi Fungsi C# yang dapat disesuaikan.

  1. Buka Visual Studio Code pada komputer pengembangan Anda.

  2. Buka palet perintah Visual Studio Code dengan memilih Tampilkan Palet Perintah >.

  3. Di palet perintah, tambahkan dan jalankan perintah Azure IoT Edge: Solusi IoT Edge baru. Ikuti perintah ini di palet perintah untuk membuat solusi Anda:

    • Pilih folder: pilih lokasi di komputer pengembangan Anda untuk Visual Studio Code agar dapat membuat file solusi.
    • Berikan nama solusi: tambahkan nama deskriptif untuk solusi Anda, seperti FunctionSolution, atau terima default.
    • Pilih templat modul: pilih Azure Functions - C#.
    • Berikan nama modul: beri nama modul Anda CSharpFunction.
    • Berikan repositori gambar Docker untuk modul: repositori gambar menyertakan nama registri kontainer Anda dan nama gambar kontainer Anda. Portal secara otomatis mengisi gambar kontainer Anda dari langkah sebelumnya. Ganti localhost:5000 dengan server Login nilai dari registri kontainer Azure Anda. Anda dapat mengambil server Login dari halaman Overview registri kontainer Anda di portal Azure. String akhir terlihat seperti <registry name>.azurecr.io/csharpfunction.

    Screenshot memperlihatkan tempat untuk menambahkan nama repositori gambar Docker Anda di Visual Studio Code.

Menambahkan informasi masuk registri

File lingkungan dalam solusi Anda menyimpan kredensial untuk registri kontainer Anda dan membagikannya dengan runtime IoT Edge. Runtime memerlukan kredensial ini untuk menarik gambar privat Anda ke perangkat IoT Edge Anda.

Ekstensi IoT Edge di Visual Studio Code mencoba menarik kredensial registri kontainer Anda dari Azure dan mengisinya dalam file lingkungan. Periksa apakah kredensial Anda sudah ada dalam file. Jika belum, tambahkan sekarang:

  1. Di penjelajah Visual Studio Code, buka file .env.
  2. Perbarui bidang dengan username dan password nilai yang Anda salin dari registri kontainer Azure Anda. Untuk menemukannya lagi, buka registri kontainer Anda di Azure dan lihat halaman Settings > Kunci Akses.
  3. Simpan file ini.

Catatan

Tutorial ini menggunakan info masuk admin untuk Azure Container Registry, yang nyaman untuk skenario pengembangan dan pengujian. Untuk produksi, gunakan opsi autentikasi dengan hak akses minimal seperti prinsipal layanan. Untuk informasi selengkapnya, lihat Kelola akses ke registri kontainer Anda.

Tentukan arsitektur target ke AMD64

Azure Functions modul pada IoT Edge hanya didukung pada kontainer berbasis Linux AMD64. Arsitektur target default untuk Visual Studio Code adalah Linux AMD64, tetapi Anda dapat mengaturnya secara eksplisit ke Linux AMD64 di sini.

  1. Buka palet perintah dan cari Azure IoT Edge: Atur Platform Target Default untuk Solusi Edge.
  2. Di palet perintah, pilih arsitektur target AMD64 dari daftar opsi.

Memperbarui modul dengan kode kustom

Tambahkan kode sehingga modul CSharpFunction memproses pesan di tepi sebelum meneruskannya ke IoT Hub.

  1. Di penjelajah Visual Studio Code, buka modules > CSharpFunction > CSharpFunction.cs.

  2. Ganti konten file CSharpFunction.cs dengan kode berikut. Kode ini menerima telemetri tentang suhu sekitar dan mesin, dan meneruskan pesan ke IoT Hub hanya jika suhu komputer berada di atas ambang yang ditentukan.

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Text;
    using System.Threading.Tasks;
    using Microsoft.Azure.Devices.Client;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Extensions.EdgeHub;
    using Microsoft.Azure.WebJobs.Host;
    using Microsoft.Extensions.Logging;
    using Newtonsoft.Json;
    
    namespace Functions.Samples
    {
        public static class CSharpFunction
        {
            [FunctionName("CSharpFunction")]
            public static async Task FilterMessageAndSendMessage(
                [EdgeHubTrigger("input1")] Message messageReceived,
                [EdgeHub(OutputName = "output1")] IAsyncCollector<Message> output,
                ILogger logger)
            {
                const int temperatureThreshold = 20;
                byte[] messageBytes = messageReceived.GetBytes();
                var messageString = System.Text.Encoding.UTF8.GetString(messageBytes);
    
                if (!string.IsNullOrEmpty(messageString))
                {
                    logger.LogInformation("Info: Received one non-empty message");
                    // Get the body of the message and deserialize it.
                    var messageBody = JsonConvert.DeserializeObject<MessageBody>(messageString);
    
                    if (messageBody != null && messageBody.machine.temperature > temperatureThreshold)
                    {
                        // Send the message to the output as the temperature value is greater than the threshold.
                        using (var filteredMessage = new Message(messageBytes))
                        {
                             // Copy the properties of the original message into the new Message object.
                             foreach (KeyValuePair<string, string> prop in messageReceived.Properties)
                             {filteredMessage.Properties.Add(prop.Key, prop.Value);}
                             // Add a new property to the message to indicate it is an alert.
                             filteredMessage.Properties.Add("MessageType", "Alert");
                             // Send the message.
                             await output.AddAsync(filteredMessage);
                             logger.LogInformation("Info: Received and transferred a message with temperature above the threshold");
                        }
                    }
                }
            }
        }
        //Define the expected schema for the body of incoming messages.
        class MessageBody
        {
            public Machine machine {get; set;}
            public Ambient ambient {get; set;}
            public string timeCreated {get; set;}
        }
        class Machine
        {
            public double temperature {get; set;}
            public double pressure {get; set;}
        }
        class Ambient
        {
            public double temperature {get; set;}
            public int humidity {get; set;}
        }
    }
    
  3. Simpan berkas.

Membangun dan mendorong solusi IoT Edge Anda

Di bagian sebelumnya, Anda membuat solusi IoT Edge dan mengubah CSharpFunction untuk memfilter pesan dengan suhu komputer yang dilaporkan di bawah ambang yang dapat diterima. Sekarang bangun solusi sebagai gambar kontainer dan dorong ke registri kontainer Anda.

  1. Buka terminal terintegrasi di Visual Studio Code. Pilih Tampilkan > Terminal.

  2. Masuk ke Docker di terminal. Gunakan nama pengguna, kata sandi, dan server autentikasi dari registri kontainer Azure Anda. Dapatkan nilai-nilai ini dari bagian kunci akses registri Anda di portal Azure.

    docker login -u <ACR username> -p <ACR password> <ACR login server>
    

    Anda mungkin menerima peringatan keamanan yang merekomendasikan penggunaan --password-stdin. Meskipun praktik terbaik tersebut disarankan untuk skenario produksi, praktik terbaik berada di luar cakupan tutorial ini. Untuk mengetahui informasi selengkapnya, lihat referensi masuk docker.

  3. Di Visual Studio Code explorer, klik kanan file deployment.template.json, lalu pilih Build dan Push IoT Edge Solution.

    Perintah build dan push memulai tiga operasi. Pertama, ini membuat folder baru dalam solusi yang disebut konfigurasi yang memiliki manifes penyebaran lengkap, yang dibangun dari templat penyebaran dan file solusi lainnya. Kedua, ini menjalankan docker build untuk membangun citra kontainer berdasarkan Dockerfile yang sesuai untuk arsitektur target Anda. Kemudian, perintah ini menjalankan docker push untuk mendorong repositori gambar ke registri kontainer Anda.

    Proses ini dapat memakan waktu beberapa menit untuk pertama kalinya, tetapi lebih cepat saat Anda menjalankan perintah berikutnya.

Verifikasi gambar kontainer Anda

Visual Studio Code menunjukkan pesan sukses saat Anda mendorong gambar kontainer ke registri kontainer Anda. Untuk mengonfirmasi operasi, lihat gambar di registri.

  1. Di portal Azure, buka registri kontainer Azure Anda.
  2. Pilih Repositori Layanan>.
  3. Anda melihat repositori csharpfunction dalam daftar. Pilih repositori ini untuk melihat detail selengkapnya.
  4. Di bagian Tag , Anda akan melihat tag 0.0.1-amd64 . Tag ini menunjukkan versi dan platform gambar yang Anda buat. File module.json di folder CSharpFunction mengatur nilai-nilai ini.

Menyebarkan dan menjalankan solusi

Gunakan Azure portal untuk menyebarkan modul Functions Anda ke perangkat IoT Edge seperti dalam quickstart. Anda juga dapat menyebarkan dan memantau modul dari Visual Studio Code. Bagian berikut menggunakan Azure IoT Edge dan IoT Hub untuk ekstensi Visual Studio Code yang tercantum dalam prasyarat. Instal ekstensi sekarang jika Anda belum melakukannya.

  1. Di penjelajah Visual Studio Code, di bawah bagian Azure IoT Hub, perluas Devices untuk melihat daftar perangkat IoT.

  2. Klik kanan nama perangkat IoT Edge Anda, lalu pilih Buat Penyebaran untuk Perangkat Tunggal.

  3. Buka folder solusi yang memiliki CSharpFunction. Buka folder konfigurasi, pilih file deployment.amd64.json , lalu pilih Pilih Manifes Penyebaran Edge.

  4. Di bawah perangkat Anda, perluas Modul untuk melihat daftar modul yang disebarkan dan berjalan. Pilih tombol refresh. Anda dapat melihat CSharpFunction baru yang berjalan bersama dengan modul SimulatedTemperatureSensor , $edgeAgent, dan $edgeHub.

    Diperlukan beberapa saat agar modul baru muncul. Perangkat IoT Edge mengambil informasi penyebaran barunya dari IoT Hub, memulai kontainer baru, lalu melaporkan status kembali ke IoT Hub.

    Screenshot memperlihatkan cara melihat modul yang disebarkan di Visual Studio Code.

Menampilkan data yang dihasilkan

Lihat semua pesan yang tiba di hub IoT Anda dari perangkat Anda dengan menjalankan Azure IoT Hub: Mulai Memantau Titik Akhir Peristiwa Bawaan di palet perintah. Untuk menghentikan pemantauan pesan, jalankan Azure IoT Hub: Hentikan Pemantauan Titik Akhir Peristiwa Bawaan di palet perintah.

Untuk memfilter tampilan dan melihat pesan dari perangkat tertentu, klik kanan perangkat di Azure IoT Hub > Perangkat bagian penjelajah Visual Studio Code, dan pilih Mulai Pemantauan Titik Akhir Peristiwa Bawaan.

Membersihkan sumber daya

Jika Anda berencana untuk melanjutkan ke artikel yang direkomendasikan berikutnya, pertahankan sumber daya dan konfigurasi yang Anda buat dan gunakan kembali. Anda juga dapat terus menggunakan perangkat IoT Edge yang sama dengan perangkat pengujian.

Jika tidak, hapus konfigurasi lokal dan sumber daya Azure yang Anda buat dalam artikel ini untuk menghindari biaya.

Menghapus sumber daya Azure

Anda tidak dapat membatalkan penghapusan Azure sumber daya dan grup sumber daya. Pastikan Anda tidak menghapus grup atau sumber daya yang salah secara tidak sengaja. Jika Anda membuat IoT Hub di dalam grup sumber daya yang ada yang memiliki sumber daya yang ingin Anda simpan, hapus hanya sumber daya IoT Hub itu sendiri, bukan grup sumber daya.

Untuk menghapus sumber daya:

  1. Masuk ke portal Azure, lalu pilih grup Resource.
  2. Pilih nama grup sumber daya yang berisi sumber daya pengujian IoT Edge Anda.
  3. Tinjau daftar sumber daya yang dimuat grup sumber daya Anda. Jika Anda ingin menghapus semuanya, Anda dapat memilih Hapus grup sumber daya. Jika Anda hanya ingin menghapus beberapa sumber daya, pilih setiap sumber daya untuk menghapusnya satu per satu.

Langkah berikutnya

Dalam tutorial ini, Anda membuat modul fungsi Azure dengan kode untuk memfilter data mentah yang dihasilkan oleh perangkat IoT Edge Anda.

Lanjutkan ke tutorial berikutnya untuk mempelajari cara lain bagaimana Azure IoT Edge dapat membantu Anda mengolah data menjadi wawasan bisnis di edge.