Мне нужен какой-то способ определить, на каком экземпляре я работаю, когда я использую ssh в экземпляре Linux ec2. Я хотел бы иметь возможность однозначно идентифицировать экземпляр из командной строки и соотносить это с http://console.aws.amason.com
Было бы полезно любое из следующего:
AMI
Private DNS
Public DNS
Tags
Я использую экземпляры Ubuntu и Red Hat.
Я предполагаю, что вы хотите сделать это из оболочки bash, а не из библиотеки python boto или аналогичной ...
Вы должны иметь возможность запрашивать службу метаданных на 169.254.169.254.
например
AMI_ID=$(curl http://169.254.169.254/latest/meta-data/ami-id)
Вы можете получить список доступных метаданных:
curl http://169.254.169.254/latest/meta-data/
Это задокументировано на http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html
Примечание. Мне больше знаком сервис метаданных openstack, но он был смоделирован на основе сервиса Amazon EC2. Количество и типы доступных данных различны, но доступ к ним такой же.
Лично я просто управляю фактером. (Часть марионетки)
ec2_ami_id => ami-ffffff ec2_ami_launch_index => 0 ec2_ami_manifest_path => (unknown) ec2_block_device_mapping_ebs1 => /dev/sda ec2_block_device_mapping_ebs3 => /dev/sdf ec2_block_device_mapping_ephemeral0 => /dev/sdb ec2_block_device_mapping_ephemeral1 => /dev/sdc ec2_block_device_mapping_ephemeral2 => /dev/sdd ec2_block_device_mapping_ephemeral3 => /dev/sde ec2_block_device_mapping_root => /dev/sda1 ec2_hostname => ip-xxx.xxx.xxx.xxx.ap-southeast-1.compute.internal ec2_instance_id => i-e999fff4 ec2_instance_type => m1.medium ec2_kernel_id => aki-a9999af4 ec2_local_hostname => ip-xxx.xxx.xxx.xxx.ap-southeast-1.compute.internal ec2_local_ipv4 => xxx.xxx.xxx.xxx ec2_placement_availability_zone => ap-southeast-1b ec2_profile => default-paravirtual ec2_public_hostname => ec2-xxx.xxx.xxx.xxx.ap-southeast-1.compute.amazonaws.com ec2_public_ipv4 => xxx.xxx.xxx.xxx
Вы можете использовать два метода для получения информации об экземпляре EC2:
Доступ к метаданным экземпляра и пользовательским данным из API EC2
В интерфейсе командной строки вашего экземпляра используйте следующий URI, чтобы получить все метаданные экземпляра.
http://169.254.169.254/latest/meta-data/
Вы увидите список доступных категорий. Если вам нужен AMI Id, сделайте запрос curl:
curl http://169.254.169.254/latest/meta-data/ami-id
Используйте инструмент запроса метаданных экземпляра
По сути, это оболочка для первого метода, см. https://aws.amazon.com/code/1825.
Некоторые типы инстансов поставляются с предустановленным инструментом, для других вам необходимо загрузить и установить инструмент.
Как только инструмент появится, просто выполните:
ec2metadata
Вы должны увидеть список всех свойств экземпляра, это очень удобно для программного использования этой информации.
Если вы хотите идентифицировать экземпляр при входе в оболочку через SSH, вы можете добавить идентификатор экземпляра в приглашение CLI, используя функцию «Данные пользователя» EC2 при запуске экземпляра.
Просто добавьте следующий скрипт в поле пользовательских данных при запуске экземпляра:
#cloud-config
apt_upgrade: false
preserve_hostname: true
runcmd:
- hostname "`ec2metadata --instance-id`"
- echo "127.0.0.1 `ec2metadata --instance-id`" >> /etc/hosts
- echo "`ec2metadata --instance-id`" > /etc/hostname
Этот сценарий будет выполняться во время запуска и изменит имя хоста экземпляра на идентификатор экземпляра.
Вы можете использовать любой из двух описанных выше методов и любой из атрибутов метаданных для идентификации экземпляра.
Может как то так?
Простой доступ из командной строки к Amazon EC2 и Amazon S3 http://aws.amazon.com/developertools/739