无法从我的EC2实例中提取SQS消息

时间:2017-09-08 16:21:44

标签: php symfony aws-sdk amazon-sqs

当我将我的应用程序部署到EC2实例时,它无法从我的SQS队列中获取消息。而是使用状态代码403 Forbidden, access to the resource {sqs queue} is denied抛出异常。但是,当我从本地环境运行相同的代码时,我的应用程序可以从SQS队列中获取消息。

我的应用程序使用symfony框架,并将有权访问此队列的用户的预配置AWS凭证从parameters.yml传递到\Aws\Sqs\SqsClient()

如果在EC2实例上运行aws configure并使用相同的凭据配置aws cli,则应用程序可以从SQS队列中提取消息。我担心这里因为它就像aws sdk覆盖了我传递的凭据。

作为示例,即使使用我已检查的硬编码参数的以下代码也是有效凭证,在EC2实例上运行时返回403。

 $sqs = new \Aws\Sqs\SqsClient([
        [
            'key' => '{my key}',
            'secret' => '{my secret}'
        ],
        'region' => 'us-east-1',
        'version' => 'latest'
    ]);

    $response = $sqs->receiveMessage([
        'QueueUrl' => 'https://sqs.us-east-1.amazonaws.com/{my account}/{my queue}'
    ]);

有没有人对此处可能发生的事情有任何建议?

2 个答案:

答案 0 :(得分:1)

在配置中尝试使用credentials键。

$sqs = new \Aws\Sqs\SqsClient([
    'credentials' => [
            'key'    => '{my key}',
            'secret' => '{my secret}',
        ],
        'region' => 'us-east-1',
        'version' => 'latest'
    ]);

    $response = $sqs->receiveMessage([
        'QueueUrl' => 'https://sqs.us-east-1.amazonaws.com/{my accoun}/{my queue}'
    ]);

答案 1 :(得分:0)

这可以帮助您调试问题。

  1. 在命令行上运行aws sqs receive-message --queue-url <queue_url>。如果您的队列未在结果集中列出,则表示您的AWS密钥没有权限。

  2. 运行var myArray = str.replace(/[()-\s]/g, '').split(','); ,其中queue_url是您从第1步收到的队列的完整网址。您应该会看到队列中的所有邮件。

  3. 如果上述两个步骤都没有错误,那么您的应用程序可能会出现问题。