Membuat dan menguji Azure Function sederhana secara lokal dengan Visual Studio

Selesai

Pengguna dapat menulis, men-debug, dan menyebarkan Azure Function dari dalam portal Azure. Namun, menulis fungsi langsung dalam produksi, pementasan, atau lingkungan pengujian mungkin tidak cocok. Misalnya, menulis pengujian unit otomatis untuk Azure Functions, atau menggunakan penyebaran Azure Functions sesuai permintaan ke Function Apps di Azure. Biasanya, pengembang lebih suka menggunakan editor kode dan alat pengembangan daripada lingkungan yang disediakan oleh portal Azure. Visual Studio memungkinkan Anda mengembangkan dan mengelola kode Azure Functions menggunakan kode dan layanan lain dalam satu proyek.

Dalam skenario jam tangan mewah online, pengembang sudah terbiasa dengan Visual Studio 2022. Jadi, Anda memutuskan untuk menggunakan Visual Studio sebagai lingkungan pengembangan utama untuk membuat Azure Functions. Selain itu, Visual Studio menyediakan lingkungan yang sangat baik untuk menguji fungsi Anda secara lokal sebelum menyebarkannya ke Azure.

Di unit ini, Anda belajar menggunakan alat yang tersedia di Visual Studio untuk membangun dan menguji Azure Function di komputer lokal Anda.

Penting

Artikel ini mendukung fungsi pustaka kelas .NET yang berjalan dalam proses dengan runtime. Fungsi C# Anda juga dapat kehabisan proses dan diisolasi dari runtime Fungsi. Model proses pekerja yang terisolasi adalah satu-satunya cara untuk menjalankan versi aplikasi .NET dan .NET Framework non-LTS dalam versi runtime Functions saat ini. Untuk mempelajari lebih lanjut, lihat fungsi proses pekerja terisolasi .NET.

Ubah Instalasi Visual Studio

Pertama, mari kita siapkan Visual Studio dengan alat web dan cloud yang Anda butuhkan untuk lingkungan pengembangan Anda.

  1. Dengan Visual Studio 2022 diinstal secara lokal, buka Penginstal Visual Studio, dan pada Visual Studio Community 2022, pilih Ubah.

    Cuplikan Layar Alat Penginstal Visual Studio dengan Ubah disorot.

  2. Halaman Memodifikasi - Visual Studio muncul.

    Cuplikan layar tab Memodifikasi beban kerja Visual Studio Community 2022 dengan ASP.NET dan pengembangan web serta pengembangan Azure disorot.

  3. Pada tab Beban Kerja, pilih kotak centang Pengembangan ASP.NET dan Web dan Pengembangan Azure, lalu pilih Ubah.

  4. Di dialog verifikasi, pilih Ya. Halaman Alat Penginstal Visual Studio muncul dan menampilkan kemajuan paket yang diinstal.

Ekstensi Azure Functions Tools untuk Visual Studio

Alat Azure Functions adalah ekstensi Visual Studio yang memungkinkan Anda membuat, menguji, dan menyebarkan Azure Functions di lingkungan pengembangan lokal Anda. Untuk membuat Aplikasi Fungsi Azure baru dengan cepat, ekstensi ini menyediakan templat untuk Anda buat lalu menyebarkan fungsi langsung ke Azure dari Visual Studio.

Ekstensi Azure Functions dan Web Jobs Tools disertakan dalam Visual Studio 2022.

Azure Function App

Aplikasi fungsi menghosting satu atau beberapa fungsi. Ini menyediakan lingkungan dan runtime untuk kode fungsi Anda.

Fungsi dipicu oleh peristiwa daripada dipanggil langsung dari aplikasi. Anda menentukan jenis peristiwa yang memicu setiap fungsi di Azure Function App Anda. Acara yang tersedia meliputi:

  • Pemicu blob. Jenis fungsi ini berjalan saat file diunggah atau dimodifikasi di penyimpanan Azure Blob.
  • Pemicu Event Hub. Pemicu Azure Event Hubs menjalankan fungsi saat pusat aktivitas menerima pesan.
  • Pemicu Azure Cosmos DB. Pemicu ini berjalan saat dokumen ditambahkan ke, atau dimodifikasi pada database Azure Cosmos DB. Anda dapat menggunakan pemicu ini untuk mengintegrasikan Azure Cosmos DB dengan layanan lain. Misalnya, jika dokumen yang mewakili pesanan pelanggan ditambahkan ke database, Anda dapat menggunakan pemicu untuk mengirim salinan pesanan ke antrean untuk diproses.
  • Pemicu http. Pemicu HTTP menjalankan fungsi saat permintaan HTTP muncul di aplikasi web. Anda juga dapat menggunakan pemicu ini untuk menanggapi webhook. Webhook adalah callback yang terjadi ketika item yang dihosting oleh situs web dimodifikasi. Misalnya, Anda dapat membuat fungsi yang dipicu oleh webhook dari repositori GitHub saat item di repositori berubah.
  • Pemicu antrian. Pemicu ini akan memulai fungsi saat item baru ditambahkan ke Azure Storage Queue.
  • Pemicu Service Bus Queue. Pemicu ini menjalankan fungsi saat item baru ditambahkan ke Antrean Azure Service Bus.
  • Pemicu Service Bus Topic. Pemicu ini menjalankan fungsi sebagai respons terhadap pesan baru yang tiba pada Service Bus Topic.
  • Pemicu timer. Kejadian ini menjalankan fungsi secara berkala, mengikuti jadwal yang Anda tentukan.

Cuplikan layar memperlihatkan pemicu Azure Function tersedia, dengan Pemicu HTTP disorot.

Tabel berikut menunjukkan tingkat tertinggi .NET Core atau .NET Framework yang dapat Anda gunakan dengan versi Functions tertentu.

Versi runtime Functions Dalam proses Proses pekerja terisolasi
Functions 4.x .NET 6.0 .NET 6.0
.NET 7.0
.NET 8.0
.NET Framework 4.8
Functions 1.x .NET Framework 4.8 n/a

Azure Function App menyimpan informasi manajemen, kode, dan log di penyimpanan Azure. Untuk menyimpan data ini, Anda membuat Akun Penyimpanan. Akun penyimpanan harus mendukung penyimpanan Azure Blob, Antrian, File, dan Tabel; gunakan akun Azure Storage umum untuk tujuan ini. Anda menentukan akun penyimpanan mana yang akan digunakan untuk fungsi menggunakan dialog yang sebelumnya ditampilkan.

Fungsi dapat melakukan operasi istimewa atau sensitif. Fungsi yang dipicu oleh permintaan HTTP dapat diekspos secara publik. Anda mungkin perlu membatasi kemampuan untuk menjalankan fungsi ini ke grup pengguna yang dipilih. Anda melindungi fungsi dengan menentukan hak akses yang diperlukan untuk memicu fungsi. Fungsi yang dipicu oleh permintaan HTTP mendukung tiga tingkat hak akses:

  • Anonim. Tidak diperlukan autentikasi, dan pengguna mana pun dapat memicu fungsi tersebut.
  • Fungsi. Permintaan HTTP harus menyediakan kunci yang memungkinkan runtime Azure Function untuk mengotorisasi permintaan. Anda membuat kunci ini secara terpisah, dan Anda dapat mempertahankannya menggunakan portal Microsoft Azure.
  • Administrator. Mirip dengan Fungsi. Pengguna harus menentukan kunci dengan permintaan yang memicu fungsi. Perbedaannya adalah bahwa kuncinya adalah kunci admin. Kunci ini dapat digunakan untuk mengakses fungsi apa pun di aplikasi fungsi. Seperti halnya tombol fungsi, Anda membuat kunci ini secara terpisah.

Jika Anda membuat fungsi yang dipicu oleh peristiwa selain permintaan HTTP, Anda harus menyediakan string koneksi dan detail lain yang diperlukan agar aplikasi fungsi dapat mengakses sumber daya yang memicu peristiwa tersebut. Misalnya, jika Anda menulis fungsi yang dipicu oleh peristiwa Blob Storage, Anda harus menentukan string koneksi untuk akun penyimpanan Blob yang sesuai.

Struktur Azure Function

Azure Function diimplementasikan sebagai kelas statis. Kelas ini menyediakan metode statis, asinkron bernama Run, yang bertindak sebagai entri poin untuk kelas.

Parameter yang diteruskan ke Run metode ini memberikan konteks pemicunya. Jika ini adalah pemicu HTTP, fungsi menerima objek HttpRequest . Obyek ini memuat kop dan isi permintaan. Anda dapat mengakses data dalam permintaan menggunakan teknik yang sama yang tersedia di aplikasi HTTP apa pun. Atribut yang diterapkan ke fungsi ini menentukan persyaratan otorisasi (Anonim dalam hal ini), dan operasi HTTP tempat fungsi merespons (GET dan POST).

Contoh kode berikut yang dihasilkan oleh Visual Studio memeriksa untai (karakter) kueri yang disediakan sebagai bagian dari URL untuk permintaan dan mencari parameter yang disebut nama. Kode ini juga menggunakan StreamReader untuk mendeserialisasi isi permintaan, dan mencoba membaca nilai properti yang juga disebut nama dari permintaan. Jika nama ditemukan dalam string kueri atau isi permintaan, nilai nama dikembalikan dalam respons. Jika tidak, fungsi menghasilkan respons kesalahan dengan pesan: Silakan berikan nama pada string kueri atau di isi permintaan.

public static class Function1
{
    [FunctionName("Function1")]
    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"];

        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        dynamic data = JsonConvert.DeserializeObject(requestBody);
        name = name ?? data?.name;

        return name != null
            ? (ActionResult)new OkObjectResult($"Hello, {name}")
            : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
    }
}

Fungsi ini menampilkan nilai yang berisi data output dan hasil apa pun, dibungkus dalam objek IActionResult. Nilai dikembalikan dalam isi respons HTTP untuk permintaan.

Berbagai jenis pemicu menerima parameter input dan jenis tampilan yang berbeda. Contoh berikutnya menunjukkan kode yang dihasilkan untuk pemicu Blob. Dalam contoh ini, konten blob dikembalikan melalui objek Aliran, dan nama blob juga disediakan. Pemicu tidak mengembalikan data apa pun; tujuannya adalah untuk membaca dan memproses data dalam blob bernama.

public static class Function2
{
    [FunctionName("Function2")]
    public static void Run([BlobTrigger("samples-workitems/{name}", Connection = "xxxxxxxxxxxxxxxxxxxxxxx")]Stream myBlob, string name, ILogger log)
    {
        log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
    }
}

Dalam semua kasus, fungsi dilewatkan parameter ILogger . Fungsi ini dapat menggunakan parameter ini untuk menulis pesan log, yang ditulis aplikasi fungsi ke penyimpanan untuk analisis nanti.

Fungsi juga berisi metadata yang menentukan jenis pemicu, persyaratan keamanan, dan persyaratan informasi spesifik lainnya. Anda dapat mengubah metadata ini menggunakan HttpTrigger, BlobTrigger, atau atribut pemicu lainnya, seperti yang ditunjukkan dalam contoh. Atribut FunctionName yang mendahului fungsi adalah pengidentifikasi untuk fungsi yang digunakan oleh Aplikasi Fungsi. Nama ini tidak harus sama dengan nama fungsi, tetapi praktik yang baik untuk membuat mereka tetap sinkron untuk menghindari kebingungan.

Menguji Azure Function App secara lokal

Anda dapat menggunakan Visual Debugger untuk membuat dan menguji Azure Function App secara lokal. Untuk mengaktifkan debugger, tekan F5, atau pada menu Debug, pilih Mulai Debugging. Versi lokal Function Runtime dimulai. Fungsi Anda tersedia untuk pengujian. Contoh menunjukkan runtime hosting Function1, fungsi yang dipicu oleh peristiwa HTTP. URL menunjukkan endpoint tempat fungsi saat ini terpasang.

Cuplikan layar yang menunjukkan Runtime Azure Function - contoh 1.

Jika Anda membuka browser web dan mengunjungi URL ini, Anda memicu fungsi . Gambar berikut menunjukkan respons yang dihasilkan oleh permintaan HTTP GET yang tidak menyertakan isi. Anda dapat melihat pesan yang dihasilkan oleh kode yang mengembalikan objek BadRequestObjectResult dari fungsi.

Cuplikan layar yang menunjukkan Runtime Azure Function.

Jika Anda menyediakan string kueri yang menyertakan parameter nama , fungsi membaca dan memproses nilai.

Cuplikan layar yang menunjukkan Runtime Azure Function - contoh 2.

Saat kode berjalan, Anda akan melihat pesan pelacakan muncul di jendela Runtime Fungsi. Anda dapat menggunakan fitur debugging standar di Visual Studio jika perlu mengatur breakpoint dan memeriksa aliran kontrol dalam fungsi.