アマゾンウェブサービス-phpからAWSCLIコマンドを実行すると、クレデンシャルが見つかりません
shellexecを使用してphpコード内からawss3cpコマンドを実行しようとしています。以下はphpコードです。
echo shell_exec("sudo aws s3 cp s3://<bucket>/somefolder/somefile s3://<bucket>/someotherfolder/somefile --region ap-southeast-1 --acl public-read");
ファイルはコピーされておらず、echoからの出力は次のとおりです
「クレデンシャルが見つかりません...ファイルが残っている状態で1つのパートを完了しました」
注1:awsconfigureコマンドを使用してクレデンシャルを設定済みです
注2:ターミナルから直接まったく同じコマンドを実行すると、正常に機能します。
何かアイデアはありますか?
答え :
解決策:
これは私にとってはうまくいきました:
<?php
putenv('AWS_DEFAULT_REGION=your-region');
putenv('AWS_ACCESS_KEY_ID=YOURACCESSKEYID');
putenv('AWS_SECRET_ACCESS_KEY=YOURSECRETACCESSKEY');
$output = shell_exec('aws s3 cp ./file.txt s3://MYBUCKETID/ 2>&1');
echo "<pre>$output</pre>";
?>
答え :
解決策:
AWSCLIは〜/ .aws / configでクレデンシャルを設定し、aws php sdkは〜/ .aws/credentialsでクレデンシャルを検索します。
だから:
cd ~/.aws
mv config credentials
私にとって同じ問題だと思うことを解決しました。
答え :
解決策:
ターミナルから次のコマンドを実行できます:
$ cat ~/.aws/config
[profile eb-cli]
aws_access_key_id = XXXXXX
aws_secret_access_key = XXXXXX
$ aws configure
次に、4つの値の入力を求められます:
- アクセスキーID(アクセスキー)-これは2つの値のうち短い方です。
- シークレットアクセスキー
- デフォルトのリージョン名(「us-east-1」と入力)
- 出力形式(「json」と入力)
次に
$ aws s3 sync s3://<bucketname>
答え :
解決策:
構成ファイルのアクセス許可/場所の問題のようです。
AWS CLIを使用して設定されたクレデンシャルは、現在のユーザーのパスの特別なファイルに書き込まれます。 PHPは他の権限で実行されていると思います(同じユーザーとしてではありません)。構成を別のファイルに保持し、この方法でCLIに渡すことをお勧めします。また、特定の環境変数がPHPshell_exec内で使用可能であることを確認する必要があります。
答え :
解決策:
user1464317から拡張するには:
この問題はヨセミテvsマーベリックスに存在することがわかりました。 AWS CLI for Mavericksは、「〜/ .aws / config」でパーミッションを検索します。Yosemiteは「〜/ .aws/credentials」で検索します。
cronを使用している場合は、次のようにcrontab-eで環境変数を設定できます。
# Mavericks
AWS_CONFIG_FILE="/Users/YOUR_USER/.aws/config"
# Yosemite
AWS_CONFIG_FILE="/Users/YOUR_USER/.aws/credentials"
または、user1464317が示すように、ファイルを移動します:
mv config credentials
答え :
解決策:
問題を解決するには、次の手順に従います。
- .awsディレクトリを/home/non-rootUser/.awsから/var/ www にコピーします
- 次に、ディレクトリを/ var / www(cd / var / www)に変更します
- 権限を変更します。 / www $ sudo chmod -R 755 .aws
- 所有権を変更する / www $ sudo chown -R $ USER:$ USER .aws
- 再確認
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。