72

Web APIを介してSNSメッセージをAndroidに送信しようとしています。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

このトピックに関する少しのガイダンスは、私を大いに助けてくれます

4

9 に答える 9

165

私の場合、私は使用していました

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,
  )
));

ここに記載されているとおり。呼び出しを変更しないと、apache~/.aws/credentials php は、空の HOME 環境変数を使用してファイルを検索するようにフォールバックしていました。を実行してその値を確認できますphp -r 'var_dump(getenv("HOME"));'

関連記事です

于 2015-07-23T08:50:30.077 に答える
4

手順は次のとおりです。

  1. これcd ~ により、ホームディレクトリに移動します。
  2. mkdir .aws
  3. sudo vi .aws/credentials
  4. 次の行を書き、ファイルを保存します。

    [default]
    aws_access_key_id = Your AWS Access Key
    
    aws_secret_access_key = Your AWS Secret Access Key
    
于 2017-04-06T09:18:03.727 に答える
3

サーバーが AWS EC2 (おそらく ECS と Elastic Beanstalk でも同じ) にあると仮定すると、この問題を処理する「正しい」方法は、資格情報をまったく保存しないことです。

代わりに、次のようにします。

  1. IAM ロールを作成する ( https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html )
  2. 関連するアクセス許可をロール ポリシーに追加します (この場合、SNS メッセージを送信します)。
  3. ロールを EC2 インスタンスに割り当てます (インスタンス設定 => IAM ロールのアタッチ/置換)

このようにして、コードに機密データを残さないようにします。

于 2020-06-25T00:21:31.213 に答える