3

我正在尝试使用 Route53 和 aws-php-sdk 创建一个子域。

但我一次又一次地收到这个错误:

[2017-06-16 12:17:00] local.ERROR:Aws\Exception\CredentialsException:从实例配置文件元数据服务器检索凭据时出错。

(cURL 错误 7:无法连接到 169.254.169.254 端口 80:没有到主机的路由(参见http://curl.haxx.se/libcurl/c/libcurl-errors.html))在 /var/www/html/测试/供应商/aws/aws-sdk-php/src/Credentials/InstanceProfileProvider.php:79

我正在使用 aws-sdk-php 版本:3.29 "aws/aws-sdk-php": "^3.29"

这是我的书面代码

use Aws\Route53\Route53Client;

$client = Route53Client::factory(array(
        'region'  => 'us-east-1',
        'version' => '2013-04-01',
        'credentials  ' => array('key'=>'AWS_KEY',
                'secret'=>'AWS_SECRET_KEY')
      ));


      $result = $client->changeResourceRecordSets(array(
        // HostedZoneId is required
        'HostedZoneId' => 'ROUTER_53_HOSTED_ZONE_ID',
        // ChangeBatch is required
        'ChangeBatch' => array(
                // Changes is required
                'Changes' => array(
                    array(
                        // Action is required
                        'Action' => 'CREATE',
                        // ResourceRecordSet is required
                        'ResourceRecordSet' => array(
                            // Name is required
                            'Name' => 'test2.xyz.co.in.',
                            // Type is required
                            'Type' => 'A',
                            'TTL' => 600,
                            "AliasTarget"=> array(
                              "HostedZoneId"=> "LOAD_BALANCER_ZONE_ID",
                              "DNSName"=> "LOAD_BALANCER_DOMAIN_NAME",
                              "EvaluateTargetHealth"=> false 
                            ), 
                        ),
                    ),
                ),
          ),
    ));

帮助将是可观的。提前致谢。

4

2 回答 2

3

这个问题很老了,但我想放弃一个答案,以防有人有类似的问题。

AWS PHP SDK 需要凭证才能与 AWS 通信。凭据称为access key IDsecret access key

正如 AWS 文档中强调的那样

如果您在实例化客户端对象时未向其提供凭据,SDK 将尝试在您的环境中查找凭据。

根据您的日志,SDK 似乎仍在从您的环境中提取凭证,这些凭证存储在 ~/.aws/credentials 中,而不是使用提供的密钥。

确保您的环境变量中有访问密钥和密钥。

$ less ~/.aws/credentials

[default]
aws_access_key_id = key
aws_secret_access_key = secret

或者

清除配置缓存以强制使用在客户端实例化中声明的显式凭据。以防它们被缓存。

php artisan config:cache

另请参阅此文档以了解如何正确设置客户端。

https://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/credentials.html

于 2018-01-22T13:42:10.073 回答
0

如果您使用 php artisan config:cache ,请确保您不使用 env() 助手从除配置文件 (config/*) 之外的任何地方访问 env 变量。避免在刀片模板中使用 env() 助手。这是因为,在上述命令运行后调用 env() 助手,将返回 null。

而是使用配置文件来访问 env 值。如果 config 文件夹下的单独配置文件不适用于该供应商包/服务,则 config/services.php 是指向 env 值的好地方。

php artisan config:cache命令将加速您的应用程序,因为 env 变量被缓存,因此建议在生产环境中使用。

更多细节请参考Laravel 配置缓存

于 2018-04-28T04:46:42.283 回答