由于 Cloudwatch Events 支持 Year 用于 cron 表达式这一事实,您可以使用非常具体的 schedule expression 创建一次出现的 Cloudwatch Event Rule。您需要大致知道部署完成需要多长时间。虽然这种方法不是即时的,但它可以足够接近您的目的,而无需复杂的自定义资源或部署后触发,只要几分钟的缓冲是可以的。
例如在 Typescript 中,这可能如下所示:
- 获取您想要定位的未来日期并添加一些分钟(在本例中为 10 分钟):
const date = new Date();
const minutesToAdd = 10;
const future = new Date(date.getTime() + minutesToAdd * 60000);
- 将那个未来日期转换为 cron expression 以准确地表示那个单一的日期,然后存储表达式,将
Day of Week 设置为 ? 以表示“没有特定值”,因为我们正在设置月份中的某一天。李>
const minutes = future.getUTCMinutes();
const hours = future.getUTCHours();
const days = future.getUTCDay();
const months = future.getUTCMonth() + 1;
const years = future.getUTCFullYear();
let futureCron = `${minutes} ${hours} ${days} ${months} ? ${years}`;
- 创建schedule expression
const futureEvent = events.schedule.expression('cron(' + dateToCron(future) + ')');
- 使用表达式schedule an event rule
new events.Rule(this, 'immediateTrigger', {
schedule: futureEvent
targets: [new targets.LambdaFunction(someHandler)]
}
这将导致计划事件仅在 UTC 时间的一个时间点发生。例如,如果您部署时是 2021 年 12 月 5 日下午 2:55,它将为 03:05 PM, on day 5 of the month, only in December, only in 2021 创建一个表达式
我需要这种确切类型的设置,所以我 created a library for this purpose 简化了上述过程,为给定的未来日期生成一次 OnDeploy 或一次 At 的计划表达式。虽然任何人都可以免费使用它,但您应该了解它的工作原理以及它是否是满足您需求的正确选择。