설명
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