搜尋

首頁  >  問答  >  主體

使用PHP AWS SDK取得實例元資料的方法

<p>我想使用AWS SDK來取得目前EC2實例的實例元資料(例如AZ)。 我找到了一個替代方案,但它不使用SDK,只是使用<code>file_get_contents</code>。 如何使用SDK實現這個功能? </p>
P粉032649413P粉032649413484 天前628

全部回覆(1)我來回復

  • P粉360266095

    P粉3602660952023-08-28 00:00:45

    JasonQ-AWS提出的解決方案對於取得帳戶中所有實例和應用程式的資訊非常有用。然而,它並不告訴您描述當前進程執行的實例的資訊。

    為了實現這一點,您需要使用IMDSv2,它需要兩個CURL命令,第一個用於獲取令牌,第二個用於獲取當前實例的實際元資料。

    在PHP中,程式碼可以是:

    $ch = curl_init();
    
    // 获取有效的令牌
    $headers = array (
            'X-aws-ec2-metadata-token-ttl-seconds: 10' );
    $url = "http://169.254.169.254/latest/api/token";
    
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, "PUT" );
    curl_setopt( $ch, CURLOPT_URL, $url );
    $token = curl_exec( $ch );
    
    echo "<p> TOKEN :" . $token;
    
    // 获取当前实例的元数据
    $headers = array (
            'X-aws-ec2-metadata-token: '.$token );
    $url = "http://169.254.169.254/latest/dynamic/instance-identity/document";
    
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, "GET" );
    $result = curl_exec( $ch );
    
    echo "<p> RESULT :" . $result;

    您只需要提取所需的資訊。您還可以使用更具體的URL請求唯一的信息,例如實例ID:

    $url = "http://169.254.169.254/latest/meta-data/instance-id";

    回覆
    0
  • 取消回覆