在 Lambda 上啟用應用程式 - Amazon CloudWatch

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

在 Lambda 上啟用應用程式

可以為 Lambda 函式啟用 Application Signals。Application Signals 會使用透過 Lambda 層提供的增強型 AWS Distro for OpenTelemetry (ADOT) 程式庫自動檢測 Lambda 函數。此 AWS Lambda Layer for OpenTelemetry 套件和部署 Application Signals 自動檢測所需的程式庫。

除支援 Application Signals 之外,此 Lambda 層也是 Lambda OpenTelemetry 支援的元件,提供追蹤功能。

也可以使用 Transaction Search 來增強 Lambda 可觀測性,如此可擷取 Lambda 函式調用的追蹤範圍,無需取樣。透過此成員帳戶,您可以收集函式的範圍,不受追蹤內容傳播中的 sampled 旗標影響。如此可確保不會對下游相依服務造成額外影響。透過在 Lambda 上啟用 Transaction Search,可以完全了解函式效能,並能針對罕見問題進行疑難排解。若要開始使用,請參閱 Transaction Search

開始使用

有三種方法可為 Lambda 函式啟用 Application Signals。

為 Lambda 函式啟用 Application Signals 後,該函式的遙測需要幾分鐘才會出現在 Application Signals 主控台。

  • 使用 CloudWatch Application Signals 主控台

  • 使用 Lambda 主控台

  • 手動將 AWS Lambda Layer for OpenTelemetry 新增至 Lambda 函數執行時間。

這些方法都會將 AWS Lambda Layer for OpenTelemetry 新增至您的函數。

使用 CloudWatch Application Signals 主控台

依照這些步驟可透過 Application Signals 主控台為 Lambda 函式啟用 Application Signals。

  1. 透過 https://console.aws.amazon.com/cloudwatch/ 開啟 CloudWatch 主控台。

  2. 在導覽窗格中,依次選擇 Application Signals服務

  3. 服務清單區域,選擇啟用 Application Signals

  4. 選擇 Lambda 圖磚。

  5. 選取要為 Application Signals 啟用的每個函式,然後選擇完成

使用 Lambda 主控台

依照這些步驟可透過 Lambda 主控台為 Lambda 函式啟用 Application Signals。

  1. 在 https://https://console.aws.amazon.com/lambda/ 開啟 AWS Lambda 主控台。

  2. 在導覽窗格中,選擇函式,然後選擇要啟用之函式的名稱。

  3. 選擇組態,然後選擇監控和操作工具

  4. 選擇編輯

  5. CloudWatch Application Signals 和 X-Ray 區段中,選取使用 Application Signals 自動收集應用程式追蹤和標準應用程式指標,以及使用 X-Ray 自動收集 Lambda 服務追蹤以實現端對端的可見性。

  6. 選擇儲存

使用 在 Lambda 上啟用 Application Signals AWS CDK

如果尚未在此帳戶中啟用 Application Signals,則必須授予 Application Signals 所需的許可,以探索您的服務。如需詳細資訊,請參閱在您的帳戶中啟用 Application Signals

  1. 為您的應用程式啟用 Application Signals

    import { aws_applicationsignals as applicationsignals } from 'aws-cdk-lib'; const cfnDiscovery = new applicationsignals.CfnDiscovery(this, 'ApplicationSignalsServiceRole', { } );

    Discovery CloudFormation 資源將授與 Application Signals 下列許可:

    • xray:GetServiceGraph

    • logs:StartQuery

    • logs:GetQueryResults

    • cloudwatch:GetMetricData

    • cloudwatch:ListMetrics

    • tag:GetResources

    如需有關此角色的詳細資訊,請參閱 CloudWatch Application Signals 的服務連結角色許可

  2. 將 IAM 政策 CloudWatchLambdaApplicationSignalsExecutionRolePolicy 新增至 lambda 函式。

    const fn = new Function(this, 'DemoFunction', { code: Code.fromAsset('$YOUR_LAMBDA.zip'), runtime: Runtime.PYTHON_3_12, handler: '$YOUR_HANDLER' }) fn.role?.addManagedPolicy(ManagedPolicy.fromAwsManagedPolicyName('CloudWatchLambdaApplicationSignalsExecutionRolePolicy'));
  3. $AWS_LAMBDA_LAYER_FOR_OTEL_ARN 將 取代為您區域的實際 AWS Lambda Layer for OpenTelemetry ARN

    fn.addLayers(LayerVersion.fromLayerVersionArn( this, 'AwsLambdaLayerForOtel', '$AWS_LAMBDA_LAYER_FOR_OTEL_ARN' )) fn.addEnvironment("AWS_LAMBDA_EXEC_WRAPPER", "/opt/otel-instrument");

使用模型內容通訊協定 (MCP) 在 Lambda 上啟用應用程式訊號

您可以使用 CloudWatch Application Signals Model Context Protocol (MCP) 伺服器,透過對話式 AI 互動在 Lambda 函數上啟用 Application Signals。這提供用於設定 Application Signals 監控的自然語言界面。

MCP 伺服器會了解您的需求並產生適當的組態,以自動化啟用程序。您可以直接描述要啟用的內容,而不是手動遵循主控台步驟或撰寫 CDK 程式碼。

先決條件

使用 MCP 伺服器啟用 Application Signals 之前,請確定您已:

  • 支援 MCP 的開發環境 (例如 Kiro、Claude Desktop、VSCode 搭配 MCP 延伸模組或其他 MCP 相容工具)

  • 在您的 IDE 中設定的 CloudWatch Application Signals MCP 伺服器。如需詳細設定說明,請參閱 CloudWatch Application Signals MCP Server 文件

使用 MCP 伺服器

在 IDE 中設定 CloudWatch Application Signals MCP 伺服器後,您可以使用自然語言提示請求啟用指引。雖然編碼助理可以從專案結構推斷內容,但在提示中提供特定詳細資訊有助於確保更準確和相關的指導。包含資訊,例如 Lambda 函數的程式設計語言、函數名稱,以及 Lambda 函數程式碼和基礎設施程式碼的絕對路徑。

最佳實務提示 (特定且完整):

"Enable Application Signals for my Python Lambda function. My function code is in /home/user/order-processor/lambda and IaC is in /home/user/order-processor/terraform" "I want to add observability to my Node.js Lambda function 'checkout-handler'. The function code is at /Users/dev/checkout-function and the CDK infrastructure is at /Users/dev/checkout-function/cdk" "Help me instrument my Java Lambda function with Application Signals. Function directory: /opt/apps/payment-lambda CDK infrastructure: /opt/apps/payment-lambda/cdk"

效率較低的提示:

"Enable monitoring for my Lambda" → Missing: language, paths "Enable Application Signals. My code is in ./src and IaC is in ./infrastructure" → Problem: Relative paths instead of absolute paths "Enable Application Signals for my Lambda at /home/user/myfunction" → Missing: programming language

快速範本:

"Enable Application Signals for my [LANGUAGE] Lambda function. Function code: [ABSOLUTE_PATH_TO_FUNCTION] IaC code: [ABSOLUTE_PATH_TO_IAC]"

使用 MCP 伺服器的優點

使用 CloudWatch Application Signals MCP 伺服器有幾個優點:

  • 自然語言界面:描述您想要啟用的內容,而不記住命令或組態語法

  • 內容感知指引:MCP 伺服器了解您的特定環境,並提供量身打造的建議

  • 減少錯誤:自動化組態產生可將手動輸入錯誤降至最低

  • 更快速的設定:更快速地從意圖到實作

  • 學習工具:查看產生的組態並了解 Application Signals 的運作方式

如需有關設定和使用 CloudWatch Application Signals MCP 伺服器的詳細資訊,請參閱 MCP 伺服器文件

(選用) 監控應用程式運作狀態

在 Lambda 上啟用應用程式後,即可監控應用程式的運作狀態。如需詳細資訊,請參閱使用 Application Signals 監控應用程式的運作狀態

手動啟用 Application Signals。

依照這些步驟可為 Lambda 函式啟用 Application Signals。

  1. 將 AWS Lambda Layer for OpenTelemetry 新增至您的 Lambda 執行時間。若要尋找您區域的層 ARN,請參閱 ADOT Lambda Layer ARNs

  2. 新增環境變數 AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument

    新增環境變數 LAMBDA_APPLICATION_SIGNALS_REMOTE_ENVIRONMENT 以設定自訂 Lambda 環境。Lambda 環境預設將設定為 lambda:default

  3. 將 AWS 受管 IAM 政策 CloudWatchLambdaApplicationSignalsExecutionRolePolicy 連接至 Lambda 執行角色。

  4. (選用) 建議啟用 Lambda 主動追蹤,以取得更好的追蹤體驗。如需詳細資訊,請參閱使用 視覺化 Lambda 函數叫用 AWS X-Ray

手動停用 Application Signals

若要手動停用 Lambda 函數的 Application Signals,請從 AWS Lambda 執行時間移除 Lambda Layer for OpenTelemetry,並移除AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument環境變數。

設定 Application Signals

可以參照本節在 Lambda 中設定 Application Signals。

將多個 Lambda 函式整合為一個服務

環境變數 OTEL_SERVICE_NAME 會設定服務名稱。這將顯示為應用程式在 Application Signals 儀表板中的服務名稱。可以將同個服務名稱指派給多個 Lambda 函式,它們將在 Application Signals 中合併為一個服務。如果不提供此索引鍵的值,系統將使用預設的 Lambda 函式名稱。

取樣

根據預設,追蹤取樣策略以父系為基礎。可以透過設定環境變數 OTEL_TRACES_SAMPLER 來調整取樣策略。

例如,將追蹤取樣率設定為 30%。

OTEL_TRACES_SAMPLER=traceidratio OTEL_TRACES_SAMPLER_ARG=0.3

如需詳細資訊,請參閱 OpenTelemetry 環境變數規格

啟用所有程式庫檢測

為了減少 Lambda 冷啟動,預設只會針對 Python、Node 和 Java 啟用 AWS SDK 和 HTTP 檢測。可設定環境變數,為 Lambda 函式中使用的其他程式庫啟用檢測。

  • Python – OTEL_PYTHON_DISABLED_INSTRUMENTATIONS=none

  • 節點 – OTEL_NODE_DISABLED_INSTRUMENTATIONS=none

  • Java – OTEL_INSTRUMENTATION_COMMON_DEFAULT_ENABLED=true

AWS OpenTelemetry ARNs的 Lambda Layer

如需依區域和執行時間分類的 AWS Lambda Layer for OpenTelemetry ARNs 完整清單,請參閱 AWS Distro for OpenTelemetry 文件中的 ADOT Lambda Layer ARNs。此 layer 適用於 Python、Node.js、.NET 和 Java 執行時間。

使用 Amazon ECR 容器部署 Lambda 函式

部署為容器映像的 Lambda 函式不以傳統方式支援 Lambda Layer。使用容器映像時,無法像使用其他 Lambda 部署方法一樣連接圖層。相反地,必須在建置過程中手動將圖層內容併入您的容器映像。

Java

您可以了解如何將 AWS Lambda Layer for OpenTelemetry 整合到您的容器化 Java Lambda 函數中、下載layer.zip成品,並將其整合到您的 Java Lambda 函數容器中,以啟用 Application Signals 監控。

先決條件

  • AWS CLI 使用您的登入資料設定

  • 已安裝 Docker

  • 以下說明假設您使用的是 x86_64 平台

  1. 設定專案結構

    建立 Lambda 函式的目錄

    mkdir java-appsignals-container-lambda && \ cd java-appsignals-container-lambda

    建立 Maven 專案結構

    mkdir -p src/main/java/com/example/java/lambda mkdir -p src/main/resources
  2. 建立 Dockerfile

    下載支援 Application Signals 的 OpenTelemetry Layer,並直接將其整合到您的 Lambda 容器映像中。此時,系統會建立 Dockerfile 檔案。

    FROM public.ecr.aws/lambda/java:21 # Install utilities RUN dnf install -y unzip wget maven # Download the OpenTelemetry Layer with AppSignals Support RUN wget https://github.com/aws-observability/aws-otel-java-instrumentation/releases/latest/download/layer.zip -O /tmp/layer.zip # Extract and include Lambda layer contents RUN mkdir -p /opt && \ unzip /tmp/layer.zip -d /opt/ && \ chmod -R 755 /opt/ && \ rm /tmp/layer.zip # Copy and build function code COPY pom.xml ${LAMBDA_TASK_ROOT} COPY src ${LAMBDA_TASK_ROOT}/src RUN mvn clean package -DskipTests # Copy the JAR file to the Lambda runtime directory (from inside the container) RUN mkdir -p ${LAMBDA_TASK_ROOT}/lib/ RUN cp ${LAMBDA_TASK_ROOT}/target/function.jar ${LAMBDA_TASK_ROOT}/lib/ # Set the handler CMD ["com.example.java.lambda.App::handleRequest"]
    注意

    layer.zip 檔案包含 AWS Application Signals 支援監控 Lambda 函數所需的 OpenTelemetry 檢測。

    圖層擷取步驟可確保:

    • layer.zip 內容會正確解壓縮至 /opt/ directory

    • otel-instrument 指令碼收到適當的執行許可

    • 移除暫存 layer.zip 檔案以縮小映像

  3. Lambda 函式程式碼:在 src/main/java/com/example/lambda/App.java: 為您的 Lambda 處理常式建立 Java 檔案

    您的專案應看起來如下所示:

    . ├── Dockerfile ├── pom.xml └── src └── main ├── java │ └── com │ └── example │ └── java │ └── lambda │ └── App.java └── resources
  4. 建置並部署容器映像

    設定環境變數

    AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) AWS_REGION=$(aws configure get region) # For fish shell users: # set AWS_ACCOUNT_ID (aws sts get-caller-identity --query Account --output text) # set AWS_REGION (aws configure get region)

    使用 ECR 進行身分驗證

    先使用公有 ECR (適用於基礎映像):

    aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws

    再使用私有 ECR:

    aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com

    建置、標記並推送映像

    # Build the Docker image docker build -t lambda-appsignals-demo . # Tag the image docker tag lambda-appsignals-demo:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest # Push the image docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest
  5. 建立並設定 Lambda 函式

    使用 Lambda 主控台建立新函式。

    選取容器映像作為部署選項。

    選擇瀏覽映像以選取 Amazon ECR 映像。

  6. 測試和驗證 – 使用簡單的事件測試 Lambda。如果圖層整合成功,您的 Lambda 會出現在 Application Signals 服務地圖下。

    可以在 CloudWatch 主控台中看到 Lambda 函式的追蹤和指標。

疑難排解

如果 Application Signals 無法運作,請檢查以下項:

  • 檢查函式日誌中是否有與 OpenTelemetry 檢測相關的錯誤

  • 驗證環境變數 AWS_LAMBDA_EXEC_WRAPPER 是否設定正確

  • 確定已成功完成 Docker 檔案中的圖層擷取

  • 確認是否已正確附加 IAM 許可

  • 如有需要,可在 Lambda 函式的一般組態中增大逾時和記憶體設定

.Net

可以了解如何將支援 Application Signals 的 OpenTelemetry Layer 整合到您的容器化 .Net Lambda 函式中、下載 layer.zip 成品,並將其整合到您的 .Net Lambda 函式中,以啟用 Application Signals 監控。

先決條件

  • AWS CLI 使用您的登入資料設定

  • 已安裝 Docker

  • .NET 8 SDK

  • 以下說明假設您使用的是 x86_64 平台

  1. 設定專案結構

    建立 Lambda 函式容器映像的目錄

    mkdir dotnet-appsignals-container-lambda && \ cd dotnet-appsignals-container-lambda
  2. 建立 Dockerfile

    下載支援 Application Signals 的 OpenTelemetry Layer,並直接將其整合到您的 Lambda 容器映像中。此時,系統會建立 Dockerfile 檔案。

    FROM public.ecr.aws/lambda/dotnet:8 # Install utilities RUN dnf install -y unzip wget dotnet-sdk-8.0 which # Add dotnet command to docker container's PATH ENV PATH="/usr/lib64/dotnet:${PATH}" # Download the OpenTelemetry Layer with AppSignals Support RUN wget https://github.com/aws-observability/aws-otel-dotnet-instrumentation/releases/latest/download/layer.zip -O /tmp/layer.zip # Extract and include Lambda layer contents RUN mkdir -p /opt && \ unzip /tmp/layer.zip -d /opt/ && \ chmod -R 755 /opt/ && \ rm /tmp/layer.zip WORKDIR ${LAMBDA_TASK_ROOT} # Copy the project files COPY dotnet-lambda-function/src/dotnet-lambda-function/*.csproj ${LAMBDA_TASK_ROOT}/ COPY dotnet-lambda-function/src/dotnet-lambda-function/Function.cs ${LAMBDA_TASK_ROOT}/ COPY dotnet-lambda-function/src/dotnet-lambda-function/aws-lambda-tools-defaults.json ${LAMBDA_TASK_ROOT}/ # Install dependencies and build the application RUN dotnet restore # Use specific runtime identifier and disable ReadyToRun optimization RUN dotnet publish -c Release -o out --self-contained false /p:PublishReadyToRun=false # Copy the published files to the Lambda runtime directory RUN cp -r out/* ${LAMBDA_TASK_ROOT}/ CMD ["dotnet-lambda-function::dotnet_lambda_function.Function::FunctionHandler"]
    注意

    layer.zip 檔案包含 AWS Application Signals 支援監控 Lambda 函數所需的 OpenTelemetry 檢測。

    圖層擷取步驟可確保:

    • layer.zip 內容會正確解壓縮至 /opt/ directory

    • otel-instrument 指令碼收到適當的執行許可

    • 移除暫存 layer.zip 檔案以縮小映像

  3. Lambda 函數程式碼 – 使用 Lambda .NET 範本初始化 AWS Lambda 專案:

    # Install the Lambda templates if you haven't already dotnet new -i Amazon.Lambda.Templates # Create a new Lambda project dotnet new lambda.EmptyFunction -n dotnet-lambda-function

    您的專案應看起來如下所示:

    . ├── Dockerfile └── dotnet-lambda-function ├── src │ └── dotnet-lambda-function │ ├── Function.cs │ ├── Readme.md │ ├── aws-lambda-tools-defaults.json │ └── dotnet-lambda-function.csproj └── test └── dotnet-lambda-function.Tests ├── FunctionTest.cs └── dotnet-lambda-function.Tests.csproj
  4. 建置並部署容器映像

    設定環境變數

    AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) AWS_REGION=$(aws configure get region) # For fish shell users: # set AWS_ACCOUNT_ID (aws sts get-caller-identity --query Account --output text) # set AWS_REGION (aws configure get region)

    Function.cs 程式碼更新為:

    dotnet-lambda-function.csproj 程式碼更新為:

    <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0>/TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> <AWSProjectType>Lambda</AWSProjectType> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> <PublishReadyToRun>true</PublishReadyToRun> </PropertyGroup> <ItemGroup> <PackageReference Include="Amazon.Lambda.Core" Version="2.5.0" /> <PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.4.4" /> <PackageReference Include="AWSSDK.S3" Version="3.7.305.23" /> </ItemGroup> </Project>
  5. 建置並部署容器映像

    設定環境變數

    AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) AWS_REGION=$(aws configure get region) # For fish shell users: # set AWS_ACCOUNT_ID (aws sts get-caller-identity --query Account --output text) # set AWS_REGION (aws configure get region)

    使用公有 Amazon ECR 驗證

    aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws

    使用私有 Amazon ECR 驗證

    aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com

    建立 Amazon ECR 儲存庫 (如需要)

    aws ecr create-repository \ --repository-name lambda-appsignals-demo \ --region $AWS_REGION

    建置、標記並推送映像

    # Build the Docker image docker build -t lambda-appsignals-demo . # Tag the image docker tag lambda-appsignals-demo:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest # Push the image docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest 5. Create and Configure the Lambda Function
  6. 建立並設定 Lambda 函式

    使用 Lambda 主控台建立新函式。

    選取容器映像作為部署選項。

    選擇瀏覽映像以選取 Amazon ECR 映像。

  7. 測試和驗證 – 使用簡單的事件測試 Lambda。如果圖層整合成功,您的 Lambda 會出現在 Application Signals 服務地圖下。

    可以在 CloudWatch 主控台中看到 Lambda 函式的追蹤和指標。

疑難排解

如果 Application Signals 無法運作,請檢查以下項:

  • 檢查函式日誌中是否有與 OpenTelemetry 檢測相關的錯誤

  • 驗證環境變數 AWS_LAMBDA_EXEC_WRAPPER 是否設定正確

  • 確定已成功完成 Docker 檔案中的圖層擷取

  • 確認是否已正確附加 IAM 許可

  • 如有需要,可在 Lambda 函式的一般組態中增大逾時和記憶體設定

Node.js

可以了解如何將支援 Application Signals 的 OpenTelemetry Layer 整合到您的容器化 Node.js Lambda 函式中、下載 layer.zip 成品,並將其整合到您的 Node.js Lambda 函式中,以啟用 Application Signals 監控。

先決條件

  • AWS CLI 使用您的登入資料設定

  • 已安裝 Docker

  • 以下說明假設您使用的是 x86_64 平台

  1. 設定專案結構

    建立 Lambda 函式容器映像的目錄

    mkdir nodejs-appsignals-container-lambda &&\ cd nodejs-appsignals-container-lambda
  2. 建立 Dockerfile

    下載支援 Application Signals 的 OpenTelemetry Layer,並直接將其整合到您的 Lambda 容器映像中。此時,系統會建立 Dockerfile 檔案。

    # Dockerfile FROM public.ecr.aws/lambda/nodejs:22 # Install utilities RUN dnf install -y unzip wget # Download the OpenTelemetry Layer with AppSignals Support RUN wget https://github.com/aws-observability/aws-otel-js-instrumentation/releases/latest/download/layer.zip -O /tmp/layer.zip # Extract and include Lambda layer contents RUN mkdir -p /opt && \ unzip /tmp/layer.zip -d /opt/ && \ chmod -R 755 /opt/ && \ rm /tmp/layer.zip # Install npm dependencies RUN npm init -y RUN npm install # Copy function code COPY *.js ${LAMBDA_TASK_ROOT}/ # Set the CMD to your handler CMD [ "index.handler" ]
    注意

    layer.zip 檔案包含 AWS Application Signals 支援監控 Lambda 函數所需的 OpenTelemetry 檢測。

    圖層擷取步驟可確保:

    • layer.zip 內容會正確解壓縮至 /opt/ directory

    • otel-instrument 指令碼收到適當的執行許可

    • 移除暫存 layer.zip 檔案以縮小映像

  3. Lambda 函式程式碼

    使用下列內容建立 index.js 檔案:

    const { S3Client, ListBucketsCommand } = require('@aws-sdk/client-s3'); // Initialize S3 client const s3Client = new S3Client({ region: process.env.AWS_REGION }); exports.handler = async function(event, context) { console.log('Received event:', JSON.stringify(event, null, 2)); console.log('Handler initializing:', exports.handler.name); const response = { statusCode: 200, body: {} }; try { // List S3 buckets const command = new ListBucketsCommand({}); const data = await s3Client.send(command); // Extract bucket names const bucketNames = data.Buckets.map(bucket => bucket.Name); response.body = { message: 'Successfully retrieved buckets', buckets: bucketNames }; } catch (error) { console.error('Error listing buckets:', error); response.statusCode = 500; response.body = { message: `Error listing buckets: ${error.message}` }; } return response; };

    您的專案結構應看起來如下所示:

    . ├── Dockerfile └── index.js
  4. 建置並部署容器映像

    設定環境變數

    AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) AWS_REGION=$(aws configure get region) # For fish shell users: # set AWS_ACCOUNT_ID (aws sts get-caller-identity --query Account --output text) # set AWS_REGION (aws configure get region)

    使用公有 Amazon ECR 驗證

    aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws

    使用私有 Amazon ECR 驗證

    aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com

    建立 Amazon ECR 儲存庫 (如需要)

    aws ecr create-repository \ --repository-name lambda-appsignals-demo \ --region $AWS_REGION

    建置、標記並推送映像

    # Build the Docker image docker build -t lambda-appsignals-demo . # Tag the image docker tag lambda-appsignals-demo:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest # Push the image docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest 5. Create and Configure the Lambda Function
  5. 建立並設定 Lambda 函式

    使用 Lambda 主控台建立新函式。

    選取容器映像作為部署選項。

    選擇瀏覽映像以選取 Amazon ECR 映像。

  6. 測試和驗證 – 使用簡單的事件測試 Lambda。如果圖層整合成功,您的 Lambda 會出現在 Application Signals 服務地圖下。

    可以在 CloudWatch 主控台中看到 Lambda 函式的追蹤和指標。

疑難排解

如果 Application Signals 無法運作,請檢查以下項:

  • 檢查函式日誌中是否有與 OpenTelemetry 檢測相關的錯誤

  • 驗證環境變數 AWS_LAMBDA_EXEC_WRAPPER 是否設定正確

  • 確定已成功完成 Docker 檔案中的圖層擷取

  • 確認是否已正確附加 IAM 許可

  • 如有需要,可在 Lambda 函式的一般組態中增大逾時和記憶體設定

Python

可以了解如何將支援 Application Signals 的 OpenTelemetry Layer 整合到您的容器化 Python Lambda 函式中、下載 layer.zip 成品,並將其整合到您的 Python Lambda 函式中,以啟用 Application Signals 監控。

先決條件

  • AWS CLI 使用您的登入資料設定

  • 已安裝 Docker

  • 以下說明假設您使用的是 x86_64 平台

  1. 設定專案結構

    建立 Lambda 函式容器映像的目錄

    mkdir python-appsignals-container-lambda &&\ cd python-appsignals-container-lambda
  2. 建立 Dockerfile

    下載支援 Application Signals 的 OpenTelemetry Layer,並直接將其整合到您的 Lambda 容器映像中。此時,系統會建立 Dockerfile 檔案。

    # Dockerfile FROM public.ecr.aws/lambda/python:3.13 # Copy function code COPY app.py ${LAMBDA_TASK_ROOT} # Install unzip and wget utilities RUN dnf install -y unzip wget # Download the OpenTelemetry Layer with AppSignals Support RUN wget https://github.com/aws-observability/aws-otel-python-instrumentation/releases/latest/download/layer.zip -O /tmp/layer.zip # Extract and include Lambda layer contents RUN mkdir -p /opt && \ unzip /tmp/layer.zip -d /opt/ && \ chmod -R 755 /opt/ && \ rm /tmp/layer.zip # Set the CMD to your handler CMD [ "app.lambda_handler" ]
    注意

    layer.zip 檔案包含 AWS Application Signals 支援監控 Lambda 函數所需的 OpenTelemetry 檢測。

    圖層擷取步驟可確保:

    • layer.zip 內容會正確解壓縮至 /opt/ directory

    • otel-instrument 指令碼收到適當的執行許可

    • 移除暫存 layer.zip 檔案以縮小映像

  3. Lambda 函式程式碼

    app.py 檔案中建立 Lambda 函式:

    import json import boto3 def lambda_handler(event, context): """ Sample Lambda function that can be used in a container image. Parameters: ----------- event: dict Input event data context: LambdaContext Lambda runtime information Returns: __ dict Response object """ print("Received event:", json.dumps(event, indent=2)) # Create S3 client s3 = boto3.client('s3') try: # List buckets response = s3.list_buckets() # Extract bucket names buckets = [bucket['Name'] for bucket in response['Buckets']] return { 'statusCode': 200, 'body': json.dumps({ 'message': 'Successfully retrieved buckets', 'buckets': buckets }) } except Exception as e: print(f"Error listing buckets: {str(e)}") return { 'statusCode': 500, 'body': json.dumps({ 'message': f'Error listing buckets: {str(e)}' }) }

    您的專案結構應看起來如下所示:

    . ├── Dockerfile ├── app.py └── instructions.md
  4. 建置並部署容器映像

    設定環境變數

    AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) AWS_REGION=$(aws configure get region) # For fish shell users: # set AWS_ACCOUNT_ID (aws sts get-caller-identity --query Account --output text) # set AWS_REGION (aws configure get region)

    使用公有 Amazon ECR 驗證

    aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws

    使用私有 Amazon ECR 驗證

    aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com

    建立 Amazon ECR 儲存庫 (如需要)

    aws ecr create-repository \ --repository-name lambda-appsignals-demo \ --region $AWS_REGION

    建置、標記並推送映像

    # Build the Docker image docker build -t lambda-appsignals-demo . # Tag the image docker tag lambda-appsignals-demo:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest # Push the image docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest 5. Create and Configure the Lambda Function
  5. 建立並設定 Lambda 函式

    使用 Lambda 主控台建立新函式。

    選取容器映像作為部署選項。

    選擇瀏覽映像以選取 Amazon ECR 映像。

  6. 測試和驗證 – 使用簡單的事件測試 Lambda。如果圖層整合成功,您的 Lambda 會出現在 Application Signals 服務地圖下。

    可以在 CloudWatch 主控台中看到 Lambda 函式的追蹤和指標。

疑難排解

如果 Application Signals 無法運作,請檢查以下項:

  • 檢查函式日誌中是否有與 OpenTelemetry 檢測相關的錯誤

  • 驗證環境變數 AWS_LAMBDA_EXEC_WRAPPER 是否設定正確

  • 確定已成功完成 Docker 檔案中的圖層擷取

  • 確認是否已正確附加 IAM 許可

  • 如有需要,可在 Lambda 函式的一般組態中增大逾時和記憶體設定