【问题标题】:How to programmatically get public dns of an instance?如何以编程方式获取实例的公共 dns?
【发布时间】:2012-04-29 05:28:49
【问题描述】:

有没有办法使用 PHP amazon SDK(或亚马逊的 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

【问题讨论】:

    标签: php amazon-ec2 amazon-web-services


    【解决方案1】:

    如果您在实例本身上运行它,您可以访问 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
    

    【讨论】:

    • 非常有趣...不,我不在同一个例子中,但非常感谢 ceejayoz 的回答!
    【解决方案2】:

    显然,您希望在区域 eu-west-1 中检索您的 Amazon EC2 实例(顺便说一句,这不是“可用性区域”的正确值。)。但是,您没有指定任何区域,所有服务默认为美国东部区域,请参阅 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)结合使用应该会产生所需的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-28
      • 2012-03-03
      • 1970-01-01
      • 2016-02-03
      • 2011-01-17
      • 2020-05-06
      相关资源
      最近更新 更多