Я хотел бы иметь возможность извлекать информацию о текущей среде эластичного бобового стебля из моего экземпляра 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 часа ночи.