Executing AWS CLI command from php results in Unable to locate credentials

ε祈祈猫儿з 提交于 2019-11-28 13:27:08

The AWS CLI sets credentials at ~/.aws/config, and the aws php sdk looks for them at ~/.aws/credentials.

So:

cd ~/.aws
mv config credentials

Solved what I think is the same problem for me.

From your terminal, you can then run:

$ cat ~/.aws/config
[profile eb-cli]
aws_access_key_id = XXXXXX
aws_secret_access_key = XXXXXX

$ aws configure

and then you will be asked for 4 values:

  1. Access Key ID (Access Key) - This is the shorter of the two values.
  2. Secret Access Key
  3. Default region name (type in 'us-east-1')
  4. Output format (type in 'json')

then

$ aws s3 sync s3://<bucketname>

Looks like a permission/location issue of the configuration file.

Credentials set using AWS CLI, is written in a special file in the current user's path. PHP I guess is executing in other permissions (not as the same user). I would suggest you should keep the configs in a separate files and pass to the CLI this way. You also need to ensure that the specific environment variable is available inside PHP shell_exec.

To extend off of user1464317:

I found this problem exists with Yosemite vs Mavericks. The AWS CLI for Mavericks looks for permissions in "~/.aws/config", where Yosemite looks in "~/.aws/credentials".

If using cron, you can set the environment variable in crontab -e like so:

# Mavericks
AWS_CONFIG_FILE="/Users/YOUR_USER/.aws/config"

# Yosemite
AWS_CONFIG_FILE="/Users/YOUR_USER/.aws/credentials"

Or you do as user1464317 implied, move the file over:

mv config credentials

In order to solve the issue, Follow the following steps:

  1. copy .aws directory from /home/non-rootUser/.aws to /var/www
  2. Now change the directory to /var/www (cd /var/www)
  3. Change the permissions: /www$ sudo chmod -R 755 .aws
  4. Change Ownership /www$ sudo chown -R $USER:$USER .aws
  5. Recheck
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!