首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用PHP获取实例元数据?

如何使用PHP获取实例元数据?
EN

Stack Overflow用户
提问于 2022-08-05 16:17:07
回答 3查看 139关注 0票数 1

我希望使用EC2获取当前AWS SDK的实例元数据(如AZ)。我找到了另一个解决方案,但是它不是使用SDK --只是一个file_get_contents --怎么可能使用SDK呢?

EN

回答 3

Stack Overflow用户

发布于 2022-08-05 22:59:51

对于当前的EC2实例,您是指运行在EC2上的PHP代码吗?您希望将这些元数据注入一些变量中以供使用?

还是您的意思是使用PHP创建了一个对象,例如:

代码语言:javascript
运行
复制
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-east-1',
    'version' => 'latest'
]);

如果您的意思是第二种方式,您可以像这样通过describeInstances访问这些数据:

代码语言:javascript
运行
复制
$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

票数 1
EN

Stack Overflow用户

发布于 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中为您提供这些数据。

票数 0
EN

Stack Overflow用户

发布于 2022-11-06 10:19:00

JasonQ提出的解决方案对于获取帐户中所有实例和应用程序的信息非常有用。但是,它并没有告诉您什么信息描述了由当前进程真正执行的实例。

为此,您必须使用IMDSv2,它需要两个CURL命令,第一个命令获取令牌,第二个命令获取当前实例的实际元数据。

因此,在PHP中,代码可以是:

代码语言:javascript
运行
复制
$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,如:

代码语言:javascript
运行
复制
$url = "http://169.254.169.254/latest/meta-data/instance-id";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73252679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档