Maison  >  Questions et réponses  >  le corps du texte

Comment obtenir des métadonnées d'instance à l'aide du SDK PHP AWS

<p>Je souhaite utiliser le SDK AWS pour obtenir les métadonnées d'instance (par exemple AZ) de l'instance EC2 actuelle. J'ai trouvé une alternative, mais elle n'utilise pas le SDK, juste <code>file_get_contents</code>. Comment utiliser le SDK pour implémenter cette fonction ? </p>
P粉032649413P粉032649413442 Il y a quelques jours592

répondre à tous(1)je répondrai

  • P粉360266095

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

    La solution proposée par JasonQ-AWS est très utile pour obtenir les informations de toutes les instances et applications du compte. Cependant, il ne vous fournit pas d'informations décrivant l'instance dans laquelle le processus en cours s'exécute.

    Pour y parvenir, vous devez utiliser IMDSv2, qui nécessite deux commandes CURL, la première pour obtenir le jeton et la seconde pour obtenir les métadonnées réelles de l'instance actuelle.

    En PHP, le code peut être :

    $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;

    Il vous suffit d'extraire les informations dont vous avez besoin. Vous pouvez également demander des informations uniques telles que l'ID de l'instance en utilisant une URL plus spécifique :

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

    répondre
    0
  • Annulerrépondre