【发布时间】:2018-01-11 13:53:25
【问题描述】:
我正在使用适用于 PHP 的 AWS 开发工具包来查询负载均衡器的所有健康实例。我尝试使用describeInstanceHealth 方法从我的ELB 中获取所有健康的实例,却发现它说没有我提供的名称的活动负载均衡器。
然后我决定使用describeLoadBalancers 查看它在内部使用的名称,却发现该函数根本没有返回任何负载均衡器。在我键入此内容时,我有 3 个正在使用的活动负载平衡器。
这是我的代码的相关部分:
<?php
require 'aws/aws-autoloader.php';
use Aws\ElasticLoadBalancing\ElasticLoadBalancingClient;
...
$client = ElasticLoadBalancingClient::factory([
'key' => env('ACCESS_KEY'),
'secret' => env('SECRET'),
'region' => env('REGION')
]);
$result = $client->describeLoadBalancers();
var_dump($result);
我得到的输出如下:
object(Guzzle\Service\Resource\Model)#106 (2) {
["structure":protected]=> NULL ["data":protected]=> array(2) {
["LoadBalancerDescriptions"]=> array(0) { }
["ResponseMetadata"]=> array(1) {
["RequestId"]=> string(36) "e6e7b0a4-7880-11e7-bb72-995ab0ed2a69"
}
}
}
请注意,LoadBalancerDescriptions 键有一个空数组,此时它应该包含所有活动负载平衡器的描述。
我的猜测是 IAM 角色配置不正确,我的用户无法看到负载均衡器,但我不知道如何将我正在使用的用户/访问密钥附加到负载平衡器。
如何使负载平衡器对我正在进行的 API 调用可见?
我使用的是 PHP 5.6.31。
【问题讨论】:
-
您确定您查看的是正确的区域吗?
-
我的 ELB 列在美国西部(俄勒冈)下,可用区域为
us-west-2a、us-west-2b和us-west-2c。我使用的区域是us-west-2,对我来说是正确的。 -
我认为这不是 IAM 问题,因为通常您会收到未授权消息
-
我会 var dump $client 以确保它符合您的期望。显然不要在这里发布。
-
据我所知,$client 中的一切看起来都很好。有什么特别需要注意的吗?
标签: php amazon-web-services aws-sdk amazon-elb elastic-load-balancer