Ekstensi Dapr untuk Azure Functions

Penting

Ekstensi Dapr untuk Azure Functions saat ini dalam pratinjau dan hanya didukung di lingkungan Azure Container Apps.

Ekstensi Dapr untuk Azure Functions adalah sekumpulan alat dan layanan yang memungkinkan pengembang untuk dengan mudah mengintegrasikan Azure Functions dengan platform Distributed Application Runtime (Dapr).

Azure Functions adalah layanan komputasi berbasis peristiwa yang menyediakan serangkaian pemicu dan pengikatan untuk terhubung dengan layanan Azure lainnya dengan mudah. Dapr menyediakan serangkaian blok penyusun dan praktik terbaik untuk membangun aplikasi terdistribusi, termasuk layanan mikro, manajemen status, pub/sub olahpesan, dan banyak lagi.

Dengan integrasi antara Dapr dan Functions, Anda dapat membangun fungsi yang bereaksi terhadap peristiwa dari Dapr atau sistem eksternal.

Perbuatan Arah Jenis
Pemicu pada pengikatan input Dapr T/A daprBindingTrigger
Pemicu pada pemanggilan layanan Dapr T/A daprServiceInvocationTrigger
Pemicu pada langganan topik Dapr T/A daprTopicTrigger
Tarik dalam status Dapr untuk eksekusi Masuk daprState
Menarik rahasia Dapr untuk eksekusi Masuk daprSecret
Menyimpan nilai ke status Dapr Kehabisan daprState
Memanggil aplikasi Dapr lain Kehabisan daprInvoke
Menerbitkan pesan ke topik Dapr Kehabisan daprPublish
Mengirim nilai ke pengikatan output Dapr Kehabisan daprBinding

Menginstal ekstensi

Paket NuGet ekstensi yang Anda instal tergantung pada mode C# dalam proses atau proses pekerja terisolasi yang Anda gunakan di aplikasi fungsi Anda:

Ekstensi ini tersedia dengan menginstal paket NuGet, versi 0.17.0-preview01.

Menggunakan CLI .NET:

dotnet add package Microsoft.Azure.WebJobs.Extensions.Dapr --prerelease

Memasang bundel

Anda dapat menambahkan ekstensi pratinjau dengan menambahkan atau mengganti kode berikut dalam file Anda host.json :

{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle.Preview",
    "version": "[4.*, 5.0.0)"
  }
}

Pengaktifan Dapr

Anda dapat mengonfigurasi Dapr menggunakan berbagai [argumen dan anotasi][dapr-args] berdasarkan konteks runtime. Anda dapat mengonfigurasi Dapr untuk Azure Functions melalui dua saluran:

  • Templat Infrastruktur sebagai Kode (IaC), seperti dalam templat Bicep atau Azure Resource Manager (ARM)
  • Portal Microsoft Azure

Saat menggunakan templat IaC, tentukan argumen berikut di bagian properties definisi sumber daya aplikasi kontainer.

DaprConfig: {
  enabled: true
  appId: '${envResourceNamePrefix}-funcapp'
  appPort: 3001
  httpReadBufferSize: ''
  httpMaxRequestSize: ''
  logLevel: ''
  enableApiLogging: true
}

Nilai konfigurasi Dapr di atas dianggap sebagai perubahan cakupan aplikasi. Saat Anda menjalankan aplikasi kontainer dalam mode beberapa revisi, perubahan pada pengaturan ini tidak akan membuat revisi baru. Sebagai gantinya, semua revisi yang ada dimulai ulang untuk memastikan revisi dikonfigurasi dengan nilai terbaru.

Saat mengonfigurasi Dapr menggunakan portal Azure, navigasikan ke aplikasi fungsi Anda dan pilih Dapr dari menu sisi kiri:

Screenshot demonstrating where to find Dapr enablement for a Function App in the Azure portal.

Port dapr dan listener

Saat Anda memicu fungsi dari Dapr, ekstensi mengekspos port 3001 secara otomatis untuk mendengarkan permintaan masuk dari sidecar Dapr.

Penting

Port 3001 hanya diekspos dan didengarkan jika pemicu Dapr ditentukan dalam aplikasi fungsi. Saat menggunakan Dapr, sidecar menunggu untuk menerima respons dari port yang ditentukan sebelum menyelesaikan instansiasi. Jangan tentukan dapr.io/port anotasi atau --app-port kecuali Anda memiliki pemicu. Melakukannya dapat mengunci aplikasi Anda dari sidecar Dapr.

Jika Anda hanya menggunakan pengikatan input dan output, port 3001 tidak perlu diekspos atau ditentukan.

Secara default, ketika Azure Functions mencoba berkomunikasi dengan Dapr, Azure Functions memanggil Dapr melalui port yang diselesaikan dari variabel DAPR_HTTP_PORTlingkungan . Jika variabel tersebut null, variabel tersebut default ke port 3500.

Anda dapat mengambil alih alamat Dapr yang digunakan oleh pengikatan input dan output dengan mengatur DaprAddress properti di function.json untuk pengikatan (atau atribut). Secara default, ia menggunakan http://localhost:{DAPR_HTTP_PORT}.

Aplikasi fungsi masih mengekspos port dan titik akhir lain untuk hal-hal seperti pemicu HTTP, yang secara lokal default ke 7071, tetapi dalam kontainer, default ke 80.

Jenis pengikatan

Jenis pengikatan yang didukung untuk .NET bergantung pada versi ekstensi dan mode eksekusi C#, yang dapat menjadi salah satu hal berikut:

Pustaka kelas dalam proses adalah kompilasi fungsi #C yang berjalan pada proses yang sama seperti runtime Functions.

Ekstensi Dapr mendukung jenis parameter sesuai dengan tabel di bawah ini.

Mengikat Jenis parameter
Pemicu Dapr daprBindingTrigger
daprServiceInvocationTrigger
daprTopicTrigger
Input Dapr daprState
daprSecret
Output Dapr daprState
daprInvoke
daprPublish
daprBinding

Untuk contoh penggunaan jenis ini, lihat repositori GitHub untuk ekstensi.

Mencoba Ekstensi Dapr untuk Azure Functions

Pelajari cara menggunakan Ekstensi Dapr untuk Azure Functions melalui sampel yang disediakan.

Sampel Deskripsi
Mulai Cepat Mulai menggunakan Pengikatan Dapr Pub/sub dan HttpTrigger.
Dapr Kafka Pelajari cara menggunakan Ekstensi Dapr Azure Functions dengan komponen Kafka bindings Dapr.
.NET Dalam proses Pelajari cara menggunakan model dalam proses Azure Functions untuk berintegrasi dengan beberapa komponen Dapr di .NET, seperti Pemanggilan Layanan, Pub/sub, Pengikatan, dan Manajemen Status.
.NET Terisolasi Integrasikan dengan komponen Dapr di .NET menggunakan model eksekusi Azure Functions out-of-proc (OOP).

Mencoba Ekstensi Dapr untuk Azure Functions

Pelajari cara menggunakan Ekstensi Dapr untuk Azure Functions melalui sampel yang disediakan.

Sampel Deskripsi
Java Functions Pelajari cara menggunakan Ekstensi Dapr Azure Functions menggunakan Java.

Mencoba Ekstensi Dapr untuk Azure Functions

Pelajari cara menggunakan Ekstensi Dapr untuk Azure Functions melalui sampel yang disediakan.

Sampel Deskripsi
Mulai Cepat Mulai menggunakan Pengikatan Dapr Pub/sub dan HttpTrigger.
Dapr Kafka Pelajari cara menggunakan Ekstensi Dapr Azure Functions dengan komponen Kafka bindings Dapr.
JavaScript Jalankan aplikasi fungsi JavaScript Dapr dan integrasikan dengan Pemanggilan Layanan Dapr, Pub/sub, Pengikatan, dan Manajemen Status menggunakan Azure Functions.

Mencoba Ekstensi Dapr untuk Azure Functions

Pelajari cara menggunakan Ekstensi Dapr untuk Azure Functions melalui sampel yang disediakan.

Sampel Deskripsi
Fungsi PowerShell Pelajari cara menggunakan Ekstensi Dapr Azure Functions dengan PowerShell.

Mencoba Ekstensi Dapr untuk Azure Functions

Pelajari cara menggunakan Ekstensi Dapr untuk Azure Functions melalui sampel yang disediakan.

Sampel Deskripsi
Dapr Kafka Pelajari cara menggunakan Ekstensi Dapr Azure Functions dengan komponen Kafka bindings Dapr.
Python v1 Jalankan aplikasi Python berukuran Dapr dan gunakan model pemrograman Azure Functions Python v1 untuk berintegrasi dengan komponen Dapr.
Python v2 Luncurkan aplikasi Dapr menggunakan model pemrograman Azure Functions Python v2 untuk diintegrasikan dengan komponen Dapr.

Pemecahan Masalah

Bagian ini menjelaskan cara memecahkan masalah yang dapat terjadi saat menggunakan ekstensi Dapr untuk Azure Functions.

Pastikan Dapr diaktifkan di lingkungan Anda

Jika Anda menggunakan pengikatan dan pemicu Dapr di Azure Functions, dan Dapr tidak diaktifkan di lingkungan Anda, Anda mungkin menerima pesan kesalahan: Dapr sidecar isn't present. Please see (https://aka.ms/azure-functions-dapr-sidecar-missing) for more information. Untuk mengaktifkan Dapr di lingkungan Anda:

  • Jika Azure Function Anda disebarkan di Azure Container Apps, lihat Instruksi pengaktifan Dapr untuk ekstensi Dapr untuk Azure Functions.

  • Jika Azure Function Anda disebarkan di Kubernetes, verifikasi bahwa konfigurasi YAML penyebaran Anda memiliki anotasi berikut:

    annotations:
      ...
      dapr.io/enabled: "true"
      dapr.io/app-id: "functionapp"
      # You should only set app-port if you are using a Dapr trigger in your code.
      dapr.io/app-port: "<DAPR_APP_PORT>"
      ...
    
  • Jika Anda menjalankan Azure Function secara lokal, jalankan perintah berikut untuk memastikan Anda menjalankan aplikasi fungsi dengan Dapr:

    dapr run --app-id functionapp --app-port <DAPR_APP_PORT>  --components-path <COMPONENTS_PATH> -- func host start 
    

Memverifikasi nilai port aplikasi dalam konfigurasi Dapr

Ekstensi Dapr untuk Azure Functions memulai server HTTP pada port 3001 secara default. Anda dapat mengonfigurasi port ini menggunakan DAPR_APP_PORT variabel lingkungan.

Jika Anda memberikan nilai port aplikasi yang salah saat menjalankan aplikasi Azure Functions, Anda mungkin menerima pesan kesalahan: The Dapr sidecar is configured to listen on port {portInt}, but the app server is running on port {appPort}. This may cause unexpected behavior. For more information, visit [this link](https://aka.ms/azfunc-dapr-app-config-error). Untuk mengatasi pesan kesalahan ini:

  1. Di pengaturan Dapr aplikasi kontainer Anda:

    • Jika Anda menggunakan pemicu Dapr dalam kode Anda, verifikasi bahwa port aplikasi diatur ke 3001 atau ke nilai DAPR_APP_PORT variabel lingkungan.

    • Jika Anda tidak menggunakan pemicu Dapr dalam kode Anda, verifikasi bahwa port aplikasi tidak diatur. Seharusnya kosong.

  2. Verifikasi bahwa Anda memberikan nilai port aplikasi yang benar dalam konfigurasi Dapr.

    • Jika Anda menggunakan Azure Container Apps, tentukan port aplikasi di Bicep:

      DaprConfig: {
         ...
         appPort: <DAPR_APP_PORT>
         ...
      }
      
    • Jika Anda menggunakan lingkungan Kubernetes, atur dapr.io/app-port anotasi:

      annotations:
         ...
         dapr.io/app-port: "<DAPR_APP_PORT>"
         ...
      
    • Jika Anda mengembangkan secara lokal, verifikasi bahwa Anda mengatur --app-port saat menjalankan aplikasi fungsi dengan Dapr:

      dapr run --app-id functionapp --app-port <DAPR_APP_PORT> --components-path <COMPONENTS_PATH> -- func host start 
      

Langkah berikutnya

Pelajari selengkapnya tentang Dapr.