Bagikan melalui


Tutorial: Menyebarkan Azure Functions sebagai modul - Azure IoT Edge

Berlaku untuk: Tanda centang IoT Edge 1.5 IoT Edge 1.5 Tanda centang IoT Edge 1.4 IoT Edge 1.4

Penting

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

Gunakan Azure Functions untuk menyebarkan kode yang mengimplementasikan logika bisnis Anda secara langsung di perangkat Azure IoT Edge. Tutorial ini memandu Anda membuat dan menyebarkan Azure Function yang memfilter data sensor pada perangkat IoT Edge yang disimulasikan. Anda menggunakan perangkat IoT Edge simulasi yang Anda buat di panduan mulai cepat. Dalam tutorial ini, Anda akan mempelajari cara:

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

Diagram arsitektur fungsi, memperlihatkan cara menggelar dan menyebarkan modul fungsi.

Azure Function yang dibuat dalam tutorial ini akan memfilter data suhu yang dihasilkan oleh perangkat Anda. Fungsi hanya mengirim pesan ke upstram Ke Azure IoT Hub ketika suhu berada di atas ambang batas yang ditentukan.

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

Prasyarat

Sebelum memulai tutorial ini, lakukan tutorial untuk menyiapkan lingkungan pengembangan Anda untuk pengembangan kontainer Linux: Mengembangkan modul Azure IoT Edge menggunakan Visual Studio Code. Setelah menyelesaikan tutorial tersebut, Anda harus memiliki prasyarat berikut:

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

Buat proyek fungsi

Azure IoT Edge untuk Visual Studio Code yang Anda instal di prasyarat menyediakan kemampuan manajemen dan beberapa templat kode. Di bagian ini, gunakan Visual Studio Code untuk membuat solusi IoT Edge yang berisi Azure Function.

Membuat proyek baru

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

  1. Buka Visual Studio Code di mesin 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 untuk 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 mencakup nama registri kontainer dan nama gambar kontainer Anda. Gambar kontainer Anda telah diisi sebelumnya dari langkah terakhir. Ganti localhost:5000 dengan nilai Server masuk dari registri kontainer Azure Anda. Anda dapat mengambil server Login dari halaman Gambaran Umum registri kontainer Anda di portal Azure. String akhir terlihat seperti <nama> registri.azurecr.io/csharpfunction.

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

Menambahkan informasi masuk registri

File lingkungan 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 untuk melihat apakah kredensial Anda sudah ada dalam file. Jika belum, tambahkan sekarang:

  1. Di penjelajah Visual Studio Code, buka .env file .
  2. Perbarui bidang dengan nilai nama pengguna dan kata sandi yang Anda salin dari registri kontainer Azure Anda. Anda dapat menemukannya lagi dengan masuk ke registri kontainer Anda di Azure dan mencari di halaman Kunci akses pengaturan>.
  3. Simpan file ini.

Catatan

Tutorial ini menggunakan kredensial masuk admin untuk Azure Container Registry, yang memudahkan pengembangan dan pengujian skenario. Saat Anda siap untuk skenario produksi, kami merekomendasikan opsi autentikasi dengan hak paling rendah seperti perwakilan layanan. Untuk informasi selengkapnya, lihat Kelola akses ke registri kontainer Anda.

Atur arsitektur target ke AMD64

Menjalankan modul Azure Functions di IoT Edge hanya didukung pada kontainer berbasis Linux AMD64. Arsitektur target default untuk Visual Studio Code adalah Linux AMD64, tetapi kami 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

Mari kita tambahkan beberapa kode tambahan sehingga modul CSharpFunction Anda memproses pesan di tepi sebelum meneruskannya ke IoT Hub.

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

  2. Ganti isi file CSharpFunction.cs dengan kode berikut. Kode ini menerima telemetri tentang keadaan sekelilingnya dan suhu mesin, dan hanya meneruskan pesan ke IoT Hub jika suhu alat berat berada di atas ambang batas 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 file.

Membangun dan mendorong solusi Azure IoT Edge

Di bagian sebelumnya, Buat solusi IoT Edge dan modifikasi CSharpFunction untuk memfilter pesan dengan suhu alat berat yang dilaporkan di bawah ambang batas yang dapat diterima. Sekarang Anda perlu membangun solusi sebagai gambar kontainer dan mendorongnya ke registri kontainer Anda.

  1. Buka terminal terintegrasi Visual Studio Code dengan memilih Lihat>Terminal.

  2. Masuk ke Docker dengan memasukkan perintah berikut di terminal. Masuk menggunakan nama pengguna, kata sandi, dan server masuk dari registri kontainer Azure Anda. Anda dapat mengambil 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 menyarankan 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 penjelajah Visual Studio Code, klik kanan file deployment.template.json dan pilih Bangun dan Dorong Solusi Azure IoT Edge.

    Perintah bangun dan dorong memulai tiga operasi. Pertama, hal ini membuat folder baru dalam solusi yang disebut konfigurasi yang menampung manifes penyebaran penuh, yang dibangun dari informasi dalam templat penyebaran dan file solusi lainnya. Kedua, perintah ini menjalankan docker build untuk membangun file 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 mungkin memakan waktu beberapa menit saat pertama kali, tetapi menjadi lebih cepat saat Anda menjalankan perintah berikutnya.

Verifikasi gambar kontainer Anda

Visual Studio Code menghasilkan pesan sukses saat gambar kontainer Anda didorong ke registri kontainer Anda. Jika Anda ingin mengonfirmasi keberhasilan operasi untuk diri Anda sendiri, Anda dapat melihat gambar di registri.

  1. Di portal Microsoft Azure, telusuri ke registri kontainer Azure Anda.
  2. Pilih Repositori Layanan>.
  3. Anda akan 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 bangun. Nilai-nilai ini diatur dalam module.jsfile di folder CSharpFunction.

Menyebarkan dan menjalankan solusi

Anda dapat menggunakan portal Azure untuk menyebarkan modul Fungsi Anda ke perangkat IoT Edge seperti yang Anda lakukan di mulai cepat. Anda juga dapat menyebarkan dan memantau modul dari dalam Visual Studio Code. Bagian berikut menggunakan Azure IoT Edge dan IoT Hub untuk Visual Studio Code yang tercantum dalam prasyarat. Instal ekstensi sekarang, jika Anda belum melakukannya.

  1. Di penjelajah Visual Studio Code, pada bagian Azure IoT Hub, luaskan Perangkat untuk melihat daftar perangkat IoT Anda.

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

  3. Telusuri ke folder solusi yang berisi CSharpFunction. Pilih file deployment.amd64.js di folder config, lalu klik Pilih Edge Deployment Manifest.

  4. Pada perangkat Anda, luaskan Modul untuk melihat daftar modul yang disebarkan dan berjalan. Pilih tombol refresh. Anda akan melihat CSharpFunction baru, berjalan bersama dengan modul SimulatedTemperatureSensor dan $edgeAgent dan $edgeHub.

    Mungkin perlu beberapa saat bagi modul baru untuk muncul. Perangkat IoT Edge Anda harus mengambil informasi penyebaran barunya dari IoT Hub, memulai kontainer baru, lalu melaporkan status kembali ke IoT Hub.

    Cuplikan layar memperlihatkan cara menampilkan modul yang disebarkan di Visual Studio Code.

Menampilkan data yang dihasilkan

Anda dapat melihat semua pesan yang tiba di hub IoT Anda dari semua perangkat Anda dengan menjalankan Azure IoT Hub: Mulai Memantau Titik Akhir Peristiwa Bawaan di palet perintah. Untuk berhenti memantau pesan, jalankan perintah Azure IoT Hub: Hentikan Memantau Titik Akhir Kejadian Bawaan di palet perintah.

Anda juga dapat memfilter tampilan untuk melihat semua pesan yang ada di IoT Hub Anda dari perangkat tertentu. Klik kanan perangkat di bagian Perangkat Azure IoT Hub>dari penjelajah Visual Studio Code dan pilih Mulai Memantau Titik Akhir Peristiwa Bawaan.

Membersihkan sumber daya

Jika berencana untuk melanjutkan ke artikel yang disarankan berikutnya, Anda dapat menyimpan sumber daya dan konfigurasi yang Anda buat dan menggunakannya kembali. Anda juga dapat tetap menggunakan perangkat IoT Edge yang sama sebagai perangkat uji.

Atau, Anda dapat menghapus konfigurasi lokal dan sumber daya Azure yang dibuat di artikel ini untuk menghindari biaya.

Menghapus sumber daya Azure

Menghapus sumber daya Azure dan grup sumber daya tidak dapat diubah. Pastikan Anda tidak menghapus grup atau sumber daya yang salah secara tidak sengaja. Jika Anda membuat hub IoT di dalam grup sumber daya yang sudah ada yang berisi sumber daya yang ingin Anda simpan, hapus hanya sumber daya hub IoT itu sendiri, bukan grup sumber daya.

Untuk menghapus sumber daya:

  1. Masuk ke portal Azure, lalu pilih Grup sumber daya.

  2. Pilih nama grup sumber daya yang berisi sumber daya pengujian IoT Edge Anda.

  3. Tinjau daftar sumber daya yang terdapat dalam grup sumber daya Anda. Jika ingin menghapus semuanya, Anda dapat memilih Hapus grup sumber daya. Jika hanya ingin menghapus beberapa sumber daya, Anda dapat mengklik setiap sumber daya untuk menghapusnya satu per satu.

Langkah berikutnya

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

Lanjutkan ke tutorial berikutnya untuk mempelajari cara lain bahwa Azure IoT Edge dapat membantu Anda mengubah data menjadi wawasan bisnis di tepi.