使用AWS SDK创建SNS订阅后,Lambda触发器未显示问题咨询
问题:AWS SDK创建SNS订阅后,Lambda控制台不显示触发器
我希望通过SNS订阅触发Lambda函数,已使用AWS SDK创建了SNS主题与订阅,代码如下:
import {SubscribeCommand } from "@aws-sdk/client-sns"; import {snsClient } from "./libs/snsClient.js"; // Set the parameters const params = { Protocol: "lambda" /* required */, TopicArn: "TOPIC_ARN", //TOPIC_ARN Endpoint: "LAMBDA_FUNCTION_ARN", //LAMBDA_FUNCTION_ARN }; const run = async () => { try { const data = await snsClient.send(new SubscribeCommand(params)); console.log("Success.", data); return data; // For unit tests. } catch (err) { console.log("Error", err.stack); } }; run();
订阅已成功创建,但在Lambda控制台中未显示该订阅作为触发器;手动创建订阅则可正常显示。请问为何通过SDK创建的订阅不会出现在Lambda触发器列表中?
原因及解决方法
核心差异在于手动创建和SDK创建的流程不同:
- 手动在Lambda控制台添加SNS触发器时,AWS会自动完成两个关键操作:
- 在SNS侧创建主题到Lambda的订阅
- 在Lambda侧生成触发器关联记录,同时自动配置SNS主题调用Lambda的权限
- 你用SDK调用
SubscribeCommand只完成了第一部分,没有在Lambda侧创建对应的关联记录,所以控制台不会显示该触发器。
需要明确的是:即使控制台不显示触发器,只要SNS订阅存在且权限配置正确,Lambda依然会被SNS消息触发执行——控制台的触发器列表只是AWS提供的可视化关联记录,不代表实际触发逻辑失效。
如果希望控制台能显示这个触发器,需要补充以下操作:
- 配置SNS调用Lambda的权限:使用Lambda的
AddPermissionCommand,允许目标SNS主题调用该Lambda函数,示例参数大致如下:
{ FunctionName: "LAMBDA_FUNCTION_ARN", StatementId: "sns-trigger-permission", Action: "lambda:InvokeFunction", Principal: "sns.amazonaws.com", SourceArn: "TOPIC_ARN" }
- 关联Lambda与SNS订阅:调用Lambda的
CreateEventSourceMapping接口,将SNS主题ARN作为事件源关联到Lambda,完成后控制台就能看到对应的触发器记录。
内容的提问来源于stack exchange,提问作者sattha14902
相关产品推荐
相关产品推荐

