使用Pulumi配置EventBridge定时触发AWS Batch任务部署报错
问题
我尝试配置EventBridge按固定调度规则触发AWS Batch作业,目前已可通过Pulumi成功部署Batch作业与EventBridge规则,但在部署EventTarget资源时遇到如下错误:
Creating EventBridge Target failed: ValidationException: Parameter(s) BatchParameters not supported for target: my_event_target-ca7145e.
我此前曾通过AWS控制台为同一个Batch作业配置过EventBridge触发规则,全程无问题且作业可正常运行。
相关配置代码如下:
const eventBridgeDeadLetterQueue = new aws.sns.Topic("myEventBridge", {}); const myJob = new aws.batch.JobDefinition("my_job", { containerProperties: pulumi.interpolate `{ "image": "${myImage}", "resourceRequirements": [ {"type": "VCPU", "value": "1"}, {"type": "MEMORY", "value": "4096"} ], "environment": [], "jobRoleArn": "${myEcsTaskRole.arn}", "executionRoleArn": "${myEcsTaskExecutionRole.arn}" }`, type: "container", timeout: { 'attemptDurationSeconds': 30 * 60 }, platformCapabilities: ['FARGATE'] }); const myRule = new aws.cloudwatch.EventRule("myRule", { description: "Fire a batch job", scheduleExpression: "cron(30 15 * * ? *)" }); // 若注释掉该target配置,即可成功完成部署 const myEventTarget = new aws.cloudwatch.EventTarget("my_event_target", { arn: eventBridgeDeadLetterQueue.arn, rule: myRule.name, inputPath: "$", // 我也曾尝试设置input: "",仍出现相同错误 batchTarget: { jobDefinition: myJob.arn, jobName: "My Job Name" } });
请问上述配置存在什么问题?
解答
核心问题是EventTarget的目标资源ARN配置错误。
aws.cloudwatch.EventTarget资源的arn字段,需要填写实际要触发的目标资源ARN,也就是AWS Batch作业队列的ARN,你当前填的是SNS死信主题的ARN。SNS主题类型的目标本身不支持BatchParameters配置参数,所以会抛出参数不支持的校验错误。- 死信队列不能填在主
arn字段,需要单独在Target的deadLetterConfig块里指定。 - 你使用的是Fargate类型的Batch作业,
batchTarget配置块还缺少必填的jobQueueArn(作业队列ARN)、platformCapability(指定为FARGATE)、Fargate任务必需的网络配置(子网、安全组参数),修正ARN问题后如果不补全这些参数,还会遇到新的校验错误。
修正后的EventTarget配置参考:
const myEventTarget = new aws.cloudwatch.EventTarget("my_event_target", { // 此处填写Batch作业队列的ARN,不是死信队列ARN arn: myBatchJobQueue.arn, rule: myRule.name, // 死信队列单独配置在deadLetterConfig下 deadLetterConfig: { arn: eventBridgeDeadLetterQueue.arn }, batchTarget: { jobDefinition: myJob.arn, jobName: "My Job Name", // 补全必填的作业队列ARN jobQueueArn: myBatchJobQueue.arn, // 指定Fargate平台能力 platformCapability: "FARGATE", // 补全Fargate任务必需的网络配置 networkConfiguration: { subnets: mySubnetIds, securityGroups: [mySecurityGroup.id], assignPublicIp: false } } });
你之前在控制台配置能成功,是因为控制台选择目标类型为AWS Batch时,会自动把目标ARN填充为Batch作业队列的ARN,不会出现把SNS主题填为Batch类型目标主ARN的情况。
内容的提问来源于stack exchange,提问作者uncountable
相关产品推荐
相关产品推荐

