2016-12-24 54 views
0

我需要对我的AWS缩放组的每个EC2实例的唯一标识符,用于uniqid()的前缀。

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

回答

2

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

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

我想过,但元数据没有这个速度的限制? –

+0

“我们按实例限制对实例元数据服务的查询,我们对从实例到实例元数据服务的同时连接数量设置限制。”那么我可以以某种方式将实例启动时的id写入一个在我的脚本中实现的php文件中? –

+0

我对这个亚马逊服务真的很陌生,但这里是我的建议。如何创建数据文件或数据库,并将其添加到它,如果它尚未添加?然后在需要时从数据源中获取它? – Manikiran

2

从EC2元数据的实例ID是一个很好的答案,但在环境积攒它的价值似乎是一个清晰的解决方案。

无论你在环境中设置环境变量 - 在Web服务器本身的启动脚本中(一个例子,不是普遍适用的,将是/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 
+0

我真的很喜欢这个解决方案。我从来没有使用环境变量,但我一定会尝试这个。 –

+0

如果你现在还没有找到它,你可能会觉得这很有用,http://php.net/manual/en/reserved.variables.environment.php。 (PHP不是我的专业,所以我必须自己查看它)。显然还有'getenv()'。 –

+0

我尝试使用环境变量,但它似乎是不可能的,看到我的帖子:http://stackoverflow.com/questions/41331993/retrieving-an-environment-variable-in-php/41332070#41332070 –

相关问题