在 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://console.aws.amazon.com/lambda/ 開啟 AWS Lambda 主控台。

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

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

  4. 選擇編輯

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

  6. 選擇儲存

使用 AWS CDK 在 Lambda 上啟用 Application Signals

如果尚未在此帳戶中啟用 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");

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

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

手動啟用 Application Signals。

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

  1. 將 AWS Lambda Layer for OpenTelemetry 新增至您的 Lambda 執行時期。若要尋找圖層 ARN,請參閱 AWS Lambda Layer for OpenTelemetry ARN

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

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

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

  4. (選用) 建議啟用 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:12

Europe (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:9

Europe (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: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

中東 (巴林)

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: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

中東 (巴林)

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 平台

  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 函式程式碼 – 使用 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
  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 檔案。

    注意

    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 函式的一般組態中增大逾時和記憶體設定