Назад | Перейти на главную страницу

Можно ли получить метаданные о среде Elastic Beanstalk из экземпляра EC2

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

Например, было бы полезно знать имя текущей среды и метку версии развернутого кода. Кто-нибудь знает, что делать это программно? Я знаю, что уже существует API для получения информации EC2, такой как общедоступное имя хоста, AMI-id и т. Д., Но я не могу найти ничего для эластичного beanstalk.

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

Я кое-что понял. Для тех из вас, кому интересно:

Я могу получить информацию об экземпляре EC через http://169.254.169.254/latest/meta-data/. В частности, мне нужен идентификатор экземпляра EC2

Я могу определить список всех моих сред beanstalk через описать среду

Для каждой среды я могу запустить describe-environment-resources. Этот вызов возвращает список экземпляров, с которыми я могу сопоставить идентификатор экземпляра текущего экземпляра. Таким образом, я могу определить название своей среды.

Наконец, я могу сослаться на результат describe-environments чтобы также определить метку версии для текущего развернутого кода.

Прежде чем я смогу сделать что-либо из этого, мне нужно настроить мои экземпляры ec2, чтобы они имели доступ к информации эластичного beanstalk. Я могу сделать это, назначив правильную политику доступа роли, связанной с моими экземплярами ec2, и получая информацию для аутентификации, опять же через метаданные экземпляра в http://169.254.169.254/latest/meta-data/

Поскольку я использую питон boto библиотека, все операции, которые я описал выше, уже имеют предварительно запеченные библиотечные функции, чтобы выполнять их за меня.

ох

Я еще не закодировал его, но если мне удастся заставить его работать, я опубликую здесь

редактировать рабочий код

Немного покопавшись в Интернете, я нашел. Я знаю, что вопрос старый, но я подумал, что дам этот ответ.

$ /opt/elasticbeanstalk/bin/get-config container -k environment_name

Это не задокументировано, так что это может сломаться без предупреждения, но EB /opt/elasticbeanstalk/bin/get-config команда читает из файла, расположенного по адресу /opt/elasticbeanstalk/deploy/configuration/containerconfiguration который включает в себя больше данных, чем предоставляет get-config.

Поскольку он отформатирован как JSON, а изображения EB включают jq из коробки эта команда извлечет имя среды (доступ может быть ограничен, поэтому sudo или могут потребоваться другие механизмы контроля доступа):

$ jq .system.environment_name /opt/elasticbeanstalk/deploy/configuration/containerconfiguration

Одна из причин предпочесть автономный подход к использованию describe-environments или describe-tags (EB определяет тег, который включает имя среды) заключается в том, что при масштабировании ваши развертывания могут завершиться сбоем из-за ограничения скорости API AWS, что не является забавным способом просыпаться в 3 часа ночи.