[英]How to get public ip of an EC2 instance from aws CLI by instance id?
[英]How to get the instance Name from the instance in AWS?
我正在嘗試設置一種在創建實例時自動在 route53 中注冊實例的方法,使用 salt 和本文。
文章使用ec2-metadata
來獲取實例 ID 和主機名。 我想知道是否有辦法在實例中使用 bash 來獲取實例名稱。 ec2-metadata
似乎只顯示實例 ID。 提前致謝。
首先,您需要獲取instance-id
。
AWS_INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`
您可以使用以下命令獲取ec2 instance name
。
EC2_NAME=$(aws ec2 describe-tags --region $REGION --filters "Name=resource-id,Values=$AWS_INSTANCE_ID" "Name=key,Values=Name" --output text | cut -f5)
請確保您已安裝AWS Cli 。
我希望這有幫助。 謝謝!
首先, Amazon EC2 Instance Metadata Service還提供了一些除了instance-id
之外的其他名稱,如果這些可能是您正在尋找的 - 請參閱實例元數據類別:
hostname
-實例的私有主機名。 在存在多個網絡接口的情況下,這是指 eth0 設備(設備編號為 0 的設備)。local-hostname
-實例的私有 DNS 主機名。 在存在多個網絡接口的情況下,這是指 eth0 設備(設備編號為 0 的設備)。public-hostname
-實例的公共 DNS。 如果實例在 VPC 中,則僅當 enableDnsHostnames 屬性設置為 true 時才返回此類別。但是,如果您要查找在AWS 管理控制台中公開的名稱,則確實需要使用Amazon Web Services 工具之一來檢索它 - 該名稱實際上只是一個帶有鍵名稱的常規標簽(請參閱標記您的 Amazon EC2 資源),它恰好用於大多數 AWS 服務,用於明顯的目的。
例如,以下是使用AWS 命令行界面獲取它的方法(跳過區域和憑證):
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 的回答提供了一個基於現在遺留的Amazon EC2 API 工具的示例(請注意評論,它正確地指出您現在處理憑證的方式不同,請參閱告訴 CLI 工具您是誰和EC2 實例的 IAM 角色了解詳細信息)。
不確定使用 bash 會是什么樣子,但如果您可以獲得實例 ID,則可以使用實例本身的 SDK。 您將查詢 ec2 資源並傳入 ec2 實例 ID。 使用 ruby sdk 它看起來像:
i = ec2.instances["i-12345678"]
puts i.dns_name
使用此命令顯示哪些元數據可用
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/
您可以鏈接以下任一文件/文件夾以顯示所需信息
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
iam/
identity-credentials/
instance-action
instance-id
instance-life-cycle
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-keys/
reservation-id
例如。 instance-type
可以將其鏈接到上述命令,如下所示:
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/instance-type
發現描述標簽在我的配置中不起作用,因“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/config 。 如果需要使用其他用戶的區域/密鑰(可以在 AWS 控制台的 IAM 儀表板中找到),您可以將它們添加到該文件的另一個部分,例如 [user2] 並在命令中使用,如下所示:
aws --profile user2 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.