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

AWS CloudFormation部署失败求助:Lambda序列化异常问题

问题分析与解决方案

错误核心原因

这个异常是Jackson序列化机制触发的:

  • ResourceModel$ResourceModelBuilder类没有可被Jackson识别的序列化属性
  • CloudFormation Lambda Handler默认开启了FAIL_ON_EMPTY_BEANS序列化特性,当尝试序列化包含该Builder实例的CallbackContext(嵌套在ProgressEvent中)时,直接抛出异常导致部署失败回滚。

排查与解决步骤

1. 替换CallbackContext中的Builder实例

Builder类是临时构建对象,不适合序列化存储。修改CallbackContext代码,将其中的ResourceModelBuilder替换为已构建完成的ResourceModel对象:

// 错误写法:持有Builder实例
public class CallbackContext {
    private ResourceModel.ResourceModelBuilder resourceModelBuilder;
}

// 正确写法:持有构建完成的ResourceModel
public class CallbackContext {
    private ResourceModel resourceModel;
}

2. 禁用Jackson的FAIL_ON_EMPTY_BEANS特性

如果必须保留Builder实例,在Lambda Handler的序列化配置中关闭该特性:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import software.amazon.cloudformation.LambdaWrapper;

public class Handler extends LambdaWrapper<ResourceModel> {
    @Override
    protected ObjectMapper createObjectMapper() {
        ObjectMapper objectMapper = super.createObjectMapper();
        objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
        return objectMapper;
    }
}

3. 标记Builder字段为序列化忽略

在CallbackContext的resourceModelBuilder字段上添加@JsonIgnore注解,阻止Jackson尝试序列化该字段:

import com.fasterxml.jackson.annotation.JsonIgnore;

public class CallbackContext {
    @JsonIgnore
    private ResourceModel.ResourceModelBuilder resourceModelBuilder;
}

4. 排查依赖冲突

检查Lambda部署包的依赖树,确认Jackson Databind与AWS CloudFormation Java SDK版本兼容:

  • 使用Maven的mvn dependency:tree或Gradle的./gradlew dependencies命令查看依赖关系
  • 确保没有引入多个版本的Jackson库,优先使用AWS SDK自带的Jackson版本

5. 验证部署包一致性

虽然你提到未修改代码,但需确认部署包是否与之前成功版本一致:

  • 检查CI/CD流程是否意外引入依赖更新
  • 对比本地构建包与Lambda部署包的内容差异

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:52:37