如何从该 EC2 实例中获取 AWS EC2 实例 ID?
如何从 ec2 实例中找到 ec2 实例的实例 ID
?
How can I find out the instance id
of an ec2 instance from within the ec2 instance?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(30)
您只需通过传递元数据参数发出 HTTP 请求即可获取任何元数据。
或者
您无需为获取元数据和用户数据的 HTTP 请求付费。
否则,
您可以使用 EC2 实例元数据查询工具,这是一个简单的 bash 脚本,它使用curl 从正在运行的 EC2 实例中查询 EC2 实例元数据,如文档中所述。
下载工具:
现在运行命令来获取所需的数据。
请参阅:
http://docs.aws.amazon。 com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html
https ://aws.amazon.com/items/1825?externalID=1825
很乐意提供帮助..:)
You can just make a HTTP request to GET any Metadata by passing the your metadata parameters.
or
You won't be billed for HTTP requests to get Metadata and Userdata.
Else
You can use EC2 Instance Metadata Query Tool which is a simple bash script that uses curl to query the EC2 instance Metadata from within a running EC2 instance as mentioned in documentation.
Download the tool:
now run command to get required data.
Refer:
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html
https://aws.amazon.com/items/1825?externalID=1825
Happy To Help.. :)
FWIW我编写了一个FUSE文件系统来提供对EC2元数据服务的访问: https://github.com/xdgc/ec2mdfs 。
我在所有自定义 AMI 上运行此程序; 它允许我使用这个惯用语:cat /ec2/meta-data/ami-id
FWIW I wrote a FUSE filesystem to provide access to the EC2 metadata service: https://github.com/xdgc/ec2mdfs .
I run this on all custom AMIs; it allows me to use this idiom: cat /ec2/meta-data/ami-id
动机:用户想要检索 aws 实例元数据。
解决方案:
IP 地址
169.254.169.254
是一个链接本地地址(仅在实例中有效),aws 为我们提供了专用 Restful API 的链接用于检索正在运行的实例的元数据 (请注意,您无需为用于检索实例元数据和用户数据的 HTTP 请求付费)。 其他文档示例< /strong>:
您可以使用此链接
http://169.254.169.254/latest/meta-data/
获取实例的其他元数据标签,只需选择正确的标签即可:Motivation: User would like to Retrieve aws instance metadata.
Solution:
The IP address
169.254.169.254
is a link-local address (and is valid only from the instance) aws gives us link with dedicated Restful API for Retrieving metadata of our running instance (Note that you are not billed for HTTP requests used to retrieve instance metadata and user data) . for Additional DocumentationExample:
You able to get additional metadata labels of your instance using this link
http://169.254.169.254/latest/meta-data/<metadata-field>
just choose the right tags:最简单的方法是使用 aws cli 和
sts get-caller-identity
。INSTANCE_ID=$(aws sts get-caller-identity --query UserId --output text | cut -d : -f 2)
ec2-metadata
命令相比,它适用于任何 unix AMIMost simple approach is to use aws cli and
sts get-caller-identity
.INSTANCE_ID=$(aws sts get-caller-identity --query UserId --output text | cut -d : -f 2)
ec2-metadata
command that is only available for amazon linux AMIs在您提到用户为 root 的问题中,我应该提到的一件事是实例 ID 不依赖于用户。
对于Node开发人员来说,
In the question you have mentioned the user as root, one thing I should mention is that the instance ID is not dependent on the user.
For Node developers,
要获取实例元数据,请使用
To get the instance metadata use
对于 Windows 实例:
或
For a Windows instance:
or
这应该对你有帮助,
This should helps you,
PHP 的替代方法:
这将提供有关实例的大量数据,所有数据都很好地打包在一个数组中,没有外部依赖项。
因为这是一个对我来说从未失败或延迟的请求,所以这样做应该是安全的,否则我会选择curl()
Alternative approach for PHP:
That will provide a lot of data about the instance, all nicely packed in an array, no external dependencies.
As it's a request that never failed or delayed for me it should be safe to do it that way, otherwise I'd go for curl()
请参阅有关该主题的 EC2 文档。
运行:
如果您需要从脚本内以编程方式访问实例 ID,
以下是更高级使用的示例(检索实例 ID 以及可用区和区域等):
您还可以使用
curl< /code> 而不是
wget
,具体取决于您的平台上安装的内容。See the EC2 documentation on the subject.
Run:
If you need programmatic access to the instance ID from within a script,
Here is an example of a more advanced use (retrieve instance ID as well as availability zone and region, etc.):
You may also use
curl
instead ofwget
, depending on what is installed on your platform.在 Amazon Linux AMI 上,您可以执行以下操作:
或者,在 Ubuntu 和其他一些 Linux 版本上,
ec2metadata --instance-id
(默认情况下,在 ubuntu 上可能不会安装此命令,但您可以使用 < code>sudo apt-get install cloud-utils)顾名思义,您也可以使用该命令获取其他有用的元数据。
On Amazon Linux AMIs you can do:
Or, on Ubuntu and some other linux flavours,
ec2metadata --instance-id
(This command may not be installed by default on ubuntu, but you can add it withsudo apt-get install cloud-utils
)As its name suggests, you can use the command to get other useful metadata too.
在 Ubuntu 上,您可以:
然后您可以:
您可以通过以下方式获取与实例关联的大部分元数据:
On Ubuntu you can:
And then you can:
You can get most of the metadata associated with the instance this way:
如果您还需要查询实例 ID 以外的内容,请使用
/dynamic/instance-identity/document
URL。wget -q -O - http://169.254.169.254/latest/dynamic/instance-identity/document
这将为您提供像这样的 JSON 数据 - 只需一个单个请求。
Use the
/dynamic/instance-identity/document
URL if you also need to query more than just your instance ID.wget -q -O - http://169.254.169.254/latest/dynamic/instance-identity/document
This will get you JSON data such as this - with only a single request.
对于所有 ec2 机器,实例 id 可以在文件中找到:
您还可以通过运行以下命令来获取实例 id:
For all ec2 machines, the instance-id can be found in file:
You can also get instance id by running the following command:
在 AWS Linux 上:
ec2-metadata --instance-id | cut -d " " -f 2
输出:
i-33400429
在变量中使用:
on AWS Linux:
ec2-metadata --instance-id | cut -d " " -f 2
Output:
i-33400429
Using in variables:
对于
.NET
人:For
.NET
People :对于 powershell 人员:
For powershell people:
对于 Python:
归结为一句话:
您还可以使用 public_hostname 代替 local_hostname,或者:
For Python:
which boils down to the one-liner:
Instead of local_hostname you could also use public_hostname, or:
请参阅这篇文章 - 请注意给定 URL 中的 IP 地址是不变的(一开始这让我很困惑),但返回的数据特定于您的实例。
See this post - note that the IP address in the URL given is constant (which confused me at first), but the data returned is specific to your instance.
只需输入:
Just Type:
更现代的解决方案。
在 Amazon Linux 中,已安装 ec2-metadata 命令。
从终端
会给你可用的选项
将返回
A more contemporary solution.
From Amazon Linux the ec2-metadata command is already installed.
From the terminal
Will give you the available options
will return
你可以试试这个:
You can try this:
对于红宝石:
For Ruby:
最新的 Java SDK 具有
EC2MetadataUtils
:在 Java 中:
在 Scala 中:
The latest Java SDK has
EC2MetadataUtils
:In Java:
In Scala:
我为来自 http api 的 EC2 元数据编写的 c# .net 类。
我将根据需要构建它的功能。 如果你喜欢的话,你可以用它来运行。
A c# .net class I wrote for EC2 metadata from the http api.
I will build it up with functionality as needed. You can run with it if you like it.
只需检查
var/lib/cloud/instance
符号链接,它应该指向/var/lib/cloud/instances/{instance-id}
其中{instance_id }
是您的实例 ID。Simply check the
var/lib/cloud/instance
symlink, it should point to/var/lib/cloud/instances/{instance-id}
where{instance_id}
is your instance-id.简单的一行
cat /sys/devices/virtual/dmi/id/board_asset_tag
或
curl_cli -s http://169.254.169.254/latest/meta-data/instance-id
>来源:https://docs.aws.amazon.com/AWSEC2/最新/UserGuide/identify_ec2_instances.html
Simple one line
cat /sys/devices/virtual/dmi/id/board_asset_tag
or
curl_cli -s http://169.254.169.254/latest/meta-data/instance-id
source: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/identify_ec2_instances.html
对于 C++(使用 cURL):
For C++ (using cURL):
如果你想在 python 中获取所有实例 id 列表,代码如下:
If you wish to get the all instances id list in python here is the code:
在 Go 中,您可以使用 goamz 包。
这是 GetMetaData 源。
In Go you can use the goamz package.
Here's the GetMetaData source.