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

참조