我想成立route53註冊實例時自動創建的實例,使用鹽和本文的手段:http://cantina.co/2012/01/25/automated-dns-for-aws-instances-using-route-53/如何從AWS中的實例獲取實例名稱?
文章使用ec2-metadata
獲得實例ID和和主機名。我想知道是否有一種方法,在實例中使用bash來獲取實例名稱。 ec2-metadata
似乎只顯示實例ID。提前致謝。
我想成立route53註冊實例時自動創建的實例,使用鹽和本文的手段:http://cantina.co/2012/01/25/automated-dns-for-aws-instances-using-route-53/如何從AWS中的實例獲取實例名稱?
文章使用ec2-metadata
獲得實例ID和和主機名。我想知道是否有一種方法,在實例中使用bash來獲取實例名稱。 ec2-metadata
似乎只顯示實例ID。提前致謝。
不確定bash會是什麼樣子,但如果可以獲取實例ID,則可以使用實例本身的SDK。您將查詢ec2追索權並傳入ec2實例ID。使用Ruby SDK它會是什麼樣子:
i = ec2.instances["i-12345678"]
puts i.dns_name
首先,在Amazon EC2實例元數據服務也提供了相當長的一段其他名稱除了instance-id
,如果這些可能是你在找什麼 - 看Instance Metadata Categories:
hostname
- 實例的專用主機名。在存在多個網絡接口的情況下,這指的是eth0設備(設備號爲0的設備)。local-hostname
- 實例的私有DNS主機名。在存在多個網絡接口的情況下,這指的是eth0設備(設備號爲0的設備)。public-hostname
- 該實例的公共DNS。如果實例位於VPC中,則只有在enableDnsHostnames屬性設置爲true時纔會返回此類別。如果您正在尋找名稱如暴露在AWS Management Console不過,你的確會需要訴諸使用Tools for Amazon Web Services的一個檢索它 - 這名稱其實只是一個普通的標籤使用密鑰名稱(請參閱Tagging Your Amazon EC2 Resources),它恰好在大多數AWS服務中用於顯而易見的目的。
下面是如何與AWS Command Line Interface得到它例如(跳過區和證書):
aws ec2 describe-tags \
--filters Name=resource-id,Values=i-abcd1234 Name=key,Values=Name \
--query Tags[].Value --output text
對於比什麼是可能與內置的--query
選擇更先進的CLI JSON輸出處理,你可以請使用jq(輕量級且靈活的命令行JSON處理器)。
Overthink's answer提供了基於現在遺留Amazon EC2 API Tools一個例子(請注意評論,這些評論正確地指出,你現在處理的憑證不同,詳見Tell the CLI Tools Who You Are和IAM Roles for EC2 instances)。
發現describe-tags不能在我的配置文件中工作,失敗並顯示'UnauthorizedOperation'錯誤。得到這個與描述-情況下工作:使用區域和訪問鍵
aws ec2 describe-instances --filters Name=instance-id,Values=$(wget -qO- http://instance-data/latest/meta-data/instance-id) --query Reservations[].Instances[].Tags[].Value --output text
命令從當前用戶的AWS配置文件的[default]部分:〜/ .aws /配置。如果(可以在AWS控制檯的IAM儀表板中找到)需要使用其他用戶的區域/按鍵,你可以像這樣把它們添加到該文件中的另一個部分,例如[用戶2]並使用命令:
3210
你還可以使用--query命令行參數和--output直接輸出實例名稱,例如:'aws ec2 describe-tags --filters Name = resource-id,Values = i-abcd1234 Name = key,Values = Name --query Tags []。Value --output text' –
@CarlosP - 我已經用你提出的確實更簡單的方法更新了答案('--query'選項在AWS CLI中不可用得到去),謝謝你指出這一點! –