I am in the process of writing a simple program where I want to execute a job only 1 time. I looked at Amazon's Cloudwatch events and, couples with AWS Lambda, this fits nicely with my requirement.
Im using the Java AWS SDK (version 1.11.711
) to create rules dynamically from the code.
Here is my pseudo code to generate a PutResultRequest :
final PutRuleRequest putRuleRequest = new PutRuleRequest().withName("new_rule_name").withDescription("my first rule")
.withScheduleExpression("0 11 24 * ? 2020").withState(RuleState.ENABLED);
This cron expression is shown as Invalid on cronmaker but shows me next execution date when I put this in cloudwatch schedule on the UI.
The SDK gives me an error for even this expression 0 17 24 * ? 2020
Stack trace of the errors is as follows -
Exception in thread "main" com.amazonaws.services.cloudwatchevents.model.AmazonCloudWatchEventsException: Parameter ScheduleExpression is not valid. (Service: AmazonCloudWatchEvents; Status Code: 400; Error Code: ValidationException; Request ID: dd5dc5fb-a209-4ddb-ad58-4e468843149d)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1742)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleServiceErrorResponse(AmazonHttpClient.java:1371)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1347)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1127)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:784)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:752)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:726)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:686)
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:668)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:532)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:512)
at com.amazonaws.services.cloudwatchevents.AmazonCloudWatchEventsClient.doInvoke(AmazonCloudWatchEventsClient.java:2685)
at com.amazonaws.services.cloudwatchevents.AmazonCloudWatchEventsClient.invoke(AmazonCloudWatchEventsClient.java:2652)
at com.amazonaws.services.cloudwatchevents.AmazonCloudWatchEventsClient.invoke(AmazonCloudWatchEventsClient.java:2641)
at com.amazonaws.services.cloudwatchevents.AmazonCloudWatchEventsClient.executePutRule(AmazonCloudWatchEventsClient.java:2031)
at com.amazonaws.services.cloudwatchevents.AmazonCloudWatchEventsClient.putRule(AmazonCloudWatchEventsClient.java:2002)
Disconnected from the target VM, address: '127.0.0.1:63315', transport: 'socket'
Process finished with exit code 1
What am i doing wrong ?
Can you please try -
.withScheduleExpression("cron(0 11 24 * ? 2020)")
https://docs.aws.amazon.com/cli/latest/reference/events/put-rule.html