Azure Event Grid biblioteca de cliente para JavaScript – versão 5.1.0-beta.1
Azure Event Grid é um serviço baseado na cloud que fornece uma entrega de eventos fiável em grande escala.
Utilize a biblioteca de cliente para:
- Enviar eventos para o Event Grid com o Event Grid, os esquemas de Eventos na Cloud 1.0 ou um esquema personalizado
- Descodificar e processar eventos que foram entregues a um processador do Event Grid
- Gerar Assinaturas de Acesso Partilhado para tópicos do Event Grid
Ligações principais:
Introdução
Ambientes atualmente suportados
- Versões LTS do Node.js
- Versões mais recentes do Safari, Chrome, Edge e Firefox.
Veja a nossa política de suporte para obter mais detalhes.
Pré-requisitos
- Uma subscrição do Azure.
- Um Tópico ou Domínio do Event Grid existente. Se precisar de criar o recurso, pode utilizar o Portal do Azure ou a CLI do Azure.
Se utilizar a CLI do Azure, substitua <your-resource-group-name>
e <your-resource-name>
pelos seus próprios nomes exclusivos:
Criar um Tópico do Event Grid
az eventgrid topic create --location <location> --resource-group <your-resource-group-name> --name <your-resource-name>
Criar um Domínio do Event Grid
az eventgrid domain create --location <location> --resource-group <your-resource-group-name> --name <your-resource-name>
Instalar o pacote @azure/eventgrid
Instale a biblioteca de cliente do Azure Event Grid para JavaScript com npm
:
npm install @azure/eventgrid
Criar e autenticar um EventGridPublisherClient
Para criar um objeto de cliente para aceder à API do Event Grid, precisará do endpoint
tópico do Event Grid e de um credential
. O cliente do Event Grid pode utilizar uma Chave de Acesso ou uma Assinatura de Acesso Partilhado (SAS) criada a partir de uma chave de acesso.
Pode encontrar o ponto final do tópico do Event Grid no portal do Azure ou com o fragmento da CLI do Azure abaixo:
az eventgrid topic show --name <your-resource-name> --resource-group <your-resource-group-name> --query "endpoint"
Utilizar uma Chave de Acesso
Utilize o Portal do Azure para navegar para o recurso do Event Grid e obter uma Chave de Acesso ou utilize o fragmento da CLI do Azure abaixo:
az eventgrid topic key list --resource-group <your-resource-group-name> --name <your-event-grid-topic-name>
Assim que tiver uma chave de API e um ponto final, pode utilizar a AzureKeyCredential
classe para autenticar o cliente da seguinte forma:
const { EventGridPublisherClient, AzureKeyCredential } = require("@azure/eventgrid");
const client = new EventGridPublisherClient(
"<endpoint>",
"<endpoint schema>",
new AzureKeyCredential("<Access Key>")
);
Utilizar um Token de SAS
Tal como uma chave de acesso, um token de SAS permite o acesso ao envio de eventos para um tópico do Event Grid. Ao contrário de uma chave de acesso, que pode ser utilizada até ser regenerada, um token de SAS tem um tempo de transferência, altura em que já não é válido. Para utilizar um token de SAS para autenticação, utilize o AzureSASCredential
seguinte:
const { EventGridPublisherClient, AzureSASCredential } = require("@azure/eventgrid");
const client = new EventGridPublisherClient(
"<endpoint>",
"<endpoint schema>",
new AzureSASCredential("<SAS Token>")
);
Pode gerar um token de SAS com a generateSharedAccessSigniture
função .
const { generateSharedAccessSignature, AzureKeyCredential } = require("@azure/eventgrid");
// Create a SAS Token which expires on 2020-01-01 at Midnight.
const token = generateSharedAccessSignature(
"<endpoint>",
new AzureKeyCredential("<API key>"),
new Date("2020-01-01T00:00:00")
);
Utilizar o Azure Active Directory (AAD)
O Azure EventGrid fornece integração com o Azure Active Directory (Azure AD) para autenticação baseada em identidade de pedidos. Com Azure AD, pode utilizar o controlo de acesso baseado em funções (RBAC) para conceder acesso aos seus recursos Azure Event Grid a utilizadores, grupos ou aplicações.
Para enviar eventos para um tópico ou domínio com um TokenCredential
, a identidade autenticada deve ter a função "Remetente de Dados do EventGrid" atribuída.
Com o @azure/identity
pacote, pode autorizar pedidos de forma totalmente integrada em ambientes de desenvolvimento e produção. Para saber mais sobre o Azure Active Directory, veja README@azure/identity
.
Por exemplo, a utilização pode ser utilizada DefaultAzureCredential
para construir um cliente que irá autenticar com o Azure Active Directory:
const { EventGridPublisherClient } = require("@azure/eventgrid");
const { DefaultAzureCredential } = require("@azure/identity");
const client = new EventGridPublisherClient(
"<endpoint>",
"<endpoint schema>",
new DefaultAzureCredential()
);
Conceitos-chave
EventGridPublisherClient
EventGridPublisherClient
é utilizado para enviar eventos para um Tópico do Event Grid ou um Domínio do Event Grid.
Esquemas de Eventos
O Event Grid suporta vários esquemas para codificar eventos. Quando um Tópico Personalizado ou Domínio é criado, especifica o esquema que será utilizado ao publicar eventos. Embora possa configurar o tópico para utilizar um esquema personalizado , é mais comum utilizar o esquema do Event Grid já definido ou o esquema CloudEvents 1.0. O CloudEvents é um projeto do Cloud Native Computing Foundation que produz uma especificação para descrever dados de eventos de uma forma comum. Ao construir o EventGridPublisherClient, tem de especificar o esquema que o tópico está configurado para utilizar:
Se o tópico estiver configurado para utilizar o Esquema do Event Grid, defina "EventGrid" como o tipo de esquema:
const client = new EventGridPublisherClient(
"<endpoint>",
"EventGrid",
new AzureKeyCredential("<API Key>")
);
Se o tópico estiver configurado para utilizar o Esquema de Eventos na Cloud, defina "CloudEvent" como o tipo de esquema:
const client = new EventGridPublisherClient(
"<endpoint>",
"CloudEvent",
new AzureKeyCredential("<API Key>")
);
Se o tópico estiver configurado para utilizar um Esquema de Evento Personalizado, defina "Personalizado" como o tipo de esquema:
const client = new EventGridPublisherClient(
"<endpoint>",
"Custom",
new AzureKeyCredential("<API Key>")
);
Construir o cliente com um esquema diferente do que o tópico está configurado para esperar resultará num erro do serviço e os seus eventos não serão publicados.
Pode ver que esquema de entrada foi configurado para um tópico do Event Grid com o fragmento da CLI do Azure abaixo:
az eventgrid topic show --name <your-resource-name> --resource-group <your-resource-group-name> --query "inputSchema"
EventGridDeserializer
Os eventos entregues aos consumidores pelo Event Grid são fornecidos como JSON. Dependendo do tipo de consumidor a que está a ser entregue, o serviço Event Grid pode fornecer um ou mais eventos como parte de um único payload. Embora estes eventos possam ser serializados com métodos JavaScript normais como JSON.parse
, esta biblioteca oferece um tipo de programa auxiliar para anular a serialização de eventos, denominado EventGridDeserializer
.
Em comparação com a utilização JSON.parse
direta, EventGridDeserializer
efetua algumas conversões adicionais enquanto deserializng eventos:
EventGridDeserializer
valida que as propriedades necessárias de um evento estão presentes e são os tipos certos.EventGridDeserializer
converte a propriedade de hora do evento num objeto JavaScriptDate
.- Ao utilizar Eventos na Cloud, os dados binários podem ser utilizados para a propriedade de dados de um evento (utilizando
Uint8Array
). Quando o evento é enviado através do Event Grid, é codificado na Base 64.EventGridDeserializer
irá descodificar estes dados novamente numa instância deUint8Array
. - Ao anular a deserção de um Evento do Sistema (um evento gerado por outro serviço do Azure),
EventGridDeserializer
serão efetuadas conversões adicionais para que odata
objeto corresponda à interface correspondente que descreve os respetivos dados. Ao utilizar o TypeScript, estas interfaces garantem que tem uma escrita forte quando acede às propriedades do objeto de dados de um evento de sistema.
Ao criar uma instância do EventGridDeserializer
, pode fornecer desserializadores personalizados que são utilizados para converter ainda mais o data
objeto.
Rastreio Distribuído e Eventos na Cloud
Esta biblioteca suporta o rastreio distribuído com @azure/core-tracing
. Ao utilizar o rastreio distribuído, esta biblioteca irá criar um intervalo durante uma send
operação. Além disso, ao enviar eventos com o esquema Cloud Events 1.0, o SDK adicionará metadados de rastreio distribuídos aos eventos com a extensão Rastreio Distribuído. Os valores das propriedades e tracestate
da traceparent
extensão correspondem aos traceparent
cabeçalhos e tracestate
do pedido HTTP que envia os eventos. Se um evento já tiver uma traceparent
propriedade de extensão, não será atualizado.
Event Grid no Kubernetes
Esta biblioteca foi testada e validada no Kubernetes com o Azure Arc.
Exemplos
Publicar um Evento Personalizado num Tópico do Event Grid com o Esquema do Event Grid
const { EventGridPublisherClient, AzureKeyCredential } = require("@azure/eventgrid");
const client = new EventGridPublisherClient(
"<endpoint>",
"EventGrid",
new AzureKeyCredential("<API key>")
);
await client.send([
{
eventType: "Azure.Sdk.SampleEvent",
subject: "Event Subject",
dataVersion: "1.0",
data: {
hello: "world",
},
},
]);
Publicar um Evento Personalizado num Tópico num Domínio do Event Grid com o Esquema do Event Grid
A publicação de eventos num Domínio do Event Grid é semelhante à publicação de um Tópico do Event Grid, exceto que, ao utilizar o esquema do Event Grid para eventos, tem de incluir a topic
propriedade . Ao publicar eventos no esquema Cloud Events 1.0, a propriedade necessária source
é utilizada como o nome do tópico no domínio para publicar em:
const { EventGridPublisherClient, AzureKeyCredential } = require("@azure/eventgrid");
const client = new EventGridPublisherClient(
"<endpoint>",
"EventGrid",
new AzureKeyCredential("<API key>")
);
await client.send([
{
topic: "my-sample-topic",
eventType: "Azure.Sdk.SampleEvent",
subject: "Event Subject",
dataVersion: "1.0",
data: {
hello: "world",
},
},
]);
Anular a serialização de um Evento
EventGridDeserializer
pode ser utilizado para anular a serialização de eventos fornecidos pelo Event Grid. Neste exemplo, temos um evento na cloud que é desserializado através EventGridDeserializer
da utilização e utilização isSystemEvent
para detetar o tipo de eventos que são.
const { EventGridDeserializer, isSystemEvent } = require("@azure/eventgrid");
async function main() {
const deserializer = new EventGridDeserializer();
const message = {
id: "5bc888aa-c2f4-11ea-b3de-0242ac130004",
source:
"/subscriptions/<subscriptionid>/resourceGroups/dummy-rg/providers/Microsoft.EventGrid/topics/dummy-topic",
specversion: "1.0",
type: "Microsoft.ContainerRegistry.ImagePushed",
subject: "Test Subject",
time: "2020-07-10T21:27:12.925Z",
data: {
hello: "world",
},
};
const deserializedMessage = await deserializer.deserializeCloudEvents(message);
console.log(deserializedMessage);
if (
deserializedMessage != null &&
deserializedMessage.length !== 0 &&
isSystemEvent("Microsoft.ContainerRegistry.ImagePushed", deserializedMessage[0])
) {
console.log("This is a Microsoft.ContainerRegistry.ImagePushed event");
}
}
main();
Resolução de problemas
Registo
Ativar o registo pode ajudar a descobrir informações úteis sobre falhas. Para ver um registo de pedidos e respostas HTTP, defina a variável de AZURE_LOG_LEVEL
ambiente como info
. Em alternativa, o registo pode ser ativado no runtime ao chamar setLogLevel
no @azure/logger
:
const { setLogLevel } = require("@azure/logger");
setLogLevel("info");
Para obter instruções mais detalhadas sobre como ativar os registos, pode ver os documentos do pacote @azure/logger.
Passos seguintes
Veja o diretório de exemplos para obter exemplos detalhados sobre como utilizar esta biblioteca.
Contribuir
Se quiser contribuir para esta biblioteca, leia o guia de contribuição para saber mais sobre como criar e testar o código.
Projetos relacionados
Azure SDK for JavaScript