首页 > 解决方案 > 无法发布到 SNS 主题,将 MessageId 设为未定义

问题描述

我有一个非常基本的代码片段来测试从 Node Lambda 向 SNS 发布消息:

exports.handler = async () => {
    const AWS = require('aws-sdk');
    AWS.config.update({region: 'us-east-2'});
    let result;
    try {
        result = await new AWS.SNS({apiVersion: '2010-03-31'}).publish({
            TopicArn: 'arn:aws:sns:us-east-2:99999999999:MyTopic',
            Message: 'Body of Message 1',
            Subject: 'Message 1'
        });
    } catch (err) {
        console.error('xxxxxxxx', err, err.stack);
        throw err;
    }
    console.info('>>>>>> ' + result.MessageId);
}

但是,我在日志中反复得到的只是>>>>>> undefined,当然,消息没有被发布(因为订阅的队列总是空的)。我可以确认 Lambda 函数具有相关权限。我究竟做错了什么?

标签: node.jsaws-lambdaamazon-sns

解决方案


你没有转换publish成一个承诺。这意味着这result = await将无法按预期工作。

阅读我的旧答案以获得更多理解:How to use Async and Await with AWS SDK Javascript

TLDR;

result = await new AWS.SNS({apiVersion: '2010-03-31'}).publish({
            TopicArn: 'arn:aws:sns:us-east-2:99999999999:MyTopic',
            Message: 'Body of Message 1',
            Subject: 'Message 1'
        }).promise(); // !!!

推荐阅读