
無伺服器 - 包含/排除
我們已經在“部署函式”章節中看到,要將現有專案中的函式部署到 AWS Lambda,需要修改函式以接受**事件**和**上下文**作為引數,並需要在專案資料夾中新增一個 serverless.yml 檔案,其中定義了函式。然後點選**serverless deploy**即可完成部署。
尤其是在需要將一些函式從大型現有專案遷移到 AWS Lambda 時,經常會面臨大小方面的挑戰。如果專案足夠大,很可能會超過 AWS 對 Lambda 函式施加的大小限制(250 MB,包括應用程式程式碼及其依賴項)。
並且某些依賴項(例如 NumPy)本身就佔用大量空間。例如,NumPy 大約 80 MB,SciPy 也差不多,等等。在這種情況下,應用程式程式碼的剩餘空間非常有限,需要一種方法來從 Lambda 部署包中排除不需要的檔案。幸運的是,serverless 使這變得非常容易。
include 和 exclude 欄位
正如你可能猜到的那樣,可以使用“exclude”標籤指定要從部署構建中排除的檔案和資料夾。預設情況下,在 exclude 部分中未指定的所有檔案/資料夾都將包含在內。“include”標籤有什麼用呢?好吧,如果你想普遍排除某個資料夾,但又想包含該資料夾中的一些檔案或子資料夾,則可以在“include”標籤中指定這些檔案/子資料夾。這樣,該資料夾中的所有其他檔案都將被排除,只有在“include”部分中指定的檔案將保留。下面的示例將更好地解釋這一點。
service: influx-archive-pipeline provider: name: aws runtime: python3.6 stage: prod region: us-east-2 profile: yash-sanghvi timeout: 900 memorySize: 1024 # you can add packaging information here package: include: - src/models/config.py - src/models/lambda_apis/** - src/models/scheduled_lambdas/** exclude: - docs/** - models/** - notebooks/** - references/** - reports/** - src/data/** - src/visualization/** - src/models/** - utils/** functions: user_details_api: handler: src/models/lambda_apis/user_details_api.sync_user_details events: - http: path: details/{user_id} method: get integration: lambda cors: true monitoring_lambda: handler: src/models/scheduled_lambdas/monitoring_lambda.periodic_monitoring events: - schedule: cron(15 16 * * ? *)
從上面的 serverless.yml 檔案可以看出,我們排除了包含 serverless.yml 的根資料夾中的大多數資料夾。我們甚至排除了 src/models 資料夾。但是,我們想要包含 src/models 中的 2 個子資料夾和 1 個檔案。因此,這些已在“include”部分中專門新增。請注意,預設情況下,任何不是 exclude 部分一部分的檔案/資料夾都將包含在內。
請注意兩個 Lambda 函式的路徑。它們都位於 src/models 中。雖然 src/models 預設被排除,但這些函式專門位於“include”部分中提到的子資料夾中。因此,它們將可以正常執行。如果我新增一個位於 src/data 中的函式,則不允許這樣做,因為 src/data 的所有內容都被排除了。
請注意,指定**/**表示該資料夾中的所有內容(檔案/子資料夾)都將被包含。因此,如果 docs 資料夾包含 10 個子資料夾和 12 個檔案,並且所有這些都需要排除,則**-docs/**即可完成任務。我們不需要分別提及每個檔案/資料夾。