0

我試圖從AWS Lambda函數發送數據(潛在的可能是10MB)到正在寫入本地數據存儲的本地CDAP應用程序。AWS:如何將數據從AWS Lambda發送到本地應用程序

我知道我可以在內部應用程序上使用REST接口來調用Lambda,但我想知道是否可以使用消息傳遞系統將本地資源與AWS Lambdas集成(即,Lambda寫入Kafka主題,即本地應用程序可以讀取該主題)。

我不知道最佳做法是做什麼或做了什麼。我想弄清楚這樣做的不同選擇。

在此先感謝您的幫助。

**我們在內部解決方案中遇到了卡夫卡對消息大小10MB限制的問題。

回答

1

更新的回答佔OP偏愛卡夫卡和解決了10MB的限制:

讓LAMBDA將消息發送到卡夫卡。

要做到這一點,您可以:

  1. 讓您的卡夫卡實例可用的網絡之外,這樣的λ可以訪問它。或者,
  2. 將Lambda放入VPC並將VPC連接到您的內部網絡(如果未建立直接連接)。

要解決10MB的限制,請將整個數據(大於10MB)拆分爲更小的塊並向卡夫卡發送多個消息。然後,如有必要,處理應用程序中的塊的加入。


原來的答覆: 我的建議是:

讓您LAMBDA寫入到一個SNS主題,其中的預置型應用程序可以訂閱。

這是因爲這是最容易實現的解決方案。 SNS可能不是您的應用程序的最佳選擇。

其他選項是:

  1. 同上,但使用室壁運動,而不是SNS。是否使用SNS或Kinesis的決定取決於您的應用程序的需求。

  2. 在VPC中運行您的Lambda並將您的VPC連接到您的VPN。這會讓你的lambda訪問私有網絡中的資源(比如Kafka實例)。

+0

從Lambda到本地應用程序,我們需要發送數據(可能大於10MB;我們的內部解決方案中存在Kafka的10MB消息大小限制問題)。我仍然需要進一步研究SNS和Kinesis,但這種需求可能成爲SNS或Kinesis的一個問題。 – mouscous

+0

如果我是正確的,SNS也應該配置爲通知,並且由於組件@mouscous要在不同的服務器上進行通信,所以無法擺脫SNS的HTTP調用 –

+0

@ Vijayanath Viswanathan特別是使用Kafka的好處是我們現在可以使用我們現有的CDAP應用程序,因爲它已經在使用Kafka。但是,雖然這是最簡單的解決方案,但我不確定它是否最終是最好的... – mouscous

0

從AWS Lambda使用Confluent REST代理髮布到AWS託管的Apache Kafka集羣。這甚至可以是託管服務,如在AWS中運行的Confluent Cloud,或者它可以是您自己的VPC中的Kafka集羣。然後,您可以通過多種方式將數據從AWS Kafka集羣複製到本地集羣,包括Mirror Maker,Confluent Replicator,另一個HTTPS或WSS代理等等,它應該是本地端和隧道的「拉」通過SSL/TLS或它不會過渡大多數客戶端防火牆。

對於Kafka消息沒有硬性的10 MB限制。最大消息大小是一個可配置的參數。但是,將消息大小保持在10MB或甚至1MB(這是默認最大大小值設置)的最佳做法是最佳做法。對於較大的消息,通常要麼壓縮它們,要麼將它們分成一系列較小的消息(使用一個公用密鑰,以便它們保持順序並進入同一分區),或者將大消息存儲在S3或另一個外部存儲中,然後發佈對存儲位置的引用,以便消費者可以從Kafka帶外提取它。

1

根據AWS Lambda函數的負載規模,您可以使用AWS SNS(Push)或AWS SQS(Pull),而不必維護Apache Kafka集羣。

  • 使用SQS如果比例高於或者你沒有流或排隊功能在內部部署的基礎架構來處理負載,或者如果你沒有在您的內部資源冗餘,還是去與SQS(全面管理的隊列服務)。使用SQS時,您可以使用內部部署環境中的SQS SDK通過IAM調用具有相關權限的SQS。
  • 如果您的環境中有多個資源需要基於Lambda執行進行觸發,並且您需要基礎架構設置來處理更高的規模,請使用SNS(完全託管的Pub-Sub消息傳遞服務)。使用SNS時,可以使用HTTP觸發器調用本地資源。

由於SQS或SNS都不支持10MB的消息大小,因此每次執行後,都可以將10MB數據推送到AWS S3,其中存儲區配置了事件以向SQS或SNS主題發送通知。您的內部部署資源可以從SQS和SNS中讀取消息,並從S3下載文件(使用10MB數據)。

+0

您的第二點,我的本地資源會消耗SNS的通知嗎?我明白你對多種資源的看法 - 如果使用SNS,我可以將它們全部設置爲使用SNS主題。 – mouscous

+0

如果您可以允許通過http調用執行本地資源,則可以將url訂閱到SNS,以便在將事件發佈到SNS主題時調用它。 – Ashan

+0

我明白了。從SQS開始消耗多個資源是不行的。我也在看的一個可能的解決方案是SQS與SNS。 SQS將用作消息總線,SNS僅用於錯誤通知和潛在的其他通知。 – mouscous

相關問題