本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 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 支援的元件,並提供追蹤功能。
您也可以使用交易搜尋來增強 Lambda 可觀測性,這可讓您擷取 Lambda 函數調用的追蹤範圍,而無需取樣。此功能可讓您收集函數的範圍,不受追蹤內容傳播中的 sampled
旗標影響。這可確保對下游相依服務沒有額外的影響。透過在 Lambda 上啟用交易搜尋,您可以完全了解函數效能,並對很少發生的問題進行故障診斷。若要開始使用,請參閱 交易搜尋
主題
開始使用
為 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。
透過 https://console.aws.amazon.com/cloudwatch/
開啟 CloudWatch 主控台。 -
在導覽窗格中,依次選擇 Application Signals、服務。
-
在服務清單區域中,選擇啟用應用程式訊號。
-
選擇 Lambda 圖磚。
-
選取您要為 Application Signals 啟用的每個函數,然後選擇完成。
使用 Lambda 主控台
使用這些步驟來使用 Lambda 主控台來啟用 Lambda 函數的 Application Signals。
在 https://https://console.aws.amazon.com/lambda/
開啟 AWS Lambda 主控台。 -
在導覽窗格中,選擇函數,然後選擇您要啟用的函數名稱。
-
選擇組態索引標籤,然後選擇監控和操作工具。
-
選擇編輯。
-
在 CloudWatch Application Signals 和 X-Ray 區段中,選取使用 Application Signals 自動收集應用程式追蹤和標準應用程式指標,以及使用 X-Ray 自動收集 Lambda 服務追蹤以實現端對端可見性。
-
選擇儲存。
使用 在 Lambda 上啟用 Application Signals AWS CDK
如果尚未在此帳戶中啟用 Application Signals,則必須授予 Application Signals 所需的許可,以探索您的服務。如需詳細資訊,請參閱在帳戶中啟用 Application Signals。
-
為您的應用程式啟用 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 的服務連結角色許可。
-
-
將 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'));
-
$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");
(選用) 監控您的應用程式運作狀態
在 Lambda 上啟用應用程式後,您就可以監控應用程式的運作狀態。如需詳細資訊,請參閱使用 Application Signals 監控應用程式的運作狀態。
手動啟用 Application Signals。
使用這些步驟來手動啟用 Lambda 函數的 Application Signals。
-
將 AWS Lambda Layer for OpenTelemetry 新增至您的 Lambda 執行時間。若要尋找 layer ARN,請參閱 AWS OpenTelemetry ARNs的 Lambda Layer。
-
新增環境變數
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument
新增環境變數
LAMBDA_APPLICATION_SIGNALS_REMOTE_ENVIRONMENT
以設定自訂 Lambda 環境。根據預設,lambda 環境設定為lambda:default
。 -
將 AWS 受管 IAM 政策 CloudWatchLambdaApplicationSignalsExecutionRolePolicy 連接至 Lambda 執行角色。
-
(選用) 建議您啟用 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。
- Python
-
區域 ARN 美國東部 (維吉尼亞北部)
arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroPython:16
美國東部 (俄亥俄)
arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroPython:13
美國西部 (加利佛尼亞北部)
arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroPython:20
美國西部 (奧勒岡)
arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroPython:20
非洲 (開普敦)
arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroPython:10
亞太區域 (香港)
arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroPython:10
亞太區域 (海德拉巴)
arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroPython:10
亞太區域 (雅加達)
arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroPython:10
亞太區域 (墨爾本)
arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroPython:10
亞太區域 (孟買)
arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
亞太區域 (大阪)
arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroPython:12
亞太區域 (首爾)
arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroPython:13
亞太區域 (新加坡)
arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroPython:12
亞太區域 (雪梨)
arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroPython:13
亞太區域 (東京)
arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
加拿大 (中部)
arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
歐洲 (法蘭克福)
arn:aws:lambda:eu-central-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
歐洲 (愛爾蘭)
arn:aws:lambda:eu-west-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
歐洲 (倫敦)
arn:aws:lambda:eu-west-2:615299751070:layer:AWSOpenTelemetryDistroPython:13
歐洲 (米蘭)
arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroPython:10
Europe (Paris)
arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroPython:13
歐洲 (西班牙)
arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroPython:10
歐洲 (斯德哥爾摩)
arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
歐洲 (蘇黎世)
arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroPython:10
以色列 (特拉維夫)
arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroPython:10
Middle East (Bahrain)
arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroPython:10
中東 (阿拉伯聯合大公國)
arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroPython:10
南美洲 (聖保羅)
arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
- Node.js
-
區域 ARN 美國東部 (維吉尼亞北部)
arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
美國東部 (俄亥俄)
arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
美國西部 (加利佛尼亞北部)
arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
美國西部 (奧勒岡)
arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
非洲 (開普敦)
arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroJs:8
亞太區域 (香港)
arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroJs:8
亞太區域 (海德拉巴)
arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroJs:6
亞太區域 (雅加達)
arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroJs:8
亞太區域 (墨爾本)
arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroJs:8
亞太區域 (孟買)
arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
亞太區域 (大阪)
arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroJs:8
亞太區域 (首爾)
arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
亞太區域 (新加坡)
arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
亞太區域 (雪梨)
arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
亞太區域 (東京)
arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
加拿大 (中部)
arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
歐洲 (法蘭克福)
arn:aws:lambda:eu-central-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
歐洲 (愛爾蘭)
arn:aws:lambda:eu-west-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
歐洲 (倫敦)
arn:aws:lambda:eu-west-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
歐洲 (米蘭)
arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroJs:8
Europe (Paris)
arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroJs:8
歐洲 (西班牙)
arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroJs:8
歐洲 (斯德哥爾摩)
arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
歐洲 (蘇黎世)
arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroJs:8
以色列 (特拉維夫)
arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroJs:8
Middle East (Bahrain)
arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroJs:8
中東 (阿拉伯聯合大公國)
arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroJs:8
南美洲 (聖保羅)
arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
- .Net
-
區域 ARN 美國東部 (維吉尼亞北部)
arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:6
美國東部 (俄亥俄)
arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
美國西部 (加利佛尼亞北部)
arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
美國西部 (奧勒岡)
arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
非洲 (開普敦)
arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroDotNet:5
亞太區域 (香港)
arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroDotNet:5
亞太區域 (海德拉巴)
arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroDotNet:5
亞太區域 (雅加達)
arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroDotNet:5
亞太區域 (墨爾本)
arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroDotNet:5
亞太區域 (孟買)
arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
亞太區域 (大阪)
arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
亞太區域 (首爾)
arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
亞太區域 (新加坡)
arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
亞太區域 (雪梨)
arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
亞太區域 (東京)
arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
加拿大 (中部)
arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
歐洲 (法蘭克福)
arn:aws:lambda:eu-central-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
歐洲 (愛爾蘭)
arn:aws:lambda:eu-west-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
歐洲 (倫敦)
arn:aws:lambda:eu-west-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
歐洲 (米蘭)
arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroDotNet:5
Europe (Paris)
arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
歐洲 (西班牙)
arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroDotNet:5
歐洲 (斯德哥爾摩)
arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
歐洲 (蘇黎世)
arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroDotNet:5
以色列 (特拉維夫)
arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroDotNet:5
Middle East (Bahrain)
arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroDotNet:5
中東 (阿拉伯聯合大公國)
arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroDotNet:5
南美洲 (聖保羅)
arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
- Java
-
區域 ARN 美國東部 (維吉尼亞北部)
arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
美國東部 (俄亥俄)
arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
美國西部 (加利佛尼亞北部)
arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
美國西部 (奧勒岡)
arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
非洲 (開普敦)
arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroJava:5
亞太區域 (香港)
arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroJava:5
亞太區域 (海德拉巴)
arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroJava:5
亞太區域 (雅加達)
arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroJava:5
亞太區域 (墨爾本)
arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroJava:5
亞太區域 (孟買)
arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
亞太區域 (大阪)
arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroJava:5
亞太區域 (首爾)
arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
亞太區域 (新加坡)
arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
亞太區域 (雪梨)
arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
亞太區域 (東京)
arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
加拿大 (中部)
arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
歐洲 (法蘭克福)
arn:aws:lambda:eu-central-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
歐洲 (愛爾蘭)
arn:aws:lambda:eu-west-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
歐洲 (倫敦)
arn:aws:lambda:eu-west-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
歐洲 (米蘭)
arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroJava:5
Europe (Paris)
arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroJava:5
歐洲 (西班牙)
arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroJava:5
歐洲 (斯德哥爾摩)
arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
歐洲 (蘇黎世)
arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroJava:5
以色列 (特拉維夫)
arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroJava:5
Middle East (Bahrain)
arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroJava:5
中東 (阿拉伯聯合大公國)
arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroJava:5
南美洲 (聖保羅)
arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
使用 Amazon ECR 容器部署 Lambda 函數
部署為容器映像的 Lambda 函數不支援傳統方式的 Lambda Layers。使用容器映像時,您無法像使用其他 Lambda 部署方法一樣連接 layer。相反地,您必須在建置過程中手動將 layer 的內容併入您的容器映像。
- Java
-
您可以了解如何將 AWS Lambda Layer for OpenTelemetry 整合到您的容器化 Java Lambda 函數中、下載
layer.zip
成品,並將其整合到您的 Java Lambda 函數容器中,以啟用 Application Signals 監控。先決條件
-
AWS CLI 已使用您的登入資料設定
-
已安裝 Docker
-
這些指示假設您在 x86_64 平台上
-
設定專案結構
為您的 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
-
建立 Dockerfile
下載 OpenTelemetry Layer 並將其與 Application Signals 支援直接整合到您的 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 檔案,以縮小影像大小
-
-
Lambda 函數程式碼 – 在 為您的 Lambda 處理常式建立 Java 檔案
src/main/java/com/example/lambda/App.java:
您的專案看起來應該如下:
. ├── Dockerfile ├── pom.xml └── src └── main ├── java │ └── com │ └── example │ └── java │ └── lambda │ └── App.java └── resources
-
建置和部署容器映像
設定環境變數
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
-
建立和設定 Lambda 函數
使用 Lambda 主控台建立新函數。
選取容器映像做為部署選項。
選擇瀏覽映像以選取您的 Amazon ECR 映像。
-
測試和驗證 – 使用簡單的事件測試 Lambda。如果層整合成功,您的 Lambda 會出現在 Application Signals 服務映射下。
您會在 CloudWatch 主控台中看到 Lambda 函數的追蹤和指標。
疑難排解
如果 Application Signals 無法運作,請檢查下列項目:
-
檢查函數日誌是否有任何與 OpenTelemetry 檢測相關的錯誤
-
驗證環境變數是否已正確
AWS_LAMBDA_EXEC_WRAPPER
設定 -
確定 Docker 檔案中的層擷取已成功完成
-
確認 IAM 許可是否正確連接
-
如有需要,請在 Lambda 函數的一般組態中增加逾時和記憶體設定
-
- .Net
-
您可以了解如何將 OpenTelemetry Layer 與 Application Signals 支援整合到容器化的 .Net Lambda 函數中、下載
layer.zip
成品,並將其整合到您的 .Net Lambda 函數中,以啟用 Application Signals 監控。先決條件
-
AWS CLI 已使用您的登入資料設定
-
已安裝 Docker
-
.Net 8 開發套件
-
這些指示假設您在 x86_64 平台上
-
設定專案結構
為您的 Lambda 函數容器映像建立目錄
mkdir dotnet-appsignals-container-lambda && \ cd dotnet-appsignals-container-lambda
-
建立 Dockerfile
下載 OpenTelemetry Layer 並直接將 Application Signals 支援整合到您的 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 檔案,以縮小影像大小
-
-
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
-
建置和部署容器映像
設定環境變數
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>
-
建置和部署容器映像
設定環境變數
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
-
建立和設定 Lambda 函數
使用 Lambda 主控台建立新函數。
選取容器映像做為部署選項。
選擇瀏覽映像以選取您的 Amazon ECR 映像。
-
測試和驗證 – 使用簡單的事件測試您的 Lambda。如果層整合成功,您的 Lambda 會出現在 Application Signals 服務映射下。
您會在 CloudWatch 主控台中看到 Lambda 函數的追蹤和指標。
疑難排解
如果 Application Signals 無法運作,請檢查下列項目:
-
檢查函數日誌是否有任何與 OpenTelemetry 檢測相關的錯誤
-
驗證環境變數是否已正確
AWS_LAMBDA_EXEC_WRAPPER
設定 -
確定 Docker 檔案中的層擷取已成功完成
-
確認 IAM 許可是否正確連接
-
如有需要,請在 Lambda 函數的一般組態中增加逾時和記憶體設定
-
- Node.js
-
您可以了解如何將 OpenTelemetry Layer 與 Application Signals 支援整合到您的容器化 Node.js Lambda 函數,下載
layer.zip
成品並將其整合到您的 Node.js Lambda 函數,以啟用 Application Signals 監控。先決條件
-
AWS CLI 已使用您的登入資料設定
-
已安裝 Docker
-
這些指示假設您在 x86_64 平台上
-
設定專案結構
為您的 Lambda 函數容器映像建立目錄
mkdir nodejs-appsignals-container-lambda &&\ cd nodejs-appsignals-container-lambda
-
建立 Dockerfile
下載 OpenTelemetry Layer 並直接將 Application Signals 支援整合到您的 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 檔案,以縮小影像大小
-
-
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
-
建置和部署容器映像
設定環境變數
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
-
建立和設定 Lambda 函數
使用 Lambda 主控台建立新函數。
選取容器映像做為部署選項。
選擇瀏覽映像以選取您的 Amazon ECR 映像。
-
測試和驗證 – 使用簡單的事件測試 Lambda。如果層整合成功,您的 Lambda 會出現在 Application Signals 服務映射下。
您會在 CloudWatch 主控台中看到 Lambda 函數的追蹤和指標。
疑難排解
如果 Application Signals 無法運作,請檢查下列項目:
-
檢查函數日誌是否有任何與 OpenTelemetry 檢測相關的錯誤
-
驗證環境變數是否已正確
AWS_LAMBDA_EXEC_WRAPPER
設定 -
確定 Docker 檔案中的層擷取已成功完成
-
確認 IAM 許可是否正確連接
-
如有需要,請在 Lambda 函數的一般組態中增加逾時和記憶體設定
-
- Python
-
您可以了解如何將 OpenTelemetry Layer 與 Application Signals 支援整合到您的容器化 Python Lambda 函數中、下載
layer.zip
成品,並將其整合到您的 Python Lambda 函數中,以啟用 Application Signals 監控。先決條件
-
AWS CLI 已使用您的登入資料設定
-
已安裝 Docker
-
這些指示假設您在 x86_64 平台上
-
設定專案結構
為您的 Lambda 函數容器映像建立目錄
mkdir python-appsignals-container-lambda &&\ cd python-appsignals-container-lambda
-
建立 Dockerfile
下載 OpenTelemetry Layer 並直接將 Application Signals 支援整合到您的 Lambda 容器映像中。若要這樣做,會建立
Dockerfile
檔案。注意
layer.zip
檔案包含 AWS Application Signals 支援監控 Lambda 函數所需的 OpenTelemetry 檢測。圖層擷取步驟可確保:
-
layer.zip 內容會正確解壓縮到
/opt/ directory
-
otel-instrument
指令碼會收到適當的執行許可 -
移除暫存 layer.zip 檔案,以縮小影像大小
-
-
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
-
建置和部署容器映像
設定環境變數
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
-
建立和設定 Lambda 函數
使用 Lambda 主控台建立新函數。
選取容器映像做為部署選項。
選擇瀏覽映像以選取您的 Amazon ECR 映像。
-
測試和驗證 – 使用簡單的事件測試 Lambda。如果層整合成功,您的 Lambda 會出現在 Application Signals 服務映射下。
您會在 CloudWatch 主控台中看到 Lambda 函數的追蹤和指標。
疑難排解
如果 Application Signals 無法運作,請檢查下列項目:
-
檢查函數日誌是否有任何與 OpenTelemetry 檢測相關的錯誤
-
驗證環境變數是否已正確
AWS_LAMBDA_EXEC_WRAPPER
設定 -
確定 Docker 檔案中的層擷取已成功完成
-
確認 IAM 許可是否正確連接
-
如有需要,請在 Lambda 函數的一般組態中增加逾時和記憶體設定
-