Azure İşlevleri için Dapr Uzantısı

Önemli

Azure İşlevleri için Dapr Uzantısı şu anda önizleme aşamasındadır ve yalnızca Azure Container Apps ortamlarında desteklenir.

Azure İşlevleri için Dapr Uzantısı, geliştiricilerin Azure İşlevleri Dağıtılmış Uygulama Çalışma Zamanı (Dapr) platformuyla kolayca tümleştirmesini sağlayan bir araç ve hizmet kümesidir.

Azure İşlevleri, diğer Azure hizmetlerine kolayca bağlanmak için bir dizi tetikleyici ve bağlama sağlayan olay temelli bir işlem hizmetidir. Dapr, mikro hizmetler, durum yönetimi, pub/sub mesajlaşması ve daha fazlası dahil olmak üzere dağıtılmış uygulamalar oluşturmaya yönelik bir dizi yapı taşları ve en iyi yöntemleri sağlar.

Dapr ve İşlevler arasındaki tümleştirmeyle, Dapr veya dış sistemlerden gelen olaylara tepki veren işlevler oluşturabilirsiniz.

Eylem Yön Tür
Dapr giriş bağlaması üzerinde tetikleyici Yok daprBindingTrigger
Bir Dapr hizmeti çağrısında tetikleme Yok daprServiceInvocationTrigger
Dapr konu aboneliğinde tetikleme Yok daprTopicTrigger
Yürütme için Dapr durumunu çekme In daprState
Yürütme için Dapr gizli dizilerini çekme In daprSecret
Bir değeri Dapr durumuna kaydetme Dışarı daprState
Başka bir Dapr uygulaması çağırma Dışarı daprInvoke
Dapr konusuna ileti yayımlama Dışarı daprPublish
Dapr çıkış bağlamasına değer gönderme Dışarı daprBinding

Uzantıyı yükleme

Yüklediğiniz NuGet uzantısı, işlev uygulamanızda kullandığınız C# moduna veya yalıtılmış çalışan işlemine bağlıdır:

Bu uzantı, NuGet paketi, sürüm 0.17.0-preview01 yüklenerek kullanılabilir.

.NET CLI'yi kullanma:

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

Paket yükleme

Dosyanıza host.json aşağıdaki kodu ekleyerek veya değiştirerek önizleme uzantısını ekleyebilirsiniz:

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

Dapr etkinleştirme

Dapr'ı, çalışma zamanı bağlamını temel alarak çeşitli [bağımsız değişkenler ve ek açıklamalar][dapr-args] kullanarak yapılandırabilirsiniz. Dapr'ı iki kanal aracılığıyla Azure İşlevleri için yapılandırabilirsiniz:

  • Bicep veya Azure Resource Manager (ARM) şablonlarında olduğu gibi Kod Olarak Altyapı (IaC) şablonları
  • Azure portal

IaC şablonu kullanırken, kapsayıcı uygulaması kaynak tanımının properties bölümünde aşağıdaki bağımsız değişkenleri belirtin.

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

Yukarıdaki Dapr yapılandırma değerleri uygulama kapsamı değişiklikleri olarak kabul edilir. Bir kapsayıcı uygulamasını birden çok düzeltme modunda çalıştırdığınızda, bu ayarlarda yapılan değişiklikler yeni bir düzeltme oluşturmaz. Bunun yerine, tüm mevcut düzeltmeler en güncel değerlerle yapılandırıldığından emin olmak için yeniden başlatılır.

Azure portalını kullanarak Dapr'ı yapılandırırken işlev uygulamanıza gidin ve sol taraftaki menüden Dapr'ı seçin:

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

Dapr bağlantı noktaları ve dinleyiciler

Dapr'dan bir işlevi tetiklerken uzantı, Dapr sepetten gelen istekleri dinlemek için bağlantı noktasını 3001 otomatik olarak kullanıma sunar.

Önemli

Bağlantı noktası 3001 yalnızca işlev uygulamasında bir Dapr tetikleyicisi tanımlandığında kullanıma sunulur ve dinlenilir. Dapr kullanılırken sepet, örneklemeyi tamamlamadan önce tanımlanan bağlantı noktasından yanıt almayı bekler. Ek açıklamayı tanımlamayındapr.io/port veya --app-port tetikleyiciniz olmadığı sürece. Bunun yapılması uygulamanızı Dapr sepetten kilitler.

Yalnızca giriş ve çıkış bağlamaları kullanıyorsanız bağlantı noktasının 3001 kullanıma sunulması veya tanımlanması gerekmez.

Varsayılan olarak, Azure İşlevleri Dapr ile iletişim kurmaya çalıştığında ortam değişkeninden DAPR_HTTP_PORTçözümlenen bağlantı noktası üzerinden Dapr'ı çağırır. Bu değişken null ise, varsayılan olarak bağlantı noktası 3500olur.

bağlama (veya özniteliği) için özelliğini function.json ayarlayarak DaprAddress giriş ve çıkış bağlamaları tarafından kullanılan Dapr adresini geçersiz kılabilirsiniz. Varsayılan olarak kullanır http://localhost:{DAPR_HTTP_PORT}.

İşlev uygulaması, http tetikleyicileri gibi yerel olarak varsayılan olan ancak kapsayıcıda varsayılan 707180değeri olan başka bir bağlantı noktasını ve uç noktayı kullanıma sunar.

Bağlama türleri

.NET için desteklenen bağlama türleri, aşağıdakilerden biri olabilecek uzantı sürümüne ve C# yürütme moduna bağlıdır:

İşlem içi sınıf kitaplığı, İşlevler çalışma zamanıyla aynı işlemde çalıştırılan derlenmiş bir C# işlevidir.

Dapr Uzantısı, aşağıdaki tabloya göre parametre türlerini destekler.

Bağlama Parametre türleri
Dapr tetikleyicisi daprBindingTrigger
daprServiceInvocationTrigger
daprTopicTrigger
Dapr girişi daprState
daprSecret
Dapr çıkışı daprState
daprInvoke
daprPublish
daprBinding

Bu türleri kullanan örnekler için uzantının GitHub deposuna bakın.

Azure İşlevleri için Dapr Uzantısı'nı deneyin

Sağlanan örnekler aracılığıyla Azure İşlevleri için Dapr Uzantısı'nı kullanmayı öğrenin.

Örnekler Açıklama
Hızlı Başlangıç Dapr Pub/sub bağlamasını ve HttpTriggerkullanmaya başlayın.
Dapr Kafka Kafka bağlamaları Dapr bileşeniyle Azure İşlevleri Dapr Uzantısını kullanmayı öğrenin.
.NET İşlemDe Service Invocation, Pub/sub, Bindings ve State Management gibi .NET'teki birden çok Dapr bileşeniyle tümleştirmek için Azure İşlevleri işlem içi modeli kullanmayı öğrenin.
.NET Yalıtılmış Azure İşlevleri kullanıma dışı (OOP) yürütme modelini kullanarak .NET'teki Dapr bileşenleriyle tümleştirme.

Azure İşlevleri için Dapr Uzantısı'nı deneyin

Sağlanan örnekler aracılığıyla Azure İşlevleri için Dapr Uzantısı'nı kullanmayı öğrenin.

Örnekler Açıklama
Java İşlevleri Java kullanarak Azure İşlevleri Dapr Uzantısını kullanmayı öğrenin.

Azure İşlevleri için Dapr Uzantısı'nı deneyin

Sağlanan örnekler aracılığıyla Azure İşlevleri için Dapr Uzantısı'nı kullanmayı öğrenin.

Örnekler Açıklama
Hızlı Başlangıç Dapr Pub/sub bağlamasını ve HttpTriggerkullanmaya başlayın.
Dapr Kafka Kafka bağlamaları Dapr bileşeniyle Azure İşlevleri Dapr Uzantısını kullanmayı öğrenin.
JavaScript Bir JavaScript Dapr işlev uygulaması çalıştırın ve Azure İşlevleri kullanarak Dapr Hizmeti Çağırma, Pub/sub, Bağlamalar ve Durum Yönetimi ile tümleştirin.

Azure İşlevleri için Dapr Uzantısı'nı deneyin

Sağlanan örnekler aracılığıyla Azure İşlevleri için Dapr Uzantısı'nı kullanmayı öğrenin.

Örnekler Açıklama
PowerShell İşlevleri PowerShell ile Azure İşlevleri Dapr Uzantısını kullanmayı öğrenin.

Azure İşlevleri için Dapr Uzantısı'nı deneyin

Sağlanan örnekler aracılığıyla Azure İşlevleri için Dapr Uzantısı'nı kullanmayı öğrenin.

Örnekler Açıklama
Dapr Kafka Kafka bağlamaları Dapr bileşeniyle Azure İşlevleri Dapr Uzantısını kullanmayı öğrenin.
Python v1 Bir Dapr-ized Python uygulaması çalıştırın ve Dapr bileşenleriyle tümleştirmek için Azure İşlevleri Python v1 programlama modelini kullanın.
Python v2 Dapr bileşenleriyle tümleştirmek için Azure İşlevleri Python v2 programlama modelini kullanarak bir Dapr uygulaması başlatın.

Sorun giderme

Bu bölümde, Azure İşlevleri için Dapr uzantısı kullanılırken oluşabilecek sorunların nasıl giderildiğini açıklanmaktadır.

Ortamınızda Dapr'ın etkinleştirildiğinden emin olun

Azure İşlevleri'de Dapr bağlamaları ve tetikleyicileri kullanıyorsanız ve Ortamınızda Dapr etkinleştirilmediyse şu hata iletisini alabilirsiniz: Dapr sidecar isn't present. Please see (https://aka.ms/azure-functions-dapr-sidecar-missing) for more information. Ortamınızda Dapr'ı etkinleştirmek için:

  • Azure İşleviniz Azure Container Apps'te dağıtıldıysa Azure İşlevleri için Dapr uzantısı için Dapr etkinleştirme yönergelerine bakın.

  • Azure İşleviniz Kubernetes'te dağıtıldıysa dağıtımınızın YAML yapılandırmasında aşağıdaki ek açıklamaların bulunduğunu doğrulayın:

    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>"
      ...
    
  • Azure İşlevinizi yerel olarak çalıştırıyorsanız, işlev uygulamasını Dapr ile çalıştırdığınızdan emin olmak için aşağıdaki komutu çalıştırın:

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

Dapr yapılandırmasında uygulama bağlantı noktası değerini doğrulama

Azure İşlevleri için Dapr uzantısı varsayılan olarak bağlantı noktasında 3001 bir HTTP sunucusu başlatır. Ortam değişkenini DAPR_APP_PORTkullanarak bu bağlantı noktasını yapılandırabilirsiniz.

bir Azure İşlevleri uygulamasını çalıştırırken yanlış bir uygulama bağlantı noktası değeri sağlarsanız şu hata iletisini alabilirsiniz: 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). Bu hata iletisini çözmek için:

  1. Kapsayıcı uygulamanızın Dapr ayarlarında:

    • Kodunuzda bir Dapr tetikleyicisi kullanıyorsanız, uygulama bağlantı noktasının ortam değişkeninin değerine DAPR_APP_PORT veya değerine ayarlandığını 3001 doğrulayın.

    • Kodunuzda Dapr tetikleyicisi kullanmıyorsanız uygulama bağlantı noktasının ayarlanmadığını doğrulayın. Bu kapsayıcı boş olmalıdır.

  2. Dapr yapılandırmasında doğru uygulama bağlantı noktası değerini sağladığınızı doğrulayın.

    • Azure Container Apps kullanıyorsanız Bicep'te uygulama bağlantı noktasını belirtin:

      DaprConfig: {
         ...
         appPort: <DAPR_APP_PORT>
         ...
      }
      
    • Kubernetes ortamı kullanıyorsanız ek açıklamayı dapr.io/app-port ayarlayın:

      annotations:
         ...
         dapr.io/app-port: "<DAPR_APP_PORT>"
         ...
      
    • Yerel olarak geliştiriyorsanız işlev uygulamasını Dapr ile çalıştırırken ayarladığınızı --app-port doğrulayın:

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

Sonraki adımlar

Dapr hakkında daha fazla bilgi edinin.