3

给定这些参数:

  1. 一个在任何地方运行的 Ubuntu 实例(任何区域和该区域中的任何可用区)
  2. 只有安装在实例上的 AWS PHP SDK2(没有其他 EC2 命令行工具等)
  3. CURL 和 WGET 可用

实例脚本明确确定它在哪个区域运行的最优雅的方式是什么?

* **Instance ID:** wget -q -O - http://169.254.169.254/latest/meta-data/instance-id
* **Availability Zone:** wget -q -O - http://169.254.169.254/latest/meta-data/placement/availability-zone

数据当前不提供此信息。

我们知道,目前,可以从可用区中删除尾随字符,以便天真地确定区域,但是,不能保证亚马逊将来不会改变这一点。

最终目标是我们的 cron 作业和其他自定义服务可以确定他们的身份和位置,以便他们可以与其他服务和实例进行适当的交互。

4

3 回答 3

5

这应该适合你:

REGION=`curl -s http://169.254.169.254/latest/dynamic/instance-identity/document|grep region|awk -F\" '{print $4}'`

echo $REGION

它来自这个线程:

从 EC2 实例中查找区域

于 2013-08-01T16:50:13.283 回答
2

使用 PHP SDK,您可以执行以下操作:

$instance = \Aws\Common\InstanceMetadata\InstanceMetadataClient::factory()
    ->get('dynamic/instance-identity/document')
    ->send()
    ->json();

echo $instance['region'];
于 2013-08-01T21:38:04.203 回答
1

正如我已经在另一个问题上回答的那样,AWS 已经实现了一种从元数据服务器中找出您所在区域的干净方法:

REGION="$(wget -q -O - http://169.254.169.254/latest/meta-data/placement/region)"

或者

REGION="$(curl http://169.254.169.254/latest/meta-data/placement/region)

这将需要使用 2019-10-01 或更高版本的元数据 API。通过点击根端点并在输出中检查它来确保它可用。

我原来的答案

于 2020-10-27T17:07:18.327 回答