Bagikan melalui


Mengembangkan Fungsi Azure menggunakan Visual Studio

Visual Studio menyediakan cara untuk mengembangkan, menguji, dan menyebarkan fungsi pustaka kelas C# ke Azure. Jika pengalaman ini adalah pengalaman pertama Anda dengan Azure Functions, lihat Gambaran umum Azure Functions.

Untuk memulai dengan segera, pertimbangkan untuk menyelesaikan panduan memulai cepat Functions untuk Visual Studio.

Artikel ini menyediakan informasi terperinci tentang cara menggunakan Visual Studio untuk mengembangkan fungsi pustaka kelas C# dan menerbitkannya ke Azure. Ada dua model untuk mengembangkan fungsi pustaka kelas C#: model pekerja yang terisolasi dan model dalam proses.

Anda membaca versi model pekerja terisolasi dari artikel ini. Anda dapat memilih model pilihan Anda di bagian atas artikel.

Anda membaca artikel versi model yang sedang dalam proses. Anda dapat memilih model pilihan Anda di bagian atas artikel.

Kecuali dinyatakan lain, prosedur dan contoh yang ditampilkan adalah untuk Visual Studio 2022. Untuk informasi selengkapnya tentang rilis Visual Studio 2022, lihat catatan rilis atau catatan rilis versi pratinjau.

Prasyarat

  • Visual Studio 2022, termasuk paket pengembangan Azure.

  • Sumber daya lain yang Anda butuhkan, seperti akun Azure Storage, dibuat di langganan Anda selama proses penerbitan.

  • Jika Anda tidak memiliki akun Azure, buat akun gratis sebelum memulai.

Membuat proyek Azure Functions

Templat proyek Azure Functions di Visual Studio membuat proyek pustaka kelas C# yang bisa Anda terbitkan ke aplikasi fungsi di Azure. Aplikasi fungsi memungkinkan Anda mengelompokkan fungsi sebagai unit logis untuk pengelolaan, penyebaran, penskalaan, dan berbagi sumber daya dengan lebih mudah.

  1. Dari menu Visual Studio, pilih File>Proyek>Baru.

  2. Dalam dialog Buat proyek baru , masukkan fungsi di kotak pencarian, pilih templat Azure Functions , lalu pilih Berikutnya.

  3. Dalam dialog Konfigurasikan proyek baru Anda , untuk Nama proyek, masukkan nama untuk proyek Anda, lalu pilih Berikutnya. Nama aplikasi fungsi harus valid sebagai namespace layanan C#, jadi jangan gunakan garis bawah, tanda hubung, atau karakter non-alfanumerik lainnya.

  4. Dalam dialog Informasi tambahan , ambil tindakan yang tercantum dalam tabel berikut ini:

    Pengaturan Tindakan Deskripsi
    Pekerja fungsi Pilih .NET 8.0 Terisolasi (Dukungan Jangka Panjang). Visual Studio membuat proyek fungsi yang berjalan dalam proses pekerja yang terisolasi. Proses pekerja terisolasi juga mendukung versi lain dari .NET dan .NET Framework yang tidak menawarkan dukungan jangka panjang (LTS). Untuk informasi selengkapnya, lihat Ikhtisar versi runtime Azure Functions.
    Fungsi Pilih Pemicu http. Visual Studio membuat fungsi yang dipicu oleh permintaan HTTP.
    Menggunakan Azurite untuk akun penyimpanan runtime (AzureWebJobsStorage) Centang kotak ini. Karena aplikasi fungsi di Azure memerlukan akun penyimpanan, akun tersebut akan ditetapkan atau dibuat saat Anda memublikasikan proyek Anda ke Azure. Pemicu HTTP tidak menggunakan string koneksi akun Penyimpanan. Semua jenis pemicu lainnya memerlukan string koneksi akun Penyimpanan yang valid.
    Tingkat otorisasi Pilih Anonim. Saat Anda menggunakan pengaturan otorisasi ini, klien mana pun dapat memicu fungsi yang dibuat tanpa memberikan kunci. Konfigurasi ini memudahkan pengujian fungsi baru Anda. Untuk informasi selengkapnya, lihat Tingkat otorisasi.

    Cuplikan layar dialog Informasi tambahan Visual Studio yang memperlihatkan pengaturan yang dikonfigurasi seperti versi .NET terisolasi untuk pekerja Functions.

    Pengaturan Tindakan Deskripsi
    Pekerja fungsi Pilih .NET 8.0 Dalam Proses (Dukungan Jangka Panjang). Visual Studio membuat proyek fungsi yang berjalan dalam proses dengan versi 4.x dari runtime Functions. Untuk informasi selengkapnya, lihat Ikhtisar versi runtime Azure Functions.
    Fungsi Pilih Pemicu http. Visual Studio membuat fungsi yang dipicu oleh permintaan HTTP.
    Menggunakan Azurite untuk akun penyimpanan runtime (AzureWebJobsStorage) Centang kotak ini. Karena aplikasi fungsi di Azure memerlukan akun penyimpanan, akun tersebut akan ditetapkan atau dibuat saat Anda memublikasikan proyek Anda ke Azure. Pemicu HTTP tidak menggunakan string koneksi akun Penyimpanan. Semua jenis pemicu lainnya memerlukan string koneksi akun Penyimpanan yang valid.
    Tingkat otorisasi Pilih Anonim Saat Anda menggunakan pengaturan otorisasi ini, klien mana pun dapat memicu fungsi yang dibuat tanpa memberikan kunci. Konfigurasi ini memudahkan pengujian fungsi baru Anda. Untuk informasi selengkapnya, lihat Tingkat otorisasi.

    Cuplikan layar dialog Informasi tambahan Visual Studio yang memperlihatkan pengaturan yang dikonfigurasi seperti versi .NET dalam proses untuk pekerja Functions.

    Pastikan Anda mengatur Tingkat otorisasi ke Anonim. Jika Anda memilih tingkat Fungsi default, Anda diharuskan untuk menyertakan kunci fungsi dalam permintaan untuk mengakses endpoint fungsi Anda.

  5. Pilih Buat untuk membuat proyek fungsi dan fungsi pemicu HTTP.

Setelah Anda membuat proyek Functions, templat proyek membuat proyek C#, menginstal Microsoft.Azure.Functions.Worker dan Microsoft.Azure.Functions.Worker.Sdk paket NuGet, serta mengatur kerangka kerja target.

Setelah Anda membuat proyek Functions, templat proyek membuat proyek C#, menginstal Microsoft.NET.Sdk.Functions paket NuGet, dan mengatur kerangka kerja target.

Proyek baru ini memiliki beberapa file berikut:

  • host.json: File ini menyediakan cara bagi Anda untuk mengonfigurasi host Functions. Pengaturan ini berlaku saat dijalankan secara lokal maupun di Azure. Untuk informasi selengkapnya, lihat referensi host.json.

  • local.settings.json: File ini mempertahankan pengaturan yang Anda gunakan saat menjalankan fungsi secara lokal. Pengaturan ini tidak digunakan saat aplikasi Anda berjalan di Azure. Untuk informasi selengkapnya, lihat Bekerja dengan pengaturan aplikasi secara lokal.

    Penting

    Karena file local.settings.json dapat berisi rahasia, Anda harus mengecualikannya dari kontrol sumber proyek Anda. Dalam dialog Properti untuk file ini, pastikan pengaturan Salin ke Direktori Output diatur ke Salin jika lebih baru.

Untuk informasi selengkapnya, lihat Struktur proyek di panduan pekerja yang terisolasi.

Untuk informasi selengkapnya, lihat Proyek pustaka kelas Functions

Bekerja dengan pengaturan aplikasi secara lokal

Saat aplikasi fungsi Anda berjalan di Azure, pengaturan yang diperlukan oleh fungsi Anda disimpan dienkripsi di pengaturan aplikasi. Selama pengembangan lokal, pengaturan ini ditambahkan ke dalam koleksi Values dalam file local.settings.json. File local.settings.json juga menyimpan pengaturan yang digunakan oleh alat pengembangan lokal.

Elemen dalam koleksi Values di file local.settings.json proyek Anda dimaksudkan untuk mencerminkan elemen di pengaturan aplikasi aplikasi fungsi Anda di Azure.

Visual Studio tidak secara otomatis mengunggah pengaturan di local.settings.json saat Anda menerbitkan proyek. Untuk memastikan bahwa pengaturan ini juga ada pada aplikasi fungsi Anda di Azure, unggah setelah Anda menerbitkan proyek Anda. Untuk informasi selengkapnya, lihat Pengaturan aplikasi Functions. Nilai-nilai dalam kumpulan ConnectionStrings tidak dipublikasikan.

Kode Anda juga dapat membaca nilai pengaturan aplikasi fungsi sebagai variabel lingkungan. Untuk informasi selengkapnya, lihat Variabel lingkungan.

Mengonfigurasikan proyek untuk pengembangan lokal

Runtime Functions menggunakan akun penyimpanan secara internal. Selama pengembangan, Anda dapat menggunakan akun Storage yang valid untuk akun internal ini, atau Anda dapat menggunakan emulator Azurite.

Untuk semua jenis pemicu selain HTTP dan webhook, Anda perlu mengatur nilai Values.AzureWebJobsStorage kunci dalam file local.settings.json :

  • Untuk akun Storage, atur nilai ke string koneksi akun penyimpanan Anda.
  • Untuk emulator, atur nilainya ke UseDevelopmentStorage=true.

Jika Anda menggunakan emulator, ubah pengaturan ini ke string koneksi akun penyimpanan aktual sebelum penyebaran. Untuk informasi selengkapnya, lihat Emulator penyimpanan lokal.

Untuk mengatur string koneksi akun penyimpanan, lakukan langkah-langkah berikut:

  1. Masuk ke portal Microsoft Azure, lalu buka akun penyimpanan Anda.

  2. Pilih Keamanan +> jaringan. Di bawah key1, salin nilai String koneksi .

  3. Di proyek Visual Studio Anda, buka file local.settings.json . Atur nilai AzureWebJobsStorage kunci ke string koneksi yang Anda salin.

  4. Ulangi langkah sebelumnya untuk menambahkan kunci unik ke array Values bagi koneksi lain yang diperlukan oleh fungsi Anda.

Menambahkan fungsi ke proyek Anda

Dalam fungsi pustaka kelas C#, pengikatan yang digunakan fungsi ditentukan dengan menerapkan atribut dalam kode. Saat membuat pemicu fungsi dari templat yang disediakan, atribut pemicu akan diterapkan untuk Anda.

  1. Di Penjelajah Solusi, klik kanan simpul proyek Anda dan pilih Azure Baru.

  2. Dalam dialog Tambahkan Item Baru , pilih Azure Function, lalu pilih Tambahkan.

  3. Pilih pemicu, lalu atur properti pengikatan yang diperlukan. Jika Anda memilih pemicu layanan Penyimpanan dan ingin mengonfigurasi koneksi, pilih kotak centang untuk mengonfigurasi koneksi pemicu. Contoh berikut menunjukkan pengaturan untuk membuat fungsi pemicu Queue Storage.

    Cuplikan layar dialog Fungsi Baru Azure untuk pemicu antrean, dengan nama string koneksi disetel ke QueueStorage dan antrean disetel ke myqueue-items.

  4. Pilih Tambahkan. Jika Anda memilih kotak centang untuk mengonfigurasi koneksi penyimpanan di langkah sebelumnya, halaman Sambungkan ke dependensi akan muncul. Pilih emulator penyimpanan Azurite atau Azure Storage, lalu pilih Berikutnya.

    • Jika Anda memilih emulator penyimpanan Azurite, halaman Sambungkan ke Emulator Storage Azurite akan muncul. Ikuti langkah-langkah berikut:
      1. Pilih Selanjutnya.
      2. Pada halaman Ringkasan perubahan , pilih Selesai. Visual Studio mengonfigurasi dependensi dan membuat kelas pemicu.
    • Jika Anda memilih Azure Storage, halaman Sambungkan ke Azure Storage akan muncul. Ikuti langkah-langkah berikut:
      1. Pilih akun penyimpanan, lalu pilih Berikutnya. Visual Studio mencoba menyambungkan ke akun Azure Anda dan mengambil endpoint.
      2. Pilih Selanjutnya.
      3. Pada halaman Ringkasan perubahan , pilih Selesai. Visual Studio mengonfigurasi dependensi dan membuat kelas pemicu.

    Contoh pemicu ini menggunakan pengaturan aplikasi untuk koneksi penyimpanan dengan kunci bernama QueueStorage. Kunci ini, disimpan dalam file local.settings.json, baik mereferensikan emulator Azurite atau Akun Storage.

  5. Periksa kelas yang baru ditambahkan. Misalnya, kelas C# berikut mewakili fungsi pemicu Queue Storage dasar:

    Metode Run() dikaitkan dengan Function. Atribut ini menunjukkan bahwa metode tersebut adalah titik masuk untuk fungsi.

    using System;
    using Azure.Storage.Queues.Models;
    using Microsoft.Azure.Functions.Worker;
    using Microsoft.Extensions.Logging;
    
    namespace Company.Function;
    
    public class QueueTriggerCSharp
    {
        private readonly ILogger<QueueTriggerCSharp> _logger;
    
        public QueueTriggerCSharp(ILogger<QueueTriggerCSharp> logger)
        {
            _logger = logger;
        }
    
        [Function(nameof(QueueTriggerCSharp))]
        public void Run([QueueTrigger("PathValue", Connection = "ConnectionValue")] QueueMessage message)
        {
            _logger.LogInformation("C# Queue trigger function processed: {messageText}", message.MessageText);
        }
    }
    

    Metode statis Run() dikaitkan dengan FunctionName. Atribut ini menunjukkan bahwa metode tersebut adalah titik masuk untuk fungsi.

    using System;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Host;
    using Microsoft.Extensions.Logging;
    
    namespace Company.Function
    {
        public class QueueTriggerCSharp
        {
            [FunctionName("QueueTriggerCSharp")]
            public void Run([QueueTrigger("PathValue", Connection = "ConnectionValue")]string myQueueItem, ILogger log)
            {
                log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
            }
        }
    }
    

Atribut khusus pengikatan diterapkan pada setiap parameter pengikatan yang diberikan ke metode titik masuk. Atribut mengambil informasi pengikatan sebagai parameter.

Dalam kode sebelumnya, atribut QueueTrigger diterapkan pada parameter pertama, yang menunjukkan fungsi pemicu Queue Storage. Nama antrean dan nama pengaturan string koneksi diteruskan sebagai parameter ke atribut QueueTrigger. Di kelas Anda:

  • Parameter nama antrean harus cocok dengan nama antrean yang Anda gunakan di langkah sebelumnya untuk membuat pemicu, seperti myqueue-items.
  • Nama pengaturan string koneksi harus cocok dengan yang Anda gunakan di langkah sebelumnya untuk membuat pemicu, seperti QueueStorage.

Untuk informasi selengkapnya, lihat Pemicu penyimpanan Azure Queue untuk Azure Functions.

Gunakan prosedur sebelumnya untuk menambahkan lebih banyak fungsi ke proyek aplikasi fungsi Anda. Setiap fungsi dalam proyek dapat memiliki pemicu yang berbeda, tetapi fungsi harus memiliki satu pemicu yang tepat. Untuk informasi selengkapnya, lihat Pemicu dan pengikatan Azure Functions.

Menambahkan pengikatan

Seperti halnya pemicu, pengikatan input dan output ditambahkan ke fungsi Anda sebagai atribut pengikatan. Untuk menambahkan pengikatan ke fungsi, lakukan langkah-langkah berikut:

  1. Pastikan Anda mengonfigurasi proyek untuk pengembangan lokal.

  2. Tambahkan paket ekstensi NuGet yang sesuai untuk setiap pengikatan tertentu. Untuk persyaratan paket NuGet terkait pengikatan, lihat artikel referensi untuk pengikatan. Misalnya, untuk persyaratan paket untuk pemicu Azure Event Hubs, lihat Pemicu dan pengikatan Azure Event Hubs untuk Azure Functions.

  3. Gunakan perintah berikut di Package Manager Console untuk menginstal paket tertentu:

    Install-Package Microsoft.Azure.Functions.Worker.Extensions.<BINDING_TYPE> -Version <TARGET_VERSION>
    
    Install-Package Microsoft.Azure.WebJobs.Extensions.<BINDING_TYPE> -Version <TARGET_VERSION>
    

    Dalam kode ini, ganti <BINDING_TYPE> dengan nama spesifik ekstensi pengikatan, dan ganti <TARGET_VERSION> dengan versi paket tertentu, seperti 4.0.0. Versi yang valid tercantum di halaman paket individual di NuGet.org.

  4. Jika ada pengaturan aplikasi yang dibutuhkan pengikatan, tambahkan ke kumpulan Values pada file pengaturan lokal.

    Fungsi tersebut menggunakan nilai-nilai ini ketika dijalankan secara lokal. Saat fungsi berjalan di aplikasi fungsi di Azure, fungsi ini menggunakan pengaturan aplikasi fungsi. Visual Studio memudahkan penerbitan pengaturan lokal ke Azure.

  5. Tambahkan atribut pengikatan yang sesuai ke metode tanda tangan. Dalam kode berikut, pesan antrean memicu fungsi Run. Pengikatan output kemudian membuat pesan antrean baru dengan teks yang sama dalam antrean yang berbeda.

     public class QueueTrigger
    {
        private readonly ILogger _logger;
    
        public QueueTrigger(ILoggerFactory loggerFactory)
        {
            _logger = loggerFactory.CreateLogger<QueueTrigger>();
        }
    
        [Function("CopyQueueMessage")]
        [QueueOutput("myqueue-items-destination", Connection = "QueueStorage")]
        public string Run([QueueTrigger("myqueue-items-source", Connection = "QueueStorage")] string myQueueItem)
        {
            _logger.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
            return myQueueItem;
        }
    }
    

    Atribut QueueOutput mendefinisikan pengikatan pada metode . Untuk beberapa pengikatan output, Anda menempatkan atribut ini pada properti string dari objek yang dikembalikan. Untuk informasi selengkapnya, lihat Beberapa pengikatan output.

    public static class SimpleExampleWithOutput
    {
        [FunctionName("CopyQueueMessage")]
        public static void Run(
            [QueueTrigger("myqueue-items-source", Connection = "QueueStorage")] string myQueueItem, 
            [Queue("myqueue-items-destination", Connection = "QueueStorage")] out string myQueueItemCopy,
            ILogger log)
        {
            log.LogInformation($"CopyQueueMessage function processed: {myQueueItem}");
            myQueueItemCopy = myQueueItem;
        }
    }
    

    Atribut Queue pada out parameter menentukan pengikatan output.

    Koneksi ke Queue Storage diperoleh dari pengaturan QueueStorage. Untuk informasi selengkapnya, lihat artikel referensi untuk pengikatan khusus.

Untuk daftar lengkap pengikatan data yang didukung oleh Azure Functions, lihat Pengikatan data yang didukung. Untuk contoh skenario ini yang lebih lengkap, lihat Menyambungkan fungsi ke Azure Storage menggunakan Visual Studio.

Jalankan fungsi secara lokal

Anda dapat menggunakan Azure Functions Core Tools untuk menjalankan proyek Functions di komputer pengembangan lokal Anda. Saat Anda memilih F5 untuk men-debug proyek Functions, host Functions lokal (func.exe) mulai mendengarkan di port lokal (biasanya 7071). Setiap titik akhir fungsi yang dapat dipanggil ditulis pada output, dan Anda dapat menggunakannya untuk menguji fungsi Anda. Untuk informasi selengkapnya, lihat Mengembangkan Azure Functions secara lokal menggunakan Core Tools. Anda diminta untuk menginstal alat ini saat pertama kali memulai fungsi dari Visual Studio Code.

Penting

Dimulai dengan versi 4.0.6517 dari Core Tools, proyek model dalam proses harus mereferensikan versi 4.5.0 atau yang lebih baru dari Microsoft.NET.Sdk.Functions. Jika Anda menggunakan versi yang lebih lama, func start perintah akan menghasilkan kesalahan.

Untuk memulai fungsi Anda di Visual Studio dalam mode debug, lakukan langkah-langkah berikut:

  1. Pilih F5. Jika diminta, terima permintaan dari Visual Studio untuk mengunduh dan menginstal Azure Functions Core Tools. Anda mungkin juga perlu mengaktifkan pengecualian firewall sehingga alat dapat menangani permintaan HTTP.

  2. Saat proyek berjalan, uji kode Anda dengan cara yang sama seperti Anda menguji fungsi yang disebarkan.

    Saat Anda menjalankan Visual Studio di dalam mode debug, titik henti akan tercapai seperti yang diharapkan.

Untuk skenario pengujian yang lebih rinci yang menggunakan Visual Studio, lihat Menguji fungsi, nanti di artikel ini.

Menerbitkan ke Azure

Saat Anda menerbitkan proyek Functions ke Azure, Visual Studio menggunakan penyebaran zip untuk menyebarkan file proyek. Jika memungkinkan, Anda juga harus memilih Jalankan dari file paket sehingga proyek berjalan dalam paket penyebaran (.zip). Untuk informasi selengkapnya, lihat Menjalankan fungsi Anda dari file paket di Azure.

Jangan sebarkan ke Functions dengan menggunakan Web Deploy (msdeploy).

Gunakan langkah-langkah berikut untuk menerbitkan proyek Anda ke aplikasi fungsi di Azure:

  1. Di Penjelajah Solusi, klik kanan proyek lalu pilih Terbitkan.

  2. Pada halaman Terbitkan , buat pilihan berikut:

    • Pada Target, pilih Azure, lalu pilih Berikutnya.
    • Pada Target tertentu, pilih Aplikasi Fungsi Azure, lalu pilih Berikutnya.
    • Pada instans Functions, pilih Buat baru.

    Cuplikan layar halaman Terbitkan. Di bagian instans Functions, grup sumber daya terlihat, dan Buat baru disorot.

  3. Buat instans baru dengan menggunakan nilai yang ditentukan dalam tabel berikut:

    Pengaturan Nilai Deskripsi
    Nama Nama unik global Nama harus mengidentifikasi aplikasi fungsi baru Anda secara unik. Terima nama yang disarankan atau masukkan nama baru. Karakter berikut valid: a-z, , 0-9dan -.
    Nama langganan Nama langganan Anda Aplikasi fungsi dibuat dalam langganan Azure. Terima langganan default atau pilih langganan yang berbeda dari daftar.
    Grup sumber daya Nama grup sumber daya Anda Aplikasi fungsi dibuat dalam grup sumber daya. Pilih Baru untuk membuat grup sumber daya baru. Anda juga dapat memilih grup sumber daya yang ada dari daftar.
    Tipe Rencana Konsumsi Fleksibel Saat Anda memublikasikan proyek ke aplikasi fungsi yang berjalan dalam paket Konsumsi Flex, Anda mungkin hanya membayar untuk pelaksanaan aplikasi fungsi Anda. Paket hosting lainnya dapat dikenakan biaya yang lebih tinggi.
    PENTING:
    Saat membuat paket Konsumsi Flex, Anda harus terlebih dahulu memilih paket Layanan Aplikasi lalu memilih ulang Konsumsi Flex untuk menghapus masalah dengan kotak dialog.
    Sistem operasi Linux Paket Konsumsi Flex saat ini memerlukan Linux.
    Tempat Lokasi layanan aplikasi Pilih lokasi di wilayah Azure yang didukung oleh paket Konsumsi Flex. Saat wilayah yang tidak didukung dipilih, tombol Buat berwarna abu-abu.
    Ukuran memori instans 2048 Ukuran memori instans mesin virtual tempat aplikasi berjalan hanya berlaku untuk paket Konsumsi Flex.
    Azure Storage Akun penyimpanan tujuan umum Runtime Functions memerlukan akun penyimpanan. Pilih Baru untuk mengonfigurasi akun penyimpanan serba guna. Anda juga dapat menggunakan akun yang sudah ada yang memenuhi persyaratan akun penyimpanan.
    Application Insights Instans Application Insights Anda harus mengaktifkan integrasi Application Insights untuk aplikasi fungsi Anda. Pilih Baru untuk membuat instans baru, baik di ruang kerja Analitik Log baru atau yang sudah ada. Anda juga dapat menggunakan instance yang ada.

    Cuplikan layar dialog Buat Aplikasi Fungsi baru. Bidang untuk nama, langganan, grup sumber daya, paket, dan pengaturan lainnya diisi.

  4. Pilih Buat untuk membuat aplikasi fungsi dan sumber daya terkait di Azure. Status pembuatan sumber daya ditampilkan di sudut kiri bawah jendela.

  5. Pilih Selesai. Jendela Kemajuan pembuatan profil publikasi muncul. Saat profil dibuat, pilih Tutup.

  6. Pada halaman terbitkan profil, pilih Terbitkan untuk menyebarkan paket yang berisi file proyek Anda ke aplikasi fungsi baru Anda di Azure.

    Saat penyebaran selesai, URL akar aplikasi fungsi di Azure ditampilkan di halaman terbitkan profil.

  7. Pada halaman terbitkan profil, buka bagian Hosting . Pilih elipsis (...), lalu pilih Buka di portal Microsoft Azure. Fitur aplikasi baru sumber daya Azure dibuka di portal Azure.

    Cuplikan layar halaman terbitkan profil. Di bagian Hosting, menu pintasan elipsis terbuka, dan Buka di portal Microsoft Azure disorot.

Pengaturan fungsi aplikasi

Visual Studio tidak mengunggah pengaturan aplikasi secara otomatis saat Anda menerbitkan proyek Anda. Jika Anda menambahkan pengaturan ke file local.settings.json , Anda juga harus menambahkannya ke aplikasi fungsi di Azure.

Cara term mudah untuk mengunggah pengaturan yang diperlukan ke aplikasi fungsi Anda di Azure adalah dengan mengelolanya di Visual Studio. Pada halaman terbitkan profil, buka bagian Hosting . Pilih elipsis (...), lalu pilih Kelola pengaturan Azure App Service.

Cuplikan layar bagian terbitkan halaman profil Hosting. Menu pintasan elipsis terbuka, dan Kelola pengaturan Azure App Service disorot.

Saat Anda membuat pilihan, dialog Pengaturan aplikasi terbuka untuk aplikasi fungsi. Anda dapat menggunakan dialog ini untuk menambahkan pengaturan aplikasi atau mengubah yang sudah ada.

Cuplikan layar dialog Pengaturan aplikasi yang memperlihatkan nilai lokal dan jarak jauh untuk berbagai pengaturan, dan kontrol untuk menambahkan dan mengedit nilai.

Untuk setiap pengaturan, Nilai lokal adalah nilai dalam file local.settings.json , dan nilai Jarak Jauh adalah nilai dalam aplikasi fungsi di Azure.

  • Untuk membuat pengaturan aplikasi, pilih Tambahkan pengaturan.
  • Untuk menyalin nilai pengaturan dari bidang Lokal ke bidang Jarak Jauh , pilih Sisipkan nilai dari Lokal.

Perubahan yang tertunda ditulis ke file pengaturan lokal dan aplikasi fungsi saat Anda memilih OK.

Catatan

Secara default, file local.settings.json tidak diperiksa ke kontrol sumber. Akibatnya, jika Anda mengkloning proyek Functions lokal dari kontrol sumber, proyek tidak memiliki file local.settings.json . Anda perlu membuat file local.settings.json secara manual di akar proyek sehingga dialog Pengaturan aplikasi berfungsi seperti yang diharapkan.

Anda juga dapat mengelola pengaturan aplikasi dengan salah satu cara berikut:

Pemecahan masalah jarak jauh

Untuk men-debug aplikasi fungsi dari jarak jauh, Anda harus menerbitkan konfigurasi debug proyek Anda. Anda juga perlu mengaktifkan debugging jarak jauh di aplikasi fungsi Anda di Azure.

Bagian ini mengasumsikan bahwa konfigurasi debug telah diterbitkan ke aplikasi fungsi Anda.

Pertimbangan melakukan debugging dari jarak jauh

  • Debugging jarak jauh tidak disarankan pada layanan produksi.
  • Untuk menggunakan debugging jarak jauh, Anda harus menghosting aplikasi fungsi Anda dalam paket Premium atau App Service.
  • Debugging jarak jauh saat ini hanya didukung saat menjalankan aplikasi C# Anda di Windows.
  • Jika Anda mengaktifkan fitur Just My Code di Visual Studio, nonaktifkan. Untuk petunjuknya, lihat Mengaktifkan atau menonaktifkan Just My Code.
  • Hindari jeda panjang pada titik henti saat Anda menggunakan debugging jarak jauh. Ketika proses dihentikan lebih dari beberapa menit, Azure memperlakukannya sebagai proses yang tidak responsif dan mematikannya.
  • Saat Anda menelusuri kesalahan, server mengirim data ke Visual Studio, yang dapat memengaruhi biaya penggunaan bandwidth. Untuk informasi tentang tarif bandwidth, lihat Kalkulator harga.
  • Remote debugging akan dimatikan secara otomatis di aplikasi fungsi Anda setelah 48 jam. Setelah itu, Anda perlu mengaktifkan kembali penelusuran kesalahan jarak jauh.

Melampirkan debugger

Saat Anda men-debug aplikasi proses pekerja yang terisolasi, Saat ini Anda perlu melampirkan debugger jarak jauh ke proses .NET terpisah. Beberapa langkah konfigurasi lainnya juga diperlukan.

Untuk melampirkan debugger jarak jauh ke aplikasi fungsi yang berjalan dalam proses terpisah dari host Functions, lakukan langkah-langkah berikut:

  1. Pada halaman terbitkan profil, buka bagian Hosting . Pilih elipsis (...), lalu pilih Lampirkan debugger.

    Visual Studio terhubung ke aplikasi fungsi Anda dan mengaktifkan debugging jarak jauh jika belum diaktifkan.

    Catatan

    Karena debugger jarak jauh tidak dapat tersambung ke proses host, pesan kesalahan mungkin muncul. Bagaimanapun, debugger lokal tidak dapat mengakses titik henti Anda atau menyediakan cara bagi Anda untuk memeriksa variabel atau menelusuri kode.

  2. Pada menu Debug Visual Studio, pilih Lampirkan ke Proses.

  3. Dalam dialog Lampirkan ke Proses , lakukan langkah-langkah berikut:

    1. Di samping Jenis koneksi, pilih Microsoft Azure App Services.
    2. Di samping Target koneksi, pilih Temukan.
  4. Dalam dialog Lampirkan ke Proses Azure , cari dan pilih aplikasi fungsi Anda, lalu pilih OK.

  5. Jika diminta, izinkan akses Visual Studio melalui firewall lokal Anda.

  6. Kembali ke dialog Lampirkan ke Proses , pilih Perlihatkan proses untuk semua pengguna. Pilih dotnet.exe, lalu pilih Lampirkan.

    Cuplikan layar dialog Lampirkan ke Proses. Jenis koneksinya adalah Microsoft Azure App Services. Dalam tabel proses, dotnet.exe dipilih.

Setelah operasi selesai, Anda terhubung dengan kode pustaka kelas C# yang berjalan dalam proses kerja yang terisolasi. Pada titik ini, Anda dapat men-debug aplikasi fungsi seperti biasa.

Untuk melampirkan debugger jarak jauh ke aplikasi fungsi yang berjalan dalam proses dengan host Functions, lakukan langkah-langkah berikut.

Pada halaman terbitkan profil, buka bagian Hosting . Pilih elipsis (...), lalu pilih Lampirkan debugger.

Visual Studio terhubung ke aplikasi fungsi Anda dan mengaktifkan debugging jarak jauh jika belum diaktifkan. Visual Studio juga menemukan dan melampirkan debugger ke proses host untuk aplikasi. Pada titik ini, Anda dapat men-debug aplikasi fungsi seperti biasa.

Setelah menyelesaikan debugging, Anda harus mematikan debug jarak jauh.

Menonaktifkan penelusuran kesalahan jarak jauh

Setelah Anda menyelesaikan penelusuran kesalahan jarak jauh kode Anda, Anda harus menonaktifkan penelusuran kesalahan jarak jauh di Azure portal. Debugging jarak jauh secara otomatis dimatikan setelah 48 jam, jika Anda lupa.

  1. Pada halaman terbitkan profil, buka bagian Hosting . Pilih elipsis (...), lalu pilih Buka di portal Microsoft Azure. Portal Microsoft Azure terbuka pada aplikasi fungsi tempat proyek Anda dideploy.

  2. Di aplikasi fungsi, pilihKonfigurasi>, lalu buka tab Pengaturan umum. Di samping Penelusuran kesalahan jarak jauh, pilih Nonaktif. Pilih Simpan, lalu pilih Lanjutkan.

Setelah aplikasi fungsi dimulai ulang, Anda tidak dapat lagi terhubung dari jarak jauh ke proses jarak jauh Anda. Anda dapat menggunakan tab yang sama ini di portal Microsoft Azure untuk mengaktifkan penelusuran kesalahan jarak jauh di luar Visual Studio.

Memantau fungsi

Cara yang disarankan untuk memantau fungsi Anda adalah dengan mengintegrasikan aplikasi fungsi Anda dengan Application Insights. Anda harus mengaktifkan integrasi ini saat membuat aplikasi fungsi selama penerbitan Visual Studio.

Jika integrasi tidak disiapkan selama penerbitan karena alasan tertentu, Anda masih harus mengaktifkan integrasi Application Insights untuk aplikasi fungsi Anda di Azure.

Untuk informasi selengkapnya tentang menggunakan Application Insights untuk pemantauan, lihat Memantau eksekusi di Azure Functions.

Menguji fungsi

Bagian ini menjelaskan cara membuat proyek model dalam proses C# yang dapat Anda uji dengan menggunakan xUnit, alat pengujian unit sumber terbuka untuk .NET.

Langkah 1: Pengaturan

Ikuti langkah-langkah ini untuk mengonfigurasi lingkungan, termasuk proyek dan fungsi aplikasi, yang diperlukan untuk mendukung pengujian Anda:

  1. Di Visual Studio, buat proyek Azure Functions bernama Functions.

  2. Buat fungsi HTTP dari templat:

    1. Di Penjelajah Solusi, klik kanan proyek Functions , lalu pilih Tambahkan>Fungsi Azure Baru.
    2. Dalam dialog Tambahkan Item Baru , pilih Azure Function, lalu pilih Tambahkan.
    3. Pilih Pemicu Http, lalu pilih Tambahkan.
    4. Ganti nama kelas baru MyHttpTrigger.
  3. Buat fungsi timer dari templat:

    1. Di Penjelajah Solusi, klik kanan proyek Functions , lalu pilih Tambahkan>Fungsi Azure Baru.
    2. Dalam dialog Tambahkan Item Baru , pilih Azure Function, lalu pilih Tambahkan.
    3. Pilih Pemicu timer, lalu pilih Tambahkan.
    4. Ganti nama kelas baru MyTimerTrigger.
  4. Buat aplikasi Uji xUnit dalam solusi:

    1. Di Penjelajah Solusi, klik kanan solusi yang berisi proyek Functions Anda, lalu pilih Tambahkan>Proyek Baru.
    2. Pilih templat xUnit Test Project , lalu pilih Berikutnya.
    3. Beri nama proyek Functions.Tests.
  5. Hapus file pengujian default dari proyek Functions.Tests .

  6. Gunakan NuGet untuk menambahkan referensi dari aplikasi pengujian ke Microsoft.AspNetCore.Mvc. Anda dapat menggunakan Package Manager Console, atau Anda dapat mengambil langkah-langkah berikut:

    1. Di Penjelajah Solusi, klik kanan proyek Functions.Tests , lalu pilih Kelola Paket NuGet.
    2. Cari dan instal Microsoft.AspNetCore.Mvc.
  7. Di aplikasi Functions.Tests , tambahkan referensi ke aplikasi Functions :

    1. Di Penjelajah Solusi, klik kanan proyek Functions.Tests , lalu pilih Tambahkan>Referensi Proyek.
    2. Pilih proyek Functions , lalu pilih OK.

Langkah 2: Membuat kelas pengujian

Di bagian ini, Anda membuat kelas yang Anda gunakan untuk menjalankan pengujian otomatis.

Setiap fungsi menggunakan implementasi ILogger untuk menangani pengelogan pesan. Dalam beberapa pengujian, tidak ada pesan yang dicatat, atau tidak masalah bagaimana pengelogan diterapkan. Pengujian lain perlu mengevaluasi pesan yang dicatat untuk menentukan apakah pengujian harus lulus.

  1. Buat kelas di proyek Functions.Tests bernama NullScope dan tambahkan kode berikut. Kelas ini menyediakan ruang lingkup tiruan. Di langkah selanjutnya, Anda membuat implementasi ILogger yang menggunakan cakupan ini.

    using System;
    
    namespace Functions.Tests
    {
        public class NullScope : IDisposable
        {
            public static NullScope Instance { get; } = new NullScope();
    
            private NullScope() { }
    
            public void Dispose() { }
        }
    }
    
  2. Buat kelas di proyek Functions.Tests bernama ListLogger dan tambahkan kode berikut. Kelas ini mempertahankan daftar pesan internal untuk dievaluasi selama pengujian. Untuk mengimplementasikan antarmuka yang diperlukan ILogger, kelas menggunakan cakupan tiruan dari kelas NullScope. Kasus uji meneruskan cakupan tiruan ke kelas ListLogger.

    using Microsoft.Extensions.Logging;
    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace Functions.Tests
    {
        public class ListLogger : ILogger
        {
            public IList<string> Logs;
    
            public IDisposable BeginScope<TState>(TState state) => NullScope.Instance;
    
            public bool IsEnabled(LogLevel logLevel) => false;
    
            public ListLogger()
            {
                this.Logs = new List<string>();
            }
    
            public void Log<TState>(LogLevel logLevel,
                                    EventId eventId,
                                    TState state,
                                    Exception exception,
                                    Func<TState, Exception, string> formatter)
            {
                string message = formatter(state, exception);
                this.Logs.Add(message);
            }
        }
    }
    

    Kelas ListLogger mengimplementasikan anggota berikut, seperti yang ditentukan oleh antarmuka ILogger:

    • BeginScope: Lingkup menambahkan konteks ke pencatatan log Anda. Dalam hal ini, pengujian menunjuk ke instans statis pada NullScope kelas untuk memungkinkan pengujian berfungsi.
    • IsEnabled: Nilai default false disediakan.
    • Log: Metode ini menggunakan fungsi yang disediakan formatter untuk memformat pesan. Metode kemudian menambahkan teks yang dihasilkan ke koleksi Logs.

    Koleksi Logs adalah suatu instans dari List<string> dan telah diinisialisasi dalam konstruktor.

  3. Buat file kode di proyek Functions.Tests bernama LoggerTypes.cs dan tambahkan kode berikut:

    namespace Functions.Tests
    {
        public enum LoggerTypes
        {
            Null,
            List
        }
    }
    

    Enumerasi ini menentukan jenis pencatat yang digunakan pengujian.

  4. Buat kelas di proyek Functions.Tests bernama TestFactory dan tambahkan kode berikut:

    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Http.Internal;
    using Microsoft.Extensions.Logging;
    using Microsoft.Extensions.Logging.Abstractions;
    using Microsoft.Extensions.Primitives;
    using System.Collections.Generic;
    
    namespace Functions.Tests
    {
        public class TestFactory
        {
            public static IEnumerable<object[]> Data()
            {
                return new List<object[]>
                {
                    new object[] { "name", "Bernardo" },
                    new object[] { "name", "Ananya" },
                    new object[] { "name", "Vlad" }
    
                };
            }
    
            private static Dictionary<string, StringValues> CreateDictionary(string key, string value)
            {
                var qs = new Dictionary<string, StringValues>
                {
                    { key, value }
                };
                return qs;
            }
    
            public static HttpRequest CreateHttpRequest(string queryStringKey, string queryStringValue)
            {
                var context = new DefaultHttpContext();
                var request = context.Request;
                request.Query = new QueryCollection(CreateDictionary(queryStringKey, queryStringValue));
                return request;
            }
    
            public static ILogger CreateLogger(LoggerTypes type = LoggerTypes.Null)
            {
                ILogger logger;
    
                if (type == LoggerTypes.List)
                {
                    logger = new ListLogger();
                }
                else
                {
                    logger = NullLoggerFactory.Instance.CreateLogger("Null Logger");
                }
    
                return logger;
            }
        }
    }
    

    Kelas TestFactory mengimplementasikan anggota berikut:

    • Data: Properti ini mengembalikan kumpulan data sampel IEnumerable . Pasangan kunci-nilai mewakili nilai yang diteruskan ke dalam string kueri.
    • CreateDictionary: Metode ini menerima pasangan kunci-nilai sebagai argumen. Ini mengembalikan instans Dictionary baru yang digunakan untuk membuat instans QueryCollection untuk mewakili nilai string kueri.
    • CreateHttpRequest: Metode ini membuat permintaan HTTP yang diinisialisasi dengan parameter string kueri yang diberikan.
    • CreateLogger: Metode ini mengembalikan implementasi ILogger yang digunakan untuk pengujian. Implementasi ILogger tergantung pada jenis pencatat yang ditentukan. Jika jenis daftar ditentukan, instans ListLogger akan melacak pesan-pesan yang dicatat dan tersedia untuk evaluasi dalam pengujian.
  5. Buat kelas di proyek Functions.Tests bernama FunctionsTests dan tambahkan kode berikut:

    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Logging;
    using Xunit;
    
    namespace Functions.Tests
    {
        public class FunctionsTests
        {
            private readonly ILogger logger = TestFactory.CreateLogger();
    
            [Fact]
            public async void Http_trigger_should_return_known_string()
            {
                var request = TestFactory.CreateHttpRequest("name", "Bernardo");
                var response = (OkObjectResult)await MyHttpTrigger.Run(request, logger);
                Assert.Equal("Hello, Bernardo. This HTTP triggered function executed successfully.", response.Value);
            }
    
            [Theory]
            [MemberData(nameof(TestFactory.Data), MemberType = typeof(TestFactory))]
            public async void Http_trigger_should_return_known_string_from_member_data(string queryStringKey, string queryStringValue)
            {
                var request = TestFactory.CreateHttpRequest(queryStringKey, queryStringValue);
                var response = (OkObjectResult)await MyHttpTrigger.Run(request, logger);
                Assert.Equal($"Hello, {queryStringValue}. This HTTP triggered function executed successfully.", response.Value);
            }
    
            [Fact]
            public void Timer_should_log_message()
            {
                var logger = (ListLogger)TestFactory.CreateLogger(LoggerTypes.List);
                new MyTimerTrigger().Run(null, logger);
                var msg = logger.Logs[0];
                Assert.Contains("C# Timer trigger function executed at", msg);
            }
        }
    }
    

    Kelas ini mengimplementasikan anggota berikut:

    • Http_trigger_should_return_known_string: Pengujian ini menggunakan nilai name=Bernardo string kueri untuk membuat permintaan ke fungsi HTTP. Pengujian ini memeriksa bahwa respons yang diharapkan dikembalikan.
    • Http_trigger_should_return_string_from_member_data: Pengujian ini menggunakan atribut xUnit untuk menyediakan data sampel ke fungsi HTTP.
    • Timer_should_log_message: Pengujian ini membuat instans ListLogger dan meneruskannya ke fungsi timer. Setelah fungsi berjalan, log diperiksa untuk memastikan pesan yang diharapkan ada.
  6. Untuk mengakses pengaturan aplikasi dalam pengujian Anda, Anda dapat menyuntikkan suatu implementasi dengan nilai variabel lingkungan yang disimulasikan ke dalam fungsi Anda.

Langkah 3: Jalankan pengujian

Untuk menjalankan pengujian di Visual Studio, pilih Lihat>Test Explorer. Di Test Explorer, pilih Jalankan>Semua Pengujian dalam Tampilan.

Cuplikan layar Visual Studio. Test Explorer menunjukkan bahwa lima tes lulus. Di Penjelajah Solusi, proyek Functions dan Functions.Test terlihat.

Langkah 4: Tes debug

Untuk men-debug pengujian, atur titik henti pada pengujian. Di Test Explorer, pilih Jalankan>Debug Eksekusi Terakhir.