两个 EC2 实例可以有相同的 $_SERVER['SERVER_ADDR'] 吗?或者如何在 EC2 中唯一标识每个?

Can two EC2 instances have the same $_SERVER['SERVER_ADDR']? Or how to uniquely identify each, in EC2?

我需要为我在 AWS 上的扩展组的每个 EC2 实例提供一个唯一标识符作为 uniqid() 的前缀。

我可以使用 $_SERVER['SERVER_ADDR'] 吗?

以下代码可以获取您的 ec2 实例的实例 ID:

#!/usr/bin/php
<?php
$instance_id = file_get_contents("http://instance-data/latest/meta-data/instance-id");
echo $instance_id;
?>

来自 ec2 元数据的实例 ID 是一个很好的答案,但将其值存储在环境中似乎是一个更干净的解决方案。

无论您在设置中的什么地方设置环境变量——在网络服务器本身的启动脚本中(一个例子,不是普遍适用的,/etc/init.d/apache2),获取值并将其存储在环境中.

export EC2_INSTANCE_ID=$(ec2metadata --instance-id)

$_ENV["EC2_INSTANCE_ID"] 然后应该包含该值,比将它缓存在文件中要简单得多,并且不受速率限制(记录为强加的,但没有提及特定阈值)。


请注意,以下三个获取实例 ID 的示例在功能上是等效的:

ec2metadata --instance-id
curl http://instance-data/latest/meta-data/instance-id
curl http://169.254.169.254/latest/meta-data/instance-id