LambdaのX-Rayアクティブトレースが未設定

関数からトレースを開始する必要がある場合はActiveモードを使ってください。

説明

LambdaのTracingConfig.ModeがActiveの場合、X-Rayトレース用にリクエストをサンプリングできます。PassThroughは、関数が独自にトレースを開始するモードではありません。

想定される影響

必要なトレースデータがないと、遅延やエラーの原因調査が難しくなることがあります。

対処方法

アクティブトレースが必要ならTracingConfig.Mode: Activeを設定し、実行ロールにX-Rayへの書き込み権限を付与してください。後続サービスの呼び出しも追跡する場合は、そのコードを計装してください。

例

スタック作成中に別の関数を呼び出す例で、トレースモードを比較します。Node.js 22とAWS SDK for JavaScript v3を使います。実行ロールと呼び出し先の関数は別途準備してください。

変更前

yaml
AWSTemplateFormatVersion: '2010-09-09'
Description: cfn-responseを使うLambda関数。
Resources:
  primer:
    Type: AWS::Lambda::Function
    Properties:
      Runtime: nodejs22.x
      Role: arn:aws:iam::123456789012:role/lambda-role
      Handler: index.handler
      Code:
        ZipFile: |
          var { LambdaClient, InvokeCommand } = require('@aws-sdk/client-lambda')
          var response = require('cfn-response')
          exports.handler = function(event, context) {
              console.log("REQUEST RECEIVED:\n" + JSON.stringify(event))
              // Deleteリクエストには直ちにSUCCESSを返します。
              if (event.RequestType == "Delete") {
                  response.send(event, context, "SUCCESS")
                  return
              }
              var responseStatus = "FAILED"
              var responseData = {}
              var functionName = event.ResourceProperties.FunctionName
              var lambda = new LambdaClient({})
              lambda.send(new InvokeCommand({ FunctionName: functionName }), function(err, invokeResult) {
                  if (err) {
                      responseData = {Error: "Invoke call failed"}
                      console.log(responseData.Error + ":\n", err)
                  }
                  else responseStatus = "SUCCESS"
                  response.send(event, context, responseStatus, responseData)
              })
          }
      Description: スタック作成中に関数を呼び出します。
      TracingConfig:
        Mode: PassThrough

変更後

yaml
AWSTemplateFormatVersion: '2010-09-09'
Description: cfn-responseを使うLambda関数。
Resources:
  primer:
    Type: AWS::Lambda::Function
    Properties:
      Runtime: nodejs22.x
      Role: arn:aws:iam::123456789012:role/lambda-role
      Handler: index.handler
      Code:
        ZipFile: |
          var { LambdaClient, InvokeCommand } = require('@aws-sdk/client-lambda')
          var response = require('cfn-response')
          exports.handler = function(event, context) {
              console.log("REQUEST RECEIVED:\n" + JSON.stringify(event))
              // Deleteリクエストには直ちにSUCCESSを返します。
              if (event.RequestType == "Delete") {
                  response.send(event, context, "SUCCESS")
                  return
              }
              var responseStatus = "FAILED"
              var responseData = {}
              var functionName = event.ResourceProperties.FunctionName
              var lambda = new LambdaClient({})
              lambda.send(new InvokeCommand({ FunctionName: functionName }), function(err, invokeResult) {
                  if (err) {
                      responseData = {Error: "Invoke call failed"}
                      console.log(responseData.Error + ":\n", err)
                  }
                  else responseStatus = "SUCCESS"
                  response.send(event, context, responseStatus, responseData)
              })
          }
      Description: スタック作成中に関数を呼び出します。
      TracingConfig:
        Mode: Active

参考資料