Я в свое время очень полюбил provisioner’ы Terraform и обрадовался, когда узнал о существовании cfn-init.
Что из себя это представляет? Сам по себе cfn-init это обычный helper script, который идет из коробки или ставится на раз-два. В CFN декларируются метаданные с ключом
AWS::CloudFormation::Init, внутри декларируем конфигурацию: пакеты, файлы, команды, сервисы и т.д.Штука прикольная, умеет тащить файлы из GitHub и S3, ставить пакеты для разных дистрибутивов и даже поддерживает Windows.
Для одного большого материала (о нем я тоже обязательно расскажу, но сильно позже), решил поднять LEMP стек на ЕС2... и вижу, что модуль files не умеет создавать директории. Файлы - да, символические ссылки - да, директории - нет. Об этом даже писали на форуме в 2012 году, но ничего с тех пор не изменилось.
Казалось бы, можно пойти по пути Ansible и просто добавить такую похожую конструкцию, как
state=file,link,directory. Дополнить сам скрипт - дело 2 минут.Общался со знакомым амазонщиком, спрашивал, не открытые ли у cfn-init исходники - к сожалению нет. Когда (если) дойдут руки, отправлю feature request… А пока создание директорий делается через команды.
Ситуация на самом деле очень идиотская. С одной стороны AWS пилит функционал с огромной скоростью, радея за качество, с другой - элементарные вещи либо не делаются, либо игнорируются. Надеюсь у команды CloudFormation были весомые причины забить на это.