当我将我的应用程序部署到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}'
]);
有没有人对此处可能发生的事情有任何建议?
答案 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)
这可以帮助您调试问题。
在命令行上运行aws sqs receive-message --queue-url <queue_url>
。如果您的队列未在结果集中列出,则表示您的AWS密钥没有权限。
运行var myArray = str.replace(/[()-\s]/g, '').split(',');
,其中queue_url是您从第1步收到的队列的完整网址。您应该会看到队列中的所有邮件。
如果上述两个步骤都没有错误,那么您的应用程序可能会出现问题。