You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过AWS Amplify为Lambda函数开启XRAY?

通过AWS Amplify为Lambda函数开启X-Ray的推荐方案

AWS Amplify集成Lambda时开启X-Ray的核心是确保Lambda函数配置了X-Ray追踪权限、启用了追踪,并且Amplify的部署流程能稳定保留这些配置。以下针对你提到的三种方式及其他可行方案逐一分析:

1. 编辑Amplify生成的CloudFormation模板?

可行性:可行,但不推荐
Amplify在每次执行amplify push或更新函数配置时,会自动重新生成CloudFormation模板,手动修改的内容会被覆盖,仅适合临时测试场景。如果要尝试:

  • 找到目标Lambda对应的模板文件:amplify/backend/function/<function-name>/<function-name>-cloudformation-template.json
  • 在模板的Resources区块下,为Lambda函数资源添加追踪配置:
"TracingConfig": {
  "Mode": "Active"
}
  • 同时给Lambda执行角色添加X-Ray写入权限,在角色的策略文档中加入:
{
  "Effect": "Allow",
  "Action": [
    "xray:PutTraceSegments",
    "xray:PutTelemetryRecords"
  ],
  "Resource": "*"
}

2. 能否通过CDK在函数部署后对其进行编辑?具体如何操作?

可行性:可行,且是可靠的长期方案
如果你的Amplify项目兼容CDK(或单独用CDK管理部分资源),可以通过CDK修改已部署Lambda的配置,且不会被Amplify的常规部署覆盖:

  • 首先在CDK栈中引用Amplify部署的Lambda函数:
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as cdk from 'aws-cdk-lib';

const targetLambda = lambda.Function.fromFunctionName(this, 'AmplifyLambda', '<your-amplify-lambda-name>');
  • 然后更新追踪配置和权限:
// 启用X-Ray主动追踪
targetLambda.addTracing(lambda.Tracing.ACTIVE);

// 为执行角色添加X-Ray权限
targetLambda.addToRolePolicy(new cdk.aws_iam.PolicyStatement({
  actions: ['xray:PutTraceSegments', 'xray:PutTelemetryRecords'],
  resources: ['*'],
}));
  • 确保CDK环境与Amplify部署环境一致,执行cdk deploy即可生效。

3. 是否存在其他可行方式?

有几种更适合长期维护的推荐方案:

  • Amplify部署钩子(Hooks):在amplify/hooks/post-push.js中添加脚本,用AWS SDK自动更新Lambda追踪配置,确保每次Amplify部署后自动生效:
    const { LambdaClient, UpdateFunctionConfigurationCommand } = require("@aws-sdk/client-lambda");
    
    const client = new LambdaClient({ region: process.env.AWS_REGION });
    const updateParams = {
      FunctionName: "<your-lambda-function-name>",
      TracingConfig: { Mode: "Active" }
    };
    
    const command = new UpdateFunctionConfigurationCommand(updateParams);
    await client.send(command);
    
    需确保Amplify部署角色拥有lambda:UpdateFunctionConfiguration及X-Ray相关权限。
  • 代码中集成X-Ray SDK:仅开启函数级追踪只能捕获基础调用链,在代码中引入X-Ray SDK可以捕获更细粒度的链路(如HTTP请求、数据库调用)。以Node.js为例:
    const AWSXRay = require('aws-xray-sdk');
    const AWS = AWSXRay.captureAWS(require('aws-sdk'));
    
  • 控制台手动配置:在AWS控制台找到Amplify部署的Lambda函数,进入「配置」-「监控和操作工具」,开启X-Ray追踪,并为执行角色附加AWSXRayDaemonWriteAccess托管权限。此方式适合快速验证,但不适合CI/CD自动化流程。

推荐方案总结

优先选择Amplify部署钩子 + 代码集成X-Ray SDK的组合,或用CDK统一管理Lambda配置,这两种方式能在Amplify的部署流程中自动保留X-Ray配置,适合长期维护。手动修改CloudFormation模板仅适合临时测试场景。

内容的提问来源于stack exchange,提问作者Alexander Witte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 10:47:50