【问题标题】:Find My Instance Region in AWS在 AWS 中查找我的实例区域
【发布时间】:2013-08-02 17:03:15
【问题描述】:

给定这些参数:

  1. 在任何地方运行的 Ubuntu 实例(任何区域和该区域中的任何可用区)
  2. 只有安装在实例上的 AWS PHP SDK2(没有其他 EC2 命令行工具等)
  3. CURL 和 WGET 可用

实例脚本明确确定它在哪个区域运行的最优雅的方式是什么?

* **Instance ID:** wget -q -O - http://169.254.169.254/latest/meta-data/instance-id
* **Availability Zone:** wget -q -O - http://169.254.169.254/latest/meta-data/placement/availability-zone

meta-data does not 目前提供此信息。

我们知道目前,为了天真地确定区域,可以从可用区中删除尾随字符,但是,有 no guarantee 亚马逊将来不会更改它。

最终目标是我们的 cron 作业和其他自定义服务可以确定他们的身份和位置,以便他们可以与其他服务和实例进行适当的交互。

【问题讨论】:

    标签: php ubuntu amazon-web-services ubuntu-12.04


    【解决方案1】:

    这应该适合你:

    REGION=`curl -s http://169.254.169.254/latest/dynamic/instance-identity/document|grep region|awk -F\" '{print $4}'`
    
    echo $REGION
    

    来自这个帖子:

    Find region from within an EC2 instance

    【讨论】:

      【解决方案2】:

      使用 PHP SDK,您可以执行以下操作:

      $instance = \Aws\Common\InstanceMetadata\InstanceMetadataClient::factory()
          ->get('dynamic/instance-identity/document')
          ->send()
          ->json();
      
      echo $instance['region'];
      

      【讨论】:

      • 默认 SDK 已加载,但我收到未捕获错误:找不到类 'Aws\Common\InstanceMetadata\InstanceMetadataClient' 示例遗漏了一些内容。
      【解决方案3】:

      正如我已经回答的另一个问题,AWS 已经实施了一种从元数据服务器中找出您所在区域的简洁方法:

      REGION="$(wget -q -O - http://169.254.169.254/latest/meta-data/placement/region)"
      

      REGION="$(curl http://169.254.169.254/latest/meta-data/placement/region)
      

      这需要使用 2019-10-01 或更高版本的元数据 API。通过点击根端点并在输出中检查它来确保它可用。

      My original answer

      【讨论】:

        猜你喜欢
        • 2011-05-14
        • 2018-11-21
        • 2019-01-08
        • 2021-11-07
        • 1970-01-01
        • 2018-01-15
        • 2012-07-18
        • 2021-07-27
        • 2019-11-30
        相关资源
        最近更新 更多