Облакообразовательная продукция Cloudformation Init

У меня есть стек CloudFormation, как показано ниже,

  "Metadata" : {
            "AWS::CloudFormation::Init" : {
                "config" : {

                        "/home/ec2-user/create_db_user.sh" : {
                            "source" :                             

   "http://s3.amazonaws.com/devops/create_db_user.sh",
                            "mode" : "000755",
                            "owner" : "ec2-user"
                        }
                    }
 ...

Мне нужно запустить эту команду, когда экземпляр EC2 запущен, после того, как мне нужно установить этот вывод сценария инициализации в стек облачной информации.

Как я могу к этому.

1 ответ

Немного поздно на вечеринку, но в дополнение к предыдущему ответу...

Выход AWS::CloudFormation::Init при EC2 создание инстанса через Cloudformation недоступно.

Однако на запущенных инстансах EC2 вы найдете журналы для обоих AWS::CloudFormation::Init (он же. cfn-init) и из пользовательских данных (cloud-init).

В Amazon Linux это структурировано следующим образом:

  • /var/log/cfn-init-cmd.log: cfn-init и вывод команды с отметками времени
  • /var/log/cfn-init.log: cfn-init и вывод команды
  • /var/log/cloud-init.log: журналы облачной инициализации, относящиеся к запуску команд в пользовательских данных
  • /var/log/cloud-init-output.log: вывод самих команд пользовательских данных

Самый простой способ получить доступ к этим журналам - передать журналы в Cloudwatch Logs, что позволит вам искать и фильтровать журналы по времени и содержанию. Также рассмотрите возможность использования Cloudwatch Insights для поиска и фильтрации - у него более полный и понятный синтаксис для поиска, фильтрации и даже простой визуализации (диаграмма).

Поскольку вы уже используете cfn-init, вы можете найти здесь информацию о том, как установить новый агент Cloudwatch (не агент Cloudwatch Logs!). Преимущество использования Cloudwatch Agent заключается в том, что он также может передавать пользовательские метрики в Cloudwatch Metrics (например, использование памяти, метрики приложений, метрики базы данных и т. Д.).

Для уже работающих инстансов EC2 рассмотрите возможность взглянуть на cfn-hup здесь.

Альтернативой может быть использование SSM (System Manager) для проталкивания агента на уже запущенные экземпляры в соответствии с инструкциями здесь.

В комментариях к вашему вопросу есть несколько важных моментов, которые подтолкнут вас к правильному решению. В общем то, что вы пытаетесь сделать, невозможно - нет выводов AWS::CloudFormation::Init ресурс. Они не оцениваются во время создания стека, просто сохраняются и обрабатываются экземпляром EC2 во время его запуска, но это не время, когда работает стек CloudFormation (может быть, но не всегда - например, взять группу автоматического масштабирования).

Согласно этому документу - значение вывода может включать литералы, ссылки на параметры, псевдопараметры, значение отображения или встроенные функции.

При условии, AWS::CloudFormation::Init является специфическим типом метаданных CloudFromation, но не литералом, параметром, псевдо-параметром, значением сопоставления или внутренней функцией.

Итак, то, что вы пытаетесь достичь, выглядит как ограничение CloudFormation Outputs:(

user2684005 ответе user2684005 перечислены многие подходящие обходные пути для этого.