创建自定义事件触发器以在 Azure 数据工厂中运行管道
适用于:Azure 数据工厂 Azure Synapse Analytics
事件驱动的体系结构是一种常见数据集成模式,其中涉及到事件的生成、检测、消耗和响应。 数据集成方案通常要求 Azure 数据工厂客户在特定事件发生时触发管道。 数据工厂与 Azure 事件网格的原生集成现在涵盖自定义主题。 将事件发送到事件网格主题。 数据工厂订阅主题,侦听并相应地触发管道。
本文中所介绍的集成依赖于 Azure 事件网格。 请确保订阅已注册事件网格资源提供程序。 有关详细信息,请参阅资源提供程序和类型。 你必须能够执行 Microsoft.EventGrid/eventSubscriptions/
操作。 此操作属于 EventGrid EventSubscription 参与者内置角色。
重要
如果在 Azure Synapse Analytics 中使用此功能,请确保订阅也注册到数据工厂资源提供程序。 否则,你会收到一条消息,指出“创建事件订阅失败”。
如果将管道参数与自定义事件触发器组合,则可以在管道运行中分析和引用自定义的 data
有效负载。 由于自定义事件有效负载中的 data
字段是自由格式的 JSON 键值结构,因此你可以控制事件驱动的管道运行。
重要
如果自定义事件有效负载中缺少以参数方式引用的密钥,trigger run
会失败。 你收到一条消息,指出由于 keyName
属性不存在,无法计算表达式的值。 在这种情况下,事件不会触发 pipeline run
。
在事件网格中设置自定义主题
若要在数据工厂中使用自定义事件触发器,需要先设置事件网格中的自定义主题。
转到事件网格并自行创建主题。 若要详细了解如何创建自定义主题,请参阅事件网格门户教程和 Azure CLI 教程。
注意
工作流不同于存储事件触发器。 此处,数据工厂不会设置主题。
数据工厂预期事件会遵循事件网格事件架构。 请确保事件有效负载具有以下字段:
[
{
"topic": string,
"subject": string,
"id": string,
"eventType": string,
"eventTime": string,
"data":{
object-unique-to-each-publisher
},
"dataVersion": string,
"metadataVersion": string
}
]
使用数据工厂创建自定义事件触发器
转到数据工厂并登录。
切换到“编辑”选项卡。查找铅笔图标。
在菜单上选择“触发器”,然后选择“新建/编辑”。
在“添加触发器”页中选择“选择触发器”,然后选择“+ 新建”。
在“类型”下,选择“自定义事件”。
从 Azure 订阅下拉列表中选择你的自定义主题,或手动输入事件主题范围。
注意
要在数据工厂中创建或修改自定义事件触发器,需要使用具有适当的 Azure 基于角色的访问控制 (Azure RBAC) 的 Azure 帐户。 不需要其他权限。 数据工厂服务主体不需要对事件网格的特殊权限。 有关访问控制的详细信息,请参阅基于角色的访问控制部分。
Subject begins with
和Subject ends with
属性允许筛选触发器事件。 这两个属性都是可选的。使用“+ 新建”添加要筛选的“事件类型”。 自定义事件触发器列表使用 OR 关系。 如果某个自定义事件的
eventType
属性与列表中的属性匹配,则将触发管道运行。 事件类型不区分大小写。 例如,在下面的屏幕截图中,触发器匹配主题以“factories”开头的所有copycompleted
或copysucceeded
事件。自定义事件触发器可以分析自定义
data
数据有效负载,并将其发送到管道。 创建管道参数,然后在“参数”页上填写值。 使用@triggerBody().event.data._keyName_
格式分析数据有效负载,并将值传递给管道参数。有关详细说明,请参见:
输入参数后,选择“确定”。
高级筛选
自定义事件触发器支持高级筛选功能,类似于事件网格高级筛选。 这些条件筛选器允许管道基于事件有效负载的值进行触发。 例如,事件有效负载中可能有一个名为“Department”的字段,管道仅应在“Department”等于“Finance”时触发。 还可以指定复杂的逻辑,例如,date 字段在列表 [1, 2, 3, 4, 5] 中,month 字段不在列表 [11, 12] 中,以及 tag 字段是否包含 [Fiscal Year 2021、FiscalYear2021 或 FY2021]。
截至目前,自定义事件触发器仅支持事件网格中的一部分高级筛选运算符。 支持以下筛选条件:
NumberIn
NumberNotIn
NumberLessThan
NumberGreaterThan
NumberLessThanOrEquals
NumberGreaterThanOrEquals
BoolEquals
StringContains
StringBeginsWith
StringEndsWith
StringIn
StringNotIn
选择“+ 新建”以添加新的筛选条件。
自定义事件触发器还遵循与事件网格相同的限制,例如:
- 每个自定义事件触发器有 5 个高级筛选器,所有筛选器有 25 个筛选器值。
- 每个字符串值有 512 个字符。
in
和not in
运算符的 5 个值。- 键中不能含有
.
(点)字符,例如john.doe@contoso.com
。 目前不支持键中使用转义字符。 - 可以在多个筛选器中使用相同的键。
数据工厂依赖于事件网格 API 的最新正式发布 (GA) 版本。 随着新的 API 版本不断正式发布,数据工厂将扩展其对更多高级筛选运算符的支持。
JSON 架构
下表概述了与自定义事件触发器相关的架构元素。
JSON 元素 | 说明 | 类型 | 允许的值 | 必需 |
---|---|---|---|---|
scope |
事件网格主题的 Azure 资源管理器资源 ID。 | String | Azure 资源管理器 ID | 是的。 |
events |
导致此触发器触发的事件的类型。 | 字符串数组 | 是,至少需要一个值。 | |
subjectBeginsWith |
subject 字段必须以所提供的模式开头,触发器才会触发。 例如,factories 仅会针对以 factories 开头的事件主题引发触发器。 |
字符串 | 否。 | |
subjectEndsWith |
subject 字段必须以所提供的模式结尾,触发器才会触发。 |
字符串 | 否。 | |
advancedFilters |
JSON blob 的列表,每个指定一个筛选条件。 每个 blob 都指定 key 、operatorType 和 values 。 |
JSON blob 的列表 | 否。 |
基于角色的访问控制
数据工厂使用 Azure RBAC 来禁止未经授权的访问。 若要正常工作,数据工厂需要访问权限以执行以下操作:
- 侦听事件。
- 订阅事件更新。
- 触发链接到自定义事件的管道。
若要成功创建或更新自定义事件触发器,需要使用具有相应访问权限的 Azure 帐户登录到数据工厂。 否则,操作将会失败并显示消息“拒绝访问”。
数据工厂不需要对事件网格实例具有特殊权限。 也不需要为操作的数据工厂服务主体分配特殊 Azure RBAC 角色权限。
具体来说,您需要具有 /subscriptions/####/resourceGroups//####/providers/Microsoft.EventGrid/topics/someTopics
的 Microsoft.EventGrid/EventSubscriptions/Write
权限。
相关内容
- 获取有关触发器执行的详细信息。
- 了解如何在管道中引用触发器元数据。