创建AWS SNS主题时:
a = conn.create_topic(topicname)
Run Code Online (Sandbox Code Playgroud)
或者已经创建了主题:
a = conn.get_all_topics()
Run Code Online (Sandbox Code Playgroud)
结果是:
{u'CreateTopicResponse': {u'ResponseMetadata': {u'RequestId': u'42b46710-degf-52e6-7d86-2ahc8e1c738c'}, u'CreateTopicResult': {u'TopicArn': u'arn:aws:sns:eu-west-1:467741034465:exampletopic'}}}
Run Code Online (Sandbox Code Playgroud)
问题是如何将主题的ARN作为字符串:arn:aws:sns:eu-west-1:467741034465:exampletopic?
我在示例中看到了如何将消息字符串传递给Amazon sns sdk的publish方法。但是,是否存在如何将自定义对象作为消息传递的范例?我尝试将“ MessageStructure”设置为“ json”,但InvalidParameter: Invalid parameter: Message Structure - No default entry in JSON message body出现错误。我应该在哪里将对象值传递到参数中?
有什么例子吗?
var params = {
Message: JSON.stringify(item),
MessageStructure: 'json',
TopicArn: topic
//MessageAttributes: item
};
return sns.publishAsync(params);
Run Code Online (Sandbox Code Playgroud) 我编写了一个AWS lambda函数,用于在上传S3对象时发送文本消息.我已经确认了订阅,我可以收到SNS控制台发送的测试消息.
当我测试lambda时,所有日志都说方法成功,但没有任何子消息到达.这是函数(主要是示例模板,但在本文中为了安全性而改变了我的主题).任何有关测试/尝试下一步的提示都会受到赞赏.
console.log('Loading function');
var aws = require('aws-sdk');
var s3 = new aws.S3({ apiVersion: '2006-03-01' });
exports.handler = function(event, context) {
var bucket = event.Records[0].s3.bucket.name;
var key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
var params = {
Bucket: bucket,
Key: key
};
var sns = new aws.SNS();
console.log('start of brians sns function')
var pubResult = sns.publish({
Message: 'Test publish to SNS from Lambda',
TopicArn: 'arn:aws:sns:us-east-1:xxxxxxxxxxxx:lambdatop'
}, function(err, data) {
if (err) {
console.log(err.stack);
return;
}
console.log('push sent');
console.log(data);
});
console.log('after sns …Run Code Online (Sandbox Code Playgroud) 我正在尝试将一个简单的短信从ruby直接发送到带有SNS服务的电话号码.
require 'aws-sdk'
sns = Aws::SNS::Client.new(region: 'my_region', access_key_id: 'my_id', secret_access_key: 'mykey')
sns.publish({phone_number: 'my_number', message: 'test message'})
Run Code Online (Sandbox Code Playgroud)
但我明白了 ArgumentError: unexpected value at params[:phone_number]
这是我的代码,用于通过AWS sms服务将SMS发送到特定号码。
var AWS = require('aws-sdk');
AWS.config.update({
accessKeyId: '{ID}',
secretAccessKey: '{KEY}',
region: 'us-east-2'
});
var sns = new AWS.SNS();
var params = {
Message: 'this is a test message',
MessageStructure: 'text',
PhoneNumber: '+XXXXXXXX'
};
sns.publish(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
Run Code Online (Sandbox Code Playgroud)
但是我在控制台中遇到以下错误
'InvalidParameter:无效参数:PhoneNumber原因:+ XXXXXX无效,无法发布
我正在构建一个服务,它将使用来自其他来源(服务)的数据.所以,我想使用以下管道: -
其他服务----> SNS主题----> SQS ----> AWS Lambda ----> Dynamo Db
那么,上面的流程说的是另一项服务将数据推送到SQS将成为订户的SNS主题.现在,AWS Lambda将在此SQS上触发一个触发器,该触发器将侦听SQS中的消息并将其推送到Dynamo Db.虽然看起来没问题.但现在我在想是否真的需要SQS.我可以避免使用它吗?AWS Lambda不是使用SQS,而是在SNS上直接触发.如果我不使用AWS SQS,我只想到一个案例.如果AWS Dynamo DB失败,它将如何处理该方案?我认为只有SNS,我会丢失一些消息,我的Dynamo Db处于失败状态,但如果我有SQS,那么这些消息将存储在SQS队列中.
如果我的理解是正确的,请告诉我.
非常感谢你的帮助.
amazon-sqs amazon-web-services amazon-sns amazon-dynamodb aws-lambda
我正在尝试为s3中的存储桶实施aws sns服务,并且我正在按照此文档https://docs.aws.amazon.com/sns/latest/dg/SendMessageToHttp.html进行操作, 根据该文档中将包含订阅网址确认订阅的请求将进入我们提供的网址,但我在请求中收到空白内容。我试图记录尸体,但给了我一个空的物体。并尝试使用bodyparser,但结果相同。
这是我正在实施的路线。
router.post("/s3FileCallback", function (req, res) {
debugger;
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json())
if (req.get("x-amz-sns-message-type") == "SubscriptionConfirmation") {
console.log("arn" + req.get("x-amz-sns-topic-arn"));
const subscribeUrl = req.body.SubscribeURL;
console.log("subscribeUrl" + subscribeUrl);
})
Run Code Online (Sandbox Code Playgroud)
有什么我想念的吗?谁能指出我正确的方向。
我正在使用AWS-SDK for Node.js,并且我想在使用SNS publish方法时更改SMS类型,即从Promotional到Transactional。我知道我必须使用该MessageAttributes属性,但是文档尚不清楚我应该如何做。
我应该在MessageAttributes对象/地图上添加什么参数或属性?
我这个页面上注册您的移动应用与AWS的标题:“要使用AWS注册您的移动应用”第一子主题的第1项。指令说:
- 转到https://console.aws.amazon.com/sns/v2/home,然后选择创建平台应用程序。
但是,当我单击该链接时,看不到“ 创建平台应用程序 ”选项。它只有选项“ 创建主题”,“ 创建订阅 ”和“ 发布消息”。
我见过很多人使用SNS来触发其lambda函数,而不是使用API网关来执行它。有任何具体原因吗?
我个人认为允许API网关执行此操作比使用SNS灵活得多。关于为什么这样做有什么很好的阐述?如果我使用SNS触发该功能,是否可以提高性能或降低成本?
amazon-sns ×10
node.js ×3
aws-lambda ×2
amazon-sqs ×1
aws-sdk ×1
boto ×1
express ×1
lambda ×1
python ×1
ruby ×1