【问题标题】:AWS Environment variable provider not accepting credentialsAWS 环境变量提供商不接受凭证
【发布时间】:2017-10-22 03:14:03
【问题描述】:

我正在使用以下代码在本地连接 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

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb dynamo-local


    【解决方案1】:

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

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

    希望对你有帮助。

    EDIT1:

    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
    

    【讨论】:

    • 仅供参考,打印 env 变量确实有效,即打印给定值
    • 已更新答案,如果可行,请尝试更新。
    • 它仍然给出同样的错误$credentials = new Credentials('...', '...'); $this->dynamodb = new DynamoDbClient([ 'profile' => 'default', 'region' => 'us-east-1', 'version' => 'latest', 'credentials' => $credentials ]);
    • 你使用哪个版本的sdk?
    • 我正在使用3.36``"aws/aws-sdk-php": "^3.36"
    【解决方案2】:

    尝试不指定:

    'profile' => 'default'
    

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

    【讨论】:

    • 是的,如果你同时指定了“profile”和“credentials”,似乎“profile”优先。
    猜你喜欢
    • 1970-01-01
    • 2019-01-15
    • 2021-10-22
    • 2017-07-10
    • 2018-12-17
    • 2015-06-12
    • 2014-12-08
    • 2015-10-28
    • 1970-01-01
    相关资源
    最近更新 更多