2016-04-25 3 views
0
  • Я публикую сообщение String как полезную нагрузку сообщения, используя уведомление SNS от Raspberry Pi, используя программу Python, и я хочу передать эту полезную нагрузку на функцию Lambda.
  • Я настроил требование в консоли SNS на AWS, то есть создал тему и добавил ее лямбда-функцию своим подписчикам.
  • Теперь я хочу получить эту полезную нагрузку сообщения в функции лямбда. Но я не могу найти какой-либо метод, который мог бы мне помочь. Например, что-то вроде getMessage или что-то похожее на это.
  • Итак, мои вопросы: поскольку я настроил публикацию и подписку на AWS, могу ли я предположить, что клиенты подключены, и если я опубликую сообщение, я должен получить это на конце подписчика, который здесь является моей лямбда-функцией? Кроме того, что такое техника, в которой я могу получить полезную нагрузку сообщения в моей лямбда-функции? Я добавляю ниже, согласно предложению cjwfuller.
  • Ниже я записал метод для публикации в Python

client_boto = boto3.client('sns', aws_access_key_id='@@@', aws_secret_access_key='@@@', region_name='us-west-2')Программа AWS SNS Java для подписки

REGION = 'us-west-2'

TOPIC = 'arn:aws:sns:us-west-2:***:topic_name'

MSG = ntpath.basename(f_string)

SUBJECT_boto = 'File Name'

pub =client_boto.publish(TopicArn = TOPIC, Message = MSG, Subject=SUBJECT_boto)

Я пишу код подписки на Java. Так как моя lambda func уже подписана на нем на AWS-консоли, должна ли моя программа Java включать подписку снова или есть способ получить полезную нагрузку msg напрямую.

ответ

0

На каком языке вы пишете эту функцию? JavaScript в качестве примера:

exports.myHandler = function(event, context, callback) { 
    console.log("value1 = " + event.key1); 
    console.log("value2 = " + event.key2); 
    // ... 
} 

Источник: http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html

Это полезно испытывать рода вещи в консоли AWS Lambda, прежде чем писать весь код.

Поскольку я настроил публикации и подписки на AWS, я могу предположить, что клиенты подключены

Клиенты на самом деле не «связаны», они просто подписались на тему.

Публикация сообщения Я должен получить это на конце подписчика, который является моей функцией лямбда здесь?

Похоже, что вы делаете правильные вещи - код примера проводки поможет нам придумать более точные ответы.

+0

Ниже я записал метод для публикации в Python 'client_boto = boto3.client ('с.н.с.', aws_access_key_id = '***', aws_secret_access_key = '***', REGION_NAME = 'нас- запад-2') РЕГИОН = 'мы-запад-2' ТЕМЕ = 'ARN: AWS: SNS: нам-запад-2: ***: TOPIC_NAME' MSG = ntpath.basename (f_string) SUBJECT_boto = 'Имя файла' pub = client_boto.publish (TopicArn = TOPIC, Message = MSG, Subject = SUBJECT_boto) ' Я пишу код подписки в Java. Поскольку моя функция lambda уже подписана на нее на консоли AWS, должна ли моя программа Java включать подписку снова или есть способ получить полезную нагрузку msg напрямую. –

+0

Если вы видите подписку в консоли AWS, подписка определенно находится между правильной темой SNS и правильной лямбда-функцией, а затем нет, вам не нужно повторно подписываться. Кроме того, какой код Java вы подписываете? Вы, вероятно, не должны подписываться в действительном коде функции Lambda, иначе он никогда не будет подписан, если не будет никакого ручного вызова. – cjwfuller

+0

О, так работает ли абонент, чтобы подписываться первым, когда он может получать опубликованное сообщение? Если это так, то как работает прецедент, указанный AWS, в котором говорится, что SNS может публиковать полезную нагрузку сообщения для функции Lambda. Если лямбда вызывается SNS, то как она может быть подписана ранее? Источник: [http://docs.aws.amazon.com/sns/latest/dg/welcome.html] –

0

На поиски, я нашел класс для SNSEvent, который, https://github.com/aws/aws-lambda-java-libs/blob/master/aws-lambda-java-events/src/main/java/com/amazonaws/services/lambda/runtime/events/SNSEvent.java

Этот класс содержит все методы, связанные и необходимые для получения полезной нагрузки сообщения.

Обработчик функции Lambda в Java выглядит примерно так: пример;

public void handleRequest(SNSEvent input, Context context){ 
    String this_takes_message=input.getRecords().get(0).getSNS().getMessage(); 
} 
Смежные вопросы