【问题标题】:About SMS service from Amazon SNS关于来自 Amazon SNS 的 SMS 服务
【发布时间】:2016-10-26 03:51:08
【问题描述】:

我希望Amazon SNS 向手机发送短信。我检查了 AWS 文档,上面写着

SMS notifications are currently supported for phone numbers in the     
United States. SMS messages can be sent only from topics created in the 
US East (N. Virginia) region. However, you can publish messages to 
topics that you create in the US East (N. Virginia) region from any 
other region.

但我不知道如何从我的 aws 节点所在的美国西部向我在美国东部地区创建的主题发布消息。

谷歌了很多,但没有运气。这里有人知道怎么做吗?

【问题讨论】:

    标签: amazon-web-services amazon-sns


    【解决方案1】:

    您的代码在哪里运行并不重要......即使在不属于 AWS 的地方。大多数服务,如 SNS,都有一个regional endpoint,您需要访问它,以便连接该区域中定义的资源。这就是 AWS 控制台在幕后所做的事情。

    如果您使用的是 SDK 或其他库,而不是使用自己的代码直接与 AWS 服务通信,那么您正在寻找的是如何使用请求或(可能)在构造函数中。

    通常,您只能从“任何其他地区”发送请求,就像您可以从 Internet 发送请求一样。您不会通过其他地区的 SNS 端点发送它们。您直接连接到目标区域。

    但请注意,SNS SMS 解决方案的实用性有限 - 可用于向期待您的通知的个人组发送通知(“夜间全局批处理过程已完成,但遇到错误。”)但不是客户联系就这么多(“您的订单已发货。”),因为主题订阅者不能单独寻址......发送给一个,发送给所有......所有对订阅确认消息做出积极回应的人,也就是说。

    【讨论】:

    • 谢谢迈克尔。我的用例非常简单。我配置了一个 AWS cloudwatch 警报。当警报发生时,我需要 cloudwatch 向我的手机发送短信。因为一般我们可以使用邮件网关发送短信,但是SNS主题需要确认。短信中的确认链接不可点击。你能告诉我怎么做这个手术吗?
    • 对于那个应用程序来说,它很棒。如果您操作正确,确认将是来自短代码 30304 的短信,要求您回复“Yes topic_name”。 docs.aws.amazon.com/sns/latest/dg/SMS-subscribe-to-topic.html
    • 如果您仍然不知道如何访问 us-est-1 区域,我需要知道您的编程语言和 SDK 版本,以便为您指明设置区域的正确方向,尽管我要做的只是查阅相应的文档。
    • 感谢迈克尔耐心的解释。但我仍然有问题。在这里,我稍微详细说明一下我的用例。我没有关于这个用例的自定义代码。我只是让 AWS cloudwatch 监控实例的健康状况,例如当实例关闭时,cloudwatch 会向预定义的主题发送电子邮件。
    • 现在我希望 cloudwatch 发送短信而不是电子邮件。但短信功能仅在美国东部地区可用。这意味着我只能在美国东部地区创建一个具有 SMS 功能的主题。但我正在监控的节点位于美国西部地区。所以现在问题来了,我需要在美国西部地区监控节点的 cloudwatch 将警报发送到在美国东部地区定义的主题。
    【解决方案2】:

    这是一个示例函数,它使用 Node.js SDK 从 AWS lambda 函数发送 SMS 消息:

    module.exports.sendMessage = (event, context, cb) => {
      const AWS = require('aws-sdk');
      const sns = new AWS.SNS({ region: 'us-east-1' });
      const params = {
        Message: 'The text message body.',
        PhoneNumber: '+15555555555',
      };
      sns.publish(params, function (err, data) {
        if (err) {
          cb(null, { message: 'Error: ' + err, event });
        } else {
          // data has the following form:
          // var data = {
          //   ResponseMetadata: { RequestId: '12345678-1234-5678-1234-012345678901' },
          //   MessageId: '12345678-1234-5678-1234-012345678901'
          // };
          cb(null, { message: data.MessageId, event });
        }
      });
    }
    

    您可以read more about it here 或根据您的架构调整它以使用another SDK。不要忘记设置正确的 IAM 权限以允许发送 SNS 消息给任何将运行它的东西。

    【讨论】:

      猜你喜欢
      • 2023-02-11
      • 2021-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多