Php 无法实例化\Aws\Ec2\Ec2客户端

Php 无法实例化\Aws\Ec2\Ec2客户端,php,aws-sdk,Php,Aws Sdk,正在尝试实例化ec2client 但由于错误而失败 Uncaught exception 'Aws\Common\Exception\CredentialsException' with message 'Could not load credentials.' 我有: cat ~/.aws/credentials [default] aws_access_key_id = xxxxxxxxxxx aws_secret_access_key = xxxxxxxxxxx 我通过compos

正在尝试实例化ec2client

但由于错误而失败

Uncaught exception 'Aws\Common\Exception\CredentialsException' with message 'Could not load credentials.'
我有:

cat ~/.aws/credentials 

[default]
aws_access_key_id = xxxxxxxxxxx
aws_secret_access_key = xxxxxxxxxxx
我通过composer
“aws/aws sdk php”:“3.*@dev”
使用aws sdk

编辑1):我正在本地开发机器上尝试此功能

编辑2): 我试过这个:

 use Aws\Common\Credentials\InstanceProfileProvider;
    $profile= new InstanceProfileProvider(['profile'=>'default']);
    $ec2Client = \Aws\Ec2\Ec2Client::factory(array(
        'region'  => 'us-west-2',
        'version' =>'2014-10-01',
        'credentials' => $profile
    ));
这给了我不同的错误:

'Error retrieving credentials from the instance profile metadata server. When you are not running inside of Amazon EC2, you must provide your AWS Access Key ID and Secret Access Key in the "key" and "secret" options when creating a client or provide an instantiated Aws\Common\Credentials\CredentialsInterface object. (cURL error 28: Connection timed out after 1000 milliseconds)' in .. /InstanceProfileProvider.php:9 ..
这给我的印象是,只有当应用程序从AWS云实例中运行时,凭据配置文件才有效!这使得概要文件的想法毫无用处(适用于开发环境)

编辑(3)

调试之后,似乎带有凭据配置文件的sdk已损坏或未达到预期效果。
凭证配置文件和
环境变量都取决于环境变量。如果禁用环境变量,则两者都将失败

可能的解决办法:

(a)

b) 设置初始evn变量

putenv('HOME=/Users/yourname');
$ec2Client = \Aws\Ec2\Ec2Client::factory(array(
'region'  => 'us-west-2',
'version' => '2014-10-01'
));
Profile init()
函数具有filename选项,但除了
HOME env
变量之外,没有其他明显的方法来传递credentails配置文件路径

Aws\Common\Credentails\Profiler->init()
public static function ini($profile = null, $filename = null){
...
}
同样,如果您无法读取
/Users/yourname/.aws/credentials
文件,您必须稍微调整一下它


chmod 644/Users/yourname/.aws/credentials
您应该将
.aws/credentials
文件放在web服务的根目录中,而不是ssh用户的根目录中

您必须将带有配置的.aws/credentials文件放在web服务的主目录中

把这个放到你网站的一些PHP文件中

echo getenv('HOME');
然后在该目录中:

mkdir .aws
touch credentials
nano credentials
在那里,您必须粘贴内容(键中不需要引号):

这就应该做到了


编辑: 正如sakhunzai在评论中所说(谢谢!),echo getenv(“HOME”)有时会返回null,如果出现这种情况,他会提供这种解决方案:“然而,从命令行php-i | grep HOME可以为我提供正确的用户主目录”

所以要记住这一点。

与此类似:
echo getenv(“HOME”)
returnnull,除非我将其设置为
putenv('HOME=/Users/yourname')但是,从命令行php-i | grep HOME可以为我提供正确的用户主目录
mkdir .aws
touch credentials
nano credentials
[default]
aws_access_key_id     = xxxxxxxxxxx
aws_secret_access_key = xxxxxxxxxxx