2012-04-17 80 views
6

有沒有辦法使用PHP亞馬遜SDK(或亞馬遜的API命令行工具)獲取EC2實例的公共DNS?如何以編程方式獲取實例的公共dns?

我想這PHP代碼(等等),但它不會工作:

require_once '/full/path/sdk.class.php'; 
$ec2  = new AmazonEC2(); 
$response = $ec2->describe_regions(); 
print_r($response); 

require_once '/full/path/sdk.class.php'; 
$ec2  = new AmazonEC2(); 
$response = $ec2->describe_instances(array(
    'Filter' => array(
     array('Name' => 'availability-zone', 'Value' => 'eu-west-1') 
    ) 
)); 

print_r($response); 

,但我看不到公共DNS的響應

回答

4

顯然你想檢索Amazon EC2區域eu-west-1(這不是'可用區'btw。的正確值)的實例。但是,你不指定任何區域和所有服務默認爲美東地區,請參閱AWS團隊應對相關的問題describeInstances() is only giving me instances in us-east

雖然你不能搶在所有地區的數據單個呼叫,您可以在每個地區調用describe_instances()方法。

$ec2 = new AmazonEC2(); 
$ec2->set_region(AmazonEC2::REGION_US_W1); // US-West 1 

$response = $ec2->describe_instances(); 

使用此代碼與您所選擇的區域中的適當的常數(例如AmazonEC2::REGION_EU_W1)應產生所需的結果。

+1

這樣做了,謝謝Steffen! – 2012-04-19 17:13:45

6

如果你在實例中運行這個本身,你可以打AWS內部的元數據終結:

$hostname = file_get_contents('http://169.254.169.254/latest/meta-data/public-hostname'); 

http://169.254.169.254/latest/meta-data/會給你提供給您的各種元數據的列表。當前:

ami-id 
ami-launch-index 
ami-manifest-path 
block-device-mapping/ 
hostname 
instance-action 
instance-id 
instance-type 
kernel-id 
local-hostname 
local-ipv4 
mac 
metrics/ 
network/ 
placement/ 
profile 
public-hostname 
public-ipv4 
public-keys/ 
reservation-id 
security-groups 
+0

非常有趣...不,我不是在同一個實例,但非常感謝您的答案ceejayoz! – 2012-04-19 17:14:57

相關問題