Хобрук: Ваш путь к мастерству в программировании

Выполнение рецепта с шеф-поваром на подготовленном экземпляре Autoscaling

У меня есть terraform подготовленная AWS структура. Я подготовил шеф-повар для выполнения рецепта, но проблема в том, что экземпляры не имеют атрибута node_name, потому что они предоставляются Terraform с использованием AutoScaling Group и chef client, установленных с помощью сценария user_data. Имя узла генерируется chef, и мне нужно сначала выполнить некоторые установки для каждого экземпляра. Я попытался создать роль base и обновить ее до сервера с помощью необходимых действий. Обновление выполнено успешно, но установки на экземпляре не запускаются. Есть ли способ запустить команду или назначить роль каждому вновь прибывшему экземпляру?


Ответы:


1

Есть два решения, о которых я могу думать:

  1. Добавьте скрипт, который вы хотите загрузить в EC2, в атрибут user_data файла aws_instance

Eg:

resource "aws_instance" "foo" {
  ami           = "ami-408c7f28"
  instance_type = "t1.micro"
  user_data = "**your script**"
}
  1. Запускайте их из собственного пользовательского AMI.
03.05.2017
  • Проблема варианта 1 в том, что я не использую ресурс aws_instance. Экземпляры создаются launch_configuration и Autoscaling Group, поэтому я не могу использовать provisioner или привязать роль к конкретному экземпляру. 05.05.2017

  • 2

    Вы должны испечь подготовку в сочетании AMI и сценария инициализации в LaunchConfig. https://github.com/coderanger/octan_demo/blob/master/tf/octan_cluster/main.tf#L156-L167 и https://github.com/coderanger/octan_demo/blob/master/tf/octan_cluster/bootstrap.tpl — это пример использования chef-solo (ну, локальный режим, потому что соло не еще не поддерживает политики, но это другая история), но это должно дать вам представление. У вас будет аналогичный сценарий, который устанавливает Chef, создает конфигурацию, загружает ключ проверки (вероятно, из S3 с использованием ролей IAM), а затем запускает первый запуск chef-client. https://github.com/coderanger/brix/blob/master/packer/client-bootstrap.sh — еще один пример из прошлого, показывающий это для шеф-клиента, в этом случае он генерировал конфигурацию на основе данных CloudFormation, а ключ установки и проверки Chef был встроен в AMI. .

    03.05.2017

    3

    Спасибо за ответы. Пользовательский AMI не подходит, поэтому мне пришлось искать другой подход. Оказывается, вы можете пропустить часть chef-service-manager и напрямую вызвать chef client. Дело в том, что вы можете назначить файл JSON в качестве параметра для chef client. JSON может содержать runlist и/или role, которые могут быть назначены новому экземпляру, даже если он создан Autoscaling group. Поскольку я уже использую user_data, я просто добавил создание JSON в скрипт и назначил нужную роль, которая уже имеет runlist в Chef Server. Оба ответа помогли мне добраться туда. Теперь в каждом новом экземпляре через user_data я создаю JSON с ролью и, наконец, запускаю chef client -f role_config.json, после чего вызываю создание службы chef-service-manager. Это всего лишь патч, поскольку лучшим вариантом будет не создавать его как службу, а вместо этого использовать scheduled task и вызывать json каждый раз, поскольку, если он будет вызываться во второй раз для одного и того же экземпляра, он будет проигнорирован в будущих запусках. Также из того, что я прочитал в документации Chef, scheduled task будет лучшим вариантом, чем использование сервиса. Спасибо за ответы!

    05.05.2017
    Новые материалы

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..