【发布时间】:2014-12-30 12:46:01
【问题描述】:
尝试实例化 ec2client w.r.t
$ec2Client = \Aws\Ec2\Ec2Client::factory(array(
'profile' => 'default',
'region' => 'us-west-2',
'version' => '2014-10-01'
));
但因错误而失败
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
我通过作曲家"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 似乎已损坏或未达到预期。 credential profiles 和 environment variable 都依赖于环境变量。如果环境变量被禁用,两者都会失败。
可能的解决方法:
a)Enable environment variables
b) 设置 HOME evn 变量
putenv('HOME=/Users/yourname');
$ec2Client = \Aws\Ec2\Ec2Client::factory(array(
'region' => 'us-west-2',
'version' => '2014-10-01'
));
Profile init() 函数具有文件名选项,但除了HOME env 变量之外,没有明显的方法可以传递凭据配置文件路径
Aws\Common\Credentails\Profiler->init()
public static function ini($profile = null, $filename = null){
...
}
同样,如果您无法读取 /Users/yourname/.aws/credentials 文件,您必须稍微调整一下
chmod 644 /Users/yourname/.aws/credentials
【问题讨论】: