En este tema, se muestra cómo supervisar los cambios de los elementos con una condición personalizada. Consulta el tema general para obtener más información sobre las notificaciones en tiempo real.
Descripción general
Para ver solo un tipo de cambio en un recurso determinado, puedes agregar una condición a tu feed.
El objeto condition
es opcional. Si un feed no tiene un objeto condition
, el destino configurado recibe todas las notificaciones de cambios en los recursos.
El objeto condition
tiene la siguiente estructura:
"condition": {
"title": "...",
"description": "...",
"expression": "..."
}
Title
y description
son opcionales. Estos campos pueden ayudarte a identificar y describir la condición.
El campo expression
define la expresión usada para evaluar la notificación en Common Expression Language (CEL). La expresión de la condición puede contener varias declaraciones y estas se combinan con operadores lógicos, según la especificación del lenguaje CEL.
Usa CEL
Common Expression Language (CEL) es el lenguaje de expresión que se usa para especificar una condición de feed. Está diseñado para expresar expresiones lógicas basadas en atributos. Para obtener más información, consulta la especificación de CEL y su definición de lenguaje.
En una condición de feed, CEL se usa para tomar decisiones booleanas basadas en atributos
de datos no estructurados. Una expresión de condición consta de una o más sentencias unidas
con operadores lógicos (&&
, ||
) Cada sentencia expresa un valor basado en atributos
regla de control que se aplica al TemporalAsset
para determinar si el
se envía la notificación.
Las siguientes funciones de CEL son las más importantes para las condiciones del feed:
Variables: Las condiciones usan variables para expresar un atributo determinado, como
temporal_asset.deleted
(de tipo booleano) otemporal_asset.asset.name
(de tipoString
). Estas variables se propagan con valores en función del contexto en el entorno de ejecución.Operadores: Cada tipo de datos, como
String
, admite un conjunto de operadores que se pueden usar para crear una expresión lógica. Por lo general, se usan para comparar el valor contenido en una variable con un literal valor, comotemporal_asset.asset.name == "//cloudresourcemanager.googleapis.com/projects/12345"
En este ejemplo, si el valor de entrada detemporal_asset.asset.name
es//cloudresourcemanager.googleapis.com/projects/12345
, la expresión se evalúa comotrue
.Funciones: Una función es un operador compuesto para los tipos de datos que admiten operaciones más complejas. En las expresiones de condición, hay funciones predefinidas que se pueden usar junto con un tipo de datos determinado. Por ejemplo:
temporal_asset.asset.name.contains("keyword")
usa unString
contiene función y se evalúa comotrue
si el valor detemporal_asset.asset.name
contiene "palabra clave".Operadores lógicos: Las condiciones admiten operadores lógicos que se pueden usar para compilar expresiones lógicas complejas a partir de instrucciones de expresiones simples:
&&
. y||
. Estos operadores lógicos permiten usar múltiples entradas variables en una expresión de condición. Por ejemplo:temporal_asset.deleted && temporal_asset.window.start_time.getFullYear() > 2020
une dos declaraciones simples y requiere que ambas declaraciones se cumplan para para producir un resultado de evaluación general detrue
.
Para obtener más información sobre las características de CEL, consulta la definición del lenguaje.
Usa variables de condición
Las variables de condición le permiten crear condiciones para diferentes atributos. Las variables de condición admitidas son las siguientes:
- temporal_asset: El cambio actual de los elementos en TemporalAsset
de un conjunto de datos
tengan un formato común. Si la condición se evalúa como verdadera, el
TemporalAsset
se envía al destino configurado.
Ejemplos de expresiones de condición
La siguiente expresión de condición envía notificaciones sobre eventos de creación:
temporal_asset.deleted == false &&
temporal_asset.prior_asset_state == google.cloud.asset.v1.TemporalAsset.PriorAssetState.DOES_NOT_EXIST
La siguiente expresión de condición envía notificaciones para los recursos ubicados en carpetas 12345
y 23456
:
"folders/12345" in temporal_asset.asset.ancestors ||
"folders/23456" in temporal_asset.asset.ancestors
La siguiente expresión de condición envía notificaciones cuando se agregan nuevas reglas permitidas a los firewalls si asset_type
ya está configurado como compute.googleapis.com/Firewall
en el feed.
size(temporal_asset.asset.resource.data.allowed) >
size(temporal_asset.prior_asset.resource.data.allowed)
La siguiente expresión de condición envía notificaciones para las instancias de VM con el tipo de máquina n1-standard-1
si asset_type
ya está configurado como compute.googleapis.com/Instance
en el feed.
temporal_asset.asset.resource.data.machineType.endsWith('/machineTypes/n1-standard-1')
La siguiente expresión de condición envía notificaciones para depósitos de almacenamiento con alguna política de IAM para allUsers
, si suponemos que asset_type
se establece en storage.googleapis.com/Bucket
y content_type
se establece en IAM_POLICY
en el feed.
temporal_asset.asset.iam_policy.bindings.exists(b, b.members.exists(m, m == "allUsers"))
La siguiente expresión de condición envía una notificación cuando se borra un bucket de almacenamiento con una clave test
en su etiqueta:
temporal_asset.deleted == true && temporal_asset.prior_asset_state == google.cloud.asset.v1.TemporalAsset.PriorAssetState.PRESENT && "test" in temporal_asset.prior_asset.resource.data.labels
Limitaciones conocidas
La mayoría de los nombres de variables en las expresiones de condiciones se muestran con snake_case. La única excepción son los nombres de variables de los subcampos de
data
en el objeto Recurso, que se muestran con CamelCase.Las expresiones de condiciones tienen un límite de longitud de 3,000 caracteres.
Algunas validaciones en las expresiones de condiciones se realizan durante el momento de la creación o actualización del feed. Sin embargo, esas validaciones no son integrales, especialmente las de las condiciones establecidas en el campo
temporal_asset.asset.resource.data
, que tiene un tipo dinámico. Recomendamos las condiciones simples para feeds con elasset_type
adecuado especificado en el feed. Si se producen errores de validación durante el momento de la evaluación, no se enviará la notificación y se registrarán los errores. Más información sobre cómo ver los registros.Para los tipos dinámicos de
temporal_asset.asset.resource.data
, las condiciones especificadas en campos faltantes activan errores de entorno de ejecución, y no se publican notificaciones. Por ejemplo, para la condicióntemporal_asset.asset.resource.data.name != "my_name"
, si falta el camponame
en una actualización, la evaluación fallará y no recibirás notificaciones. Si tu condición solo funciona en presencia de ciertos campos, verifica la existencia en la condición para asegurarte de que se evalúe de forma apropiada.Los tipos de enumeración estáticas pueden aparecer como nombres de rutas completamente calificados o números enteros sin procesar. Por ejemplo, las siguientes expresiones son válidas para
prior_asset_state
:temporal_asset.prior_asset_state == google.cloud.asset.v1.TemporalAsset.PriorAssetState.DOES_NOT_EXIST
y
temporal_asset.prior_asset_state == 3
Los tipos de enumeración dinámicos de
temporal_asset.asset.resource.data
se representan como strings sin procesar. Por ejemplo, la siguiente expresión es válida para el tipo de recursocloudresourcemanager.googleapis.com/Project
:temporal_asset.asset.resource.data.lifecycleState == "ACTIVE"