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

从AWS CDK的AwsCustomResource调用Lambda响应中获取CertificateArn失败

解决AWS CDK中从Lambda返回CertificateArn的提取问题

问题场景

使用AWS CDK的AwsCustomResource调用Lambda生成ACM证书后,无法通过getResponseField正确提取返回的CertificateArn,尝试Payload.CertificateArn或Payload.body.CertificateArn路径均报错:

CustomResource attribute error: Vendor response doesn't contain Payload.CertificateArn attribute in object

核心原因

Lambda返回格式与CDK中字段提取路径不匹配,或返回内容未正确序列化/结构化。

解决方案

1. 修正Lambda返回格式

选择以下两种清晰的返回格式之一:

方案A(推荐:简化提取逻辑)

Lambda直接返回包含CertificateArn的顶级对象,无需多余包装:

exports.handler = async (event) => {
  // 生成ACM证书的业务逻辑,获取CertificateArn
  const certificateArn = "arn:aws:acm:us-east-1:080028499407:certificate/9b676b52-3e52-4ff5-8a7b-03cf57bd7303";
  
  // 直接返回目标字段
  return {
    CertificateArn: certificateArn
  };
};

方案B(保留HTTP状态码格式)

若需返回statusCode,确保body是JSON序列化后的字符串:

exports.handler = async (event) => {
  const certificateArn = "arn:aws:acm:...";
  return {
    statusCode: 200,
    body: JSON.stringify({ CertificateArn: certificateArn })
  };
};

2. 对应CDK提取代码

根据Lambda的返回格式,使用正确的字段路径:

对应方案A的CDK代码

直接提取顶级CertificateArn字段:

const certificateArn = generateCertificateCustomResource.getResponseField(
  "Payload.CertificateArn"
);

new cdk.CfnOutput(this, "CertificateArn", {
  value: certificateArn,
});

对应方案B的CDK代码

先提取body字符串,再用Fn.jsonParse解析为对象后获取目标字段:

const certificateBody = generateCertificateCustomResource.getResponseField(
  "Payload.body"
);
const certificateArn = cdk.Fn.jsonParse(certificateBody).CertificateArn;

new cdk.CfnOutput(this, "CertificateArn", {
  value: certificateArn,
});

3. 验证技巧

若仍不确定字段路径,可先输出完整Payload结构确认:

new cdk.CfnOutput(this, "FullPayload", {
  value: generateCertificateCustomResource.getResponseField("Payload"),
});

部署后查看输出的Payload内容,确认字段层级和大小写,再调整提取路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 21:57:33