Membangun Aplikasi Tanpa Server dengan Azure Functions dan Solusi .NET
Diterbitkan: 2023-09-21Komputasi tanpa server adalah model eksekusi cloud yang memungkinkan pengembang membangun dan menjalankan aplikasi dan layanan tanpa memikirkan server. Dengan tanpa server, aplikasi tidak bergantung pada menjaga server tetap berjalan — penyedia cloud secara dinamis mengelola alokasi dan penyediaan server. Hal ini memungkinkan pengembang untuk fokus pada pengkodean logika bisnis daripada manajemen server.
Microsoft Azure Functions adalah layanan komputasi tanpa server untuk membangun dan menghosting titik akhir web dan pekerjaan pemrosesan latar belakang tanpa harus menyediakan atau mengelola server. Dengan Azure Functions, Anda dapat menjalankan kode sesuai permintaan sebagai respons terhadap peristiwa tanpa harus menyediakan atau mengelola infrastruktur secara eksplisit. Dalam postingan blog ini, kita akan mempelajari cara membangun aplikasi tanpa server dengan Azure Functions menggunakan solusi .NET, termasuk memanfaatkan layanan Pengembangan ASP.NET .
Apa itu Fungsi Azure?
Azure Functions memungkinkan Anda menjalankan kode di cloud tanpa menyebarkan atau mengelola infrastruktur. Dengan Functions, Anda hanya menulis kode yang diperlukan untuk masalah yang dihadapi tanpa khawatir tentang pengelolaan server. Azure mengelola semua infrastruktur dan server untuk Anda.
Beberapa aspek utama dan manfaat Azure Functions:
- Berbasis peristiwa: Fungsi dipicu oleh peristiwa dari banyak layanan Azure dan pihak ketiga. Ini termasuk permintaan HTTP, pengatur waktu, antrean, API tanpa server, dan banyak lagi. Anda dapat menjalankan kode sebagai respons terhadap kejadian ini.
- Menskalakan secara otomatis: Azure mengelola dan menskalakan fungsi secara otomatis berdasarkan tingkat permintaan masuk dan beban pemrosesan. Anda tidak perlu menyediakan dan menskalakan server secara manual.
- Bayar per eksekusi: Anda hanya membayar sumber daya komputasi yang diperlukan untuk menjalankan kode Anda. Tidak ada biaya menganggur saat fungsi Anda tidak berjalan.
- Berbagai bahasa: Fungsi mendukung C#, JavaScript, Python, PowerShell, Java, dan lainnya. Anda dapat mengembangkan fungsi dalam bahasa pilihan Anda.
- Pengalaman tanpa server: Dengan Functions, Anda fokus pada penulisan kode dan membiarkan Azure menangani semua provisi, konfigurasi, dan manajemen server. Anda mendapatkan pengalaman tanpa server yang sesungguhnya.
Mengembangkan Fungsi .NET secara lokal
Untuk mengembangkan fungsi .NET secara lokal, Anda memerlukan Azure Functions Core Tools yang merupakan antarmuka baris perintah untuk mengembangkan, menguji, dan menyebarkan Azure Functions baik secara lokal maupun ke Azure.
Untuk menyiapkan lingkungan pengembangan:
- Instal .NET Core SDK versi terbaru
- Instal Alat Inti Fungsi Azure menggunakan dotnet tool install -g Microsoft.Azure.WebJobs.Script.WebHost
- Buat direktori untuk proyek aplikasi fungsi dan jalankan func init
- Ini akan menyusun proyek fungsi sampel dengan templat fungsi
Sekarang Anda dapat menambahkan kode fungsi, mengujinya secara lokal dan menerbitkannya ke Azure menggunakan func CLI. Tambahkan file run.csx untuk fungsi C# yang dipicu oleh HTTP:
Sumber {csharp}
Menyalin
#r “Newtonsoft.Json”
menggunakan Microsoft.AspNetCore.Mvc;
menggunakan Microsoft.Extensions.Primitives;
menggunakan Newtonsoft.Json;
menggunakan System.Net;
menggunakan System.Threading.Tasks;
Tugas async statis publik<IActionResult> Jalankan (permintaan HttpRequest, log ILogger)
{
log.LogInformation("Fungsi pemicu C# HTTP memproses permintaan.");
string nama = req.Query[“nama”];
string requestBody = menunggu StreamReader baru(req.Body).ReadToEndAsync();
data dinamis = JsonConvert.DeserializeObject(requestBody);
nama = nama ?? data?.nama;
nama kembalian!= null
? (ActionResult)OkObjectResult baru($”Halo, {name}”)
: new BadRequestObjectResult("Silakan berikan nama pada string kueri atau di badan permintaan");
}
Uji secara lokal dengan menjalankan func host start yang memulai fungsi gateway di localhost Anda. Sekarang Anda dapat memicunya menggunakan Tukang Pos atau browser dengan http://localhost:7071/api/HttpExample?name=John.
Memilih pemicu dan pengikatan Azure Functions
Azure Functions mendukung banyak sumber dan target peristiwa berbeda yang disebut pemicu dan pengikatan. Memilih pemicu dan pengikatan yang tepat itu penting berdasarkan kasus penggunaan Anda.
Beberapa pemicu umum di Functions adalah:
- Pemicu HTTP: Untuk membangun REST API dan titik akhir web. Kode dipicu oleh permintaan HTTP.
- Timer Trigger : Untuk pekerjaan terjadwal yang berjalan sesuai jadwal, misal setiap 5 menit.
- Pemicu Antrian: Untuk memproses pesan dari antrian penyimpanan.
- Pemicu Blob: Untuk bereaksi terhadap blob baru atau yang diperbarui di penyimpanan Azure Blob.
Binding memungkinkan fungsi berinteraksi dengan penyimpanan data dan layanan eksternal. Ikatan umum meliputi:
- Antrian Penyimpanan: Untuk mengeluarkan pesan ke antrian penyimpanan.
- Penyimpanan Blob: Untuk membaca dari dan menulis ke penyimpanan Azure Blob.
- Cosmos DB: Untuk menanyakan dan memodifikasi dokumen di layanan database Azure Cosmos DB.
- Service Bus: Untuk menangani pesan dari antrean dan topik Azure Service Bus.
Memilih pemicu dan pengikatan yang tepat membantu membangun solusi menyeluruh dengan mengintegrasikan berbagai fungsi dengan data dan layanan.
Menggunakan Fungsi Tahan Lama
Fungsi Tahan Lama memungkinkan penulisan fungsi stateful yang memungkinkan rangkaian operasi dilakukan dengan andal bahkan jika terjadi kegagalan atau restart. Ini memungkinkan Anda menyusun alur kerja yang berjalan lama sebagai mesin negara.
Misalnya, Anda bisa membangun alur kerja menggunakan Fungsi Tahan Lama yang terdiri dari:
- Fungsi orkestrator: Bertindak sebagai mesin negara yang mengoordinasikan pelaksanaan fungsi aktivitas dalam urutan yang benar.
- Fungsi aktivitas: Unit kerja independen kecil yang dapat disebut fungsi orkestrator.
Keuntungan menggunakan Fungsi Tahan Lama meliputi:
- Percobaan ulang yang andal: Fungsi Tahan Lama secara otomatis mencoba ulang fungsi aktivitas jika gagal.
- Panggilan asinkron: Fungsi orkestrator dapat menjalankan fungsi aktivitas secara asinkron dan menunggu hingga selesai.
- Pos pemeriksaan: Status diperiksa terus menerus sehingga alur kerja dapat dipulihkan bahkan setelah aplikasi dimulai ulang atau mengalami kegagalan.
Mari kita lihat alur kerja sederhana yang mengatur dua aktivitas:
Sumber {csharp}
Menyalin
[NamaFungsi(“Orkestrator”)]
RunOrchestrator Tugas async publik statis (
[OrchestrationTrigger] Konteks IDurableOrchestrationContext)
{
var output1 = menunggu konteks.CallActivityAsync<string>(“DotNetActivity”, “Halo”);
var output2 = menunggu konteks.CallActivityAsync<string>(“DotNetActivity”, output1);
// mengembalikan hasil
mengembalikan keluaran2;
}
[NamaFungsi(“DotNetActivity”)]
Tugas statis publik<string> Jalankan(
masukan string [Pemicu Aktivitas],
log ILogger)
{
log.LogInformation($”Fungsi DotNetActivity diproses: {input}”);
return Task.FromResult(input.ToUpper());
}
Fungsi Tahan Lama memungkinkan pemecahan proses kompleks menjadi alur kerja yang andal.
Praktik terbaik untuk pengembangan Azure Functions
Beberapa praktik terbaik yang harus diikuti untuk pengembangan Azure Functions:
- Gunakan injeksi ketergantungan: Ketergantungan Menyuntikkan layanan ke dalam fungsi untuk kemampuan pengujian yang lebih baik.
- Hindari proses yang berjalan lama: Fungsi dimaksudkan untuk menjalankan kode pada unit pemrosesan kecil. Jaga agar eksekusi kode tetap singkat.
- Gunakan tipe data yang tidak dapat diubah: Fungsi tidak memiliki kewarganegaraan, jadi hindari tipe data yang dapat diubah/efek samping yang dapat menyebabkan masalah.
- Penanganan kesalahan terpusat: Tambahkan logika penanganan kesalahan umum daripada menangani kesalahan satu per satu di mana saja.
- Pencatatan log terstruktur: Pencatatan log standar membantu proses debug, pemantauan, dan jalur audit.
- Pembatasan dan percobaan ulang: Tangani kesalahan pembatasan dengan menerapkan percobaan ulang dengan kemunduran eksponensial.
- Pembuatan versi: Pemicu, pengikatan, dan input/output versi yang kuat untuk menghindari perubahan yang dapat mengganggu.
- Pemantauan dan instrumentasi: Gunakan alat seperti Application Insights untuk pencatatan log, pemantauan kinerja, dan analisis penggunaan.
- Gunakan pengikatan konteks: Manfaatkan pengikatan konteks untuk mengakses hal-hal seperti pengaturan aplikasi tanpa ketergantungan tambahan.
Mengikuti praktik terbaik ini membantu membangun aplikasi tanpa server yang kuat, andal, dan dapat diskalakan dengan Azure Functions.
Menyebarkan fungsi ke Azure
Setelah fungsi siap, Anda dapat menyebarkannya ke Azure melalui Azure CLI, PowerShell, Visual Studio atau langsung dari CLI alat inti Azure Functions:
Menyalin
func aplikasi fungsi biru mempublikasikan <nama-aplikasi-fungsi>
Ini akan menerbitkan folder proyek fungsi ke Aplikasi Azure Function. Beberapa manfaat utama penerapan fungsi ke Azure meliputi:
- Penskalaan Otomatis – Fungsi menskalakan berdasarkan volume permintaan masuk atau pemicu waktu.
- Ketersediaan Tinggi – Beberapa instans di seluruh pusat data memberikan ketersediaan tinggi.
- Pemantauan & Pencatatan – Gunakan alat seperti Application Insights untuk memantau kinerja, kesalahan, dll.
- Platform Tanpa Server – Tidak ada server untuk disediakan/dikelola. Anda hanya fokus pada kode.
- Penerapan Berkelanjutan – Gunakan saluran CI/CD untuk penerapan otomatis pada perubahan kode.
Azure menangani semua infrastruktur, menghindari biaya menganggur, dan menyediakan platform tanpa server sepenuhnya untuk menjalankan aplikasi tanpa server dalam skala besar dengan andal.
Kesimpulan
Komputasi tanpa server dengan Azure Functions memungkinkan pengembang untuk fokus pada logika bisnis sambil memindahkan semua infrastruktur dan manajemen operasi ke Azure. Dukungan pengembangan .NET asli, termasuk opsi untuk Menyewa Pengembang Inti ASP.NET , memungkinkan pembuatan solusi tanpa server yang kuat dengan mudah di C#. Dengan pemicu, pengikatan, dan Fungsi Tahan Lama, pengembang dapat membangun arsitektur dan alur kerja berbasis peristiwa end-to-end sebagai fungsi tanpa status dan berstatus. Dikombinasikan dengan praktik terbaik, Azure Functions memungkinkan pembuatan dan penerapan aplikasi tanpa server ke cloud dengan kesederhanaan dan skala.