2017-06-27 36 views
1

我想建立使用AWS一個微服務API(拉姆達+ S3 + apiGateway),我已經注意到,我所有的lambda表達式有相同的權重,因此它似乎是我上傳完整的項目,每一個拉姆達而不是所需要的資源。如何最小化我的lambda函數的權重?


enter image description here

有沒有辦法上傳只是我需要爲每個功能的資源?這會最小化執行時間嗎?這樣做值得嗎?

+0

你是什麼意思「體重」?你的意思是功能大小?你有任何關心有相同大小的多個功能? –

+0

你是否在使用像Serverless這樣的特定框架? – Ashan

+0

沒有我不使用任何框架,除了春天,是的,我很擔心,因爲這意味着未使用的代碼正在上傳到我的處理程序。 – Jnewbie

回答

1

要在2個部分來回答這個更多的細節:「你爲什麼關心」

(1)強制性

我問這個,因爲我也很關心。但是在測試之後,它看起來並不像上傳的包的大小(lambda分發包的lib文件夾中的jar)似乎真正影響了任何可能的初始上傳時間(或者如果你正在使用該路徑)。

對於理智的緣故,而不是一堆納米項目和捆綁的,我有一個單一的Java API LAMBDA模塊,然後我上傳的每LAMBDA同一工件。

在某一點上,如果是有意義的分離無論出於何種原因(微服務架構中,碼分離,等),然後我計劃拆分。

現在話說回來,這確實似乎影響基於Java lambda表達式的一個事情是類裝載時間。你提到你使用Spring。我建議你不要使用Spring配置加載,因爲你可能最終會執行一堆你永遠不需要的代碼。

請記住,理想情況下,您的lambda應該在100ms範圍內。 我曾經遇到過使用AWS開發工具包的情況,初始化AWSClient需要13秒! (13000毫秒)。當我切換到使用節點的Python的,它跑到56MS ...

請記住,你會受到時間充電,和1000倍的因素是沒有笑的問題:)

(2)如果您已經決定關於拆分,我建議使用帶有子項目的gradle分發插件來製作每個子項目和子項目zip分佈「光」。我走了這條路,但意識到我真的會分裂我的組件真的很好......我要麼複製跨項目的配置。或者如果我製作了一個項目依賴項,那麼我最終會再次捆綁整個依賴關係樹。

如果你已經知道你需要櫻桃挑什麼,而不依賴於gradle產出/ Maven來處理依賴你,你可以創建gradle這個ZIP任務,以創建不同的λ分發包。

AWS文檔:http://docs.aws.amazon.com/lambda/latest/dg/create-deployment-pkg-zip-java.html

+0

如果您可以鏈接文檔: http://docs.aws.amazon.com/lambda/latest/dg/create-deployment-pkg-zip-java.html 對您的答案爲下一個用戶它將是很好的。 謝謝 – Jnewbie

1

你需要爲你的每一個lambda函數,並在每個罐子的創建和構建3個不同的罐子只是包裝類和它們所需的資源,而不是創建具有類和資源的每一個超集罐子lambda函數。

這樣你的罐子會變得更輕。

有關構建拉姆達罈子裏看到Building AWS Lambda jar