JasonQ-AWS 提出的解决方案对于获取您账户中所有实例和应用程序的信息很有用。但是,它并没有告诉您哪些信息描述了当前进程真正执行的实例。
为此,您必须使用需要两个 CURL 命令的 IMDSv2,第一个用于获取 TOKEN,第二个用于获取当前实例的实际元数据。
因此,在 PHP 中,代码可以是:
$ch = curl_init();
// get a valid TOKEN
$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;
// then get metadata of the current instance
$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";