Итак, я только что исправил странную ошибку в своем шаблоне CloudFormation, и, насколько я могу судить, текущее решение не опубликовано в Интернете. Это, конечно, не так уж удивительно, учитывая, что речь идет о планировщике EventBridge, но я все же хотел задокументировать проблему, чтобы люди могли найти решение через поиск, а не возиться со своими шаблонами, пока не наткнутся на ответ.

Сбой ResourceStatusReason

"#/FlexibleTimeWindow/Mode: #: соответствует только 1 подсхема из 2 #/FlexibleTimeWindow/Mode: ошибка проверки ограничения для ключевого слова [enum]"

Если вы видите указанную выше ошибку, причина почти наверняка в том, что вы установили для AWS::Scheduler::Schedule/FlexibleTimeWindow/Mode значение OFF, а не «OFF» с кавычками.

Вы меняете вышеуказанное, и все должно быть хорошо. Если вам интересно, зачем нужны кавычки, это немного сложнее. Очевидно, что кавычки, как правило, не требуются для строк в шаблоне .yaml, так как даже большая часть собственного образца документации Amazon для Scheduler дает следующий код без кавычек, заключающих FLEXIBLE:

      FlexibleTimeWindow:
        Mode: FLEXIBLE
        MaximumWindowInMinutes: 1

Итак, что дает? На самом деле это сводится к небольшой особенности анализа YAML в CloudFormation. CloudFormation использует спецификацию YAML 1.1, которой уже почти 20 лет, для анализа шаблонов, включая следующее регулярное выражение, которое используется для определения того, является ли лексема с неявным типом логическое значение:

y|Y|yes|Yes|YES|n|N|no|No|NO|
true|True|TRUE|false|False|FALSE|
on|On|ON|off|Off|OFF

Именно последнее значение, OFF, вызывает у нас столько хлопот. Несмотря на то, что наличие такого количества возможных логических значений раздражает и подвержено ошибкам, я не ожидаю, что AWS скоро перейдет к какой-либо из спецификаций yaml 1.2.X, учитывая, что такое изменение, вероятно, сломает множество сборок людей, поскольку действительный опции для логического значения были сокращены только до нижнего регистра true и false.

Заключение

В конце концов, я написал все это, потому что это была очень причудливая ошибка, которую нужно было попытаться определить, и я хотел сэкономить другим время на поиск решения, а также на поиск основной причины. Я надеюсь, что это помогло вам!