在本文中,我將探討如何使用 Docker 容器映像和 Java 執行時間來開發和部署 Lambda 函數。在本文中,我將使用 Java 21 Corretto 運行時。但與容器鏡像一樣,我們甚至可以使用最新的 Java 執行時間(如 Java 22),而不僅僅是長期支援(LTS)Java 執行時間(如 Java 17 和 21)。當發布更新的 Java 版本(如 Java)時,很容易更新此範例2024 年 9 月版本 23).
AWS 基礎鏡像預先載入了語言執行時間、用於管理 Lambda 與函數程式碼之間互動的執行時間介面用戶端,以及用於本機測試的執行時間介面模擬器。若要使用適用於 Java 的 AWS 基礎映像,請參閱本文。
為了方便解釋,我們將使用範例應用程式並為 Lambda 函數使用 Java 21 執行時間。
在此應用程式中,我們將建立和檢索產品並使用 DynamoDB 作為 NoSQL 資料庫。您可以在此處找到 DynamoProductDao.java 實作。我們也將 Amazon API Gateway 放在它前面,如 AWS SAM 範本中所定義。在此範本中,我們也定義了 2 個 Lambda 函數:PutProductWithPureJava21DockerImage 和 GetProductByIdWithPureJava21DockerImage。
我們需要定義 Dockerfile,在其中使用來自公用 Amazon ECR 儲存庫的適用於 Java 21 的 AWS Lambda 基礎 Docker 映像 public.ecr.aws/lambda/java:21 。在這裡您可以找到AWS提供的所有用於Java的Lambda基礎Docker映像。
在 Docker 映像中,我們也將函數程式碼和執行時間依賴項從 Maven 佈局複製到執行時間環境變數 LAMBDA_TASK_ROOT – Lambda 函數程式碼的路徑。
其他所有內容均在 AWS SAM 範本中的 Lambda 函數宣告中定義。
重要的部分是:
現在我們來回答如何建立 Docker 容器映像並將其推送到 ECR 儲存庫的問題。 您可以自動執行此操作,然後執行sam build 和 sam deploy命令鏈,或者如果您在 SAM 外部建置和打包應用程式並且僅使用 SAM 進行部署,則需要像這樣手動進行操作
使用 sam deploy -g 部署函數時,我們需要使用 sam 參數選項 --image-repository 額外提供 Amazon ECR URL,請參閱 sam deploy 參數。
僅限 AWS 作業系統的基礎映像包含 Amazon Linux 發行版和執行時期介面模擬器。這些鏡像通常用於為編譯語言(例如 Java 和 Rust)以及 Lambda 不提供基礎鏡像的語言或語言版本(例如 Node.js 19)建立容器鏡像。我們還可以使用 OS-僅用於實現自訂運行時的基礎映像。
如果我們想使用適用於 Java 的 AWS 作業系統基礎映像,我們必須將執行時間介面用戶端包含在我們的映像或相依性管理中。執行時間介面用戶端擴充了 Lambda 執行時間 API,它管理 Lambda 和您的函數程式碼之間的互動。
我也為此用例提供了範例應用程式。
我在 pom.xml 中包含了 AWS Lambda Java Runtime Interface Client,如下所示:
在這種情況下,Dockerfile 看起來也有點不同。
我們使用 amazoncorretto:21-alpine 作為基礎 Docker 映像,並且必須定義明確指向來自 AWS Lambda Java 執行時間介面用戶端的入口類別 AWSLambda 的入口點。
所有其他內容:SAM 範本、原始程式碼和應用程式以及 Docker 映像建置和部署步驟與 AWS Lambda 基礎 Docker 容器映像範例中的相同。
在本文中,我們探討如何使用 Docker 容器映像和 Java 執行時間來開發和部署 Lambda 函數。我們考慮了 2 個用例:
在下一篇文章中,我們將使用 AWS Lambda 基礎 Docker 容器映像測量 Lambda 函數的冷啟動時間和熱啟動時間。
以上是使用 Docker 容器映像的 Lambda 函數 - 使用 Java 開發和部署 Lambda 函數的部分流程(執行時間的詳細內容。更多資訊請關注PHP中文網其他相關文章!