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

Cannot pull SQS message from my EC2 instance

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

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

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

作为示例,即使使用我检查过的硬编码参数,以下代码也是有效凭据,returns 在 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}'
    ]);

有人对这里可能发生的事情有什么建议吗?

这可能有助于您调试问题。

  1. 运行 aws sqs list-queues 在命令行上。如果您的队列未在结果集中列出,则表示您的 AWS 密钥没有权限。

  2. 运行 aws sqs receive-message --queue-url <queue_url> 其中 queue_url 是您的队列的完整 url 从第 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}'
    ]);