2017-03-02 44 views
2

我有一個Python Lambda函數,可以響應物聯網按鈕和Alexa技能。我可以確定哪個AWS服務觸發了我的Lambda函數嗎?

有沒有辦法讀取eventcontext交給處理函數來識別哪個服務觸發了該函數(Alexa或IoT)?

+1

我沒有使用過Alexa或物聯網,但我認爲他們的事件對象的方案應該是如此不同,以至於很難將其中一個混淆爲另一個(除非一個事件結構或他們都完全處於用戶的控制之下,故意讓他們難以區分,但在這種情況下,您只需通過添加例如'eventSource'字段來區分它們) – Leon

+0

@Leon:我不明白。這有什麼關係? – orome

+2

請參閱[本](http://stackoverflow.com/questions/41814750/how-to-know-event-souce-of-lambda-function-in-it-自己)的問題,其中有一個接受的答案依賴於格式[事件模板](http://docs.aws.amazon.com/lambda/latest/dg/eventsources.html#eventsources-ses-email-receiving)。 –

回答

0

沒有辦法可靠地完成這一點。您可以得到的最接近的內容是熟悉由不同服務生成的各種事件的內容,並且(希望)能夠識別您感興趣的每個系列中可靠唯一的密鑰,然後您可以在代碼中檢查,例如與

if 'distinctKey' in event.keys(): 
    # ... 

但是這不是一個可靠的方法,因爲它需要你

  1. 審查每一個潛在的服務生成和每一個可能事件結構
  2. 成功,自信地確定每個服務感興趣的是一個密鑰或一組密鑰,其總是在服務的事件中可靠地呈現,並且獨特的給他們。
0

您可以讀取和CloudWatch的記錄事件像下面

import logging 
logger = logging.getLogger() 
logger.setLevel(logging.INFO) 
def my_logging_handler(event, context): 
logger.info('got event{}'.format(event)) 

這將記錄在雲中的事件數據看你看,並確定哪些事件觸發了拉姆達

+0

問題是我可以訪問的'event'或'context'的哪一部分,我可以使用它來確定哪些派生(IoT或ASK)調用了該函數。或者,如果(且只有在這種情況不可能的情況下)如何檢查其他來源(如可能的日誌)才能這樣做。 – orome

+0

這並不真正爲問題提供答案,但它確實向您展示瞭如何調試以自己發現答案。 –

相關問題