2015-07-22 4 views
2

У меня есть экземпляр Amazon Lambda и экземпляр SNS Amazon. Лямбда-код наблюдает за изменениями в нашей базе данных, и я хотел бы, чтобы он обратился к Amazon SNS, чтобы отправить толкам нашим пользователям. Например:Trigger Сообщение Amazon SNS через Amazon Lambda

Когда пользователь на одном из наших форумов получает новое сообщение, код Lambda распознает это изменение каждый раз, когда он запускается (каждые 10 минут), и должен отправлять push на смартфон пользователя через SNS.

Я бегу в стену, когда дело доходит до документации; В документах Amazon говорится только о том, как запускать код Lambda через SNS, но не наоборот. Есть ли у кого-нибудь пример того, как я могу это сделать?

+0

вы смогли найти ответ на это? Сейчас у меня такая же проблема, и документация по-прежнему ограничена этой конкретной операцией " –

ответ

1

Да, вы можете использовать AWS Lambda, чтобы достичь того, чего вы хотите. Вам также необходимо указать IAM Permissions, что позволит вашему Lambda IAM Role опубликовать вам сообщения SNS Topic.

Пример SNS Publish IAM Policy:

{ 
    "Statement":[ { 
     "Effect":"Allow", 
     "Action":"sns:Publish", 
     "Resource":"arn:aws:sns:*:<your account id>:<your topic id>" 
    } ] 
} 
2

Нет ничего особенного в том, чтобы передавать уведомления SNS в контексте Lambda. Я бы подумал об этом как о другом внешнем сервисе, с которым вы общаетесь.

Что вы можете сделать, это вытянуть AWS SDK в свой лямбда-код и после этого использовать код для вызова SNS. Вам нужно будет ввести правильные учетные данные, чтобы иметь возможность вызывать API SNA Amazon (но вы, вероятно, делаете что-то подобное для получения конечной точки и учетных данных базы данных, если вы разговариваете с базой данных)

0

Вы можете использовать лямбда ниже, чтобы вытолкнуть сообщение SNS пользователю, но вы должны знать, что конечная точка ARN для этого пользователя. Например, если в приложении для Android при входе пользователя в систему приложение отправит маркер GCM (Google Cloud Messaging) на ваш сервер (через вызов API, который вызывает, например, лямбда). Ваш бэкэнд, который подключен к GCM, может затем использовать этот токен для поиска, какой ARN конечной точки соответствует этому пользователю, и поместите это в лямбда ниже. В качестве альтернативы вы можете отправить приложение ARN конечной точки прямо на ваш сервер, хотя я думаю, что это может быть немного менее безопасным. Убедитесь, что вы предоставили разрешения IAM для публикации в своем приложении через SNS. Вы можете использовать лямбда ниже, чтобы подтолкнуть сообщение:

var AWS = require('aws-sdk'); 
 
var sns = new AWS.SNS({apiVersion: '2010-03-31'}); 
 

 
exports.handler = (event, context, callback) => { 
 

 
    console.log(JSON.stringify(event)) 
 

 
var payload = { 
 
"default": "The message string.", 
 
"GCM":"{"+ 
 
    "\"notification\":{"+ 
 
     "\"body\":\"PUT NOTIFICATION BODY HERE\","+ 
 
     "\"title\":\"PUT NOTIFICATION TITLE HERE\""+ 
 
    "}"+ 
 
"}" 
 
}; 
 

 
    payload = JSON.stringify(payload); 
 

 
    var params = { 
 
     TargetArn: 'PUT THE ENDPOINT ARN HERE', 
 
     Subject: 'foo2', 
 
     MessageStructure: 'json', 
 
     Message: payload 
 
    } 
 
    sns.publish(params, function(err, data) { 
 
     if (err) console.log(err, err.stack); // an error occurred 
 
     else  console.log(data);   // successful response 
 
    }); 
 

 
};

Смежные вопросы