如何通过AWS CDK创建Eventbridge调度触发Glue数据质量规则集运行
实现AWS Glue数据质量规则集的CDK调度方案
要在CDK中不依赖Lambda实现Glue数据质量规则集的调度,核心是通过aws_scheduler.CfnSchedule直接调用Glue的API(对应控制台手动创建EventBridge调度的逻辑),以下是具体实现步骤:
1. 明确核心逻辑
控制台自动创建的调度本质是EventBridge Scheduler调用Glue的StartDataQualityRuleSetRun(运行现有规则集)或StartDataQualityRuleRecommendationRun(生成规则推荐)API。CDK中需手动配置Scheduler的目标为Glue服务,并传递API所需参数。
2. 创建IAM角色(Scheduler调用Glue的权限)
首先需要一个IAM角色,允许EventBridge Scheduler调用指定的Glue API,同时信任scheduler.amazonaws.com作为主体:
import * as iam from 'aws-cdk-lib/aws-iam'; import * as scheduler from 'aws-cdk-lib/aws-scheduler'; import * as cdk from 'aws-cdk-lib'; const app = new cdk.App(); const stack = new cdk.Stack(app, 'GlueDQScheduleStack'); // 1. 创建Scheduler调用Glue的角色 const schedulerGlueRole = new iam.Role(stack, 'SchedulerGlueDQInvokeRole', { assumedBy: new iam.ServicePrincipal('scheduler.amazonaws.com'), description: '允许EventBridge Scheduler调用Glue数据质量API', }); // 2. 给角色添加API调用权限(以StartDataQualityRuleSetRun为例) schedulerGlueRole.addToPolicy(new iam.PolicyStatement({ actions: ['glue:StartDataQualityRuleSetRun'], resources: [ // 规则集ARN `arn:aws:glue:${stack.region}:${stack.account}:ruleset/your-rule-set-name`, // 关联的Glue表ARN(如果数据源是Glue表) `arn:aws:glue:${stack.region}:${stack.account}:table/your-db-name/your-table-name`, ], }));
3. 创建EventBridge Scheduler调度
配置调度的触发频率、目标为Glue服务,并传入API请求参数:
// 创建调度(每天UTC凌晨1点运行,对应北京时间9点) const dqRuleSetSchedule = new scheduler.CfnSchedule(stack, 'GlueDQRuleSetSchedule', { scheduleExpression: 'cron(0 1 * * ? *)', flexibleTimeWindow: { mode: 'OFF' }, // 关闭灵活时间窗口,严格按调度执行 target: { // Glue服务的固定ARN格式 arn: `arn:aws:glue:${stack.region}:${stack.account}:service`, roleArn: schedulerGlueRole.roleArn, // API请求参数,需符合Glue API的JSON格式 input: JSON.stringify({ RuleSetName: 'your-rule-set-name', // 数据源配置(这里以Glue表为例,也可以用S3Path) DataSource: { GlueTable: { DatabaseName: 'your-db-name', TableName: 'your-table-name', // 分区表可指定PartitionValues: ['2024-05-20'] } }, // 执行数据质量任务的Glue角色ARN(需具备数据源访问、CloudWatch日志权限) Role: 'arn:aws:iam::123456789012:role/your-glue-execution-role', // 可选参数:WorkerType、NumberOfWorkers等 WorkerType: 'G.1X', NumberOfWorkers: 2, }), // 指定调用的Glue API动作和版本 awsParameters: { Action: 'StartDataQualityRuleSetRun', Version: '2017-03-31' // Glue API固定版本号 } }, // 可选:指定时区,比如'Asia/Shanghai' scheduleExpressionTimezone: 'Asia/Shanghai', });
4. 关键参数说明
scheduleExpression:支持cron或rate表达式,比如rate(1 day)表示每天运行一次target.awsParameters.Action:必须与Glue API名称完全匹配,如需生成规则推荐则改为StartDataQualityRuleRecommendationRuntarget.input:需严格遵循对应API的请求参数格式,可参考AWS官方文档的参数说明- 执行角色权限:
input中指定的Glue执行角色,必须具备访问数据源(S3/Glue表)、写入CloudWatch日志的权限
5. 规则推荐调度的适配
如果需要调度规则推荐任务,只需修改以下两处:
- 角色权限添加
glue:StartDataQualityRuleRecommendationRun - Scheduler的
awsParameters.Action改为StartDataQualityRuleRecommendationRun,同时调整input中的参数(比如无需指定RuleSetName,但仍需DataSource和Role)
内容的提问来源于stack exchange,提问作者vice
相关产品推荐
相关产品推荐

