【发布时间】:2016-09-18 01:18:56
【问题描述】:
这是我发布到主题的代码(出于安全原因,我更改了目标和主题 arn):
var AWS = require("aws-sdk");
var sns = new AWS.SNS();
var targetArn = 'arn:aws:sns:us-east-1:4363657289:endpoint/GCM/APP_NAME/3185sfdnfe283925sgSeaa0e';
var topicArn = 'arn:aws:s-s:us-east-1:4363657289436:TOPIC_NAME';
var payload = {
GCM: {
data: {
message: "test"
}
}
};
payload.GCM = JSON.stringify(payload.GCM);
payload = JSON.stringify(payload);
var params= {
TopicArn: topicArn,
TargetArn: targetArn,
Message: payload,
MessageStructure: 'json'
};
var responsefromSNS = sns.publish(params , function(error, data) {
if (error) {
console.log("ERROR: " + error.stack);
}
else {
console.log("SENT DATA: " + JSON.stringify(data));
context.done(null, data);
}
});
console.log(responsefromSNS);
我的问题是我从来没有看到来自 if 或 else 块的日志语句,并且推送通知永远不会到达移动应用程序。我已经咨询了AWS JavaScript SDK Documentation 和无数关于此的堆栈溢出帖子,但我没有尝试过任何工作。而且,我已授予 lambda 函数发布到该主题的权限。
---更新----- 我修改了一些代码,现在看起来像这样:
var AWS = require("aws-sdk");
AWS.config.update({region:'us-east-1'});
var topicarn = 'arn:aws:s-s:us-east-1:927579412028:alexapushdemo';
var targetarn = 'arn:aws:sns:us-east-1:927579412028:endpoint/GCM/automation.home.visa.com.homeautomation/3af761b2-1955-34d8-b66a-85e232e0aa0e';
var payload = {
default: "test",
GCM: {
data: {
message: "test"
}
}
};
payload.GCM = JSON.stringify(payload.GCM);
payload = JSON.stringify(payload);
var sns = new AWS.SNS();
console.log('start of sns function')
sns.publish({
TargetArn: targetarn,
Message: payload,
MessageStructure: 'json'
}, function(err, data) {
if (err) {
console.log(err.stack);
// Notify Lambda that we are finished, but with errors
context.done(err, 'sns function finished with errors!');
return;
}
console.log('push sent');
console.log(data);
// Notify Lambda that we are finished
context.done(null, 'sns function finished!');
});
console.log('end of sns functions');
我得到的错误是:
ConfigError:配置中缺少区域\\n
在 Request.VALIDATE_REGION (/node_modules/aws-sdk/lib/event_listeners.js:81:45)\\n
在 Request.callListeners (/node_modules/aws-sdk/lib/sequential_executor.js:105:20)\\n
在 callNextListener (/node_modules/aws-sdk/lib/sequential_executor.js:95:12)\\n
在 /node_modules/aws-sdk/lib/event_listeners.js:75:9\\n
完成时 (/node_modules/aws-sdk/lib/config.js:228:7)\\n
在 /node_modules/aws-sdk/lib/config.js:268:9\\n
在 resolveNext (/node_modules/aws-sdk/lib/credentials/credential_provider_chain.js:84:9)\\n
在 /node_modules/aws-sdk/lib/credentials/credential_provider_chain.js:97:11\\n
在 /node_modules/aws-sdk/lib/credentials.js:123:23\\n
在 /node_modules/aws-sdk/lib/credentials/ec2_metadata_credentials.js:66:7\\"\",\"ip\":\"127.0.0.1\"}",
为什么我在调用 AWS.config.update 时还是会收到这个。
【问题讨论】:
-
您的 lambda 代码是否包含在
exports.handler函数调用中? -
这段代码实际上是在一个函数中,然后我在exports.handler调用中调用它。
-
确保调用 AWS.config.update({region:'us-east-1'});在 var AWS = require("aws-sdk"); 之后还要确保您没有重复的行 "var AWS = require("aws-sdk");"
标签: javascript amazon-web-services push-notification amazon-sns aws-lambda