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

Как получить информацию об экземпляре Linux ec2 при входе в систему из командной строки (общедоступный DNS, AMI и т. Д.)

Мне нужен какой-то способ определить, на каком экземпляре я работаю, когда я использую 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:

  1. Доступ к метаданным экземпляра и пользовательским данным из 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

  2. Используйте инструмент запроса метаданных экземпляра

    По сути, это оболочка для первого метода, см. 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