Aracılığıyla paylaş


Python için Azure Event Grid istemci kitaplığı - sürüm 4.16.0

Azure Event Grid; yayımla-abone ol modelini kullanan, tek düzen olay tüketimine izin veren, tam yönetimli ve akıllı bir olay yönlendirme hizmetidir.

Kaynak kodu | Paket (PyPI) | Paket (Conda) | API başvuru belgeleri | Ürün belgeleri | Örnekleri | Changelog

Başlarken

Önkoşullar

Paketi yükleme

Pip ile Python için Azure Event Grid istemci kitaplığını yükleyin:

pip install azure-eventgrid
  • Mevcut bir Event Grid konusu veya etki alanı gereklidir. Azure Portal veya Azure CLI kullanarak kaynağı oluşturabilirsiniz

Azure CLI kullanıyorsanız ve <resource-name> yerine kendi benzersiz adlarınızı yazın<resource-group-name>.

Event Grid Konusu Oluşturma

az eventgrid topic --create --location <location> --resource-group <resource-group-name> --name <resource-name>

Event Grid Etki Alanı Oluşturma

az eventgrid domain --create --location <location> --resource-group <resource-group-name> --name <resource-name>

İstemcinin kimliğini doğrulama

Event Grid hizmetiyle etkileşim kurmak için bir istemci örneği oluşturmanız gerekir. İstemci nesnesinin örneğini oluşturmak için bir uç nokta ve kimlik bilgisi gereklidir.

Azure Active Directory (AAD) kullanma

Azure Event Grid, isteklerin kimlik tabanlı kimlik doğrulaması için Azure Active Directory (Azure AD) ile tümleştirme sağlar. Azure AD ile kullanıcılara, gruplara veya uygulamalara Azure Event Grid kaynaklarınıza erişim vermek için rol tabanlı erişim denetimini (RBAC) kullanabilirsiniz.

Ile bir konuya veya etki alanına TokenCredentialolay göndermek için kimliği doğrulanmış kimliğin atanmış "EventGrid Veri Göndereni" rolüne sahip olması gerekir.

Paketle azure-identity , hem geliştirme hem de üretim ortamlarında istekleri sorunsuz bir şekilde yetkilendirebilirsiniz. Azure Active Directory hakkında daha fazla bilgi edinmek için bkz azure-identity . BENİOKU.

Örneğin, Azure Active Directory kullanarak kimlik doğrulaması yapacak bir istemci oluşturmak için kullanabilirsiniz DefaultAzureCredential :

from azure.identity import DefaultAzureCredential
from azure.eventgrid import EventGridPublisherClient, EventGridEvent

default_az_credential = DefaultAzureCredential()
endpoint = os.environ["EVENTGRID_TOPIC_ENDPOINT"]
client = EventGridPublisherClient(endpoint, default_az_credential)

Uç noktayı arama

Konu uç noktasını Azure portal Event Grid Konu Kaynağı'nda bulabilirsiniz. Bu aşağıdaki gibi görünür: "https://<event-grid-topic-name>.<topic-location>.eventgrid.azure.net/api/events"

AzureKeyCredential ile istemci oluşturma

Parametre olarak credential bir Access anahtarı kullanmak için anahtarı azurekeycredential örneğine dize olarak geçirin.

Not: Erişim Anahtarı, Azure portalında Event Grid Konu Kaynağının "Erişim Anahtarları" menüsünde bulunabilir. Bunlar azure CLI veya azure-mgmt-eventgrid kitaplık aracılığıyla da elde edilebilir. Erişim anahtarlarını alma kılavuzuna buradan ulaşabilirsiniz.

import os
from azure.eventgrid import EventGridPublisherClient
from azure.core.credentials import AzureKeyCredential

topic_key = os.environ["EVENTGRID_TOPIC_KEY"]
endpoint = os.environ["EVENTGRID_TOPIC_ENDPOINT"]

credential_key = AzureKeyCredential(topic_key)
client = EventGridPublisherClient(endpoint, credential_key)

Not: İstemcinin kimliği sas imzası AzureSasCredentialaracılığıyla da kullanılarak doğrulanabilir. Bunu gösteren bir örnek , burada (async_version) kullanılabilir.

Not:generate_sas yöntemi, paylaşılan erişim imzası oluşturmak için kullanılabilir. Bunu gösteren bir örnek burada görülebilir.

Önemli kavramlar

Konu

Konu başlığı, EventGrid hizmetindeki olayları göndermek için gerçekleştirilen bir kanaldır. Bir konunun kabul edildiği olay şeması, konu oluşturma zamanında belirlenir. Şema türü olayları farklı bir şema türü gerektiren bir konuya gönderilirse, hatalar oluşur.

Etki alanı

Olay etki alanı , aynı uygulamayla ilgili çok sayıda Event Grid konusuna yönelik bir yönetim aracıdır. Binlerce konuya olay yayımlamanıza olanak sağlar. Etki alanları ayrıca her konu üzerinde yetkilendirme ve kimlik doğrulaması denetimi sağlar. Daha fazla bilgi için Olay etki alanına genel bakış adresini ziyaret edin.

Bir olay etki alanı oluşturduğunuzda, bu etki alanı için yayımlama uç noktası sizin kullanımınıza sunulur. Bu işlem, Event Grid Konu Başlığı oluşturmaya benzer. Tek fark, bir etki alanına yayımlarken, olayın teslimini istediğiniz etki alanı içinde konuyu belirtmeniz gerektiğidir.

Olay şemaları

Olay, sistemde gerçekleşen bir şeyi tam olarak açıklayan en küçük bilgi miktarıdır. Özel bir konu veya etki alanı oluşturulduğunda, olayları yayımlarken kullanılacak şemayı belirtmeniz gerekir.

Event Grid, olayları kodlamak için birden çok şemayı destekler.

Olay Kılavuz şeması

Konunuzu özel bir şema kullanacak şekilde yapılandırabilirsiniz ancak önceden tanımlanmış Event Grid şemasını kullanmak daha yaygındır. Belirtimlere ve gereksinimlere buradan bakın.

CloudEvents v1.0 şeması

Bir diğer seçenek de CloudEvents v1.0 şemasını kullanmaktır. CloudEvents , olay verilerini ortak bir şekilde tanımlamak için belirtim oluşturan bir Cloud Native Computing Foundation projesidir. CloudEvents'in hizmet özetini burada bulabilirsiniz.

EventGridPublisherClient

EventGridPublisherClient , istemci başlatma sırasında belirtilen konu ana bilgisayar adına olay verileri gönderme işlemleri sağlar.

Konunuzun veya etki alanınızın kullanmak üzere yapılandırıldığı şemadan bağımsız olarak, EventGridPublisherClient olay yayımlamak için kullanılır. send Olayları yayımlama yöntemini kullanın.

Aşağıdaki olay biçimlerinin gönderilmesine izin verilir:

  • Kesin olarak belirlenmiş EventGridEvents listesi veya tek bir örneği.

  • Seri hale getirilmiş EventGridEvent nesnesinin dikte gösterimi.

  • Kesin olarak yazılan CloudEvents listesini veya tek bir örneğini.

  • Seri hale getirilmiş CloudEvent nesnesinin dikte gösterimi.

  • Herhangi bir Özel Şemanın dikte gösterimi.

Ayrıntılı örnekler için lütfen örneklere göz atın.

Not: Yayımlamadan önce konunuzun CloudEvents'i mi yoksa EventGridEvents'i mi desteklediğini bilmeniz önemlidir. Gönderdiğiniz olayın şemasını desteklemeyen bir konuya gönderirseniz, send() bir özel durum oluşturur.

Sistem Konuları

Event Grid'deki bir sistem konusu, Azure Depolama veya Azure Event Hubs gibi Azure hizmetleri tarafından yayımlanan bir veya daha fazla olayı temsil eder. Örneğin, bir sistem konusu tüm blob olaylarını veya yalnızca belirli bir depolama hesabı için yayımlanan blob oluşturma ve blob silme olaylarını temsil edebilir.

Azure Event Grid yayımlanan sistem olaylarının çeşitli olay türlerinin adları içinde azure.eventgrid.SystemEventNameskullanılabilir. Tanınabilir sistem konularının tam listesi için Sistem Konuları'yı ziyaret edin.

Event Grid'deki temel kavramlar hakkında daha fazla bilgi için bkz. Azure Event Grid kavramları.

Azure Arc ile Kubernetes'te Event Grid

Azure Arc ile Kubernetes üzerinde Event Grid, Event Grid'i kendi Kubernetes kümenizde çalıştırmanızı sağlayan bir tekliftir. Bu özellik, Azure Arc özellikli Kubernetes'in kullanımıyla etkinleştirilir. Azure Arc özellikli Kubernetes aracılığıyla desteklenen bir Kubernetes kümesi Azure'a bağlanır. Bağlandıktan sonra Event Grid'i üzerine yükleyebilirsiniz. Bu konuda burada daha fazla bilgi edinebilirsiniz.

CNCF Bulut Etkinlikleri desteği

v4.7.0 ile başlayan bu paket, 'den https://pypi.org/project/cloudevents/bir CNCF bulut etkinliği yayımlamayı da destekler. Bu kitaplıktan API'ye send bir CloudEvent nesnesi geçirebilirsiniz.


from cloudevents.http import CloudEvent

event = CloudEvent(...)

client.send(event)

Örnekler

Aşağıdaki bölümlerde, en yaygın Event Grid görevlerinden bazılarını kapsayan çeşitli kod parçacıkları sağlanır:

Event Grid Olayı Gönderme

Bu örnek bir Event Grid olayı yayımlar.

import os
from azure.core.credentials import AzureKeyCredential
from azure.eventgrid import EventGridPublisherClient, EventGridEvent

key = os.environ["EG_ACCESS_KEY"]
endpoint = os.environ["EG_TOPIC_HOSTNAME"]

event = EventGridEvent(
    data={"team": "azure-sdk"},
    subject="Door1",
    event_type="Azure.Sdk.Demo",
    data_version="2.0"
)

credential = AzureKeyCredential(key)
client = EventGridPublisherClient(endpoint, credential)

client.send(event)

Bulut Olayı Gönderme

Bu örnek bir Bulut olayı yayımlar.

import os
from azure.core.credentials import AzureKeyCredential
from azure.core.messaging import CloudEvent
from azure.eventgrid import EventGridPublisherClient

key = os.environ["CLOUD_ACCESS_KEY"]
endpoint = os.environ["CLOUD_TOPIC_HOSTNAME"]

event = CloudEvent(
    type="Azure.Sdk.Sample",
    source="https://egsample.dev/sampleevent",
    data={"team": "azure-sdk"}
)

credential = AzureKeyCredential(key)
client = EventGridPublisherClient(endpoint, credential)

client.send(event)

Birden çok olay gönderme

Bir konuya veya etki alanına birden çok olay gönderirken olayları toplu iş olarak göndermek mümkündür. Bu örnek, send yöntemini kullanarak CloudEvents listesini gönderir.

UYARI: Aynı anda birden çok olayın listesini gönderirken, her olayı yinelemek ve göndermek en iyi performansa neden olmaz. En iyi performans için, olayların listesinin gönderilmesi kesinlikle önerilir.

import os
from azure.core.credentials import AzureKeyCredential
from azure.core.messaging import CloudEvent
from azure.eventgrid import EventGridPublisherClient

key = os.environ["CLOUD_ACCESS_KEY"]
endpoint = os.environ["CLOUD_TOPIC_HOSTNAME"]

event0 = CloudEvent(
    type="Azure.Sdk.Sample",
    source="https://egsample.dev/sampleevent",
    data={"team": "azure-sdk"}
)
event1 = CloudEvent(
    type="Azure.Sdk.Sample",
    source="https://egsample.dev/sampleevent",
    data={"team2": "azure-eventgrid"}
)

events = [event0, event1]

credential = AzureKeyCredential(key)
client = EventGridPublisherClient(endpoint, credential)

client.send(events)

Olayları sözlük olarak gönderme

İlgili serileştirilmiş modellerin dikte gösterimi, kesin olarak yazılan nesnelerin dışında CloudEvent'leri veya EventGridEvent'leri yayımlamak için de kullanılabilir.

Aşağıda gösterildiği gibi özel şemaya sahip bir konuya göndermek için dikte benzeri bir gösterim kullanın.

import os
import uuid
import datetime as dt
from msrest.serialization import UTC
from azure.core.credentials import AzureKeyCredential
from azure.eventgrid import EventGridPublisherClient

key = os.environ["CUSTOM_SCHEMA_ACCESS_KEY"]
endpoint = os.environ["CUSTOM_SCHEMA_TOPIC_HOSTNAME"]

event = custom_schema_event = {
    "customSubject": "sample",
    "customEventType": "sample.event",
    "customDataVersion": "2.0",
    "customId": uuid.uuid4(),
    "customEventTime": dt.datetime.now(UTC()).isoformat(),
    "customData": "sample data"
    }

credential = AzureKeyCredential(key)
client = EventGridPublisherClient(endpoint, credential)

client.send(event)

Depolama kuyruğundan kullanma

Bu örnek, depolama kuyruğundan alınan bir iletiyi tüketir ve bir CloudEvent nesnesine seri durumdan kaldırır.

from azure.core.messaging import CloudEvent
from azure.storage.queue import QueueServiceClient, BinaryBase64DecodePolicy
import os
import json

# all types of CloudEvents below produce same DeserializedEvent
connection_str = os.environ['STORAGE_QUEUE_CONN_STR']
queue_name = os.environ['STORAGE_QUEUE_NAME']

with QueueServiceClient.from_connection_string(connection_str) as qsc:
    payload =  qsc.get_queue_client(
        queue=queue_name,
        message_decode_policy=BinaryBase64DecodePolicy()
        ).peek_messages()

    ## deserialize payload into a list of typed Events
    events = [CloudEvent.from_dict(json.loads(msg.content)) for msg in payload]

Servicebus'tan kullanma

Bu örnek, ServiceBus'tan alınan bir yük iletisini tüketir ve bir EventGridEvent nesnesine seri durumdan kaldırır.

from azure.eventgrid import EventGridEvent
from azure.servicebus import ServiceBusClient
import os
import json

# all types of EventGridEvents below produce same DeserializedEvent
connection_str = os.environ['SERVICE_BUS_CONN_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']

with ServiceBusClient.from_connection_string(connection_str) as sb_client:
    payload =  sb_client.get_queue_receiver(queue_name).receive_messages()

    ## deserialize payload into a list of typed Events
    events = [EventGridEvent.from_dict(json.loads(next(msg.body).decode('utf-8'))) for msg in payload]

EventGrid ile Dağıtılmış İzleme

Azure çekirdek izleme tümleştirmesiyle uyumlu olduğundan EventGrid ile Python için OpenTelemetry'yi her zamanki gibi kullanabilirsiniz.

Aşağıda, CloudEvent göndermeyi izlemek için OpenTelemetry kullanma örneği verilmiştir.

İlk olarak, OpenTelemetry'yi EventGrid için etkin izleme eklentisi olarak ayarlayın.

from azure.core.settings import settings
from azure.core.tracing.ext.opentelemetry_span import OpenTelemetrySpan

settings.tracing_implementation = OpenTelemetrySpan

Buradan normal açık telemetri kullanımı. Ayrıntılar için bkz. OpenTelemetry . Bu örnekte, izlemeleri dışarı aktarmak için basit bir konsol dışarı aktarıcısı kullanılır. Herhangi bir dışarı veren, , jaegerzipkin vb. dahil olmak üzere azure-monitor-opentelemetry-exporterburada kullanılabilir.

from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import ConsoleSpanExporter
from opentelemetry.sdk.trace.export import SimpleSpanProcessor  # this requires opentelemetry >= 1.0.0

# Simple console exporter
exporter = ConsoleSpanExporter()

trace.set_tracer_provider(TracerProvider())
tracer = trace.get_tracer(__name__)
trace.get_tracer_provider().add_span_processor(
    SimpleSpanProcessor(exporter)
)

tracer ve exporter ayarlandıktan sonra, cloudevent nesnesi göndermek için yöntemini EventGridPublisherClient kullanırken send izlemeleri toplamaya başlamak için lütfen aşağıdaki örneği izleyin.

import os
from azure.eventgrid import EventGridPublisherClient
from azure.core.messaging import CloudEvent
from azure.core.credentials import AzureKeyCredential

hostname = os.environ['CLOUD_TOPIC_HOSTNAME']
key = AzureKeyCredential(os.environ['CLOUD_ACCESS_KEY'])
cloud_event = CloudEvent(
    source = 'demo',
    type = 'sdk.demo',
    data = {'test': 'hello'},
)
with tracer.start_as_current_span(name="MyApplication"):
    client = EventGridPublisherClient(hostname, key)
    client.send(cloud_event)

Sorun giderme

  • Günlükçü'leri kitaplıktan izlemeleri toplamak için etkinleştirin azure.eventgrid .

Genel

Event Grid istemci kitaplığı , Azure Core'da tanımlanan özel durumları tetikler.

Günlüğe Kaydetme

Bu kitaplık, günlüğe kaydetme için standart günlük kitaplığını kullanır. HTTP oturumlarıyla ilgili temel bilgiler (URL'ler, üst bilgiler vb.) BİlGİ düzeyinde günlüğe kaydedilir.

İsteğe Bağlı Yapılandırma

İsteğe bağlı anahtar sözcük bağımsız değişkenleri istemcide ve işlem düzeyinde geçirilebilir. Azure-core başvuru belgelerinde yeniden denemeler, günlüğe kaydetme, aktarım protokolleri ve daha fazlası için kullanılabilir yapılandırmalar açıklanmaktadır.

Sonraki adımlar

Aşağıdaki bölümde, Event Grid Python API'sinde kullanılan yaygın desenleri gösteren çeşitli kod parçacıkları verilmiştir.

Daha fazla örnek kod

Bu kod örnekleri, Azure Event Grid istemci kitaplığıyla ortak şampiyon senaryo işlemlerini gösterir.

Aşağıdaki örnekler EventGridEvents ve CloudEvents'in yayımlama ve kullanma dict gösterimlerini kapsar.

Daha fazla örneği burada bulabilirsiniz.

  • Gönderme senaryosuyla ilgili daha fazla örneği burada görebilirsiniz.
  • Farklı mesajlaşma hizmetlerinden bir yükü türlenmiş nesne olarak kullanmayla ilgili daha fazla örnek görmek için lütfen Örnekleri Kullanma sayfasını ziyaret edin

Diğer belgeler

Azure Event Grid hakkında daha kapsamlı belgeler için docs.microsoft.com hakkında Event Grid belgelerine bakın.

Katkıda bulunma

Bu proje, katkı ve önerilere açıktır. Çoğu durumda, sağladığınız katkıyı kullanmamız için bize hak tanıma hakkına sahip olduğunuzu ve bu hakkı bize tanıdığınızı bildiren bir Katkıda Bulunan Lisans Sözleşmesi’ni (CLA) kabul etmeniz gerekir. Ayrıntılar için cla.microsoft.com adresini ziyaret edin.

Bir çekme isteği gönderdiğinizde, CLA robotu bir CLA sağlamanız gerekip gerekmediğini otomatik olarak belirler ve çekme isteğini uygun şekilde donatır (örn. etiket, açıklama). Robot tarafından sağlanan yönergeleri izlemeniz yeterlidir. Bu işlemi, CLA’mızı kullanarak tüm depolarda yalnızca bir kere yapmanız gerekir.

Bu proje Microsoft Open Source Code of Conduct (Microsoft Açık Kaynak Kullanım Kuralları) belgesinde listelenen kurallara uygundur. Daha fazla bilgi için Kullanım Kuralları SSS bölümüne bakın veya ek sorular veya yorumlarla iletişime geçin opencode@microsoft.com .