Common Expression Language (CEL) é uma linguagem de código aberto sem completude de Turing que pode ser usada para avaliar expressões. Cada inscrição no Eventarc Advanced inclui uma expressão condicional escrita em CEL que é usada para avaliar e filtrar mensagens. No Eventarc Advanced, também é possível usar a CEL para fazer o seguinte:
Controlar o acesso de publicação aplicando uma expressão condicional CEL a um atributo de contexto de evento
Transformar o conteúdo dos dados de eventos escrevendo expressões de transformação usando a CEL
Em geral, uma expressão condicional consiste em uma ou mais instruções que são
unidas por operadores lógicos (&&, || ou !). Cada instrução expressa uma
regra baseada em atributo que é aplicada aos dados. Geralmente, os operadores são usados para comparar o valor contido em uma variável com um valor literal.
Por exemplo, se o valor de message.type for
google.cloud.dataflow.job.v1beta3.statusChanged, a expressão
message.type == "google.cloud.dataflow.job.v1beta3.statusChanged" será avaliada como
True.
Para ver mais informações, consulte os seguintes tópicos:
- Criar uma inscrição para receber eventos
- Controlar o acesso de publicação
- Transformar eventos recebidos
- Definição de linguagem CEL
Atributos disponíveis
Todos os atributos de contexto de evento podem ser acessados como variáveis por um objeto message predefinido. Essas variáveis são preenchidas com valores com base nos atributos de contexto de evento no tempo de execução. Uma inscrição pode usar uma variável para expressar um determinado atributo. Por exemplo, message.type retorna o valor do type
atributo.
Observe o seguinte:
Os eventos podem incluir, e as inscrições podem usar, qualquer número de atributos personalizados adicionais do CloudEvents com nomes distintos (também conhecidos como atributos de extensão). No entanto, eles são representados como tipos
Stringem expressões CEL, independentemente do formato real. É possível usar uma expressão CEL para converter os valores em outros tipos.Não é possível avaliar inscrições ou controlar o acesso de publicação com base no conteúdo do payload do evento.
message.dataemessage.data_base64são variáveis reservadas e não podem ser usadas em expressões. No entanto, a CEL é compatível ao transformar dados de eventos o que permite modificar o conteúdo do payload do evento (por exemplo, para atender ao contrato de API de um destino específico).
Os atributos a seguir podem ser acessados ao avaliar expressões condicionais:
| Atributo | Tipo de atributo | Descrição |
|---|---|---|
message.datacontenttype |
String |
O tipo de conteúdo do valor data |
message.dataschema |
URI |
Identifica o esquema a que os data aderem |
message.id |
String |
Identifica o evento. Os produtores precisam garantir que source +
id seja exclusivo para cada evento distinto |
message.source |
URI-reference |
Identifica o contexto em que um evento aconteceu |
message.specversion |
String |
A versão da especificação do CloudEvents que o evento usa |
message.subject |
String |
Descreve o assunto do evento no contexto do produtor de eventos
(identificado por source) |
message.time |
Timestamp |
Timestamp de quando a ocorrência aconteceu. Pode ser definido para outro
horário (como o atual) pelo produtor do CloudEvents. No entanto, todos
os produtores da mesma source precisam ser consistentes |
message.type |
String |
Descreve o tipo de evento relacionado à ocorrência de origem. Consulte os tipos de eventos do Google com suporte no Eventarc |
Operadores e funções
É possível usar operadores e funções para criar expressões lógicas complexas.
Os operadores lógicos, como &&, || e !, permitem verificar várias
variáveis em uma expressão condicional. Por exemplo,
message.time.getFullYear() < 2020 && message.type == "google.cloud.dataflow.job.v1beta3.statusChanged"
une duas instruções e exige que ambas sejam True para produzir um
resultado geral de True.
Os operadores de manipulação de strings, como x.contains('y'), correspondem a strings ou substrings definidas e permitem desenvolver regras para corresponder a mensagens sem listar todas as combinações possíveis.
O Eventarc Advanced também oferece suporte a funções de extensão, como merge e flatten, que podem ser usadas para transformar dados e simplificar a modificação de eventos recebidos de um barramento.
Consulte a lista de operadores e funções predefinidos da CEL e macros predefinidas da CEL.
Operadores lógicos
A tabela a seguir descreve os operadores lógicos com suporte no Eventarc Advanced.
| Expressão | Descrição |
|---|---|
x == "my_string" |
Retorna True se x for igual ao argumento literal de string constante. |
x == R"my_string\n" |
Retorna True se x for igual à literal de string bruta fornecida que não interpreta sequências de escape. As literais de string bruta são convenientes para expressar strings que precisam usar sequências de escape, como expressões regulares ou texto de programa. |
x == y |
Retorna True se x for igual a
y. |
x != y |
Retorna True se x não for igual a
y. |
x && y |
Retorna True se x e y
forem True. |
x || y |
Retorna True se x, y ou ambos
forem True. |
!x |
Retorna True se o valor booleano x for
False, ou retorna False se o valor booleano
x for True. |
m['k'] |
Se a chave k estiver presente, retorna o valor na chave
k no mapa string a string m. Se a chave
k não estiver presente, retorna um erro que
faz com que a regra em avaliação não corresponda. |
Operadores de manipulação de strings
A tabela a seguir descreve os operadores de manipulação de strings com suporte no Eventarc Advanced.
| Expressão | Descrição |
|---|---|
double(x) |
Converte o resultado da string de x em um tipo double. O valor convertido pode ser usado para comparar números de usar pontos flutuantes
com operadores aritméticos padrão, como > e
<=. Isso funciona apenas para valores que podem usar pontos flutuantes. |
int(x) |
Converte o resultado da string de x em um tipo int. O valor convertido pode ser usado para comparar números inteiros com
operadores aritméticos padrão, como > e
<=. Isso funciona apenas para valores que podem ser números inteiros. |
x + y |
Retorna a string concatenada xy. |
x.contains(y) |
Retorna True se a string x contiver a substring y. |
x.endsWith(y) |
Retorna True se a string x terminar com a
substring y. |
x.join() |
Retorna uma nova string em que os elementos de uma lista de strings são
concatenados. Aceita um separador opcional que é colocado entre os
elementos na string resultante. Por exemplo,
a expressão a seguir retorna 'hello world':
|
x.lowerAscii() |
Retorna uma nova string em que todos os caracteres ASCII estão em letras minúsculas. |
x.matches(y) |
Retorna O padrão RE2 é compilado usando a opção RE2::Latin1 que desativa os recursos Unicode. |
x.replace(y,z) |
Retorna uma nova string em que as ocorrências da substring y são
substituídas pela substring z. Aceita um argumento opcional que
limita o número de substituições a serem feitas. Por exemplo, a expressão a seguir
retorna 'wello hello':
|
x.split(y) |
Retorna uma lista de strings divididas da entrada pelo separador
y. Aceita um argumento opcional que limita o número de
substrings a serem produzidas. Por exemplo, a expressão a seguir retorna
['hello', 'hello hello']:
|
x.startsWith(y) |
Retorna True se a string x começar com a substring y. |
x.upperAscii() |
Retorna uma nova string em que todos os caracteres ASCII estão em letras maiúsculas. |
Funções de expressão regular
A tabela a seguir descreve as funções de expressão regular com suporte no Eventarc Advanced.
| Expressão | Descrição |
|---|---|
re.capture(target,regex) |
Usa
|
re.captureN(target,regex) |
Usa regex para capturar o nome e a string do grupo (para
grupos nomeados) e o índice e a string do grupo (para grupos não nomeados) da
target string e retorna um mapa de pares de chave e valor. Por
exemplo, a expressão a seguir retorna
{"1": "user", "Username": "testuser", "Domain": "testdomain"}:
|
re.extract(target,regex,rewrite) |
Usa regex para extrair valores de grupo correspondentes da
target string e retorna uma string dos valores extraídos
formatada com base no rewrite argumento. Por exemplo,
a expressão a seguir retorna "example.com":
|
x.matches(regex) |
Retorna O padrão RE2 é compilado usando a opção RE2::Latin1 que desativa os recursos Unicode. |
As expressões regulares seguem a
sintaxe RE2. Observe que o R que precede as expressões regulares indica uma string bruta que não exige escape.
Funções da extensão
O Eventarc Advanced oferece suporte a determinadas funções de extensão que podem ser usadas para transformar os dados de eventos recebidos por um barramento. Para mais informações e exemplos, consulte Transformar eventos recebidos.