List of usage examples for com.amazonaws.services.cloudwatchevents.model PutRuleRequest setScheduleExpression
public void setScheduleExpression(String scheduleExpression)
The scheduling expression: for example, From source file:squash.deployment.lambdas.ScheduledCloudwatchEventCustomResourceLambda.java License:Apache License From source file:squash.deployment.lambdas.ScheduledCloudwatchEventCustomResourceLambda.java License:Apache License From source file:squash.deployment.lambdas.ScheduledCloudwatchEventCustomResourceLambda.java License:Apache License"cron(0 20 * * ?
Usage
ImmutablePair<String, String> setUpPreMidnightRuleAndTargets(String ruleName, String applyBookingRulesTargetId,
String applyBookingRulesLambdaArn, String apiGatewayBaseUrl, String databaseBackupTargetId,
String databaseBackupLambdaArn, AmazonCloudWatchEvents amazonCloudWatchEventsClient,
LambdaLogger logger) {/* w w w . j ava2 s. c o m*/
// Create pre-midnight rule with Cron expression
logger.log("Creating pre-midnight rule");
PutRuleRequest putRuleRequest = new PutRuleRequest();
// Put just before midnight to allow rule-based bookings to be created
// before anyone else has a chance to create bookings that might clash.
// This is 9pm UTC - i.e. 10pm BST.
putRuleRequest.setScheduleExpression("cron(0 21 * * ? *)");
putRuleRequest.setName(ruleName);
putRuleRequest.setState(RuleState.ENABLED);
putRuleRequest.setDescription(
"This runs just before midnight every day to apply booking rules for the following day and to backup all bookings.");
ImmutablePair<String, String> ruleArn = new ImmutablePair<>("UpdateBookingsServiceEventRuleArn",
amazonCloudWatchEventsClient.putRule(putRuleRequest).getRuleArn());
// Create target with applyBookingRules and backupBookings lambdas, and
// attach rule to it.
logger.log("Attaching applyBookingRules lambda to the pre-midnight rule");
Target applyBookingRulesTarget = new Target();
applyBookingRulesTarget.setArn(applyBookingRulesLambdaArn);
applyBookingRulesTarget.setInput("{\"apiGatewayBaseUrl\" : \"" + apiGatewayBaseUrl + "\"}");
applyBookingRulesTarget.setId(applyBookingRulesTargetId);
Collection<Target> midnightTargets = new ArrayList<>();
midnightTargets.add(applyBookingRulesTarget);
logger.log("Attaching database backup lambda to the pre-midnight rule");
Target databaseBackupTarget = new Target();
databaseBackupTarget.setArn(databaseBackupLambdaArn);
databaseBackupTarget.setId(databaseBackupTargetId);
midnightTargets.add(databaseBackupTarget);
PutTargetsRequest putTargetsRequest = new PutTargetsRequest();
putTargetsRequest.setRule(ruleName);
putTargetsRequest.setTargets(midnightTargets);
amazonCloudWatchEventsClient.putTargets(putTargetsRequest);
logger.log("Targets attached to the pre-midnight rule");
return ruleArn;
}
ImmutablePair<String, String> setUpPostMidnightRuleAndTargets(String ruleName, String websiteRefreshTargetId,
String updateBookingsLambdaArn, String apiGatewayBaseUrl,
AmazonCloudWatchEvents amazonCloudWatchEventsClient, LambdaLogger logger) {
// Create post-midnight rule with Cron expression
logger.log("Creating post-midnight rule");
PutRuleRequest putRuleRequest = new PutRuleRequest();
// Put just after midnight to avoid any timing glitch i.e. somehow still
// thinking it's the previous day when it runs. This is 10 minutes after
// midnight UTC - i.e. 1.10AM BST.
putRuleRequest.setScheduleExpression("cron(10 0 * * ? *)");
putRuleRequest.setName(ruleName);/*from www.j a va 2 s. c o m*/
putRuleRequest.setState(RuleState.ENABLED);
putRuleRequest.setDescription(
"This runs just after midnight every day to refresh all the squash booking pages in S3");
ImmutablePair<String, String> ruleArn = new ImmutablePair<>("UpdateFrontendServiceEventRuleArn",
amazonCloudWatchEventsClient.putRule(putRuleRequest).getRuleArn());
// Create target with updateBookings lambda, and attach rule to it.
logger.log("Attaching updataBookings lambda to the post-midnight rule");
Target updateBookingsTarget = new Target();
updateBookingsTarget.setArn(updateBookingsLambdaArn);
updateBookingsTarget.setInput("{\"apiGatewayBaseUrl\" : \"" + apiGatewayBaseUrl + "\"}");
updateBookingsTarget.setId(websiteRefreshTargetId);
Collection<Target> midnightTargets = new ArrayList<>();
midnightTargets.add(updateBookingsTarget);
PutTargetsRequest putMidnightTargetsRequest = new PutTargetsRequest();
putMidnightTargetsRequest.setRule(ruleName);
putMidnightTargetsRequest.setTargets(midnightTargets);
amazonCloudWatchEventsClient.putTargets(putMidnightTargetsRequest);
return ruleArn;
}
ImmutablePair<String, String> setUpPrewarmerRuleAndTargets(String ruleName, String prewarmerTargetId,
String createOrDeleteBookingsLambdaArn, AmazonCloudWatchEvents amazonCloudWatchEventsClient,
LambdaLogger logger) {//from w w w .j a v a 2 s . co m
// Create prewarmer rule with Rate expression
logger.log("Creating prewarmer rule");
PutRuleRequest putRuleRequest = new PutRuleRequest();
putRuleRequest.setScheduleExpression("rate(5 minutes)");
putRuleRequest.setName(ruleName);
putRuleRequest.setState(RuleState.ENABLED);
putRuleRequest.setDescription("This runs every 5 minutes to prewarm the squash bookings lambdas");
ImmutablePair<String, String> ruleArn = new ImmutablePair<>("PrewarmerEventRuleArn",
amazonCloudWatchEventsClient.putRule(putRuleRequest).getRuleArn());
// Create target with bookings lambda, and attach rule to it
logger.log("Attaching bookings lambda to the prewarmer rule");
Target prewarmerTarget = new Target();
prewarmerTarget.setArn(createOrDeleteBookingsLambdaArn);
prewarmerTarget.setInput("{\"slot\" : \"-1\"}");
prewarmerTarget.setId(prewarmerTargetId);
Collection<Target> prewarmerTargets = new ArrayList<>();
prewarmerTargets.add(prewarmerTarget);
PutTargetsRequest putPrewarmerTargetsRequest = new PutTargetsRequest();
putPrewarmerTargetsRequest.setRule(ruleName);
putPrewarmerTargetsRequest.setTargets(prewarmerTargets);
amazonCloudWatchEventsClient.putTargets(putPrewarmerTargetsRequest);
return ruleArn;
}