私はここですべての回答を調べましたが、私の問題は少し異なっているか、適切な解決策がなかったようです。私はPHPファイルで次のことをしています:
use Aws\Route53\Route53Client;
$client = Route53Client::factory(array(
'profile' => 'default',
'region' => 'us-east-1',
'version' => '2013-04-01'
));
このエラーを取得する:
Fatal error: Uncaught Aws\Exception\CredentialsException: Cannot read credentials from /.aws/credentials
簡単な修正は、HOMEディレクトリが正しいディレクトリであることを確認することのようです。確かにそうです。ファイルは読み取り可能で、ec2-userは既に所有者です。キーとシークレットはすでに「クレデンシャル」ファイルにインストールされています。プロファイル名はすでに「デフォルト」に設定されています。 /.awsを他のディレクトリ(ルート、/ homeなど)にコピーしようとし、許可、chmodなど、上記すべてを変更しました。まだ何もない。
次に、ちょっとしたキックを与えるために資格情報をハードコード化しました(わかっています-推奨しません)。これを行ったことを完全に無視します。
$client = Route53Client::factory(array(
'profile' => 'default',
'region' => 'us-east-1',
'version' => '2013-04-01',
'credentials' => [
'key' => $key,
'secret' => $secret,
]
));
最後の手段として、CredentialProviderクラスを含めてこれを配列に渡してみましたが、まだ何も行われていません。
'credentials' => CredentialProvider::ini('default', '/home/ec2-user/.aws/credentials'),
いったい何が悪いのでしょうか?
何が間違っているのかはわかりませんが、問題を完全に回避して、問題のVMにEC2インスタンスの役割を割り当てることをお勧めします。そうすれば、心配する必要はありません。それはより良い/より安全なソリューションです。
https://docs.aws.Amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-Amazon-ec2.html
削除するだけ'profile' => 'default'
、そしてあなたはうまく働くべきです
$client = Route53Client::factory(array(
'region' => 'us-east-1',
'version' => 'latest',
'credentials' => [
'key' => $key,
'secret' => $secret,
]
));
AWS Centos 7で実行しているので、すべて(chmod/chown/root/home/user、env、bashrcなど)を試し、/。aws/credentialsがApache/var/wwwディレクトリの外で機能するようにしました。 SDKは、資格情報ファイルを読み取れなかったと報告しました。
PHPを見て、HOME変数を設定/上書きできるかどうかを確認しましたが、.awsフォルダーを '/ var/www'フォルダーに配置し、次のように私のphpファイルにHOME変数を設定します:
<%php
putenv('HOME=/var/www');
//Zip File SDK Install requires aws-autoloader
require 'aws-autoloader.php'; //Your php code below
上記のEJの答えが実際に正しい答えですが、この質問のために私が最終的に行ったのはこれです。うまくいけば、これは誰かが自分の資格情報ファイルを読み取れるようにするのに役立ちます:
use Aws\Credentials\CredentialProvider;
use Aws\Route53\Route53Client;
$profile = 'default';
$path = '/var/www/html/.aws/credentials';
$provider = CredentialProvider::ini($profile, $path);
$provider = CredentialProvider::memoize($provider);
$client = Route53Client::factory(array(
'region' => 'us-east-1',
'version' => '2013-04-01',
'credentials' => $provider
));