in source/services/tasks/tasks.ts [873:945]
async putCloudWatchEventRule(task: object): Promise<void | ErrorReturn> {
// Only if the trigger type is schedule, CloudWatch Events rule is going to be created.
if (task['triggerType'] === TriggerType.Schedule) {
// Puts a rule
let ruleParams: AWS.CloudWatchEvents.PutRuleRequest = {
Name: task['taskId'],
Description: task['description'],
State: task['enabled'] ? 'ENABLED' : 'DISABLED'
};
if (task['scheduledType'] === ScheduledType.CronExpression) {
ruleParams['ScheduleExpression'] = `cron(${task['scheduledCronExpression']})`;
} else {
ruleParams['ScheduleExpression'] = `rate(${task['scheduledFixedRateInterval']} ${task['scheduledFixedRateType']})`;
}
let ruleArn = '';
try {
let result = await this.cloudWatchEvents.putRule(ruleParams).promise();
ruleArn = result.RuleArn;
} catch (error) {
LOGGER.error(`putCloudWatchEventRule Error: ${JSON.stringify(error)}`);
return Promise.reject(
COMMON_UTIL.getErrorObject('PutCloudWatchEventRuleFailure', 500, 'Error occurred while putting a CloudWatchEvents rule.', error)
);
}
// Puts a target
let targetParams: AWS.CloudWatchEvents.PutTargetsRequest = {
Rule: ruleParams.Name,
Targets: []
};
task['manualTrigger'] = false;
targetParams.Targets = [
{
Id: task['taskId'],
Arn: this.resourceSelectorLambdaArn,
Input: JSON.stringify(task)
}
]
try {
await this.cloudWatchEvents.putTargets(targetParams).promise();
delete task['manualTrigger'];
} catch (error) {
LOGGER.error(`putCloudWatchEventRule Error: ${JSON.stringify(error)}`);
return Promise.reject(
COMMON_UTIL.getErrorObject('PutCloudWatchEventRuleFailure', 500, 'Error occurred while putting CloudWatchEvents targets.', error)
);
}
// Adds a permission to Lambda
let lambdaParams: AWS.Lambda.AddPermissionRequest = {
Action: 'lambda:InvokeFunction',
FunctionName: this.resourceSelectorLambdaArn,
Principal: 'events.amazonaws.com',
SourceArn: ruleArn,
StatementId: task['taskId']
};
try {
await this.lambda.addPermission(lambdaParams).promise();
} catch (error) {
LOGGER.error(`putCloudWatchEventRule Error: ${JSON.stringify(error)}`);
return Promise.reject(
COMMON_UTIL.getErrorObject('PutCloudWatchEventRuleFailure', 500, 'Error occurred while adding Lambda permission.', error)
);
}
}
return Promise.resolve();
}