一千萬個為什麽

搜索


Context: I have a pipeline of 6 lambda functions (chained together), triggered by an SNS notification which is generated whenever a file lands on S3. This pipeline essentially takes the file(few GBs), filters it (Spark cluster is created to run the job, then deleted at the end), and inserts it into a DB. Lambdas are orchestrating the flow.

Issues: If one Lambda fails, the chain breaks hence no effective failure handling. Secondly, we experience timeouts if a polling/computation takes longer than 5 minutes, so no effective retry. It takes a long time to test/debug an issue if a lambda fails. Also there is no visibility, say for example how many jobs failed and how many passed? we dont know. Getting a bunch of SNS notifications on email is not very effective/helpful. If the chain breaks, we cannot perform cleanup operations like deleting SPark cluster or housekeeping steps.

My Questions: Is AWS Step Functions a good choice for solving the above issues? When would you not use a Step Function service? If you cannot invoke Step Function through SNS, then what would be the best way to call it whenever a file lands on S3? Feel free to share any other approach to easily and effectively tackle this usecase.

轉載註明原文: 使用AWS Lambda鏈的挑戰

一共有 2 個回答:

我正在使用lambda來響應出現在S3存儲桶上的對象。對於我的特定用例,每天大約有600個觸發器。我編寫了我們的lambda函數,使用它們的stdout作為日誌文件,將所有鍵事件寫入標準輸出,在半結構化文本語句中混合數據值的鍵/值對,然後將cloudwatch日誌輸入splunk。

這是我發現的......

  1. Lambda會(偶爾)會為同一個對象多次觸發。
  2. Lambdas(有時)會比平時更長時間跑步。
  3. 要查看/診斷由彼此幹擾的並發調用引起的問題,AWS Web Console不會執行此操作。你需要像splunk這樣的工具。

但是,這項工作的價值是否足以支付使用ECS(彈性容器服務)進行流程管理的成本?如果能夠運行ECS容器,則可以在S3對象創建時觸發lambda,以在SQS消息隊列上創建消息。您的ECS容器正在偵聽您的隊列,當消息到達時,就像在您的lambda中一樣處理它。觸發下一階段的輸出是將消息彈出到處理下一個任務的SQS隊列。

這將為您解決一些問題,例如逃避Lambdas最多5分鐘,並創建一種簡單的方法來重試失敗。

但是,它也會產生一些新問題。

  • 創建和部署docker鏡像比在AWS控制臺上編輯lambda更有用。
  • 基礎設施成本本質上更加固定,而不是與工作量成比例。

我還在進入AWS Lambda,所以我不確定它是否會對你有所幫助,但我開始使用 lambda性能監控工具,我的功能似乎運作良好。如果有什麽東西在60秒內出現(+每日報告,但不那麽重要),我會收到一條消息,這有助於我弄清楚是什麽破壞了。

現在,我不知道您是否確實可以使用步驟函數來解決您的問題,但我知道您可以設置在文件到達S3時觸發Lambda函數的事件。這是一個鏈接s3 可能有幫助的文檔。