2017-10-16 71 views
0

我必須在AWS流程上設置管理。 爲了讓事情變得簡單,我有一些客戶端通過對Elastic Beanstalk NodeJS應用上部署的SOAP服務器的SOAP請求發送心跳信號,比如說每5分鐘發一次。每次收到檢測信號時,我都會最後一次通過更新表中的字段來存儲DynamoDB表中的內容。AWS:在最近30分鐘內沒有更新DynamoDB表格行的觸發事件

我現在需要創建一個進程,如果我沒有在最後30分鐘收到了心跳,做的東西(更新另一個表,調用lambda函數等)。我現在不知道我會有多少客戶,但他們會隨着時間的推移而不斷增長,並連接到我的服務器24/7。

我希望在那些30分鐘後觸發Lambda函數的事件(或在SNS主題上發佈消息),但表中的特定行未更新,但我不知道如何讓最後一部分工作。此事件應該檢查​​文檔中的每一行。

你會怎麼做?

謝謝!

回答

1

您可以使用DynamoDB與TTL,DynamoDB流和AWS LAMBDA這一點。不需要cron

當你創建一個新的行或更新現有行,設置該行的TTL在未來30分鐘。

當達到該30分鐘後,它會火起來,你可以作爲一個lambda函數的觸發器使用DynamoDB流。

此Lambda函數可以執行您想要執行的自定義處理(即更新其他表,調用Lambda函數等)。

注意到,當其TTL過期原DynamoDB行將被刪除。如果您需要保留該記錄,則可以讓Lambda函數重新創建它,並在將來再將另一個TTL設置爲另一個30分鐘。

參考文獻:

+0

所以掛DynamoDB流新拉姆達將每30分鐘被稱爲不管是什麼,即使我可能不會需要做任何事情(客戶不太可能停下來,不會給我心跳)。您提供的解決方案似乎很好,但在資源方面也有些「昂貴」。我可能會選擇這種方式,但是如果有一種方法允許我只在需要時調用這個新的lambda **,我纔會更快樂:D –

+0

創建一個流事件用於* any *修改*任何* DynamoDB行。所以,你的Lambda將被要求進行每次修改。如果修改引用缺少的心跳(過期的TTL),那就做你的事情。如果不是,就忽略並且什麼都不做。 – dashmug

+0

似乎合法!非常感謝你! –

0

是否需要跨所有客戶端以30分鐘的時間間隔進行檢查:這可以通過執行SQL語句的服務器上的cron作業完成,其中Date() - Timestamp> 30分鐘(只是指出邏輯),在DynamoDB格式只是改變語法。

,或者您需要從上一次特定的客戶端送你30分鐘後進行檢查。 在這種情況下,您的cron將運行具有相同的邏輯,每分鐘如上

,如果你需要使用拉姆達的時間表參考此鏈接Using Lambda in schedule

希望這有助於 如果您需要進一步的幫助中的語法我已經準備好幫助