Tutorial: Menyebarkan Azure Functions sebagai modul - Azure IoT Edge

Berlaku untuk:IoT Edge 1.1 tanda centang IoT Edge 1.1 IoT Edge 1.2 tanda centang IoT Edge 1.2 IoT Edge 1.3 tanda centang IoT Edge 1.3

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, pelajari cara:

  • Gunakan Visual Studio Code untuk membuat Azure Function.
  • Gunakan VS 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 tutorial: menahapkan 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, Anda harus melalui tutorial sebelumnya untuk menyiapkan lingkungan pengembangan Anda untuk pengembangan kontainer Linux: Mengembangkan modul IoT Edge menggunakan kontainer Linux. Dengan menyelesaikan tutorial tersebut, Anda harus memiliki prasyarat berikut:

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

Buat proyek fungsi

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

Membuat proyek baru

Membuat templat solusi C# yang dapat Anda kustomisasi dengan kode Anda sendiri.

  1. Buka Visual Studio Code di mesin pengembangan Anda.

  2. Pilih Tampilkan>Palet Perintah untuk membuka palet perintah Visual Studio Code.

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

    Bidang Nilai
    Memilih folder Pilih lokasi di komputer pengembangan Anda untuk Visual Studio Code guna membuat file solusi.
    Beri nama solusi Masukkan nama deskriptif untuk solusi Anda, seperti FunctionSolution, atau terima default-nya.
    Pilih templat modul Pilih Azure Functions - C# .
    Beri nama modul Beri nama modul Anda CSharpFunction.
    Sediakan repositori gambar Docker untuk modul Repositori gambar mencakup nama registri kontainer dan nama gambar kontainer Anda. Gambar kontainer Anda sudah terisi dari langkah terakhir. Ganti localhost:5000 dengan nilai Server masuk dari registri kontainer Azure Anda. Anda dapat mengambil Server masuk dari halaman Gambaran umum registri kontainer di portal Azure. String akhir terlihat seperti <nama> registri.azurecr.io/CSharpFunction.

    Menyediakan repositori gambar Docker

Menambahkan informasi masuk registri

File lingkungan menyimpan informasi masuk untuk repositori kontainer Anda dan membagikannya dengan runtime Azure IoT Edge. Runtime memerlukan info masuk ini untuk menarik gambar privat Anda ke perangkat IoT Edge.

Ekstensi IoT Edge mencoba menarik info masuk registri kontainer dari Azure dan mengisinya dalam file lingkungan. Periksa untuk melihat apakah info masuk Anda sudah disertakan. Jika belum, tambahkan sekarang:

  1. Di penjelajah Visual Studio Code, buka file .env.
  2. Perbarui bidang dengan nilai nama pengguna dan kata sandi yang Anda salin dari registri kontainer Azure Anda.
  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 Mengelola akses ke registri kontainer Anda.

Atur arsitektur target ke AMD64

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

  1. Buka palet perintah dan cari Azure IoT Edge: Atur Platform Target Default untuk Solusi Edge, atau pilih ikon pintasan di bilah samping di bagian bawah jendela.

  2. Di palet perintah, pilih arsitektur target AMD64 dari daftar opsi.

Memperbarui modul dengan kode kustom

Tambahkan beberapa kode lagi agar modul memproses pesan di tepi sebelum meneruskannya ke IoT Hub Anda.

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

  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. Menyimpan 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 Tampilan>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 Microsoft 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 informasi selengkapnya, lihat referensi masuk docker.

  3. Di penjelajah Visual Studio Code, klik kanan file deployment.template.json, lalu pilih Bangun dan Dorong Solusi IoT Edge.

    Perintah bangun dan kirim akan 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 untuk pertama kali, tetapi 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.
  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 Microsoft Azure untuk menyebarkan modul Function ke perangkat IoT Edge seperti yang Anda lakukan di panduan mulai cepat. Anda juga dapat menyebarkan dan memantau modul dari dalam Visual Studio Code. Bagian berikut menggunakan Azure IoT Tools 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, perluas 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, perluas Modul untuk melihat daftar modul yang disebarkan dan berjalan. Klik 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.

    Lihat modul yang disebarkan di Visual Studio Code

Menampilkan data yang dihasilkan

Anda dapat melihat semua pesan yang masuk di IoT Hub Anda dengan menjalankan Azure IoT Hub: Mulai 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 dan pilih Mulai Memantau Titik Akhir Kejadian Bawaan.

Untuk berhenti memantau pesan, jalankan perintah Azure IoT Hub: Hentikan Memantau Titik Akhir Kejadian Bawaan di palet perintah.

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 Azure IoT Edge yang sama sebagai perangkat uji.

Atau, Anda dapat menghapus konfigurasi lokal dan sumber daya Azure yang Anda buat di artikel ini agar tidak dikenai biaya.

Menghapus sumber daya Azure

Menghapus sumber daya Azure dan grup sumber daya tidak dapat diubah. Pastikan Anda tidak menghapus grup sumber daya 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 Microsoft 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.