发布于 2022-08-05 22:59:51
对于当前的EC2实例,您是指运行在EC2上的PHP代码吗?您希望将这些元数据注入一些变量中以供使用?
还是您的意思是使用PHP创建了一个对象,例如:
$ec2Client = new Aws\Ec2\Ec2Client([
'region' => 'us-east-1',
'version' => 'latest'
]);如果您的意思是第二种方式,您可以像这样通过describeInstances访问这些数据:
$result = $ec2Client->describeInstances();
echo "Instances: \n";
foreach ($result['Reservations'] as $reservation) {
foreach ($reservation['Instances'] as $instance) {
echo "InstanceId: {$instance['InstanceId']} - {$instance['State']['Name']} \n";
echo "Availability Zone: {$instance['Placement']['AvailabilityZone']} \n";
}
echo "\n";
}还可以通过将参数添加到方法调用(如按类型或instanceId )进行筛选。
如果您只是在EC2实例上运行PHP代码,并且您需要该信息,您可以查看这个页面以获得一些选项:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html
发布于 2022-08-06 22:18:42
我不认为这是可能的。IMDSv2信息(如AZ、实例-id、实例类型等)可以通过https://169.254.169.254读取,如果您查看SDK的源代码,它只通过IMDSv2 (https://github.com/aws/aws-sdk-php/search?q=169.254)获取临时凭据,并且不允许任意的IMDSv2查询。
除非我遗漏了什么,否则您需要自己提取这些数据,或者使用第三方库在PHP中为您提供这些数据。
发布于 2022-11-06 10:19:00
JasonQ提出的解决方案对于获取帐户中所有实例和应用程序的信息非常有用。但是,它并没有告诉您什么信息描述了由当前进程真正执行的实例。
为此,您必须使用IMDSv2,它需要两个CURL命令,第一个命令获取令牌,第二个命令获取当前实例的实际元数据。
因此,在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";https://stackoverflow.com/questions/73252679
复制相似问题