説明
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