You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS SNS订阅SQS队列异常:部分创建方式失效求助

AWS SNS订阅SQS队列异常问题排查与修复

问题现象

将SNS主题订阅至SQS队列时,不同创建方式结果差异明显,但订阅完成后所有参数完全一致:

  • ✅ AWS控制台操作:先创建主题、队列,再从队列端发起订阅,消息推送正常。
  • ❌ 主题端创建订阅:无法正常接收消息。
  • ❌ PHP代码创建订阅:同样无法正常工作,代码示例:
$this->snsClient->subscribe([
    'TopicArn' => $this->topicArn,
    'Protocol' => 'sqs',
    'Endpoint' => $queueArn,
    'Attributes' => [
        'FilterPolicy' => json_encode(['eventName' => [$event]]),
        'RawMessageDelivery' => 'true'
    ]
]);

此前通过手动按有效方式解决过类似问题,但本次需要动态创建,无法依赖手动操作,需定位问题根源。

修复方案

问题源于SQS队列缺少允许SNS发送消息的权限策略:从队列端创建订阅时,AWS控制台会自动为队列添加对应的权限策略;但从主题端或通过代码创建订阅时,不会自动配置该策略,导致SNS无法向队列推送消息。

以下是PHP实现的权限配置代码:

// 定义允许SNS向SQS队列发送消息的策略
$policy = json_encode([
    'Version' => '2012-10-17',
    'Statement' => [
        [
            'Sid' => 'SQSPolicyAllowSNSMessages',
            'Effect' => 'Allow',
            'Principal' => ['Service' => 'sns.amazonaws.com'],
            'Action' => 'sqs:SendMessage',
            'Resource' => $queueArn,
            'Condition' => [
                'ArnLike' => [
                    'aws:SourceArn' => $this->topicArn
                ]
            ]
        ]
    ]
]);

// 为SQS队列设置权限策略
$this->sqsClient->setQueueAttributes([
    'QueueUrl' => $queueUrl,
    'Attributes' => [
        'Policy' => $policy
    ]
]);

内容的提问来源于stack exchange,提问作者xdev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 07:41:05