无法从我的 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}'
]);
有人对这里可能发生的事情有什么建议吗?
这可能有助于您调试问题。
运行 aws sqs list-queues
在命令行上。如果您的队列未在结果集中列出,则表示您的 AWS 密钥没有权限。
运行 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}'
]);
当我将我的应用程序部署到 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}'
]);
有人对这里可能发生的事情有什么建议吗?
这可能有助于您调试问题。
运行
aws sqs list-queues
在命令行上。如果您的队列未在结果集中列出,则表示您的 AWS 密钥没有权限。运行
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}'
]);