2016-04-25 139 views
0
  • 我使用Python程序使用Raspberry Pi的SNS通知發佈了一條字符串消息作爲消息負載,我希望將該消息負載傳遞給Lambda函數。
  • 我已經在AWS上的SNS控制檯中配置了需求,即我創建了一個主題並將lambda函數添加到其訂閱者。
  • 現在,我想在lambda函數中獲得該消息的有效載荷。但我找不到任何方法可以幫助我做到這一點。例如,像getMessage或類似的東西。
  • 所以我的問題是:因爲我已經在AWS上配置了發佈和訂閱,我可以假設客戶端已連接,並且如果我發佈消息,我應該在訂閱者的末端獲得這是我的lambda函數? 另外,我可以在我的lambda函數中獲得消息載荷的技術是什麼? 我按照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上,我可以假設,客戶端連接

客戶是不是真的「連接」,他們只是簡單地訂閱一個話題。

發佈的消息我應該得到的是在用戶的最終這是我在這裏的lambda函數?

聽起來你正在做正確的事情 - 發佈示例代碼將幫助我們提出更準確的答案。

+0

下面我在Python 'client_boto = boto3.client( 'SNS',aws_access_key_id = '***',aws_secret_access_key = '***',REGION_NAME ='寫下來的方法用於發佈我們 - 西-2' ) REGION = '美西-2' TOPIC = 'ARN:AWS:SNS:US-西-2:***:TOPIC_NAME' MSG = ntpath.basename(f_string) SUBJECT_boto = '文件名' pub = client_boto.publish(TopicArn = TOPIC,Message = MSG,Subject = SUBJECT_boto)' 我正在用Java編寫訂閱代碼。由於我的lambda func已經在AWS控制檯上訂閱了它,我的Java程序應該再次包含訂閱還是有辦法直接獲取msg有效內容。 –

+0

如果您可以在AWS控制檯中看到訂閱,訂閱肯定位於正確的SNS主題和正確的lambda函數之間,那麼不需要,您不需要重新訂閱。另外,你在哪個Java代碼中訂閱?您可能不應訂閱實際的Lambda函數代碼,否則它將永遠不會訂閱,除非有一些手動調用。 – cjwfuller

+0

哦,訂閱者需要首先訂閱哪些內容才能收到發佈的消息?如果是這種情況,那麼AWS指定的用例如何工作,其中表示SNS可以將消息負載發佈到Lambda函數。如果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

這個類包含了所有相關的和得到的消息有效載荷所需要的方法。

Java中的Lambda函數處理程序如下所示: 示例;

public void handleRequest(SNSEvent input, Context context){ 
    String this_takes_message=input.getRecords().get(0).getSNS().getMessage(); 
}