Bon*_*255 0 php amazon-ec2 amazon-web-services
简单的问题。但无法让它发挥作用。
我为 EC2 创建了一个 IAM 角色,具有对 CloudWatch 的完全访问权限。我启动了一个附加了此 IAM 角色的新 EC2 实例。我在此 EC2 实例上编写了一个简单的 PHP 应用程序,该应用程序尝试将指标发布到 CloudWatch。
我在 nginx 日志中收到此错误:
2017/08/23 11:44:06 [error] 32142#32142: *5 FastCGI sent in stderr:
"PHP message: PHP Fatal error:
Uncaught Aws\Exception\CredentialsException:
Cannot read credentials from /var/www/.aws/credentials
in /var/www/app/vendor/aws/aws-sdk-php/src/Credentials/CredentialProvider.php:394
从同一个 EC2 实例,命令:
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/<role-attached-to-ec2-instance>
返回 200 OK,响应中包含访问密钥和秘密。
这是我尝试编写 CloudWatch 指标的 PHP 代码:
<?php
require 'vendor/autoload.php';
use Aws\CloudWatch\CloudWatchClient;
use Aws\Exception\AwsException;
$count = $_GET["count"];
publishMetric($count);
function publishMetric($count) {
    $client = new CloudWatchClient([
            'profile' => 'default',
            'region' => 'us-east-1',
            'version' => '2010-08-01'
    ]);
    try {
            $result = $client->putMetricData(array(
                'Namespace' => 'com.mynamespace',
                'MetricData' => array(
                        array(
                            'MetricName' => 'Count',
                            //Timestamp : mixed type: string (date format)|int (unix timestamp)|\DateTime
                            'Timestamp' => time(),
                            'Value' => $count,
                            'Unit' => 'Number'
                    )
                )
            ));
            var_dump($result);
            echo 'Done publishing metrics';
    } catch (AwsException $e) {
            // output error message if fails
            error_log($e->getMessage());
            echo 'Failure to publish metrics';
    }
}
?>
知道这个设置中缺少什么吗?
我知道这已经晚了。我遇到了同样的问题,并通过profile => default在初始化客户端时删除行来解决它。如果您不提供凭据和配置文件,SDK 将尝试从元数据服务器检索实例配置文件凭据。