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

如何使用AWS CDK的preDeploy预部署钩子?

在AWS CDK部署前自动运行Lambda属性检查测试

要实现cdk deploy前自动执行测试、失败则终止部署的需求,你可以结合CDK的preDeploy生命周期钩子和IntegTest构造来完成,以下是具体实现方案:

核心思路

  1. 用IntegTest编写静态检查测试,验证所有Lambda资源的属性中包含Code键
  2. 将测试绑定到栈的preDeploy钩子,确保部署前自动触发测试
  3. 测试失败时,CDK会直接终止部署流程

具体代码实现(TypeScript)

import { Stack, App, aws_lambda as lambda } from 'aws-cdk-lib';
import { IntegTest, Assertions } from 'aws-cdk-lib/integ-tests';

const app = new App();
const targetStack = new Stack(app, 'ProductionStack');

// 示例:创建多个Lambda函数(模拟你的实际资源)
new lambda.Function(targetStack, 'UserHandler', {
  runtime: lambda.Runtime.NODEJS_20_X,
  handler: 'handler.user',
  code: lambda.Code.fromAsset('lambda/user'),
});

new lambda.Function(targetStack, 'OrderHandler', {
  runtime: lambda.Runtime.NODEJS_20_X,
  handler: 'handler.order',
  code: lambda.Code.fromAsset('lambda/order'),
});

// 创建集成测试实例,指定要测试的目标栈
const preDeployTest = new IntegTest(app, 'PreDeployLambdaValidation', {
  testCases: [targetStack],
  // 采用无部署策略,仅做静态模板检查,无需额外部署测试资源
  deploymentStrategy: { type: 'NONE' },
});

// 添加测试断言:验证所有Lambda资源的Properties中存在Code键
const template = Assertions.fromStack(targetStack);
template.resourcePropertiesCountIs(
  'AWS::Lambda::Function',
  { Code: Assertions.objectLike({}) }, // 只要Code键存在即通过
  // 可选:指定预期的Lambda数量,确保没有遗漏资源
  // 2
);

// 将测试绑定到目标栈的preDeploy钩子
targetStack.addPreDeployHook({
  execute: () => {
    // 执行测试,--no-deploy参数确保只跑测试不部署测试栈
    return preDeployTest.execute({ args: ['--no-deploy'] });
  },
});

app.synth();

运行效果

  • 当你在CLI执行cdk deploy时,CDK会先触发preDeploy钩子中的集成测试
  • 如果所有Lambda资源都包含Code键,测试通过,部署流程继续执行
  • 若有任意一个Lambda缺少Code键,测试会抛出错误,部署直接终止,控制台会显示具体的失败原因

关键细节说明

  • deploymentStrategy: { type: 'NONE' }:避免创建额外的测试部署栈,仅对合成后的CloudFormation模板做静态检查,节省时间和资源
  • resourcePropertiesCountIs:既可以验证属性存在性,也可以指定预期的资源数量,双重确保资源配置符合要求
  • preDeploy钩子:属于CDK的生命周期钩子,会在部署操作开始前执行,是实现预部署检查的最佳时机

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:25:15