Это в значительной степени зависит от масштаба. Если у вас будет только несколько запланированных в любой момент времени, я бы использовал подход событий CloudWatch. Это очень низкие накладные расходы и не требует выполнения кода и ничего не делать.
Если вы ожидаете МНОГО расписаний, то подход DynamoDB, вероятно, является лучшим подходом. Запустите лямбду по фиксированному расписанию, посмотрите, какие записи еще не были запущены, и соответствуют ли они текущему времени или равны ему. В этой модели вы захотите удалить записи, которые вы уже обработали (или пометить их каким-либо образом), чтобы вы больше не обрабатывали их. Не полагайтесь на расписание, запускаемое с определенными интервалами и проверяющее записи между последним и текущим временем, если только вы не записываете, когда это было в последний раз (то есть не предполагайте, что вы запускали минуту go, потому что вы запланировали это запускать каждую минуту).
Шаговые функции могут работать, если время не слишком велико. Вы можете включить задержку в шаг, который заставит его просто сидеть и ждать. Задержки в пошаговых функциях - это просто задержки, а не запланированное время, так что вам придется выяснить, что задерживает себя, и надеяться, что оно срабатывает достаточно близко к тому времени, когда вы этого ожидаете. Этот вариант не плох для среднего и низкого уровня громкости.