基本 AWS Lambda 項目創建碼頭圖像 - AWS Amazon Q 的工具包

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

基本 AWS Lambda 項目創建碼頭圖像

您可以使用 Toolkit for Visual Studio,將您的 AWS Lambda 函式部署為泊塢視窗映像。使用 Docker,您可以更好地控制運行時。例如,您可以選擇自訂執行階段,例如 .NET 8.0。您可以使用與任何其他容器映像相同的方式部署 Docker 映像檔。本教程密切模仿教程:基本 Lambda 項目,有兩個區別:

  • 一個碼頭文件包含在項目中。

  • 會選擇替代的發行組態。

如需 Lambda 容器映像的相關資訊,請參閱AWS Lambda 開發人員指南中的 Lambda 部署套件

如需使用 Lambda 的其他資訊 AWS Toolkit for Visual Studio,請參閱本使用指南主 AWS Toolkit for Visual Studio題中的使用 AWS Lambda 範本

建立視覺工作室 .NET 核心 Lambda 專案

您可以使用 Lambda 視覺工作室範本和藍圖來協助加速專案初始化。Lambda 藍圖包含預先撰寫的函數,可簡化彈性專案基礎的建立作業。

若要建立 .NET 核心 Lambda 專案
  1. 從 Visual Studio 展開 [檔案] 功能表,展開 [新增],然後選擇 [案]。

  2. 在「新增專案」對話方塊中,將「語言」、「平台」和「專案類型」下拉式方塊設定為「全部」,然後aws lambda在「搜尋」欄位中輸入。選擇 L AWS ambda 專案 (.NET 核心-C#) 範本。

  3. 在「專案名稱」欄位中輸入AWSLambdaDocker,指定檔案「位置」,然後選擇「建立」。

  4. 在 [選取藍圖] 頁面上,選擇 .NET 8 (容器映像) 藍圖,然後選擇 [完成] 以建立 Visual Studio 專案。您現在可以檢閱專案的結構和程式碼。

審閱專案檔

下列各節將檢查 .NET 8 (容器映像) 藍圖建立的三個專案檔案:

  1. Dockerfile

  2. aws-lambda-tools-defaults.json

  3. Function.cs

1. Dockerfile

A Dockerfile 執行三個主要動作:

  • FROM:建立用於此影像的基本影像。此基本映像檔提供 .NET 執行階段、Lambda 執行階段和殼層指令碼,可提供 Lambda .NET 程序的進入點。

  • WORKDIR:將映像檔的內部工作目錄建立為/var/task

  • COPY: 將從構建過程生成的文件從其本地位置複製到圖像的工作目錄中。

下列是您可以指定的選用Dockerfile動作:

  • ENTRYPOINT:基本映像已包含一個ENTRYPOINT,這是啟動映像時執行的啟動程序。如果您想要指定自己的,則會覆寫該基準入口點。

  • CMD:指示 AWS 您要執行的自定義代碼。它期望您的自定義方法具有完全合格的名稱。這一行需要直接包含在 Dockerfile 中,或者可以在發佈過程中指定。

    # Example of alternative way to specify the Lambda target method rather than during the publish process. CMD [ "AWSLambdaDocker::AWSLambdaDocker.Function::FunctionHandler"]

以下是 .NET 8 (容器映像) 藍圖所建立的 Docker 檔案範例。

FROM public.ecr.aws/lambda/dotnet:8 WORKDIR /var/task # This COPY command copies the .NET Lambda project's build artifacts from the host machine into the image. # The source of the COPY should match where the .NET Lambda project publishes its build artifacts. If the Lambda function is being built # with the AWS .NET Lambda Tooling, the `--docker-host-build-output-dir` switch controls where the .NET Lambda project # will be built. The .NET Lambda project templates default to having `--docker-host-build-output-dir` # set in the aws-lambda-tools-defaults.json file to "bin/Release/lambda-publish". # # Alternatively Docker multi-stage build could be used to build the .NET Lambda project inside the image. # For more information on this approach checkout the project's README.md file. COPY "bin/Release/lambda-publish" .

2. aws-lambda-tools-defaults.json

aws-lambda-tools-defaults.json文件是用來指定的默認值工 Toolkit for Visual Studio 部署嚮導和. NET 核心 CLI。下列清單說明您可以在aws-lambda-tools-defaults.json檔案中設定的欄位。

  • profile:設置您的 AWS 個人資料。

  • region:設定儲存資源的 AWS 區域。

  • configuration:設置用於發布函數的配置。

  • package-type:將部署包類型設置為容器映像或 .zip 文件存檔。

  • function-memory-size:以 MB 為單位設置函數的內存分配。

  • function-timeout: 逾時是 Lambda 函數可以執行的時間上限 (以秒為單位)。您可以以 1 秒的增量調整,最大值為 15 分鐘。

  • docker-host-build-output-dir:設定建置程序的輸出目錄,該目錄與中的指示相關聯。Dockerfile

  • image-command: 是您的方法的完全限定名稱,您希望 Lambda 函數運行的代碼。語法為:{Assembly}::{Namespace}.{ClassName}::{MethodName}。如需詳細資訊,請參閱處理常式簽章。這image-command裡的設定會在稍後的 Visual Studio 的發行精靈中預先填入這個值。

以下是 aws-lambda-tools-defaults .NET 8 (容器映像) 藍圖所建立的 .json 範例。

{ "Information": [ "This file provides default values for the deployment wizard inside Visual Studio and the AWS Lambda commands added to the .NET Core CLI.", "To learn more about the Lambda commands with the .NET Core CLI execute the following command at the command line in the project root directory.", "dotnet lambda help", "All the command line options for the Lambda command can be specified in this file." ], "profile": "default", "region": "us-west-2", "configuration": "Release", "package-type": "image", "function-memory-size": 512, "function-timeout": 30, "image-command": "AWSLambdaDocker::AWSLambdaDocker.Function::FunctionHandler", "docker-host-build-output-dir": "./bin/Release/lambda-publish" }

3. Function.cs

Function.cs文件定義了 C# 函數被公開為 Lambda 函數。FunctionHandler是 Lambda 函數執行時執行的 Lambda 功能。在這個項目中,FunctionHandler調ToUpper()用輸入文本。

發佈到 Lambda

由構建過程生成的碼頭映像會上傳到 Amazon Elastic Container Registry (Amazon ECR)。Amazon ECR 是一種全受管的 Docker 容器登錄,可用來存放、管理和部署 Docker 容器映像。Amazon ECR 會託管映像,Lambda 接著會參考該映像檔,以便在叫用時提供程式設計的 Lambda 功能。

若要將您的函數發佈至 Lambda
  1. 從 [方案總管] 中,開啟 (按一下滑鼠右鍵) 專案的內容功能表,然後選擇 [發佈 AWS Lambda至] 以開啟 [上傳 Lambda 函數] 視窗。

  2. 在「上傳 Lambda 函數」頁面中,執行下列動作:

    用於將影像型 Lambda 函數發佈到的上傳畫面 AWS
    1. 對於「P ackage 類型」,Image已自動選取為「Package 類型」,因為發佈精靈在您的專案Dockerfile中偵測到了「封裝類型」。

    2. 函數名稱中,輸入 Lambda 執行個體的顯示名稱。這個名稱是在 AWS 資源管理器中顯示的參考名稱和 AWS Management Console.

    3. 在「說明」中,輸入要與執行個體一起顯示的文字 AWS Management Console。

    4. 對於映像命令,請輸入您希望 Lambda 函數執行之方法的完整路徑:AWSLambdaDocker::AWSLambdaDocker.Function::FunctionHandler

      注意

      在此處輸入的任何方法名稱都將覆蓋 Docker 文件中的任何 CMD 指令。只有在Dockerfile包含指示如何啟動 Lambda 函數CMD時,輸入影像命令才是選用的。

    5. 對於映像存放庫,請輸入新的或現有的 Amazon 彈性容器登錄名稱。建置程序建立的 Docker 映像會上傳至此登錄。正在發布的 Lambda 定義將引用該 Amazon ECR 映像。

    6. 在「影像標籤」中,輸入要與儲存庫中的映像建立關聯的 Docker 標籤。

    7. 選擇下一步

  3. 在 [進階功能詳細資料] 頁面的角色名稱中,選擇與您帳戶相關聯的角色。該角色用於為函數中的程式碼發出的任何 Amazon Web Services 呼叫提供臨時登入資料。如果您沒有角色,請選擇 [根據 AWS 受管理的策略新增角色],然後選擇AWSLambdaBasicExecutionRole

    注意

    您的帳戶必須具有執行 IAM ListPolicies 動作的權限,否則「角色名稱」清單將為空。

  4. 選擇「上載」以開始上傳與發佈程序。

    注意

    載函數時會顯示 [上載功能] 頁面。然後,發佈程序會根據組態參數建立映像、視需要建立 Amazon ECR 儲存庫、將映像上傳到儲存庫,然後建立使用該映像參考該存放庫的 Lambda。

    上傳函數之後,「函數」頁面會開啟並顯示新的 Lambda 函數組態。

  5. 若要手動呼叫 Lambda 函數,請在 [測試函數] 索引標籤上輸hello image based lambda入要求自由文字輸入欄位,然後選擇 [叫用]。你的文字(轉換為大寫)會顯示在「回應」中。

    已發佈的 [函數] 檢視頁面的 [測試函數] 索引標籤具有手動叫用 Lambda 方法的按鈕
  6. 若要檢視儲存庫,請在AWS 資源管理器的 Amazon 彈性容器服務下,選擇儲存庫

    您可以隨時重新開啟 F unction: 檢視,方法是在AWS Lambda節點下方的AWS 檔案總管中連按兩下已部署的執行個體。

    注意

    如果您的 AWS 資源管理器窗口未打開,則可以通過查看-> AWS 資源管理器將其停靠

  7. 請注意組態索引標籤上的其他影像特定組態選項。此選項卡提供了一種覆蓋 ENTRYPOINTCMD,並且可能WORKDIR已在 Dockerfile 中指定的方法。「描述」是您在上傳/發佈期間輸入的說明 (如果有的話)。

清理

如果您不打算繼續使用此範例進行開發,請記得刪除已部署的函數和 ECR 映像檔,這樣就不會針對帳戶中未使用的資源向您收取費用。

  • 若要刪除函數,請以滑鼠右鍵按一下位於 AWS ExplorerAWS Lambda節點下方的已部署執行個體。

  • 您可以在 Amazon 彈性容器服務-> 儲存庫下的AWS 資源管理器中刪除儲存庫

後續步驟

如需建立和測試 Lambda 映像的相關資訊,請參閱搭配 Lambda 使用容器映像

如需容器映像部署、權限和覆寫組態設定的相關資訊,請參閱設定函數