Guu*_*uus 7 amazon-ec2 amazon-web-services
我创建了一个EC2 Ubuntu实例.
以下是使用适用于PHP的AWS 2.6 SDK:
$client = DynamoDbClient::factory(array(
'key' => 'xxx',
'secret' => 'xxx',
'region' => 'eu-west-1'
));
Run Code Online (Sandbox Code Playgroud)
我在中创建了一个凭证文件~/.aws/credentials.
我把它放进去了/home/ubuntu/.aws/credentials
[default]
aws_access_key_id=xxx
aws_secret_access_key=xxx
Run Code Online (Sandbox Code Playgroud)
尝试以下操作不起作用,并给出InstanceProfileCredentialsException :
$client = DynamoDbClient::factory(array(
'profile' => 'default',
'region' => 'eu-west-1'
));
Run Code Online (Sandbox Code Playgroud)
有用户www-data和用户ubuntu.
我应该在什么文件夹中放置凭证文件?
设置凭据的一种解决方案是:
sudo nano /etc/apache2/envvars
添加环境变量:
export AWS_ACCESS_KEY_ID="xxx"
export AWS_SECRET_ACCESS_KEY="xxx"
Run Code Online (Sandbox Code Playgroud)
sudo service apache2 restart
之后,以下工作:
$client = DynamoDbClient::factory(array(
'region' => 'eu-west-1'
));
Run Code Online (Sandbox Code Playgroud)
这已经太晚了,但是我为无法实际使用环境变量的共享服务器找到的解决方案是定义自定义 ini 文件位置,如下所示:
require (__DIR__.'/AWSSDK/aws-autoloader.php');
use Aws\Credentials\CredentialProvider;
use Aws\S3\S3Client;
$profile = 'default';
$path = '/path/to/credentials';
$provider = CredentialProvider::ini($profile, $path);
$provider = CredentialProvider::memoize($provider);
$client = new \Aws\S3\S3Client([
'version' => 'latest',
'region' => 'us-west-2',
'credentials' => $provider
]);
Run Code Online (Sandbox Code Playgroud)
请注意,您甚至可以使用此方法定义不同的配置文件。文档在这里
我有一个访问 SQS 并需要凭据的非 EC2 服务器。我无法使用envvars,因为有不同权限的不同人在此服务器上运行并且envvars是全球性的。出于同样的原因,我认为我不能使用存储在用户家中的AWS 凭证文件(尽管我也不知道如何使该文件适用于用户 www-data。)
我所做的是设置一个小文件 AWS_Creds.php
<?php
define ("AWS_KEY", "MY KEY HERE");
define ("AWS_SECRET", "MY SECRET");
?>
Run Code Online (Sandbox Code Playgroud)
该文件存储在 Webroot 之外并包含在其中,include ('ABSOLUTEPATH/AWS_Creds.php')并且我包含对客户端工厂的硬连线引用。
优雅的?不,完成了吗?是的。
编辑
我忘了提及:我忽略了AWS_Creds.php,这样它就不会进入我们的存储库。
| 归档时间: |
|
| 查看次数: |
6785 次 |
| 最近记录: |