在 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。
透過 https://console.aws.amazon.com/cloudwatch/
開啟 CloudWatch 主控台。 -
在導覽窗格中,依次選擇 Application Signals、服務。
-
在服務清單區域,選擇啟用 Application Signals。
-
選擇 Lambda 圖磚。
-
選取要為 Application Signals 啟用的每個函式,然後選擇完成。
使用 Lambda 主控台
依照這些步驟可透過 Lambda 主控台為 Lambda 函式啟用 Application Signals。
前往 https://console.aws.amazon.com/lambda/
開啟 AWS Lambda 主控台。 -
在導覽窗格中,選擇函式,然後選擇要啟用之函式的名稱。
-
選擇組態,然後選擇監控和操作工具。
-
選擇編輯。
-
在 CloudWatch Application Signals 和 X-Ray 區段中,選取使用 Application Signals 自動收集應用程式追蹤和標準應用程式指標,以及使用 X-Ray 自動收集 Lambda 服務追蹤以實現端對端的可見性。
-
選擇儲存。
使用 AWS CDK 在 Lambda 上啟用 Application Signals
如果尚未在此帳戶中啟用 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 執行時期。若要尋找圖層 ARN,請參閱 AWS Lambda Layer for OpenTelemetry ARN。
-
新增環境變數
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument新增環境變數
LAMBDA_APPLICATION_SIGNALS_REMOTE_ENVIRONMENT以設定自訂 Lambda 環境。Lambda 環境預設將設定為lambda:default。 -
將 AWS 受管 IAM 政策 CloudWatchLambdaApplicationSignalsExecutionRolePolicy 連接至 Lambda 執行角色。
-
(選用) 建議啟用 Lambda 主動追蹤,以取得更好的追蹤體驗。如需詳細資訊,請參閱使用 AWS X-Ray 視覺化 Lambda 函式調用。
手動停用 Application Signals
若要手動為 Lambda 函式停用 Application Signals,請從 Lambda 執行時期移除 AWS 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 Lambda Layer for OpenTelemetry ARN
以下資料表列出各區域支援 AWS Lambda Layer for OpenTelemetry 時應使用的 ARN。
- Python
-
區域 ARN 美國東部 (維吉尼亞北部)
arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroPython:18美國東部 (俄亥俄)
arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroPython:15美國西部 (加利佛尼亞北部)
arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroPython:22美國西部 (奧勒岡)
arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroPython:22非洲 (開普敦)
arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroPython:12亞太區域 (香港)
arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroPython:12亞太區域 (海德拉巴)
arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroPython:12亞太區域 (雅加達)
arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroPython:12亞太區域 (墨爾本)
arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroPython:12亞太區域 (馬來西亞)
arn:aws:lambda:ap-southeast-5:152034782359:layer:AWSOpenTelemetryDistroPython:3亞太區域 (泰國)
arn:aws:lambda:ap-southeast-7:980416031188:layer:AWSOpenTelemetryDistroPython:3亞太區域 (孟買)
arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroPython:15亞太區域 (大阪)
arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroPython:14亞太區域 (首爾)
arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroPython:15亞太區域 (新加坡)
arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroPython:14亞太區域 (雪梨)
arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroPython:15亞太區域 (東京)
arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroPython:15加拿大 (中部)
arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroPython:15加拿大西部 (卡加利)
arn:aws:lambda:ca-west-1:595944127152:layer:AWSOpenTelemetryDistroPython:3歐洲 (法蘭克福)
arn:aws:lambda:eu-central-1:615299751070:layer:AWSOpenTelemetryDistroPython:15歐洲 (愛爾蘭)
arn:aws:lambda:eu-west-1:615299751070:layer:AWSOpenTelemetryDistroPython:15歐洲 (倫敦)
arn:aws:lambda:eu-west-2:615299751070:layer:AWSOpenTelemetryDistroPython:15歐洲 (米蘭)
arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroPython:12Europe (Paris)
arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroPython:15歐洲 (西班牙)
arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroPython:12歐洲 (斯德哥爾摩)
arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroPython:15歐洲 (蘇黎世)
arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroPython:12以色列 (特拉維夫)
arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroPython:12中東 (巴林)
arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroPython:12中東 (阿拉伯聯合大公國)
arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroPython:12南美洲 (聖保羅)
arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroPython:15墨西哥 (中部)
arn:aws:lambda:mx-central-1:610118373846:layer:AWSOpenTelemetryDistroPython:3 - Node.js
-
區域 ARN 美國東部 (維吉尼亞北部)
arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroJs:9美國東部 (俄亥俄)
arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroJs:9美國西部 (加利佛尼亞北部)
arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroJs:9美國西部 (奧勒岡)
arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroJs:9非洲 (開普敦)
arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroJs:9亞太區域 (香港)
arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroJs:9亞太區域 (海德拉巴)
arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroJs:9亞太區域 (雅加達)
arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroJs:9亞太區域 (墨爾本)
arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroJs:9亞太區域 (馬來西亞)
arn:aws:lambda:ap-southeast-5:152034782359:layer:AWSOpenTelemetryDistroJs:2亞太區域 (泰國)
arn:aws:lambda:ap-southeast-7:980416031188:layer:AWSOpenTelemetryDistroJs:2亞太區域 (孟買)
arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroJs:9亞太區域 (大阪)
arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroJs:9亞太區域 (首爾)
arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroJs:9亞太區域 (新加坡)
arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroJs:9亞太區域 (雪梨)
arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroJs:9亞太區域 (東京)
arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroJs:9加拿大 (中部)
arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroJs:9加拿大西部 (卡加利)
arn:aws:lambda:ca-west-1:595944127152:layer:AWSOpenTelemetryDistroJs:2歐洲 (法蘭克福)
arn:aws:lambda:eu-central-1:615299751070:layer:AWSOpenTelemetryDistroJs:9歐洲 (愛爾蘭)
arn:aws:lambda:eu-west-1:615299751070:layer:AWSOpenTelemetryDistroJs:9歐洲 (倫敦)
arn:aws:lambda:eu-west-2:615299751070:layer:AWSOpenTelemetryDistroJs:9歐洲 (米蘭)
arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroJs:9Europe (Paris)
arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroJs:9歐洲 (西班牙)
arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroJs:9歐洲 (斯德哥爾摩)
arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroJs:9歐洲 (蘇黎世)
arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroJs:9以色列 (特拉維夫)
arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroJs:9中東 (巴林)
arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroJs:9中東 (阿拉伯聯合大公國)
arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroJs:9南美洲 (聖保羅)
arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroJs:9墨西哥 (中部)
arn:aws:lambda:mx-central-1:610118373846:layer:AWSOpenTelemetryDistroJs:2 - .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-southeast-5:152034782359:layer:AWSOpenTelemetryDistroDotNet:1亞太區域 (泰國)
arn:aws:lambda:ap-southeast-7:980416031188:layer:AWSOpenTelemetryDistroDotNet:1亞太區域 (孟買)
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:ca-west-1:595944127152:layer:AWSOpenTelemetryDistroDotNet:1歐洲 (法蘭克福)
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:5Europe (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中東 (巴林)
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墨西哥 (中部)
arn:aws:lambda:mx-central-1:610118373846:layer:AWSOpenTelemetryDistroDotNet:1 - 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-southeast-5:152034782359:layer:AWSOpenTelemetryDistroJava:2亞太區域 (泰國)
arn:aws:lambda:ap-southeast-7:980416031188:layer:AWSOpenTelemetryDistroJava:2亞太區域 (孟買)
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:ca-west-1:595944127152:layer:AWSOpenTelemetryDistroJava:2歐洲 (法蘭克福)
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:5Europe (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中東 (巴林)
arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroJava:5中東 (阿拉伯聯合大公國)
arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroJava:5墨西哥 (中部)
arn:aws:lambda:mx-central-1:610118373846:layer:AWSOpenTelemetryDistroJava:2南美洲 (聖保羅)
arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
使用 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 平台
-
設定專案結構
建立 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
下載支援 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 檔案以縮小映像
-
-
Lambda 函式程式碼:在
src/main/java/com/example/lambda/App.java:為您的 Lambda 處理常式建立 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
-
可以了解如何將支援 Application Signals 的 OpenTelemetry Layer 整合到您的容器化 .Net Lambda 函式中、下載
layer.zip成品,並將其整合到您的 .Net Lambda 函式中,以啟用 Application Signals 監控。先決條件
-
使用憑證設定的 AWS CLI
-
已安裝 Docker
-
.NET 8 SDK
-
以下說明假設您使用的是 x86_64 平台
-
設定專案結構
建立 Lambda 函式容器映像的目錄
mkdir dotnet-appsignals-container-lambda && \ cd dotnet-appsignals-container-lambda -
建立 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 檔案以縮小映像
-
-
Lambda 函式程式碼 – 使用 AWS Lambda .NET 範本初始化 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
-
可以了解如何將支援 Application Signals 的 OpenTelemetry Layer 整合到您的容器化 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
下載支援 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 檔案以縮小映像
-
-
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
-
可以了解如何將支援 Application Signals 的 OpenTelemetry Layer 整合到您的容器化 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
下載支援 Application Signals 的 OpenTelemetry Layer,並直接將其整合到您的 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 函式的一般組態中增大逾時和記憶體設定
-