如何以编程方式获得一个实例的公共DNS?(How to programmatically get p

2019-07-29 01:21发布

有没有办法使用PHP亚马逊SDK(或Amazon的API命令行工具)来获取EC2实例的公共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

Answer 1:

显然,你想找回您的亚马逊EC2的区域例如eu-west-1这是不是“可用性区”顺便说一句正确的值)。 但是,你不指定任何区域和所有服务默认为美东地区 ,看到AWS团队应对相关的问题describeInstances()只让我在实例美国东西 :

虽然你不能在一个单一的通话抓住所有地区的数据,可以调用每个地区的describe_instances()方法。

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

使用此代码与相应的常量供你选择的区域(如AmazonEC2::REGION_EU_W1 )应产生期望的结果。



Answer 2:

如果你在实例中运行这个本身,你可以打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


文章来源: How to programmatically get public dns of an instance?