AWS 环境变量提供商不接受凭据

AWS Environment variable provider not accepting credentials

我正在使用以下代码在本地连接 dynamoDb

$dotenv = new Dotenv\Dotenv(dirname(__DIR__, 2));
    $dotenv->load();
    $this->key = getenv('aws_access_key_id');
    $this->secret = getenv('aws_secret_access_key');
    $this->dynamodb = new DynamoDbClient([
        'profile' => 'default',
        'region' => 'us-east-1',
        'version' => 'latest',
        'credentials' => [
            'key' => $this->key,
            'secret' => $this->secret,
        ]
    ]);

我的.env文件

aws_access_key_id = ....
aws_secret_access_key = ....

我遇到了这个错误

Type: Aws\Exception\CredentialsException
Message: Cannot read credentials from /Users/user/.aws/credentials
File: /path/to/project/vendor/aws/aws-sdk-php/src/Credentials/CredentialProvider.php
Line: 394

也尝试了 access keysecret key 的基本硬编码,但它似乎并没有工作,而是每次从默认路径 ~/.aws/credentials

TIA

尝试打印环境变量以确保您的应用程序正在获取这些环境变量。

它没有从这些变量中找到它。您需要在 运行 此脚本之前导出它们。

希望对您有所帮助。

编辑 1:

use Aws\Common\Credentials\Credentials;

$credentials = new Credentials('YOUR_ACCESS_KEY', 'YOUR_SECRET_KEY');

//将这些凭据分配给 Dynamodbclient

EDIT2: AWS SDK 3.x 遵循不同的初始化方式。

$sdk = new Aws\Sdk([
    'credentials' => $credentials,
    'region' => 'us-east-1',
    'version' => 'latest',
    'DynamoDb' => [
        'region' => 'us-west-2',
    ],
]);

$dynamodb = $sdk->createDynamoDb();  // This is dynamodb client

尝试不指定:

'profile' => 'default'

您想使用凭据文件中指定的默认配置文件。 SDK 可能会查看此行并尝试打开凭据文件并查找 default 配置文件。我没有安装 PHP SDK 来验证这一点..