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
- Bu paketi kullanmak için Python 3.7 veya üzeri gereklidir.
- Bu paketi kullanmak için bir Azure aboneliğiniz ve Event Grid Konu Kaynağınız olmalıdır. Event Grid kaynak sağlayıcısını kaydetmek ve Azure portal kullanarak Event Grid konuları oluşturmak için bu adım adım öğreticiyi izleyin. Azure CLI'nınkullanıldığı benzer bir öğretici vardır.
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 TokenCredential
olay 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ı
AzureSasCredential
aracı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.SystemEventNames
kullanı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
- Bulut Olayı Gönderme
- Birden Çok Olay Gönder
- Olayları Sözlük olarak gönderme
- Depolama kuyruğundan yük kullanma
- ServiceBus'tan kullanma
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, , jaeger
zipkin
vb. dahil olmak üzere azure-monitor-opentelemetry-exporter
burada 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.
Paylaşılan Erişim İmzası Oluşturma: sample_generate_sas.py
İstemcinin kimliğini doğrulama: sample_authentication.py (async_version)
SAS kullanarak bir konuya olay yayımlama: sample_publish_events_to_a_topic_using_sas_credential_async.py (async_version)
Event Grid Olaylarını bir konuya yayımlama: sample_publish_eg_events_to_a_topic.py (async_version)
EventGrid Olaylarını bir etki alanı konusunda yayımlama: sample_publish_eg_events_to_a_domain_topic.py (async_version)
Bulut Olayı Yayımlama: sample_publish_events_using_cloud_events_1.0_schema.py (async_version)
Özel Şema Yayımlama: sample_publish_custom_schema_to_a_topic.py (async_version)
Aşağıdaki örnekler EventGridEvents ve CloudEvents'in yayımlama ve kullanma dict
gösterimlerini kapsar.
EventGridEvent'i gösterim gibi bir dikte olarak yayımlama: sample_publish_eg_event_using_dict.py (async_version)
CloudEvent'i gösterim gibi bir dikte olarak yayımlama: sample_publish_cloud_event_using_dict.py (async_version)
Ham cloudevent verilerinin Özel Yükünü kullanma: sample_consume_custom_payload.py
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 .
Azure SDK for Python