Я нахожусь в процессе написания простой программы, в которой я хочу выполнить задание только 1 раз. Я посмотрел на Amazon Cloudwatch и, в сочетании с AWS Lambda, это прекрасно согласуется с моим требованием.
Я использую Java AWS SDK (версия 1.11.711
) для динамического создания правил из code.
Вот мой псевдокод для генерации запроса PutResultRequest:
final PutRuleRequest putRuleRequest = new PutRuleRequest().withName("new_rule_name").withDescription("my first rule")
.withScheduleExpression("0 11 24 * ? 2020").withState(RuleState.ENABLED);
Это выражение cron отображается как Invalid в cronmaker, но показывает следующую дату выполнения, когда я поместите это в график облачных часов в интерфейсе пользователя.
Cronmaker: ![enter image description here](https://i.stack.imgur.com/rp1Vo.png)
Cloudwatch: ![enter image description here](https://i.stack.imgur.com/UjFDG.png)
SDK дает мне ошибку даже для этого выражения 0 17 24 * ? 2020
Стек трассировки ошибок выглядит следующим образом -
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
Что я делаю не так?