Web APIを介してAndroidにSNSメッセージを送信しようとしています。 http://aws.Amazon.com/developers/getting-started/php/ からSDKをダウンロードしてインストールしました
Sample.phpの実行中に次のエラーが発生しました。
Fatal error: Uncaught exception 'Aws\Common\Exception\InstanceProfileCredentialsException' with message '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] 28: Connection timed out after 5016 milliseconds [url] http://169.254.169.254/latest/meta-data/iam/security-credentials/)' in C:\xampp\htdocs\aws-php\vendor\aws\aws-sdk-php\src\Aws\Common\InstanceMetadata\InstanceMetadataClient.php:85 Stack trace: #0 C:\xampp\htdocs\aws-php\vendor\aws\aws-sdk-php\src\Aws\Common\Credentials\RefreshableInstanceProfileCredentials.php(52): Aws\Common\InstanceMetadata\InstanceMetadataClient->getInstanceProfileCredentials() #1 C:\xampp\htdocs\aws-php\vendor\aws\aws-sdk-php\src\Aws\Common\Credentials\AbstractRefreshableCredentials.php(54): Aws\Common\Credentials\Refreshable in C:\xampp\htdocs\aws-php\vendor\aws\aws-sdk-php\src\Aws\Common\InstanceMetadata\InstanceMetadataClient.php on line 85
このトピックに関する小さなガイダンスは私を大いに助けます
私の場合、私は使用していました
return DynamoDbClient::factory(array(
'version' => 'latest',
'region' => AWS_REGION,
'key' => AWS_KEY,
'secret' => AWS_SECRET
));
以前はaws/aws-sdk-php
バージョン2.8.5で問題ありませんでしたが、composerが自動的にバージョン3.2.0をインストールすると、上記のエラーが発生しました。問題は、単に呼び出しを行う方法を変更すべきだったということです。
return DynamoDbClient::factory(array(
'version' => 'latest',
'region' => AWS_REGION,
'credentials' => array(
'key' => AWS_KEY,
'secret' => AWS_SECRET,
)
));
文書化されているとおり こちら 。呼び出しを変更せずに、Apachephpは、空のHOME環境変数を使用して~/.aws/credentials
ファイルを探すことにフォールバックしていました。 php -r 'var_dump(getenv("HOME"));'
を実行すると、その値を確認できます。
これ は関連する投稿です
私の場合、ハードコードされた資格情報を使用する必要がありました
$s3Client = new S3Client([
'region' => REGION,
'version' => '2006-03-01',
'credentials' => [
'key' => S3_KEY,
'secret' => S3_SECRETE,
],
]);
詳細を参照してください こちら :
設定した.aws/credentials
ファイルを、ログインしているユーザーのホームディレクトリではなく、Webサービスのホームディレクトリ*通常は/var/www
)に配置する必要があります。
サーバー上のphpファイルでecho getenv('HOME');
を実行すると、Webサービスが使用しているホームディレクトリを見つけることができます。
手順は次のとおりです。
cd ~
と入力すると、ホームディレクトリに移動します。mkdir .aws
Sudo vi .aws/credentials
次の行を書き、ファイルを保存します。
[default]
aws_access_key_id = Your AWS Access Key
aws_secret_access_key = Your AWS Secret Access Key
私は資格情報ファイルを使用しようとしていて、同じエラーが発生しました、 githubのこのguy はほとんどそれを打ちました:
資格情報ファイルはini形式である必要がありますが、.ini拡張子は使用できません。キーとシークレットで定義された「デフォルト」セクションが必要です。
$ less ~/.aws/credentials
[default]
aws_access_key_id = key
aws_secret_access_key = secret
デフォルトの代わりに他のセクション名を指定した場合、S3Clientパラメーターにprofile
キーを追加するだけです。
[example]
aws_access_key_id = key
aws_secret_access_key = secret
$s3Client = new \Aws\S3\S3Client([
'version' => '2006-03-01',
'region' => $yourPreferredRegion,
'profile' => 'example',
]);
資格情報ファイルまたは環境変数を使用することは、独自のサーバーで資格情報を提供する推奨方法です
そして、@ Antiの回答も私をたくさん助けてくれました!
ハードコーディングされた方法を好む場合は、@ shadiの答えに従ってください。
laravelおよびaws/aws-sdk-php-laravel sdkの場合、すべてのステップを構成し、.envファイルでキーを定義したら、次のコマンドで構成キャッシュを削除して再構築する必要があります。
php artisan config:cache;
composer dump-autoload;
これは、構成ファイルが公開されていないためである可能性があります。
構成ファイルを必ず公開してください。
php artisan vendor:publish --provider="Aws\Laravel\AwsServiceProvider"
これをテストするには、設定をクリアするだけです。
php artisan config:clear
キャッシュがクリアされた状態で動作する場合、これが問題になります。