Amazon недавно добавила замечательную функцию пометки инстансов EC2 парами ключ-значение, чтобы упростить управление большим количеством виртуальных машин.
Есть ли способ запросить эти теги так же, как и некоторые другие данные, заданные пользователем? Например:
$ curl http://169.254.169.254/latest/meta-data/placement/availability-zone
us-east-1d
Есть ли аналогичный способ запроса тегов?
amazon-web-services
amazon-ec2
Джош Линдси
источник
источник
ec2metadata --instance-id
--out = json | jq '.Tags [] | select (.Key == "role") | .Value 'ec2metadata
Инструмент является устаревшим. Теперь вы запрашиваете «волшебный» URL-адрес по адресу 169.254.169.254/latest/meta-data - нажимаете его cURL, и он дает вам волшебные конечные точки, которые вы можете использовать для получения различных битов данных. В этом случаеcurl http://169.254.169.254/latest/meta-data/instance-id
получает ваш идентификатор экземпляраСледующий сценарий bash возвращает имя вашего текущего экземпляра ec2 (значение тега «Name»). Измените TAG_NAME для вашего конкретного случая.
Чтобы установить aws cli
Если вы используете IAM вместо явных учетных данных, используйте эти разрешения IAM:
источник
aws ec2 describe-tags
. Мне нужно было добавить этот IAM во встроенные политики моей роли IAM. Благодарность!| cut -f5
с--query="Tags[0].Value"
.После того, как вы получили
ec2-metadata
иec2-describe-tags
установили (как упоминалось в ответе Раньери выше ), вот пример команды оболочки для получения «имени» текущего экземпляра, если у вас есть тег «Name = Foo».Предполагается, что установлены переменные среды EC2_PRIVATE_KEY и EC2_CERT.
Это возвращается
Foo
.источник
ec2-describe-tags
умолчаниюus-east-2
. Пожалуйста, передайте--region
флаг, чтобы использовать другой регион.Вы можете добавить этот скрипт в свои пользовательские данные cloud-init, чтобы загрузить теги EC2 в локальный файл:
В вашей системе должны быть установлены инструменты AWS CLI: вы можете установить их с
packages
разделом в файле облачной конфигурации перед сценарием, использовать AMI, который уже включает их, или добавить командуapt
илиyum
в начале сценария.Для доступа к тегам EC2 вам понадобится политика, подобная этой, в роли IAM вашего экземпляра:
Теги EC2 экземпляра будут доступны
/etc/ec2-tags
в следующем формате:Вы можете включить файл как есть в сценарий оболочки
. /etc/ec2-tags
, например, используя:Теги загружаются во время инициализации экземпляра, поэтому они не будут отражать последующие изменения.
Сценарий и политика IAM основаны на ответе itaifrenkel.
источник
aws:autoscaling:groupName
aws ec2 describe-tags --region $REGION --filter "Name=resource-id,Values=$INSTANCE_ID" --output=text | sed -r 's/TAGS\t(.*)\t.*\t.*\t(.*)/EC2_TAG_\1="\2"/' |sed -r 's/aws:autoscaling:/aws_autoscaling_/' > /etc/ec2-tags
Если вы не находитесь в зоне доступности по умолчанию, результаты чрезмерного обдумывания будут пустыми.
Если вы хотите добавить фильтр для получения определенного тега (в моем случае elasticbeanstalk: имя-среды), вы можете это сделать.
И чтобы получить только значение тега, по которому я отфильтровал, мы разрезаем по конвейеру и получаем пятое поле.
источник
elasticbeanstalk:environment-name
наName
Для Python:
источник
instance_metadata = utils.get_instance_metadata(timeout=0.5, num_retries=1)
В качестве альтернативы вы можете использовать
describe-instances
вызов cli, а неdescribe-tags
:В этом примере показано, как получить значение тега my-tag-name для экземпляра:
aws ec2 describe-instances \ --instance-id $(curl -s http://169.254.169.254/latest/meta-data/instance-id) \ --query "Reservations[*].Instances[*].Tags[?Key=='my-tag-name'].Value" \ --region ap-southeast-2 --output text
Измените регион в соответствии с вашими местными обстоятельствами. Это может быть полезно, если у вашего экземпляра есть привилегия описания-экземпляров, но нет тегов описания в политике профиля экземпляра.
источник
Я собрал воедино следующее, которое, надеюсь, проще и чище, чем некоторые из существующих ответов, и использует только AWS CLI и никаких дополнительных инструментов.
В этом примере кода показано, как получить значение тега myTag для текущего экземпляра EC2:
Использование тегов описания :
export AWS_DEFAULT_REGION=us-east-1 instance_id=$(curl -s http://169.254.169.254/latest/meta-data/instance-id) aws ec2 describe-tags \ --filters "Name=resource-id,Values=$instance_id" 'Name=key,Values=myTag' \ --query 'Tags[].Value' --output text
Или, в качестве альтернативы, используя description-instance :
aws ec2 describe-instances --instance-id $instance_id \ --query 'Reservations[].Instances[].Tags[?Key==`myTag`].Value' --output text
источник
Используя API «пользовательских данных» и «метаданных» AWS, можно написать сценарий, который обертывает марионетку для запуска запуска марионетки с настраиваемым именем сертификата.
Сначала запустите экземпляр aws с пользовательскими данными: 'role: webserver'
Это вызывает марионетку с именем сертификата, например «webserver.i-hfg453.aws», затем вы можете создать манифест узла с именем «веб-сервер», а «нечеткое сопоставление узлов» марионетки будет означать, что он используется для подготовки всех веб-серверов.
В этом примере предполагается, что вы создаете базовый образ с установленной марионеткой и т. Д.
Льготы:
1) Вам не нужно передавать свои учетные данные
2) Вы можете быть настолько детализированы, насколько хотите, с конфигурациями ролей.
источник
Jq + ec2metadata делает его немного лучше. Я использую cf и имею доступ к региону. В противном случае вы можете получить его в bash.
aws ec2 describe-tags --region $REGION \ --filters "Name=resource-id,Values=`ec2metadata --instance-id`" | jq --raw-output \ '.Tags[] | select(.Key=="TAG_NAME") | .Value'
источник
Вариант некоторых из приведенных выше ответов, но именно так я получил значение определенного тега из сценария пользовательских данных на экземпляре
источник
Установите AWS CLI:
Получить теги для текущего экземпляра:
Выходы:
Используйте немного perl для извлечения тегов:
Возврат:
источник
ec2metadata
отсутствует в aws-cli, но его можно заменить наcurl --silent http://169.254.169.254/latest/meta-data/instance-id
. Кроме того,jq
можно проще анализировать json, или еще проще использовать другой формат вывода.sudo apt-get -y install python
иexport AWS_DEFAULT_REGION=us-west-1
instance-id: i-07f59f3564618f148
Для этого загрузите и запустите автономный исполняемый файл.
Иногда нельзя установить awscli, зависящую от python. Докер тоже может быть вне поля зрения.
Вот моя реализация в голанге: https://github.com/hmalphettes/go-ec2-describe-tags
источник
Для тех, кто достаточно сумасшедший, чтобы использовать Fish shell на EC2, вот удобный фрагмент для вашего /home/ec2-user/.config/fish/config.fish. Команда hostdata теперь перечислит все ваши теги, а также общедоступный IP-адрес и имя хоста.
источник