Griglia di eventi di Azure libreria client per Python - versione 4.17.0b1
Griglia di eventi di Azure è un servizio di routing di eventi intelligente completamente gestito che consente un uso degli eventi uniforme tramite un modello di pubblicazione-sottoscrizione.
Codice | sorgentePacchetto (PyPI) | Pacchetto (Conda) | Documentazione | di riferimento sulle APIDocumentazione | del prodottoCampioni | Changelog
Dichiarazione di non responsabilità
Si tratta di una versione beta di Azure EventGrid EventGridClient
, che insieme alla disponibilità generale EventGridPublisherClient
. EventGridClient
supporta publish_cloud_events
le operazioni , receive_cloud_events
, acknowledge_cloud_events
release_cloud_events
, reject_cloud_events
, e renew_cloud_event_locks
. Per altre informazioni, vedere gli esempi .
Introduzione
Prerequisiti
- Python 3.7 o versione successiva è necessario per usare questo pacchetto.
- Per usare questo pacchetto, è necessario avere una sottoscrizione di Azure e una risorsa argomento di Griglia di eventi. Seguire questa esercitazione dettagliata per registrare il provider di risorse di Griglia di eventi e creare argomenti di Griglia di eventi usando il portale di Azure. È disponibile un'esercitazione simile con l'interfaccia della riga di comando di Azure.
Installare il pacchetto
Installare la libreria client Griglia di eventi di Azure per Python con pip:
pip install azure-eventgrid
- È necessario un argomento o un dominio di Griglia di eventi esistente. È possibile creare la risorsa usando il portale di Azure o l'interfaccia della riga di comando di Azure
Se si usa l'interfaccia della riga di comando di Azure, sostituire <resource-group-name>
e <resource-name>
con i propri nomi univoci.
Creare un argomento di Griglia di eventi
az eventgrid topic --create --location <location> --resource-group <resource-group-name> --name <resource-name>
Creare un dominio di Griglia di eventi
az eventgrid domain --create --location <location> --resource-group <resource-group-name> --name <resource-name>
Autenticare il client
Per interagire con il servizio Griglia di eventi, è necessario creare un'istanza di un client. Un endpoint e le credenziali sono necessari per creare un'istanza dell'oggetto client.
Uso di Azure Active Directory (AAD)
Griglia di eventi di Azure fornisce l'integrazione con Azure Active Directory (Azure AD) per l'autenticazione basata sull'identità delle richieste. Con Azure AD è possibile usare il controllo degli accessi in base al ruolo per concedere l'accesso alle risorse Griglia di eventi di Azure a utenti, gruppi o applicazioni.
Per inviare eventi a un argomento o a un dominio con , TokenCredential
all'identità autenticata deve essere assegnato il ruolo "Mittente dati EventGrid".
Con il azure-identity
pacchetto è possibile autorizzare facilmente le richieste in ambienti di sviluppo e di produzione. Per altre informazioni su Azure Active Directory, vedere READMEazure-identity
.
Ad esempio, è possibile usare DefaultAzureCredential
per costruire un client che eseguirà l'autenticazione usando Azure Active Directory:
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)
Ricerca dell'endpoint
È possibile trovare l'endpoint dell'argomento all'interno della risorsa Argomento di Griglia di eventi nella portale di Azure. L'aspetto sarà simile al seguente: "https://<event-grid-topic-name>.<topic-location>.eventgrid.azure.net/api/events"
Creare il client con AzureKeyCredential
Per usare una chiave di accesso come credential
parametro, passare la chiave come stringa in un'istanza di AzureKeyCredential.
Nota: La chiave di accesso è disponibile nel portale di Azure nel menu "Chiavi di accesso" della risorsa Argomento di Griglia di eventi. Possono anche essere ottenuti tramite l'interfaccia della riga di comando di Azure o la
azure-mgmt-eventgrid
libreria. Una guida per ottenere le chiavi di accesso è disponibile qui.
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)
Nota: Un client può anche essere autenticato tramite firma di firma di accesso condiviso, usando .
AzureSasCredential
Un esempio che illustra questa operazione è disponibile qui (async_version).
Nota: Il
generate_sas
metodo può essere usato per generare una firma di accesso condiviso. Un esempio che illustra questo problema è disponibile qui.
Concetti chiave
Argomento
Un argomento è un canale all'interno del servizio EventGrid per inviare eventi. Lo schema di eventi accettato da un argomento viene deciso in fase di creazione dell'argomento. Se gli eventi di un tipo di schema vengono inviati a un argomento che richiede un tipo di schema diverso, verranno generati errori.
Dominio
Un dominio eventi è uno strumento di gestione per un numero elevato di argomenti di Griglia di eventi correlati alla stessa applicazione. Consentono di pubblicare eventi in migliaia di argomenti. I domini offrono anche il controllo dell'autorizzazione e dell'autenticazione su ogni argomento. Per altre informazioni, vedere Panoramica del dominio eventi.
Quando si crea un dominio eventi, viene reso disponibile un endpoint di pubblicazione per questo dominio. Questo processo è simile alla creazione di un argomento di Griglia di eventi. L'unica differenza è che, quando si pubblica in un dominio, è necessario specificare l'argomento all'interno del dominio a cui si vuole recapitare l'evento.
Schemi degli eventi
Un evento è la quantità minima di informazioni che descrive completamente qualcosa che si è verificato nel sistema. Quando viene creato un argomento o un dominio personalizzato, è necessario specificare lo schema che verrà utilizzato durante la pubblicazione di eventi.
Griglia di eventi supporta più schemi per la codifica degli eventi.
Schema di Griglia di eventi
Anche se è possibile configurare l'argomento per l'uso di uno schema personalizzato, è più comune usare lo schema di Griglia di eventi già definito. Vedere le specifiche e i requisiti qui.
Schema CloudEvents v1.0
Un'altra opzione consiste nell'usare lo schema CloudEvents v1.0. CloudEvents è un progetto Cloud Native Computing Foundation che produce una specifica per descrivere i dati degli eventi in modo comune. Il riepilogo del servizio di CloudEvents è disponibile qui.
EventGridPublisherClient
EventGridPublisherClient
fornisce operazioni per inviare i dati dell'evento a un nome host dell'argomento specificato durante l'inizializzazione del client.
Indipendentemente dallo schema che l'argomento o il dominio è configurato per l'uso, EventGridPublisherClient
verrà usato per pubblicare gli eventi. Usare gli eventi di pubblicazione del send
metodo.
È possibile inviare i formati di eventi seguenti:
Elenco o una singola istanza di EventGridEvent fortemente tipizzato.
Rappresentazione dict di un oggetto EventGridEvent serializzato.
Elenco o singola istanza di CloudEvent fortemente tipizzato.
Rappresentazione dict di un oggetto CloudEvent serializzato.
Rappresentazione dict di qualsiasi schema personalizzato.
Per esempi dettagliati, vedere gli esempi .
Nota: È importante sapere se l'argomento supporta CloudEvents o EventGridEvents prima della pubblicazione. Se si invia a un argomento che non supporta lo schema dell'evento inviato, send() genererà un'eccezione.
Argomenti di sistema
Un argomento di sistema in Griglia di eventi rappresenta uno o più eventi pubblicati da servizi di Azure, ad esempio Archiviazione di Azure o Hub eventi di Azure. Ad esempio, un argomento di sistema può rappresentare tutti gli eventi BLOB o solo gli eventi di creazione di BLOB ed eliminazione BLOB pubblicati per un account di archiviazione specifico.
I nomi dei vari tipi di evento per gli eventi di sistema pubblicati in Griglia di eventi di Azure sono disponibili in azure.eventgrid.SystemEventNames
.
Per un elenco completo degli argomenti di sistema riconoscibili, vedere Argomenti di sistema.
Per altre informazioni sui concetti chiave di Griglia di eventi, vedere Concetti in Griglia di eventi di Azure.
Griglia di eventi in Kubernetes con Azure Arc
Griglia di eventi in Kubernetes con Azure Arc è un'offerta che consente di eseguire Griglia di eventi nel proprio cluster Kubernetes. Questa funzionalità è abilitata dall'uso di Kubernetes con abilitazione di Azure Arc. Tramite Kubernetes con abilitazione di Azure Arc, un cluster Kubernetes supportato si connette ad Azure. Dopo la connessione, è possibile installare Griglia di eventi. Per altre informazioni, vedere qui.
Supporto per gli eventi cloud CNF
A partire dalla versione 4.7.0, questo pacchetto supporta anche la pubblicazione di un evento cloud CNF da https://pypi.org/project/cloudevents/. Sarebbe possibile passare un oggetto CloudEvent da questa libreria all'API send
.
from cloudevents.http import CloudEvent
event = CloudEvent(...)
client.send(event)
Esempio
Le sezioni seguenti forniscono diversi frammenti di codice relativi ad alcune delle attività più comuni di Griglia di eventi, tra cui:
- Inviare un evento di Griglia di eventi
- Inviare un evento cloud
- Inviare più eventi
- Inviare eventi come dizionari
- Usare un payload dalla coda di archiviazione
- Utilizzare dal bus di servizio
Inviare un evento di Griglia di eventi
In questo esempio viene pubblicato un evento di Griglia di eventi.
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)
Inviare un evento cloud
Questo esempio pubblica un evento Cloud.
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)
Inviare più eventi
È possibile inviare eventi come batch quando si inviano più eventi a un argomento o a un dominio. In questo esempio viene inviato un elenco di CloudEvents usando il metodo send.
AVVISO: Quando si invia un elenco di più eventi contemporaneamente, l'iterazione e l'invio di ogni evento non comporterà prestazioni ottimali. Per ottenere prestazioni ottimali, è consigliabile inviare un elenco di eventi.
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)
Inviare eventi come dizionari
È anche possibile usare una rappresentazione dict dei rispettivi modelli serializzati per pubblicare CloudEvent o EventGridEvent a parte gli oggetti fortemente tipizzati.
Usare una rappresentazione simile a ct per inviare a un argomento con schema personalizzato, come illustrato di seguito.
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)
Utilizzare dalla coda di archiviazione
Questo esempio usa un messaggio ricevuto dalla coda di archiviazione e lo deserializza in un oggetto CloudEvent.
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]
Utilizzare dal bus di servizio
In questo esempio viene utilizzato un messaggio di payload ricevuto da ServiceBus e lo deserializza in un oggetto EventGridEvent.
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]
Traccia distribuita con EventGrid
È possibile usare OpenTelemetry per Python come di consueto con EventGrid perché è compatibile con l'integrazione della traccia di azure-core.
Ecco un esempio di uso di OpenTelemetry per tracciare l'invio di un CloudEvent.
Prima di tutto, impostare OpenTelemetry come plug-in di traccia abilitato per EventGrid.
from azure.core.settings import settings
from azure.core.tracing.ext.opentelemetry_span import OpenTelemetrySpan
settings.tracing_implementation = OpenTelemetrySpan
Uso regolare dei dati di telemetria aperti da qui. Per informazioni dettagliate, vedere OpenTelemetry .
In questo esempio viene usato un semplice utilità di esportazione della console per esportare le tracce. Qualsiasi utilità di esportazione può essere usata qui, tra cui azure-monitor-opentelemetry-exporter
, jaeger
e zipkin
così via.
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)
)
Dopo aver tracer
impostato e exporter
, seguire l'esempio seguente per iniziare a raccogliere tracce durante l'uso EventGridPublisherClient
del send
metodo da per inviare un oggetto CloudEvent.
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)
Risoluzione dei problemi
- Abilitare
azure.eventgrid
il logger per raccogliere tracce dalla libreria.
Generale
La libreria client di Griglia di eventi genererà eccezioni definite in Azure Core.
Registrazione
Questa libreria usa la libreria di registrazione standard per la registrazione. Le informazioni di base sulle sessioni HTTP (URL, intestazioni e così via) vengono registrate a livello di INFO.
Configurazione facoltativa
Gli argomenti di parole chiave facoltativi possono essere passati al client e al livello di operazione. La documentazione di riferimento di azure-core descrive le configurazioni disponibili per tentativi, registrazione, protocolli di trasporto e altro ancora.
Passaggi successivi
La sezione seguente fornisce diversi frammenti di codice che illustrano i modelli comuni usati nell'API Python di Griglia di eventi.
Altro codice di esempio
Questi esempi di codice illustrano le operazioni comuni degli scenari campione con la libreria client Griglia di eventi di Azure.
Generare la firma di accesso condiviso: sample_generate_sas.py
Autenticare il client: sample_authentication.py (async_version)
Pubblicare eventi in un argomento usando la firma di accesso condiviso: sample_publish_events_to_a_topic_using_sas_credential_async.py (async_version)
Pubblicare eventi di Griglia di eventi in un argomento: sample_publish_eg_events_to_a_topic.py (async_version)
Pubblicare eventi di EventGrid in un argomento di dominio: sample_publish_eg_events_to_a_domain_topic.py (async_version)
Pubblicare un evento cloud: sample_publish_events_using_cloud_events_1.0_schema.py (async_version)
Pubblicare uno schema personalizzato: sample_publish_custom_schema_to_a_topic.py (async_version)
Gli esempi seguenti illustrano la pubblicazione e l'utilizzo dict
di rappresentazioni di EventGridEvents e CloudEvents.
Pubblicare EventGridEvent come rappresentazione simile alla rappresentazione: sample_publish_eg_event_using_dict.py (async_version)
Pubblicare CloudEvent come rappresentazione simile alla rappresentazione: sample_publish_cloud_event_using_dict.py (async_version)
Usare un payload personalizzato di dati cloudevent non elaborati: sample_consume_custom_payload.py
Altri esempi sono disponibili qui.
- Altri esempi relativi allo scenario di invio sono disponibili qui.
- Per visualizzare altri esempi relativi all'utilizzo di un payload da diversi servizi di messaggistica come oggetto tipizzato, vedere Utilizzare esempi
Documentazione aggiuntiva
Per una documentazione più completa su Griglia di eventi di Azure, vedere la documentazione di Griglia di eventi su docs.microsoft.com.
Contributo
In questo progetto sono benvenuti i contributi e i suggerimenti. Per la maggior parte dei contenuti è necessario sottoscrivere un contratto di licenza di collaborazione (CLA, Contributor License Agreement) che stabilisce che l'utente ha il diritto di concedere, e di fatto concede a Microsoft i diritti d'uso del suo contributo. Per informazioni dettagliate, visitare cla.microsoft.com.
Quando si invia una richiesta pull, un bot CLA determina automaticamente se è necessario specificare un contratto CLA e completare la richiesta pull in modo appropriato (ad esempio con un'etichetta e un commento). Seguire le istruzioni specificate dal bot. È sufficiente eseguire questa operazione una sola volta per tutti i repository che usano il contratto CLA Microsoft.
Questo progetto ha adottato il Codice di comportamento di Microsoft per l'open source. Per altre informazioni, vedere Code of Conduct FAQ (Domande frequenti sul Codice di comportamento Open Source di Microsoft) oppure contattare opencode@microsoft.com per eventuali altre domande o commenti.
Azure SDK for Python