Php 从实例配置文件元数据服务器检索凭据时出错。(客户端错误:404)

Php 从实例配置文件元数据服务器检索凭据时出错。(客户端错误:404),php,amazon-web-services,amazon-ec2,amazon-ses,Php,Amazon Web Services,Amazon Ec2,Amazon Ses,我有一些问题,让AWS SES按照下面的工作;我想从我的网站向用户发送电子邮件。看起来没有验证凭据,但是我使用了从IAM生成的正确凭据(我还尝试了服务器根密钥,它给了我相同的错误)。对于如何进一步解决/调试,我已经没有任何想法了,因此非常感谢您的指导 执行时收到错误: 从实例配置文件元数据服务器检索凭据时出错。(客户端错误:404) 采取的步骤 我已设置SES并验证电子邮件地址等 我已经创建了一个IAM配置文件,具有“对SES的完全访问权限” 我已经使用phar文件安装了AWS SDK for

我有一些问题,让AWS SES按照下面的工作;我想从我的网站向用户发送电子邮件。看起来没有验证凭据,但是我使用了从IAM生成的正确凭据(我还尝试了服务器根密钥,它给了我相同的错误)。对于如何进一步解决/调试,我已经没有任何想法了,因此非常感谢您的指导

执行时收到错误:

从实例配置文件元数据服务器检索凭据时出错。(客户端错误:404)

采取的步骤

  • 我已设置SES并验证电子邮件地址等

  • 我已经创建了一个IAM配置文件,具有“对SES的完全访问权限”

  • 我已经使用phar文件安装了AWS SDK for php

  • 我已经编写了下面的php代码,直接为SES提供了正确的安全访问代码

  • 提前感谢您的帮助-这始终是一个伟大的社区!!如果我还可以提供什么,请告诉我


    John

    您可以使用多种方法向SDK提供凭据。请参阅文档:

    1) 使用您创建的IAM配置文件中的值设置环境变量:AWS\u ACCESS\u KEY\u ID、AWS\u SECRET\u ACCESS\u KEY、AWS\u DEFAULT\u REGION。

    2) 您还可以创建~/.aws/credentials文件,而不是1)。您可以在此处添加以下行:
    [默认]
    aws\u访问\u密钥\u id=您的\u aws\u访问\u密钥\u id
    aws\u secret\u access\u key=您的\u aws\u secret\u access\u key
    aws_default_region=区域

    1) 或者2)肯定会起作用,而且是直截了当的

    3) 您还可以创建实例配置文件。您需要创建IAM角色和实例配置文件。创建实例时,需要为其分配实例配置文件。请参阅第183页(如第页底部所示)。主题名称为“使用IAM角色向应用程序授予权限” 在AmazonEC2实例上运行):了解本指南的步骤和过程。在这里,秘密密钥和访问密钥被自动提取,您无需执行任何操作。您只需要使用步骤1设置默认区域(即导出AWS\u default\u region=someregion)。


    4) 您已经尝试了第四种方法,可能在您的设置中存在一些我不知道的问题。

    您好,Sri-非常感谢您提供了结构合理的答案。我正在使用最简单的方法,在我的代码中使用根键,但仍然收到错误。我在想——这可能是因为我使用的是旧版本的SDK,因为我使用的是phar文件而不是composer。我已经用composer重新安装了SDK,但现在收到以下错误“警告:include_once(/home/ec2 user/vendor/autoload.php):无法打开流:在/var/www/中被拒绝了权限”-关于如何解决的任何想法-我假设这是由于Apache访问根文件夹,但我不确定..再次感谢您的帮助您尝试了吗:
    require 'aws/aws.phar';
    use Aws\Ses\SesClient;
    
    //More code here
    
    $client = SesClient::factory(array(
        'key' => 'xxxxxxxxxxxxx',
        'secret' => 'xxxxxxxxxxx',
        'region' => 'us-west-2',
        'version' => '2010-12-01'
    ));
    
    //code to build the $msg here as array
    
    try{
         $result = $client->sendEmail($msg);
    
         //save the MessageId which can be used to track the request
         $msg_id = $result->get('MessageId');
         echo("MessageId: $msg_id");
    
         //view sample output
         print_r($result);
    } catch (Exception $e) {
         echo($e->getMessage());
    }
    //view the original message passed to the SDK
    print_r($msg);