首頁> Java> java教程> 主體

使用 Docker 容器映像的 Lambda 函數 - 使用 Java 開發和部署 Lambda 函數的部分流程(執行時間

WBOY
發布: 2024-08-27 20:00:16
原創
225 人瀏覽過

介紹

在本文中,我將探討如何使用 Docker 容器映像和 Java 執行時間來開發和部署 Lambda 函數。在本文中,我將使用 Java 21 Corretto 運行時。但與容器鏡像一樣,我們甚至可以使用最新的 Java 執行時間(如 Java 22),而不僅僅是長期支援(LTS)Java 執行時間(如 Java 17 和 21)。當發布更新的 Java 版本(如 Java)時,很容易更新此範例2024 年 9 月版本 23).

如何使用 AWS Lambda 基礎 Docker 容器映像和 Java (21) 執行階段開發和部署 Lambda 函數

AWS 基礎鏡像預先載入了語言執行時間、用於管理 Lambda 與函數程式碼之間互動的執行時間介面用戶端,以及用於本機測試的執行時間介面模擬器。若要使用適用於 Java 的 AWS 基礎映像,請參閱本文。

為了方便解釋,我們將使用範例應用程式並為 Lambda 函數使用 Java 21 執行時間。

Lambda function using Docker Container Image -Part ow to develop and deploy Lambda function with Java ( runtime

在此應用程式中,我們將建立和檢索產品並使用 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 函數宣告中定義。

雷雷

重要的部分是:

  • PackageType:表示我們將 Lambda 函數打包為 Docker 容器映像的映像
  • ImageUri: !Sub ${AWS::AccountId}.dkr.ecr.eu-central-1.amazonaws.com/aws-pure-lambda-java21-custom-docker-image:v1 引用Docker 容器的路徑Amazon Eljava21-custom-docker-image:v1 引用Docker 容器的路徑Amazon Eljava21-custom-docker-image:v1 引用Docker 容器的路徑Amazon Eljava21-custom-docker-image:v1 引用Docker 容器的路徑。 Registry 中的映像。稍後詳細了解如何將圖像推送到那裡。 -影像配置: 指令:["software.amazonaws.example.product.handler.GetProductByIdHandler::handleRequest"] 被覆寫為我們的 GetProductById 處理程序的 CMD。由於此 CMD 對於每個 Lambda 函數都是唯一的,因此最好在 Lambda 函數層級聲明它,就像在 Docker 檔案中一樣。

現在我們來回答如何建立 Docker 容器映像並將其推送到 ECR 儲存庫的問題。 您可以自動執行此操作,然後執行sam build 和 sam deploy命令鏈,或者如果您在 SAM 外部建置和打包應用程式並且僅使用 SAM 進行部署,則需要像這樣手動進行操作

雷雷

使用 sam deploy -g 部署函數時,我們需要使用 sam 參數選項 --image-repository 額外提供 Amazon ECR URL,請參閱 sam deploy 參數。

如何使用 AWS 僅作業系統基礎映像和 Java (21) 執行階段開發和部署 Lambda 函數

僅限 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 容器映像
  • 僅限 AWS 作業系統的基礎映像

在下一篇文章中,我們將使用 AWS Lambda 基礎 Docker 容器映像測量 Lambda 函數的冷啟動時間和熱啟動時間。

以上是使用 Docker 容器映像的 Lambda 函數 - 使用 Java 開發和部署 Lambda 函數的部分流程(執行時間的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!